package org.mtransit.android.data; import org.json.JSONException; import org.json.JSONObject; import org.mtransit.android.commons.MTLog; import org.mtransit.android.commons.data.DefaultPOI; import org.mtransit.android.commons.data.POI; import org.mtransit.android.provider.PlaceProvider; import android.content.ContentValues; import android.database.Cursor; public class Place extends DefaultPOI { private static final String TAG = Place.class.getSimpleName(); @Override public String getLogTag() { return TAG; } public static final int DST_ID = DataSourceType.TYPE_PLACE.getId(); private String providerId; private String lang; private long readAtInMs = -1l; public Place(String authority, String providerId, String lang, long readAtInMs) { super(authority, DST_ID, POI.ITEM_VIEW_TYPE_BASIC_POI, -1, POI.ITEM_ACTION_TYPE_PLACE); setProviderId(providerId); setLang(lang); setReadAtInMs(readAtInMs); } public String getProviderId() { return providerId; } private void setProviderId(String providerId) { this.providerId = providerId; resetUUID(); } public String getLang() { return lang; } private void setLang(String lang) { this.lang = lang; } public long getReadAtInMs() { return readAtInMs; } private void setReadAtInMs(long readAtInMs) { this.readAtInMs = readAtInMs; } @Override public String toString() { return new StringBuilder().append(Place.class.getSimpleName()).append(":[") // .append("authority:").append(getAuthority()).append(',') // .append("providerId:").append(getProviderId()).append(',') // .append("id:").append(getId()).append(',') // .append("name:").append(getName()).append(',') // .append(']').toString(); } @Override public int getType() { return POI.ITEM_VIEW_TYPE_BASIC_POI; } @Override public int getStatusType() { return POI.ITEM_STATUS_TYPE_NONE; } @Override public int getActionsType() { return POI.ITEM_ACTION_TYPE_PLACE; } @Override public boolean hasLocation() { return true; // required for distance sort } private String uuid = null; @Override public String getUUID() { if (this.uuid == null) { this.uuid = POI.POIUtils.getUUID(getAuthority(), getProviderId()); } return this.uuid; } @Override public void resetUUID() { this.uuid = null; } private static final String JSON_PROVIDER_ID = "provider_id"; private static final String JSON_LANG = "lang"; private static final String JSON_READ_AT_IN_MS = "read_at_in_ms"; @Override public JSONObject toJSON() { try { JSONObject json = new JSONObject(); json.put(JSON_PROVIDER_ID, getProviderId()); json.put(JSON_LANG, getLang()); json.put(JSON_READ_AT_IN_MS, getReadAtInMs()); DefaultPOI.toJSON(this, json); return json; } catch (JSONException jsone) { MTLog.w(this, jsone, "Error while converting to JSON (%s)!", this); return null; } } @Override public POI fromJSON(JSONObject json) { return fromJSONStatic(json); } public static Place fromJSONStatic(JSONObject json) { try { Place module = new Place( // DefaultPOI.getAuthorityFromJSON(json), // json.getString(JSON_PROVIDER_ID), // json.getString(JSON_LANG), // json.getLong(JSON_READ_AT_IN_MS) // ); DefaultPOI.fromJSON(json, module); return module; } catch (JSONException jsone) { MTLog.w(TAG, jsone, "Error while parsing JSON '%s'!", json); return null; } } @Override public ContentValues toContentValues() { ContentValues values = super.toContentValues(); values.put(PlaceProvider.PlaceColumns.T_PLACE_K_PROVIDER_ID, getProviderId()); values.put(PlaceProvider.PlaceColumns.T_PLACE_K_LANG, getLang()); values.put(PlaceProvider.PlaceColumns.T_PLACE_K_READ_AT_IN_MS, getReadAtInMs()); return values; } @Override public POI fromCursor(Cursor c, String authority) { return fromCursorStatic(c, authority); } public static Place fromCursorStatic(Cursor c, String authority) { String providerId = c.getString(c.getColumnIndexOrThrow(PlaceProvider.PlaceColumns.T_PLACE_K_PROVIDER_ID)); String lang = c.getString(c.getColumnIndexOrThrow(PlaceProvider.PlaceColumns.T_PLACE_K_LANG)); long readAtInMs = c.getLong(c.getColumnIndexOrThrow(PlaceProvider.PlaceColumns.T_PLACE_K_READ_AT_IN_MS)); Place place = new Place(authority, providerId, lang, readAtInMs); DefaultPOI.fromCursor(c, place); return place; } }