Added an object to encapsulate fetching history

pull/14/head
Sam Bosley 13 years ago
parent 336ec485b3
commit 52f1631049

@ -0,0 +1,108 @@
package com.todoroo.astrid.actfm.sync.messages;
import java.io.IOException;
import java.util.ArrayList;
import org.json.JSONArray;
import org.json.JSONObject;
import android.text.TextUtils;
import android.util.Log;
import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.astrid.actfm.sync.ActFmInvoker;
import com.todoroo.astrid.actfm.sync.ActFmPreferenceService;
import com.todoroo.astrid.dao.HistoryDao;
import com.todoroo.astrid.data.History;
public class FetchHistory {
private static final String ERROR_TAG = "actfm-fetch-history"; //$NON-NLS-1$
private final String table;
private final String uuid;
private final long modifiedAfter;
private final boolean includeTaskHistory;
@Autowired
private ActFmInvoker actFmInvoker;
@Autowired
private HistoryDao historyDao;
@Autowired
private ActFmPreferenceService actFmPreferenceService;
public FetchHistory(String table, String uuid, long modifiedAfter, boolean includeTaskHistory) {
this.table = table;
this.uuid = uuid;
this.modifiedAfter = modifiedAfter;
this.includeTaskHistory = includeTaskHistory;
}
@SuppressWarnings("nls")
public void execute() {
new Thread(new Runnable() {
@Override
public void run() {
String token = actFmPreferenceService.getToken();
if (TextUtils.isEmpty(token) || TextUtils.isEmpty(uuid))
return;
ArrayList<Object> params = new ArrayList<Object>();
if (NameMaps.TABLE_ID_TASKS.equals(table))
params.add("task_id");
else if (NameMaps.TABLE_ID_TAGS.equals(table))
params.add("tag_id");
else
return;
params.add(uuid);
if (includeTaskHistory) {
params.add("include_tasks"); params.add(1);
}
if (modifiedAfter > 0) {
params.add("modified_after"); params.add(DateUtilities.timeToIso8601(modifiedAfter, true));
}
params.add("token"); params.add(token);
try {
JSONObject result = actFmInvoker.invoke("model_history_list", params.toArray(new Object[params.size()]));
JSONArray list = result.optJSONArray("list");
if (list != null) {
for (int i = 0; i < list.length(); i++) {
JSONObject historyJson = list.optJSONObject(i);
if (historyJson != null) {
try {
History history = MakeChanges.changesToModel(historyDao, historyJson, table);
history.setValue(History.TABLE_ID, table);
history.setValue(History.TARGET_ID, uuid);
JSONArray taskObj = historyJson.optJSONArray("task");
if (taskObj != null) {
history.setValue(History.TABLE_ID, NameMaps.TABLE_ID_TASKS);
history.setValue(History.TARGET_ID, taskObj.optString(0));
}
if (historyDao.update(History.UUID.eq(history.getUuid()), history) <= 0) {
historyDao.createNew(history);
}
} catch (InstantiationException e) {
Log.e(ERROR_TAG, "Error instantiating history", e);
} catch (IllegalAccessException e) {
Log.e(ERROR_TAG, "Error instantiating history", e);
}
}
}
}
} catch (IOException e) {
Log.e(ERROR_TAG, "Error getting model history", e);
}
}
});
}
}

@ -258,7 +258,7 @@ public class NameMaps {
HISTORY_COLUMNS_LOCAL_TO_SERVER = new HashMap<String, String>();
HISTORY_PROPERTIES_EXCLUDED = new HashSet<String>();
putHistoryPropertyToServerName(History.UUID, "uuid", false);
putHistoryPropertyToServerName(History.UUID, "id", false);
putHistoryPropertyToServerName(History.CREATED_AT, "created_at", false);
putHistoryPropertyToServerName(History.USER_UUID, "user_id", false);
putHistoryPropertyToServerName(History.COLUMN, "column", false);

@ -11,6 +11,7 @@ import com.todoroo.andlib.service.DependencyInjectionService;
import com.todoroo.andlib.service.ExceptionService;
import com.todoroo.andlib.sql.Query;
import com.todoroo.astrid.dao.Database;
import com.todoroo.astrid.dao.HistoryDao;
import com.todoroo.astrid.dao.MetadataDao.MetadataCriteria;
import com.todoroo.astrid.dao.StoreObjectDao;
import com.todoroo.astrid.dao.TagDataDao;
@ -81,6 +82,9 @@ public final class PluginServices {
@Autowired
TagOutstandingDao tagOutstandingDao;
@Autowired
HistoryDao historyDao;
private static volatile PluginServices instance;
static {
@ -164,6 +168,10 @@ public final class PluginServices {
return getInstance().userDao;
}
public static HistoryDao getHistoryDao() {
return getInstance().historyDao;
}
// -- helpers
/**

@ -16,6 +16,7 @@ import com.todoroo.astrid.actfm.sync.ActFmPreferenceService;
import com.todoroo.astrid.actfm.sync.ActFmSyncService;
import com.todoroo.astrid.dao.ABTestEventDao;
import com.todoroo.astrid.dao.Database;
import com.todoroo.astrid.dao.HistoryDao;
import com.todoroo.astrid.dao.MetadataDao;
import com.todoroo.astrid.dao.StoreObjectDao;
import com.todoroo.astrid.dao.TagDataDao;
@ -82,6 +83,7 @@ public class AstridDependencyInjector extends AbstractDependencyInjector {
injectables.put("taskOutstandingDao", TaskOutstandingDao.class);
injectables.put("tagOutstandingDao", TagOutstandingDao.class);
injectables.put("userActivityOutstandingDao", UserActivityOutstandingDao.class);
injectables.put("historyDao", HistoryDao.class);
// com.todoroo.astrid.service
injectables.put("taskService", TaskService.class);

Loading…
Cancel
Save