Created
August 7, 2014 20:49
-
-
Save lsaiken/f31a8c7558775c385229 to your computer and use it in GitHub Desktop.
WeatherContract.java Udacity Sunshine App
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* Copyright (C) 2014 The Android Open Source Project | |
* | |
* Licensed under the Apache License, Version 2.0 (the "License"); | |
* you may not use this file except in compliance with the License. | |
* You may obtain a copy of the License at | |
* | |
* http://www.apache.org/licenses/LICENSE-2.0 | |
* | |
* Unless required by applicable law or agreed to in writing, software | |
* distributed under the License is distributed on an "AS IS" BASIS, | |
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
* See the License for the specific language governing permissions and | |
* limitations under the License. | |
*/ | |
package data; | |
import android.content.ContentUris; | |
import android.net.Uri; | |
import android.provider.BaseColumns; | |
import java.text.ParseException; | |
import java.text.SimpleDateFormat; | |
import java.util.Date; | |
/** | |
* Defines table and column names for the weather database. | |
*/ | |
public class WeatherContract { | |
public static final String CONTENT_AUTHORITY = "com.example.android.sunshine.app"; | |
public static final Uri BASE_CONTENT_URI = Uri.parse("content://" + CONTENT_AUTHORITY); | |
public static final String PATH_WEATHER = "weather"; | |
public static final String PATH_LOCATION = "location"; | |
// Format used for storing dates in the database. ALso used for converting those strings | |
// back into date objects for comparison/processing. | |
public static final String DATE_FORMAT = "yyyyMMdd"; | |
/** | |
* Converts unix time to a string representation, used for easy comparison and database lookup. | |
* @param date The input date | |
* @return a DB-friendly representation of the date, using the format defined in DATE_FORMAT. | |
*/ | |
public static String getDbDateString(Date date){ | |
SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT); | |
return sdf.format(date); | |
} | |
/** | |
* Converts a dateText to a long Unix time representation | |
* @param dateText the input date string | |
* @return the Date object | |
*/ | |
public static Date getDateFromDb(String dateText) { | |
SimpleDateFormat dbDateFormat = new SimpleDateFormat(DATE_FORMAT); | |
try { | |
return dbDateFormat.parse(dateText); | |
} catch ( ParseException e ) { | |
e.printStackTrace(); | |
return null; | |
} | |
} | |
/* Inner class that defines the table contents of the weather table */ | |
public static final class WeatherEntry implements BaseColumns { | |
public static final Uri CONTENT_URI = | |
BASE_CONTENT_URI.buildUpon().appendPath(PATH_WEATHER).build(); | |
public static final String CONTENT_TYPE = | |
"vnd.android.cursor.dir/" + CONTENT_AUTHORITY + "/" + PATH_WEATHER; | |
public static final String CONTENT_ITEM_TYPE = | |
"vnd.android.cursor.item/" + CONTENT_AUTHORITY + "/" + PATH_WEATHER; | |
public static final String TABLE_NAME = "weather"; | |
// Column with the foreign key into the location table. | |
public static final String COLUMN_LOC_KEY = "location_id"; | |
// Date, stored as Text with format yyyy-MM-dd | |
public static final String COLUMN_DATETEXT = "date"; | |
// Weather id as returned by API, to identify the icon to be used | |
public static final String COLUMN_WEATHER_ID = "weather_id"; | |
// Short description and long description of the weather, as provided by API. | |
// e.g "clear" vs "sky is clear". | |
public static final String COLUMN_SHORT_DESC = "short_desc"; | |
// Min and max temperatures for the day (stored as floats) | |
public static final String COLUMN_MIN_TEMP = "min"; | |
public static final String COLUMN_MAX_TEMP = "max"; | |
// Humidity is stored as a float representing percentage | |
public static final String COLUMN_HUMIDITY = "humidity"; | |
// Humidity is stored as a float representing percentage | |
public static final String COLUMN_PRESSURE = "pressure"; | |
// Windspeed is stored as a float representing windspeed mph | |
public static final String COLUMN_WIND_SPEED = "wind"; | |
// Degrees are meteorological degrees (e.g, 0 is north, 180 is south). Stored as floats. | |
public static final String COLUMN_DEGREES = "degrees"; | |
public static Uri buildWeatherUri(long id) { | |
return ContentUris.withAppendedId(CONTENT_URI, id); | |
} | |
public static Uri buildWeatherLocation(String locationSetting) { | |
return CONTENT_URI.buildUpon().appendPath(locationSetting).build(); | |
} | |
public static Uri buildWeatherLocationWithStartDate( | |
String locationSetting, String startDate) { | |
return CONTENT_URI.buildUpon().appendPath(locationSetting) | |
.appendQueryParameter(COLUMN_DATETEXT, startDate).build(); | |
} | |
public static Uri buildWeatherLocationWithDate(String locationSetting, String date) { | |
return CONTENT_URI.buildUpon().appendPath(locationSetting).appendPath(date).build(); | |
} | |
public static String getLocationSettingFromUri(Uri uri) { | |
return uri.getPathSegments().get(1); | |
} | |
public static String getDateFromUri(Uri uri) { | |
return uri.getPathSegments().get(2); | |
} | |
public static String getStartDateFromUri(Uri uri) { | |
return uri.getQueryParameter(COLUMN_DATETEXT); | |
} | |
} | |
/* Inner class that defines the table contents of the location table */ | |
public static final class LocationEntry implements BaseColumns { | |
public static final Uri CONTENT_URI = | |
BASE_CONTENT_URI.buildUpon().appendPath(PATH_LOCATION).build(); | |
public static final String CONTENT_TYPE = | |
"vnd.android.cursor.dir/" + CONTENT_AUTHORITY + "/" + PATH_WEATHER; | |
public static final String CONTENT_ITEM_TYPE = | |
"vnd.android.cursor.item/" + CONTENT_AUTHORITY + "/" + PATH_WEATHER; | |
// Table name | |
public static final String TABLE_NAME = "location"; | |
// The location setting string is what will be sent to openweathermap | |
// as the location query. | |
public static final String COLUMN_LOCATION_SETTING = "location_setting"; | |
// Human readable location string, provided by the API. Because for styling, | |
// "Mountain View" is more recognizable than 94043. | |
public static final String COLUMN_CITY_NAME = "city_name"; | |
// In order to uniquely pinpoint the location on the map when we launch the | |
// map intent, we store the latitude and longitude as returned by openweathermap. | |
public static final String COLUMN_COORD_LAT = "coord_lat"; | |
public static final String COLUMN_COORD_LONG = "coord_long"; | |
public static Uri buildLocationUri(long id) { | |
return ContentUris.withAppendedId(CONTENT_URI, id); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment