package mobisocial.test;
import java.util.Date;
import java.util.List;
import mobisocial.musubi.encoding.ObjEncoder;
import mobisocial.musubi.encoding.ObjFormat;
import mobisocial.musubi.model.MApp;
import mobisocial.musubi.model.MDevice;
import mobisocial.musubi.model.MFeed;
import mobisocial.musubi.model.MFeed.FeedType;
import mobisocial.musubi.model.MIdentity;
import mobisocial.musubi.model.MObject;
import mobisocial.musubi.model.helpers.AppManager;
import mobisocial.musubi.model.helpers.DeviceManager;
import mobisocial.musubi.model.helpers.EncodedMessageManager;
import mobisocial.musubi.model.helpers.FactManager;
import mobisocial.musubi.model.helpers.FeedManager;
import mobisocial.musubi.model.helpers.IdentitiesManager;
import mobisocial.musubi.model.helpers.MyAccountManager;
import mobisocial.musubi.model.helpers.ObjectManager;
import mobisocial.musubi.util.Util;
import mobisocial.socialkit.Obj;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
class DatabaseManager {
private Context ctx;
private SQLiteOpenHelper dbh;
private IdentitiesManager idm;
private DeviceManager dm;
private ObjectManager om;
private AppManager am;
private MyAccountManager mam;
private FeedManager fm;
private EncodedMessageManager em;
private FactManager factm;
DatabaseManager(Context context, SQLiteOpenHelper dbh) {
this.ctx = context;
this.dbh = dbh;
}
public IdentitiesManager getIdentityManager() {
if (idm == null) idm = new IdentitiesManager(dbh);
return idm;
}
public DeviceManager getDeviceManager() {
if (dm == null) dm = new DeviceManager(dbh);
return dm;
}
public ObjectManager getObjectManager() {
if (om == null) om = new ObjectManager(dbh);
return om;
}
public AppManager getAppManager() {
if (am == null) am = new AppManager(dbh);
return am;
}
public MyAccountManager getMyAccountManager() {
if (mam == null) mam = new MyAccountManager(dbh);
return mam;
}
public FeedManager getFeedManager() {
if (fm == null) fm = new FeedManager(dbh);
return fm;
}
public FactManager getFactManager() {
if (factm == null) factm = new FactManager(dbh);
return factm;
}
public EncodedMessageManager getEncodedMessageManager() {
if (em == null) em = new EncodedMessageManager(dbh);
return em;
}
/**
* Inserts an object with this app's identifier and the current timestamp,
* sent from the local user's primary identity.
*/
public MObject insert(MFeed feed, Obj obj) {
String appId = ctx.getPackageName();
long timestamp = new Date().getTime();
List<MIdentity> owned = getIdentityManager().getOwnedIdentities();
if (owned.size() == 0) {
throw new RuntimeException("No owned identities on this device");
}
MIdentity sender = owned.get(0);
long deviceName = getDeviceManager().getLocalDeviceName();
MDevice device = getDeviceManager().getDeviceForName(sender.id_, deviceName);
if (device == null) {
throw new RuntimeException("No device entry for identity _id=" +
sender.id_ + ", deviceName=" + deviceName);
}
MObject object = new MObject();
MApp appRow = getAppManager().ensureApp(appId);
object.appId_ = appRow.id_;
object.id_ = -1;
object.feedId_ = feed.id_;
object.identityId_ = sender.id_;
object.deviceId_ = device.id_;
ObjEncoder.populate(object, obj);
FeedType feedType = feed.type_;
ObjFormat f = new ObjFormat(feedType, feed.capability_, appId, timestamp, obj);
byte[] innerHash = ObjEncoder.encode(f);
object.universalHash_ = ObjEncoder.computeUniversalHash(sender, device, innerHash);
object.shortUniversalHash_ = Util.shortHash(object.universalHash_);
getObjectManager().insertObject(object);
return object;
}
public SQLiteDatabase getReadableDatabase() {
return dbh.getReadableDatabase();
}
public SQLiteDatabase getWritableDatabase() {
return dbh.getWritableDatabase();
}
protected Context getContext() {
return ctx;
}
}