Back to project page sana.
The source code is released under:
Copyright (c) 2010, Moca All rights reserved. The source code for Moca is licensed under the BSD license as follows: Redistribution and use in source and binary forms, with or without modification, ...
If you think the Android project sana listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
package org.moca.task; //from w w w . j av a 2 s. com import java.util.ArrayList; import java.util.List; import org.moca.db.Event; import org.moca.db.MocaDB.EventSQLFormat; import org.moca.net.MDSInterface; import org.moca.util.MocaUtil; import android.app.ProgressDialog; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.os.AsyncTask; import android.util.Log; public class MDSSyncTask extends AsyncTask<Context, Void, Integer> { public static final String TAG = MDSSyncTask.class.toString(); public static final Integer EMR_SYNC_NO_CONNECTION = 0; public static final Integer EMR_SYNC_SUCCESS = 1; public static final Integer EMR_SYNC_FAILURE = 2; private ProgressDialog progressDialog; private Context mContext = null; // TODO context leak? public MDSSyncTask(Context c) { mContext = c; } private boolean syncPatients(Context c) { return MDSInterface.updatePatientDatabase(c, c.getContentResolver()); } private boolean syncEvents(Context c) { Cursor cursor = null; Log.i(TAG, "Syncing the event log to the MDS."); try { // Get all un-uploaded events. cursor = c.getContentResolver().query(EventSQLFormat.CONTENT_URI, new String[] { EventSQLFormat._ID, EventSQLFormat.CREATED_DATE, EventSQLFormat.EVENT_TYPE, EventSQLFormat.EVENT_VALUE, EventSQLFormat.ENCOUNTER_REFERENCE, EventSQLFormat.PATIENT_REFERENCE, EventSQLFormat.USER_REFERENCE }, EventSQLFormat.UPLOADED+"=?", new String[] { "0" }, null); int numEvents = cursor.getCount(); if (numEvents == 0) { // Nothing to upload, quit. Log.i(TAG, "No unuploaded events. Skipping syncEvents."); return true; } else { Log.i(TAG, "There are " + numEvents + " unuploaded events."); } StringBuilder sb = new StringBuilder("("); List<Event> events = new ArrayList<Event>(numEvents); cursor.moveToFirst(); while (!cursor.isAfterLast()) { Event e = new Event(); e.event_time = cursor.getLong(cursor.getColumnIndex(EventSQLFormat.CREATED_DATE)); e.event_type = cursor.getString(cursor.getColumnIndex(EventSQLFormat.EVENT_TYPE)); e.event_value = cursor.getString(cursor.getColumnIndex(EventSQLFormat.EVENT_VALUE)); e.encounter_reference = cursor.getString(cursor.getColumnIndex(EventSQLFormat.ENCOUNTER_REFERENCE)); e.patient_reference = cursor.getString(cursor.getColumnIndex(EventSQLFormat.PATIENT_REFERENCE)); e.user_reference = cursor.getString(cursor.getColumnIndex(EventSQLFormat.USER_REFERENCE)); int id = cursor.getInt(cursor.getColumnIndex(EventSQLFormat._ID)); events.add(e); sb.append(id); if (!cursor.isLast()) { sb.append(","); } cursor.moveToNext(); } sb.append(")"); // Submit the events to the MDS boolean result = MDSInterface.submitEvents(c, events); // Set the uploaded events as uploaded in the database. if (result) { Log.i(TAG, "Successfully uploaded " + numEvents + " events."); ContentValues cv = new ContentValues(); cv.put(EventSQLFormat.UPLOADED, 1); int rowsUpdated = c.getContentResolver().update(EventSQLFormat.CONTENT_URI, cv, EventSQLFormat._ID +" in " + sb.toString(), null); if (rowsUpdated != numEvents) { Log.w(TAG, "Didn't get as many rows updated as we thought we would."); } } return result; } catch (Exception e) { Log.e(TAG, "While trying to submit the event log, got exception: " + e.toString()); e.printStackTrace(); } finally { if (cursor != null) cursor.deactivate(); } return false; } @Override protected Integer doInBackground(Context... params) { Log.i(TAG, "Executing EMRSyncTask"); Context c = params[0]; Integer result = EMR_SYNC_NO_CONNECTION; // TODO detect this case better if (MocaUtil.checkConnection(c)) { boolean patientSyncResult = syncPatients(c); boolean eventSyncResult = syncEvents(c); result = (patientSyncResult && eventSyncResult) ? EMR_SYNC_SUCCESS : EMR_SYNC_FAILURE; } return result; } @Override protected void onPreExecute() { Log.i(TAG, "About to execute EMRSyncTask"); if (progressDialog != null) { progressDialog.dismiss(); progressDialog = null; } progressDialog = new ProgressDialog(mContext); progressDialog.setMessage("Updating patient database cache"); progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); progressDialog.show(); } @Override protected void onPostExecute(Integer result) { Log.i(TAG, "Completed EMRSyncTask"); if (progressDialog != null) { progressDialog.dismiss(); progressDialog = null; } } }