package com.ucb.dcm.data; import android.database.Cursor; import android.text.TextUtils; import com.androiddata.DBColumn; import com.androiddata.DBObject; import com.androiddata.DBTable; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.io.Serializable; import java.util.ArrayList; /** * Created by kurtguenther on 6/6/13. */ @DBTable(tableName = "Show") public class Show extends DBObject implements Serializable { @DBColumn(columnName = "id", dataType = DBColumn.DataType.INTEGER) public int ID; @DBColumn(columnName = "name") public String name; @DBColumn(columnName = "sort_name") public String sortName; @DBColumn(columnName = "promo") public String promo; @DBColumn(columnName = "city") public String city; @DBColumn(columnName = "performers") public String performers; @DBColumn(columnName = "image") public String image; @DBColumn(columnName = "favorite", dataType = DBColumn.DataType.BOOL) public boolean isFavorite; public Show(){ } public Show(Cursor c){ super(c); // ID = c.getInt(c.getColumnIndex("id")); // name = c.getString(c.getColumnIndex("name")); // sortName = c.getString(c.getColumnIndex("sort_name")); // promo = c.getString(c.getColumnIndex("promo")); // city = c.getString(c.getColumnIndex("city")); // performers= c.getString(c.getColumnIndex("performers")); } public static Show fromJson(JSONObject json) throws JSONException{ Show retVal = new Show(); retVal.ID = json.getInt("id"); retVal.promo = json.getString("promo_blurb"); retVal.name = json.getString("show_name"); retVal.city = json.getString("home_city"); retVal.isFavorite = false; if(json.has("image")){ retVal.image = json.getString("image"); } //Figure out the sorting. String sortName = retVal.name.toLowerCase(); if(sortName.startsWith("'")){ sortName = sortName.substring(Math.min(1, sortName.length()-1)); } if(sortName.startsWith("\"")){ sortName = sortName.substring(Math.min(1, sortName.length()-1)); } if(sortName.startsWith("the")){ sortName = sortName.substring(4); } retVal.sortName = sortName; //Process the performers JSONArray perfsJSON = json.getJSONArray("cast"); String[] perfsArray = new String[perfsJSON.length()]; for(int i = 0; i < perfsJSON.length(); i++){ perfsArray[i] = (String) perfsJSON.get(i); perfsArray[i] = perfsArray[i].replace(",",""); } retVal.performers = TextUtils.join(",", perfsArray); return retVal; } public static ArrayList<Show> getAll(android.database.sqlite.SQLiteDatabase db, String orderBy){ Show s = new Show(); ArrayList<Show> retVal = new ArrayList<Show>(); Cursor c = db.query(s.getTableName(), s.getColumnNames(), null, null, null, null, orderBy); while(c.moveToNext()) { retVal.add(new Show(c)); } return retVal; } //We do this to eliminate the rogue "" empty performers and other junk. public ArrayList<String> getPerformers(){ ArrayList<String> retVal = new ArrayList<String>(); String[] arr = TextUtils.split(this.performers, ","); for(int i = 0; i < arr.length; i++){ if(arr[i].length() > 0){ retVal.add(arr[i]); } } return retVal; } public Cursor getPerformances(){ return DBHelper.getSharedService().getWritableDatabase().rawQuery("SELECT * FROM Performance left join Venue v ON venue_id = v.id where show_id = ?", new String[]{Integer.toString(this.ID)}); } public void addFavorite(){ isFavorite = true; DBHelper.getSharedService().getWritableDatabase().update(getTableName(), getContentValues(), "id = ?", new String[]{Integer.toString(this.ID)}); } public void removeFavorite(){ isFavorite = false; DBHelper.getSharedService().getWritableDatabase().update(new Show().getTableName(), getContentValues(), "id = ?", new String[]{Integer.toString(this.ID)}); } public static Show getById(Integer id){ Show retVal = null; Show s = new Show(); Cursor c = DBHelper.getSharedService().getWritableDatabase().query(s.getTableName(), s.getColumnNames(), "id = ?", new String[]{Integer.toString(id)}, null, null, "sort_name"); if(c.moveToFirst()){ retVal = new Show(c); } return retVal; } }