Android Open Source - openhds-tablet Odk Form Load Task






From Project

Back to project page openhds-tablet.

License

The source code is released under:

OPENHDS PLATFORM OPENSOURCE LICENSE AGREEMENT Copyright (c) 2013 University of Southern Maine. All rights reserved. Redistribution and use in source and binary forms, with or without mo...

If you think the Android project openhds-tablet listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package org.openhds.mobile.task;
/*from  w  w w  .j a va2 s  . c om*/
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import org.openhds.mobile.InstanceProviderAPI;
import org.openhds.mobile.database.DatabaseAdapter;
import org.openhds.mobile.model.FormSubmissionRecord;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Environment;

/**
 * Async Task that will attempt to write the form instance data to disk, and
 * then use the ODK Content Provider to create a form instance record
 */
public class OdkFormLoadTask extends
    AsyncTask<Void, Void, OdkFormLoadTask.EndResult> {

  enum EndResult {
    FAILED_CREATING_DIRS, FAILED_WRITING_XML_FILE, FAILED_ODK_INSERT, SUCCESS, FORM_ALREADY_COMPLETED, ORPHAN_RECORD
  }

  public interface Listener {
    void onFailedWritingDirs();

    void onFailedWritingXmlFile();

    void onFailedOdkInsert();
    
    void onFormAlreadyCompleted();
    
    void onOrphanForm();

    void onSuccess(Uri contentUri);
  }

  private FormSubmissionRecord record;
  private Listener listener;
  private ContentResolver resolver;
  private DatabaseAdapter store;
  private Uri odkUri;

  public OdkFormLoadTask(FormSubmissionRecord record, Listener listener,
      ContentResolver resolver, DatabaseAdapter store) {
    this.record = record;
    this.listener = listener;
    this.resolver = resolver;
    this.store = store;
  }

  @Override
  protected EndResult doInBackground(Void... arg0) {
    File root = Environment.getExternalStorageDirectory();
    String destinationPath = root.getAbsolutePath() + File.separator
        + "Android" + File.separator + "data" + File.separator
        + "org.openhds.mobile" + File.separator + "files" + File.separator + record.getFormId() + record.getSaveDate();

    File baseDir = new File(destinationPath);
    if (!baseDir.exists()) {
      boolean created = baseDir.mkdirs();
      if (!created) {
        return EndResult.FAILED_CREATING_DIRS;
      }
    }

    destinationPath += File.separator + record.getSaveDate() + ".xml";
    File targetFile = new File(destinationPath);
    if (!targetFile.exists()) {
      try {
        FileWriter writer = new FileWriter(targetFile);
        writer.write(record.getPartialForm());
        writer.close();
      } catch (IOException e) {
        return EndResult.FAILED_WRITING_XML_FILE;
      }
    }

    if (record.getOdkUri() == null) {
      ContentValues values = new ContentValues();
      values.put(InstanceProviderAPI.InstanceColumns.INSTANCE_FILE_PATH,
          targetFile.getAbsolutePath());
      values.put(InstanceProviderAPI.InstanceColumns.DISPLAY_NAME,
          record.getFormType());
      values.put(InstanceProviderAPI.InstanceColumns.JR_FORM_ID,
          record.getFormId());
      Uri uri = resolver.insert(
          InstanceProviderAPI.InstanceColumns.CONTENT_URI, values);
      if (uri == null) {
        return EndResult.FAILED_ODK_INSERT;
      }
      record.setOdkUri(uri.toString());
      store.updateOdkUri(record.getId(), uri);
    } else {
      // form already inserted into ODK
      // determine if its still there, and if it is determine
      // if its been completed
      Cursor result = resolver.query(Uri.parse(record.getOdkUri()), null,
          null, null, null);
      if (!result.moveToNext()) {
        return EndResult.ORPHAN_RECORD;
      }
      
      String status = result.getString(result.getColumnIndex(InstanceProviderAPI.InstanceColumns.STATUS));
      result.close();
      if (!InstanceProviderAPI.STATUS_INCOMPLETE.equals(status)) {
        store.updateCompleteStatus(record.getId(), true);
        return EndResult.FORM_ALREADY_COMPLETED;
      }
    }

    this.odkUri = Uri.parse(record.getOdkUri());

    return EndResult.SUCCESS;
  }

  @Override
  protected void onPostExecute(EndResult result) {
    switch(result) {
    case FAILED_CREATING_DIRS:
      listener.onFailedWritingDirs();
      break;
    case FAILED_ODK_INSERT:
      listener.onFailedOdkInsert();
      break;
    case FAILED_WRITING_XML_FILE:
      listener.onFailedWritingXmlFile();
      break;
    case FORM_ALREADY_COMPLETED:
      listener.onFormAlreadyCompleted();
      break;
    case ORPHAN_RECORD:
      listener.onOrphanForm();
      break;
    case SUCCESS:
      listener.onSuccess(odkUri);
      break;
    }
  }
}




Java Source Code List

