package org.commcare.utils;
import android.net.Uri;
import org.commcare.CommCareApp;
import org.commcare.CommCareApplication;
import org.commcare.engine.resource.AndroidResourceTable;
import org.commcare.resources.model.Resource;
import org.commcare.resources.model.ResourceTable;
import org.commcare.suite.model.Profile;
import org.commcare.suite.model.Suite;
import org.commcare.util.CommCarePlatform;
import org.javarosa.core.model.instance.FormInstance;
import org.javarosa.core.services.storage.IStorageUtilityIndexed;
import java.util.Hashtable;
import java.util.Set;
import java.util.Vector;
/**
* @author ctsims
*/
public class AndroidCommCarePlatform extends CommCarePlatform {
private final Hashtable<String, String> xmlnstable;
private ResourceTable global;
private ResourceTable upgrade;
private ResourceTable recovery;
private Profile profile;
private final Vector<Suite> installedSuites;
private final CommCareApp app;
public AndroidCommCarePlatform(int majorVersion, int minorVersion, CommCareApp app) {
super(majorVersion, minorVersion);
xmlnstable = new Hashtable<>();
installedSuites = new Vector<>();
this.app = app;
}
public void registerXmlns(String xmlns, String filepath) {
xmlnstable.put(xmlns, filepath);
}
public Set<String> getInstalledForms() {
return xmlnstable.keySet();
}
public Uri getFormContentUri(String xFormNamespace) {
if (xmlnstable.containsKey(xFormNamespace)) {
return Uri.parse(xmlnstable.get(xFormNamespace));
}
// Search through manually?
return null;
}
public ResourceTable getGlobalResourceTable() {
if (global == null) {
global = new AndroidResourceTable(app.getStorage("GLOBAL_RESOURCE_TABLE", Resource.class), new AndroidResourceInstallerFactory());
}
return global;
}
public ResourceTable getUpgradeResourceTable() {
if (upgrade == null) {
upgrade = new AndroidResourceTable(app.getStorage("UPGRADE_RESOURCE_TABLE", Resource.class), new AndroidResourceInstallerFactory());
}
return upgrade;
}
public ResourceTable getRecoveryTable() {
if (recovery == null) {
recovery = new AndroidResourceTable(app.getStorage("RECOVERY_RESOURCE_TABLE", Resource.class), new AndroidResourceInstallerFactory());
}
return recovery;
}
@Override
public Profile getCurrentProfile() {
return profile;
}
@Override
public Vector<Suite> getInstalledSuites() {
return installedSuites;
}
@Override
public void setProfile(Profile p) {
this.profile = p;
}
@Override
public void registerSuite(Suite s) {
this.installedSuites.add(s);
}
@Override
public void initialize(ResourceTable global, boolean isUpgrade) {
this.profile = null;
this.installedSuites.clear();
// We also need to clear any _resource table_ linked localization files which may have
// been registered from another app, or from a pre-install location.
CommCareApplication.instance().initializeDefaultLocalizerData();
super.initialize(global, isUpgrade);
}
public IStorageUtilityIndexed<FormInstance> getFixtureStorage() {
return app.getFileBackedStorage("fixture", FormInstance.class);
}
}