package com.tv.ui.metro.idata; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.net.Uri; import com.google.gson.Gson; import java.lang.reflect.Type; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; /** * Created by tv metro on 7/7/14. * */ public class iDataORM { public static final String AUTHORITY = "com.tv.ui.metro"; public static final Uri SETTINGS_CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/settings"); public static final Uri FAVOR_CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/favor"); private static final String data_collect_interval = "data_collect_interval"; private static String TAG = "iDataORM"; private static iDataORM _instance; public static iDataORM getInstance(Context con){ if(_instance == null){ _instance = new iDataORM(con); } return _instance; } private Context mContext; private iDataORM(Context con){ mContext = con.getApplicationContext(); } public static String[]settingsProject = new String[]{ "_id", "name", "application", "value", }; public static String[]favorProject = new String[]{ "_id", "res_id", "ns", "value", "date_time" }; public static class FavorCol{ public static final String ID = "_id"; public static final String RES_ID = "res_id"; public static final String NS = "ns"; public static final String VALUE = "value"; public static final String ChangeDate = "date_time"; } public static class Favoritor<T>{ public int id; public String res_id; public String ns; public String json; public Object object; public String date; public static <T> T parseJson(Gson gson, String json, Type type){ return gson.fromJson(json, type); } } public static Uri addFavor(Context context, String ns, String res_id, String json){ Uri ret = null; ContentValues ct = new ContentValues(); ct.put(FavorCol.RES_ID, res_id); ct.put(FavorCol.NS, ns); ct.put(FavorCol.VALUE, json); ct.put(SettingsCol.ChangeDate, dateToString(new Date())); //if exist, update if(true == existFavor(context, ns, res_id)){ updateFavor(context, ct); }else{ ret = context.getContentResolver().insert(FAVOR_CONTENT_URI, ct); } return ret; } public static boolean updateFavor(Context context, ContentValues ct) { boolean ret = false; String where = String.format(" ns = \'%1$s\' and res_id = \'%2$s\' ", ct.get(FavorCol.NS), ct.get(FavorCol.RES_ID)); if(context.getContentResolver().update(FAVOR_CONTENT_URI, ct, where, null) > 0){ ret = true; } return ret; } public static boolean existFavor(Context context, String ns, String res_id){ boolean exist = false; String where = FavorCol.NS +"='"+ns+"' and " + FavorCol.RES_ID + " ='" + res_id + "'"; Cursor cursor = context.getContentResolver().query(FAVOR_CONTENT_URI, new String[]{"_id"}, where, null, null); if(cursor != null ){ if(cursor.getCount() > 0){ exist = true; } cursor.close(); cursor = null; } return exist; } public static int removeFavor(Context context, String ns, String res_id){ String where = FavorCol.NS +"='"+ns+"' and " + FavorCol.RES_ID + " ='" + res_id + "'"; int lens = context.getContentResolver().delete(FAVOR_CONTENT_URI, where, null); return lens; } public static ArrayList<Favoritor> getFavorites(Context context, String ns){ ArrayList<Favoritor> favoritors = new ArrayList<Favoritor>(); String where = FavorCol.NS +"='"+ns + "'"; Cursor cursor = context.getContentResolver().query(FAVOR_CONTENT_URI, favorProject, where, null, null); if(cursor != null ){ while(cursor.moveToNext()){ Favoritor item = new Favoritor(); item.id = cursor.getInt(cursor.getColumnIndex(FavorCol.ID)); item.res_id = cursor.getString(cursor.getColumnIndex(FavorCol.RES_ID)); item.ns = cursor.getString(cursor.getColumnIndex(FavorCol.NS)); item.json = cursor.getString(cursor.getColumnIndex(FavorCol.VALUE)); item.date = cursor.getString(cursor.getColumnIndex(FavorCol.ChangeDate)); favoritors.add(item); } cursor.close(); cursor = null; } return favoritors; } public int getDataCollectionInterval(int defaultValue) { return 120; } public static int getIntValue(Context con, String name, int defaultValue) { String value = getSettingValue(con, SETTINGS_CONTENT_URI, name); int valueB = defaultValue; try{ if(value != null){ valueB = Integer.valueOf(value); } }catch(Exception ne){ne.printStackTrace();} return valueB; } public static boolean getBooleanValue(Context con, String name, boolean defaultValue) { String value = getSettingValue(con, SETTINGS_CONTENT_URI, name); boolean valueB = defaultValue; try{ if(value != null){ valueB = value.equals("1")?true:false; } }catch(Exception ne){ne.printStackTrace();} return valueB; } public static String getStringValue(Context con, String name, String defaultValue) { String value = getSettingValue(con, SETTINGS_CONTENT_URI, name); String valueB = defaultValue; try{ if(value != null && value.length() > 0){ valueB = value; } }catch(Exception ne){ne.printStackTrace();} return valueB; } public static class SettingsCol{ public static final String ID = "_id"; public static final String Name = "name"; public static final String Value = "value"; public static final String Application= "application"; public static final String ChangeDate = "date_time"; } //settings public String getSettingValue(String name) { String va = null; String where = SettingsCol.Name + "='"+name+"'"; Cursor cursor = mContext.getContentResolver().query(SETTINGS_CONTENT_URI,settingsProject,where, null, null); if(cursor != null) { if(cursor.moveToFirst()){ va = cursor.getString(cursor.getColumnIndex(SettingsCol.Value)); } cursor.close(); } return va; } public long getLongValue(String name, long defaultV) { String va = String.valueOf(defaultV); String where = SettingsCol.Name + "='"+name+"'"; Cursor cursor = mContext.getContentResolver().query(SETTINGS_CONTENT_URI,settingsProject,where, null, null); if(cursor != null) { if(cursor.moveToFirst()){ va = cursor.getString(cursor.getColumnIndex(SettingsCol.Value)); } cursor.close(); } return Long.valueOf(va); } public boolean getBooleanValue(String name, boolean defaultV) { Boolean va = defaultV; String where = SettingsCol.Name + "='"+name+"'"; Cursor cursor = mContext.getContentResolver().query(SETTINGS_CONTENT_URI,settingsProject,where, null, null); if(cursor != null) { if(cursor.moveToFirst()){ va = cursor.getString(cursor.getColumnIndex(SettingsCol.Value)).equals("0")?false:true; } cursor.close(); } return va; } public Uri addSetting(String name, String value) { return addSetting(mContext, name, value); } public static Uri addSetting(Context context, String name, String value) { return addSetting(context, SETTINGS_CONTENT_URI, name, value); } public static boolean isEmpty(String str){ return str == null || str.length() == 0; } public static String getSettingValue(Context con, Uri settingUri, String name) { String va = null; String where = SettingsCol.Name +"='"+name+"'"; Cursor cursor = con.getContentResolver().query(settingUri, settingsProject,where, null, null); if(cursor != null) { if(cursor.moveToFirst()){ va = cursor.getString(cursor.getColumnIndex(SettingsCol.Value)); } cursor.close(); cursor = null; } return va; } public static String dateToString(Date time){ SimpleDateFormat formatter; formatter = new SimpleDateFormat ("yyyy-MM-dd HH:mm:ss"); String ctime = formatter.format(time); return ctime; } private static Uri addSetting(Context context, Uri settingUri, String name, String value) { Uri ret = null; ContentValues ct = new ContentValues(); ct.put(SettingsCol.Name, name); ct.put(SettingsCol.Value, value); ct.put(SettingsCol.ChangeDate, dateToString(new Date())); //if exist, update if(null != getSettingValue(context, settingUri, name)) { updateSetting(context, settingUri, name, value); } else { ret = context.getContentResolver().insert(settingUri, ct); } return ret; } public static boolean updateSetting(Context context, Uri settingUri, String name, String value) { boolean ret = false; String where = String.format(" name = \"%1$s\" ", name); ContentValues ct = new ContentValues(); ct.put(SettingsCol.Value, value); ct.put(SettingsCol.ChangeDate, dateToString(new Date())); if(context.getContentResolver().update(settingUri, ct, where, null) > 0) { ret = true; } return ret; } }