org.openhds.mobile.BadXmlException.java
org.openhds.mobile.Converter.java
org.openhds.mobile.FieldWorkerProvider.java
org.openhds.mobile.FormsProviderAPI.java
org.openhds.mobile.InstanceProviderAPI.java
org.openhds.mobile.OpenHDS.java
org.openhds.mobile.Queries.java
org.openhds.mobile.activity.AbstractActivity.java
org.openhds.mobile.activity.FieldWorkerLoginActivity.java
org.openhds.mobile.activity.FilterActivity.java
org.openhds.mobile.activity.FilterFormActivity.java
org.openhds.mobile.activity.FilterLocationActivity.java
org.openhds.mobile.activity.FilterVisitActivity.java
org.openhds.mobile.activity.FormListActivity.java
org.openhds.mobile.activity.FormViewActivity.java
org.openhds.mobile.activity.OpeningActivity.java
org.openhds.mobile.activity.ServerPreferencesActivity.java
org.openhds.mobile.activity.ShowMapActivity.java
org.openhds.mobile.activity.SupervisorLoginActivity.java
org.openhds.mobile.activity.SupervisorMainActivity.java
org.openhds.mobile.activity.SyncDatabaseActivity.java
org.openhds.mobile.activity.UpdateActivity.java
org.openhds.mobile.adapter.AdapterContent.java
org.openhds.mobile.adapter.MapAdapter.java
org.openhds.mobile.database.DatabaseAdapter.java
org.openhds.mobile.database.DeathUpdate.java
org.openhds.mobile.database.ExternalInMigrationUpdate.java
org.openhds.mobile.database.HouseholdUpdate.java
org.openhds.mobile.database.InternalInMigrationUpdate.java
org.openhds.mobile.database.LocationUpdate.java
org.openhds.mobile.database.MembershipUpdate.java
org.openhds.mobile.database.OutMigrationUpdate.java
org.openhds.mobile.database.PregnancyOutcomeUpdate.java
org.openhds.mobile.database.RelationshipUpdate.java
org.openhds.mobile.database.Updatable.java
org.openhds.mobile.database.VisitUpdate.java
org.openhds.mobile.fragment.EventFragment.java
org.openhds.mobile.fragment.ProgressFragment.java
org.openhds.mobile.fragment.SelectionFilterFragment.java
org.openhds.mobile.fragment.SelectionFilterLocFragment.java
org.openhds.mobile.fragment.SelectionFormFragment.java
org.openhds.mobile.fragment.SelectionFragment.java
org.openhds.mobile.fragment.ValueFormFragment.java
org.openhds.mobile.fragment.ValueFragment.java
org.openhds.mobile.fragment.ValueLocFragment.java
org.openhds.mobile.listener.CollectEntitiesListener.java
org.openhds.mobile.listener.OdkFormLoadListener.java
org.openhds.mobile.listener.RetrieveFieldWorkersListener.java
org.openhds.mobile.listener.TaskCompleteListener.java
org.openhds.mobile.listener.ValueSelectedListener.java
org.openhds.mobile.model.Child.java
org.openhds.mobile.model.FieldWorker.java
org.openhds.mobile.model.FilledForm.java
org.openhds.mobile.model.FilledParams.java
org.openhds.mobile.model.FormFiller.java
org.openhds.mobile.model.FormSubmissionRecord.java
org.openhds.mobile.model.FormXmlReader.java
org.openhds.mobile.model.Form.java
org.openhds.mobile.model.HierarchySelection.java
org.openhds.mobile.model.Individual.java
org.openhds.mobile.model.LocationHierarchy.java
org.openhds.mobile.model.LocationVisit.java
org.openhds.mobile.model.Location.java
org.openhds.mobile.model.Membership.java
org.openhds.mobile.model.PregnancyObservationUpdate.java
org.openhds.mobile.model.PregnancyOutcome.java
org.openhds.mobile.model.Relationship.java
org.openhds.mobile.model.Result.java
org.openhds.mobile.model.Round.java
org.openhds.mobile.model.SocialGroup.java
org.openhds.mobile.model.StateMachine.java
org.openhds.mobile.model.Supervisor.java
org.openhds.mobile.model.UpdateEvent.java
org.openhds.mobile.model.UpdateParams.java
org.openhds.mobile.model.UpdateStatus.java
org.openhds.mobile.model.Visit.java
org.openhds.mobile.provider.OpenHDSProvider.java
org.openhds.mobile.task.AbstractHttpTask.java
org.openhds.mobile.task.AuthenticateTask.java
org.openhds.mobile.task.DownloadFormsTask.java
org.openhds.mobile.task.FieldWorkerLoginTask.java
org.openhds.mobile.task.OdkFormLoadTask.java
org.openhds.mobile.task.OdkGeneratedFormLoadTask.java
org.openhds.mobile.task.SupervisorLoginTask.java
org.openhds.mobile.task.SyncEntitiesTask.java
org.openhds.mobile.task.SyncFormsTask.java
org.openhds.mobile.utilities.L.java
org.openhds.mobile.utilities.Logg.java
org.openhds.mobile.utilities.UrlUtils.java