package net.networksaremadeofstring.cyllell;
import org.json.JSONArray;
import org.json.JSONObject;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
public class CyllellCache extends SQLiteOpenHelper
{
final static int DB_VERSION = 1;
final static String DB_NAME = "cyllellCache";
Context context;
SQLiteDatabase qdb;
Handler cacheHandler;
public CyllellCache(Context context)
{
super(context, DB_NAME, null, DB_VERSION);
this.context = context;
qdb = this.getReadableDatabase();
}
public void RefreshCache(final Cuts Cut)
{
cacheHandler = new Handler()
{
public void handleMessage(Message msg)
{
/*String ns = Context.NOTIFICATION_SERVICE;
NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(ns);
int icon = R.drawable.ic_stat_chef_changes;
CharSequence tickerText = "Cyllell cache has finished refreshing";
long when = System.currentTimeMillis();
Notification notification = new Notification(icon, tickerText, when);
CharSequence contentTitle = "Cyllell Notification";
CharSequence contentText = "The local cache has finished updating. Select to view more details.";
Intent notificationIntent = new Intent(context, MainLanding.class);
PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0);
notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
mNotificationManager.notify(1, notification);*/
/*Toast toast = Toast.makeText(context, "Cyllell's local cache has finished updating.", Toast.LENGTH_LONG);
toast.setGravity(Gravity.BOTTOM|Gravity.RIGHT, 0, 0);*/
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.cache_toast, null);
TextView text = (TextView) layout.findViewById(R.id.text);
text.setText("Cyllell's local cache has finished updating.");
Toast toast = new Toast(context);
toast.setGravity(Gravity.BOTTOM|Gravity.RIGHT, 0, 0);
toast.setDuration(Toast.LENGTH_LONG);
toast.setView(layout);
toast.show();
}
};
Thread ProcessDatabase = new Thread()
{
public void run()
{
//Nodes -----------------------------------------------------------------
JSONObject Nodes = null;
try
{
Nodes = Cut.GetNodes();
JSONArray Keys = Nodes.names();
qdb.delete("nodes", null, null);
qdb.beginTransaction();
for(int i = 0; i < Nodes.length(); i++)
{
String URI = Nodes.getString(Keys.get(i).toString()).replaceFirst("^(https://|http://).*/nodes/", "");
ContentValues values = new ContentValues(2);
values.put("node_name", Keys.get(i).toString());
values.put("node_uri", URI);
qdb.insert("nodes", null, values);
}
qdb.setTransactionSuccessful();
qdb.endTransaction();
}
catch (Exception e)
{
if(qdb.isOpen() && qdb.isDbLockedByCurrentThread())
qdb.endTransaction();
}
//Roles -----------------------------------------------------------------
JSONObject Roles = null;
try
{
Roles = Cut.GetRoles();
JSONArray Keys = Roles.names();
qdb.delete("roles", null, null);
qdb.beginTransaction();
for(int i = 0; i < Roles.length(); i++)
{
//In future versions I might get all the role details here too
String URI = Roles.getString(Keys.get(i).toString()).replaceFirst("^(https://|http://).*/roles/", "");
ContentValues values = new ContentValues(2);
values.put("role_name", Keys.get(i).toString());
values.put("role_uri", URI);
qdb.insert("roles", null, values);
}
qdb.setTransactionSuccessful();
qdb.endTransaction();
}
catch (Exception e)
{
if(qdb.isOpen() && qdb.isDbLockedByCurrentThread())
qdb.endTransaction();
}
//Environments -----------------------------------------------------------------
JSONObject Environments = null;
try
{
Environments = Cut.GetEnvironments();
JSONArray Keys = Environments.names();
qdb.delete("environments", null, null);
qdb.beginTransaction();
for(int i = 0; i < Environments.length(); i++)
{
String URI = Environments.getString(Keys.get(i).toString()).replaceFirst("^(https://|http://).*/environments/", "");
ContentValues values = new ContentValues(2);
values.put("env_name", Keys.get(i).toString());
values.put("env_uri", URI);
qdb.insert("environments", null, values);
}
qdb.setTransactionSuccessful();
qdb.endTransaction();
}
catch (Exception e)
{
if(qdb.isOpen() && qdb.isDbLockedByCurrentThread())
qdb.endTransaction();
}
//Finish up
//qdb.close();
cacheHandler.sendEmptyMessage(1);
}
};
ProcessDatabase.start();
}
public Cursor getEnvironments()
{
return qdb.rawQuery("SELECT env_name FROM environments", null);
}
public Cursor getRoles()
{
//SQLiteDatabase qdb = this.getReadableDatabase();
return qdb.rawQuery("SELECT role_name FROM roles", null);
}
@Override
public void onCreate(SQLiteDatabase arg0)
{
// TODO Auto-generated method stub
}
@Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2)
{
// TODO Auto-generated method stub
}
}