package org.commcare.models.database; import net.sqlcipher.database.SQLiteDatabase; import org.commcare.CommCareApplication; import org.commcare.cases.ledger.Ledger; import org.commcare.cases.model.Case; import org.commcare.cases.model.StorageIndexedTreeElementModel; import org.commcare.core.interfaces.UserSandbox; import org.commcare.android.database.user.models.ACase; import org.commcare.models.database.user.DatabaseUserOpenHelper; import org.commcare.modern.util.Pair; import org.commcare.utils.SessionUnavailableException; import org.javarosa.core.model.User; import org.javarosa.core.model.instance.FormInstance; import org.javarosa.core.services.storage.IStorageUtilityIndexed; import java.util.Set; /** * Basically just a useful abstraction that allows us to use an Android * CommCareApplication as a UserDataInterface * * Created by wpride1 on 8/11/15. */ public class AndroidSandbox extends UserSandbox { private final CommCareApplication app; public AndroidSandbox(CommCareApplication app) { this.app = app; } @Override public IStorageUtilityIndexed<Case> getCaseStorage() { return app.getUserStorage(ACase.STORAGE_KEY, ACase.class); } @Override public IStorageUtilityIndexed<Ledger> getLedgerStorage() { return app.getUserStorage(Ledger.STORAGE_KEY, Ledger.class); } @Override public IStorageUtilityIndexed<User> getUserStorage() { return app.getUserStorage("USER", User.class); } @Override public IStorageUtilityIndexed<StorageIndexedTreeElementModel> getIndexedFixtureStorage(String fixtureName) { String tableName = StorageIndexedTreeElementModel.getTableName(fixtureName); return app.getUserStorage(tableName, StorageIndexedTreeElementModel.class); } @Override public void setupIndexedFixtureStorage(String fixtureName, StorageIndexedTreeElementModel exampleEntry, Set<String> indices) { String tableName = StorageIndexedTreeElementModel.getTableName(fixtureName); DatabaseUserOpenHelper.dropTable(app.getUserDbHandle(), tableName); DatabaseUserOpenHelper.buildTable(app.getUserDbHandle(), tableName, exampleEntry); IndexedFixturePathUtils.buildFixtureIndices(app.getUserDbHandle(), tableName, indices); } @Override public Pair<String, String> getIndexedFixturePathBases(String fixtureName) { SQLiteDatabase db = app.getUserDbHandle(); return IndexedFixturePathUtils.lookupIndexedFixturePaths(db, fixtureName); } @Override public void setIndexedFixturePathBases(String fixtureName, String baseName, String childName) { SQLiteDatabase db = app.getUserDbHandle(); IndexedFixturePathUtils.insertIndexedFixturePathBases(db, fixtureName, baseName, childName); } @Override public IStorageUtilityIndexed<FormInstance> getUserFixtureStorage() { return app.getFileBackedUserStorage("fixture", FormInstance.class); } @Override public IStorageUtilityIndexed<FormInstance> getAppFixtureStorage() { return app.getFileBackedAppStorage("fixture", FormInstance.class); } @Override public User getLoggedInUser() { try { return app.getSession().getLoggedInUser(); } catch (SessionUnavailableException e) { return null; } } @Override public void setLoggedInUser(User user) { } }