package org.mtransit.android.data; import org.json.JSONException; import org.json.JSONObject; import org.mtransit.android.commons.ColorUtils; import org.mtransit.android.commons.LocaleUtils; 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.ModuleProvider; import android.content.ContentValues; import android.database.Cursor; import android.text.TextUtils; public class Module extends DefaultPOI { private static final String TAG = Module.class.getSimpleName(); @Override public String getLogTag() { return TAG; } public static final int DST_ID = DataSourceType.TYPE_MODULE.getId(); private String pkg; private int targetTypeId; private String color = null; private String location = null; private String nameFr = null; public Module(String authority, String pkg, int targetTypeId) { super(authority, DST_ID, POI.ITEM_VIEW_TYPE_MODULE, POI.ITEM_STATUS_TYPE_APP, POI.ITEM_ACTION_TYPE_APP); setPkg(pkg); setTargetTypeId(targetTypeId); } public String getPkg() { return pkg; } private void setPkg(String pkg) { this.pkg = pkg; resetUUID(); } public int getTargetTypeId() { return targetTypeId; } private void setTargetTypeId(int targetTypeId) { this.targetTypeId = targetTypeId; } private void setColor(String color) { this.color = color; this.colorInt = null; // reset } public String getColor() { return this.color; } private Integer colorInt = null; public int getColorInt() { if (this.colorInt == null) { this.colorInt = ColorUtils.parseColor(getColor()); } return this.colorInt; } public String getLocation() { return this.location; } private void setLocation(String location) { this.location = location; } public String getNameFr() { return nameFr; } private void setNameFr(String nameFr) { this.nameFr = nameFr; } @Override public String getName() { if (LocaleUtils.isFR() && !TextUtils.isEmpty(getNameFr())) { return getNameFr(); } return super.getName(); } @Override public String toString() { return new StringBuilder().append(Module.class.getSimpleName()).append(":[") // .append("authority:").append(getAuthority()).append(',') // .append("pkg:").append(getPkg()).append(',') // .append("id:").append(getId()).append(',') // .append(']').toString(); } @Override public int getType() { return POI.ITEM_VIEW_TYPE_MODULE; } @Override public int getStatusType() { return POI.ITEM_STATUS_TYPE_APP; } @Override public int getActionsType() { return POI.ITEM_ACTION_TYPE_APP; } @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(), getPkg()); } return this.uuid; } @Override public void resetUUID() { this.uuid = null; } private static final String JSON_PKG = "pkg"; private static final String JSON_TARGET_TYPE_ID = "targetTypeId"; private static final String JSON_COLOR = "color"; private static final String JSON_LOCATION = "location"; private static final String JSON_NAME_FR = "name_fr"; @Override public JSONObject toJSON() { try { JSONObject json = new JSONObject(); json.put(JSON_PKG, getPkg()); json.put(JSON_TARGET_TYPE_ID, getTargetTypeId()); if (!TextUtils.isEmpty(getColor())) { json.put(JSON_COLOR, getColor()); } if (!TextUtils.isEmpty(getLocation())) { json.put(JSON_LOCATION, getLocation()); } if (!TextUtils.isEmpty(getNameFr())) { json.put(JSON_NAME_FR, getNameFr()); } 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 Module fromJSONStatic(JSONObject json) { try { Module module = new Module( // DefaultPOI.getAuthorityFromJSON(json), // json.getString(JSON_PKG), // json.getInt(JSON_TARGET_TYPE_ID) // ); String optColor = json.optString(JSON_COLOR); if (!TextUtils.isEmpty(optColor)) { module.setColor(optColor); } String optLocation = json.optString(JSON_LOCATION); if (!TextUtils.isEmpty(optLocation)) { module.setLocation(optLocation); } String optNameFr = json.optString(JSON_NAME_FR); if (!TextUtils.isEmpty(optNameFr)) { module.setNameFr(optNameFr); } DefaultPOI.fromJSON(json, module); return module; } catch (JSONException jsone) { MTLog.w(TAG, jsone, "Error while parsing JSON '%s'!", json); return null; } } public static Module fromSimpleJSONStatic(JSONObject json, String authority) { try { Module module = new Module( // authority, // json.getString(JSON_PKG), // json.getInt(JSON_TARGET_TYPE_ID) // ); module.setName(json.getString(JSON_NAME)); module.setLat(json.getDouble(JSON_LAT)); module.setLng(json.getDouble(JSON_LNG)); String optColor = json.optString(JSON_COLOR); if (!TextUtils.isEmpty(optColor)) { module.setColor(optColor); } String optLocation = json.optString(JSON_LOCATION); if (!TextUtils.isEmpty(optLocation)) { module.setLocation(optLocation); } String optNameFr = json.optString(JSON_NAME_FR); if (!TextUtils.isEmpty(optNameFr)) { module.setNameFr(optNameFr); } return module; } catch (JSONException jsone) { MTLog.w(TAG, jsone, "Error while parsing simple JSON '%s'!", json); return null; } } @Override public ContentValues toContentValues() { ContentValues values = super.toContentValues(); values.put(ModuleProvider.ModuleColumns.T_MODULE_K_PKG, getPkg()); values.put(ModuleProvider.ModuleColumns.T_MODULE_K_TARGET_TYPE_ID, getTargetTypeId()); values.put(ModuleProvider.ModuleColumns.T_MODULE_K_COLOR, getColor()); values.put(ModuleProvider.ModuleColumns.T_MODULE_K_LOCATION, getLocation()); values.put(ModuleProvider.ModuleColumns.T_MODULE_K_NAME_FR, getNameFr()); return values; } @Override public POI fromCursor(Cursor c, String authority) { return fromCursorStatic(c, authority); } public static Module fromCursorStatic(Cursor c, String authority) { String pkg = c.getString(c.getColumnIndexOrThrow(ModuleProvider.ModuleColumns.T_MODULE_K_PKG)); int targetTypeId = c.getInt(c.getColumnIndexOrThrow(ModuleProvider.ModuleColumns.T_MODULE_K_TARGET_TYPE_ID)); Module module = new Module(authority, pkg, targetTypeId); module.setColor(c.getString(c.getColumnIndexOrThrow(ModuleProvider.ModuleColumns.T_MODULE_K_COLOR))); module.setLocation(c.getString(c.getColumnIndexOrThrow(ModuleProvider.ModuleColumns.T_MODULE_K_LOCATION))); module.setNameFr(c.getString(c.getColumnIndexOrThrow(ModuleProvider.ModuleColumns.T_MODULE_K_NAME_FR))); DefaultPOI.fromCursor(c, module); return module; } }