use of org.odk.collect.forms.instances.InstancesRepository 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());
}
use of org.odk.collect.forms.instances.InstancesRepository in project collect by opendatakit.
the class InstancesRepositoryTest method getAllByStatus_withMultipleStatus_returnsMatchingInstances.
@Test
public void getAllByStatus_withMultipleStatus_returnsMatchingInstances() {
InstancesRepository instancesRepository = buildSubject();
instancesRepository.save(InstanceUtils.buildInstance("incomplete", "1", getInstancesDir()).status(Instance.STATUS_INCOMPLETE).build());
instancesRepository.save(InstanceUtils.buildInstance("incomplete", "1", getInstancesDir()).status(Instance.STATUS_INCOMPLETE).build());
instancesRepository.save(InstanceUtils.buildInstance("complete", "1", getInstancesDir()).status(Instance.STATUS_COMPLETE).build());
instancesRepository.save(InstanceUtils.buildInstance("complete", "1", getInstancesDir()).status(Instance.STATUS_COMPLETE).build());
instancesRepository.save(InstanceUtils.buildInstance("submitted", "1", getInstancesDir()).status(Instance.STATUS_SUBMITTED).build());
instancesRepository.save(InstanceUtils.buildInstance("submitted", "1", getInstancesDir()).status(Instance.STATUS_SUBMITTED).build());
List<Instance> incomplete = instancesRepository.getAllByStatus(Instance.STATUS_INCOMPLETE, Instance.STATUS_SUBMITTED);
assertThat(incomplete.size(), is(4));
assertThat(incomplete.get(0).getFormId(), is(not("complete")));
assertThat(incomplete.get(1).getFormId(), is(not("complete")));
assertThat(incomplete.get(2).getFormId(), is(not("complete")));
assertThat(incomplete.get(3).getStatus(), is(not("complete")));
// Check corresponding count method is also correct
assertThat(instancesRepository.getCountByStatus(Instance.STATUS_INCOMPLETE, Instance.STATUS_SUBMITTED), is(4));
}
use of org.odk.collect.forms.instances.InstancesRepository in project collect by opendatakit.
the class InstancesRepositoryTest method deleteAll_deletesInstanceFiles.
@Test
public void deleteAll_deletesInstanceFiles() {
InstancesRepository instancesRepository = buildSubject();
Instance instance1 = instancesRepository.save(InstanceUtils.buildInstance("formid", "1", getInstancesDir()).build());
Instance instance2 = instancesRepository.save(InstanceUtils.buildInstance("formid", "1", getInstancesDir()).build());
instancesRepository.deleteAll();
assertThat(new File(instance1.getInstanceFilePath()).exists(), is(false));
assertThat(new File(instance2.getInstanceFilePath()).exists(), is(false));
}
use of org.odk.collect.forms.instances.InstancesRepository in project collect by opendatakit.
the class InstancesRepositoryTest method deleteAll_deletesAllInstances.
@Test
public void deleteAll_deletesAllInstances() {
InstancesRepository instancesRepository = buildSubject();
instancesRepository.save(InstanceUtils.buildInstance("formid", "1", getInstancesDir()).build());
instancesRepository.save(InstanceUtils.buildInstance("formid", "1", getInstancesDir()).build());
instancesRepository.deleteAll();
assertThat(instancesRepository.getAll().size(), is(0));
}
use of org.odk.collect.forms.instances.InstancesRepository in project collect by opendatakit.
the class InstancesRepositoryTest method deleteWithLogging_clearsGeometryData.
@Test
public void deleteWithLogging_clearsGeometryData() {
InstancesRepository instancesRepository = buildSubject();
Instance instance = instancesRepository.save(InstanceUtils.buildInstance("formid", "1", getInstancesDir()).geometry("blah").geometryType("blah").build());
instancesRepository.deleteWithLogging(instance.getDbId());
assertThat(instancesRepository.get(instance.getDbId()).getGeometry(), is(nullValue()));
assertThat(instancesRepository.get(instance.getDbId()).getGeometryType(), is(nullValue()));
}
Aggregations