Search in sources :

Example 61 with Instance

use of org.odk.collect.forms.instances.Instance in project collect by opendatakit.

the class DatabaseInstancesRepository method deleteWithLogging.

@Override
public void deleteWithLogging(Long id) {
    ContentValues values = new ContentValues();
    values.putNull(GEOMETRY);
    values.putNull(GEOMETRY_TYPE);
    values.put(DELETED_DATE, clock.get());
    update(id, values);
    Instance instance = get(id);
    deleteInstanceFiles(instance);
}
Also used : ContentValues(android.content.ContentValues) Instance(org.odk.collect.forms.instances.Instance) DatabaseObjectMapper.getValuesFromInstance(org.odk.collect.android.database.DatabaseObjectMapper.getValuesFromInstance)

Example 62 with Instance

use of org.odk.collect.forms.instances.Instance in project collect by opendatakit.

the class SaveFormToDisk method updateInstanceDatabase.

/**
 * Updates the status and editability for the database row corresponding to the instance that is
 * currently managed by the {@link FormController}. There are three cases:
 * - the instance was opened for edit so its database row already exists
 * - a new instance was just created so its database row doesn't exist and needs to be created
 * - a new instance was created at the start of this editing session but the user has already
 * saved it so its database row already exists
 * <p>
 * Post-condition: the uri field is set to the URI of the instance database row that matches
 * the instance currently managed by the {@link FormController}.
 */
private void updateInstanceDatabase(boolean incomplete, boolean canEditAfterCompleted) {
    FormController formController = Collect.getInstance().getFormController();
    FormInstance formInstance = formController.getFormDef().getInstance();
    String instancePath = formController.getInstanceFile().getAbsolutePath();
    InstancesRepository instances = new InstancesRepositoryProvider(Collect.getInstance()).get();
    Instance instance = instances.getOneByPath(instancePath);
    Instance.Builder instanceBuilder;
    if (instance != null) {
        instanceBuilder = new Instance.Builder(instance);
    } else {
        instanceBuilder = new Instance.Builder();
    }
    if (instanceName != null) {
        instanceBuilder.displayName(instanceName);
    }
    if (incomplete || !shouldFinalize) {
        instanceBuilder.status(Instance.STATUS_INCOMPLETE);
    } else {
        instanceBuilder.status(Instance.STATUS_COMPLETE);
    }
    instanceBuilder.canEditWhenComplete(canEditAfterCompleted);
    if (instance != null) {
        String geometryXpath = getGeometryXpathForInstance(instance);
        Pair<String, String> geometryContentValues = extractGeometryContentValues(formInstance, geometryXpath);
        if (geometryContentValues != null) {
            instanceBuilder.geometryType(geometryContentValues.first);
            instanceBuilder.geometry(geometryContentValues.second);
        }
        Instance newInstance = new InstancesRepositoryProvider(Collect.getInstance()).get().save(instanceBuilder.build());
        uri = InstancesContract.getUri(currentProjectId, newInstance.getDbId());
    } else {
        Timber.i("No instance found, creating");
        Form form = new FormsRepositoryProvider(Collect.getInstance()).get().get(ContentUriHelper.getIdFromUri(uri));
        // add missing fields into values
        instanceBuilder.instanceFilePath(instancePath);
        instanceBuilder.submissionUri(form.getSubmissionUri());
        if (instanceName != null) {
            instanceBuilder.displayName(instanceName);
        } else {
            instanceBuilder.displayName(form.getDisplayName());
        }
        instanceBuilder.formId(form.getFormId());
        instanceBuilder.formVersion(form.getVersion());
        Pair<String, String> geometryContentValues = extractGeometryContentValues(formInstance, form.getGeometryXpath());
        if (geometryContentValues != null) {
            instanceBuilder.geometryType(geometryContentValues.first);
            instanceBuilder.geometry(geometryContentValues.second);
        }
    }
    Instance newInstance = new InstancesRepositoryProvider(Collect.getInstance()).get().save(instanceBuilder.build());
    uri = InstancesContract.getUri(currentProjectId, newInstance.getDbId());
}
Also used : FormController(org.odk.collect.android.javarosawrapper.FormController) InstancesRepositoryProvider(org.odk.collect.android.utilities.InstancesRepositoryProvider) FormInstance(org.javarosa.core.model.instance.FormInstance) Instance(org.odk.collect.forms.instances.Instance) Form(org.odk.collect.forms.Form) InstancesRepository(org.odk.collect.forms.instances.InstancesRepository) LocalizedApplicationKt.getLocalizedString(org.odk.collect.strings.localization.LocalizedApplicationKt.getLocalizedString) FormsRepositoryProvider(org.odk.collect.android.utilities.FormsRepositoryProvider) FormInstance(org.javarosa.core.model.instance.FormInstance)

Aggregations

Instance (org.odk.collect.forms.instances.Instance)62 Test (org.junit.Test)28 InstancesRepository (org.odk.collect.forms.instances.InstancesRepository)23 InstancesRepositoryProvider (org.odk.collect.android.utilities.InstancesRepositoryProvider)10 LocalizedApplicationKt.getLocalizedString (org.odk.collect.strings.localization.LocalizedApplicationKt.getLocalizedString)9 File (java.io.File)7 DatabaseObjectMapper.getValuesFromInstance (org.odk.collect.android.database.DatabaseObjectMapper.getValuesFromInstance)7 Uri (android.net.Uri)6 Form (org.odk.collect.forms.Form)6 InstanceUtils.buildInstance (org.odk.collect.formstest.InstanceUtils.buildInstance)6 Pair (android.util.Pair)5 ArrayList (java.util.ArrayList)5 FormsRepositoryProvider (org.odk.collect.android.utilities.FormsRepositoryProvider)5 Date (java.util.Date)4 FormController (org.odk.collect.android.javarosawrapper.FormController)4 MapPoint (org.odk.collect.geo.maps.MapPoint)4 ContentValues (android.content.ContentValues)3 Intent (android.content.Intent)3 Cursor (android.database.Cursor)3 AsyncTask (android.os.AsyncTask)2