package org.commcare.utils;
import org.commcare.AppUtils;
import org.commcare.CommCareApplication;
import org.commcare.cases.ledger.Ledger;
import org.commcare.core.process.CommCareInstanceInitializer;
import org.commcare.engine.cases.AndroidCaseInstanceTreeElement;
import org.commcare.engine.cases.AndroidLedgerInstanceTreeElement;
import org.commcare.models.database.AndroidSandbox;
import org.commcare.models.database.SqlStorage;
import org.commcare.android.database.user.models.ACase;
import org.commcare.session.CommCareSession;
import org.javarosa.core.model.instance.AbstractTreeElement;
import org.javarosa.core.model.instance.ExternalDataInstance;
/**
* @author ctsims
*/
public class AndroidInstanceInitializer extends CommCareInstanceInitializer {
/**
* For testing: allows for data instanced backed evaluation when an app
* isn't present.
*/
public AndroidInstanceInitializer() {
super(null);
}
public AndroidInstanceInitializer(CommCareSession session) {
super(session, new AndroidSandbox(CommCareApplication.instance()), CommCareApplication.instance().getCommCarePlatform());
}
@Override
protected AbstractTreeElement setupLedgerData(ExternalDataInstance instance) {
if (stockbase == null) {
SqlStorage<Ledger> storage = (SqlStorage<Ledger>)mSandbox.getLedgerStorage();
stockbase = new AndroidLedgerInstanceTreeElement(instance.getBase(), storage);
} else {
//re-use the existing model if it exists.
stockbase.rebase(instance.getBase());
}
return stockbase;
}
@Override
protected AbstractTreeElement setupCaseData(ExternalDataInstance instance) {
if (casebase == null) {
SqlStorage<ACase> storage = (SqlStorage<ACase>)mSandbox.getCaseStorage();
casebase = new AndroidCaseInstanceTreeElement(instance.getBase(), storage);
} else {
//re-use the existing model if it exists.
casebase.rebase(instance.getBase());
}
instance.setCacheHost((AndroidCaseInstanceTreeElement)casebase);
return casebase;
}
@Override
public String getVersionString() {
return AppUtils.getCurrentVersionString();
}
@Override
public String getDeviceId() {
String phoneId = CommCareApplication.instance().getPhoneId();
if (phoneId == null) {
return super.getDeviceId();
}
return phoneId;
}
}