package com.todoroo.astrid.actfm.sync.messages;
import org.json.JSONObject;
import com.todoroo.astrid.core.PluginServices;
import com.todoroo.astrid.data.TagData;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.data.TaskAttachment;
import com.todoroo.astrid.data.TaskListMetadata;
import com.todoroo.astrid.data.User;
import com.todoroo.astrid.data.UserActivity;
import com.todoroo.astrid.data.WaitingOnMe;
@SuppressWarnings("nls")
public abstract class ServerToClientMessage {
public abstract void processMessage(String serverTime);
public static final String TYPE_MAKE_CHANGES = "MakeChanges";
public static final String TYPE_NOW_BRIEFED = "NowBriefed";
public static final String TYPE_ACKNOWLEDGE_CHANGE = "AcknowledgeChange";
public static final String TYPE_USER_DATA = "UserData";
public static final String TYPE_DOUBLE_CHECK = "DoubleCheck";
public static final String TYPE_USER_MIGRATED = "UserMigrated";
public static final String TYPE_DEBUG = "Debug";
protected final JSONObject json;
public ServerToClientMessage(JSONObject json) {
this.json = json;
}
public static ServerToClientMessage instantiateMessage(JSONObject json) {
String type = json.optString("type");
if (TYPE_MAKE_CHANGES.equals(type))
return instantiateMakeChanges(json);
else if (TYPE_NOW_BRIEFED.equals(type))
return instantiateNowBriefed(json);
else if (TYPE_ACKNOWLEDGE_CHANGE.equals(type))
return new AcknowledgeChange(json);
else if (TYPE_USER_DATA.equals(type))
return new UserData(json);
else if (TYPE_DOUBLE_CHECK.equals(type))
return new DoubleCheck(json);
else if (TYPE_USER_MIGRATED.equals(type))
return new UserMigrated(json);
else if (TYPE_DEBUG.equals(type))
return new Debug(json);
return null;
}
private static MakeChanges<?> instantiateMakeChanges(JSONObject json) {
String table = json.optString("table");
if (NameMaps.TABLE_ID_TASKS.equals(table))
return new MakeChanges<Task>(json, PluginServices.getTaskDao());
else if (NameMaps.TABLE_ID_TAGS.equals(table))
return new MakeChanges<TagData>(json, PluginServices.getTagDataDao());
else if (NameMaps.TABLE_ID_USERS.equals(table))
return new MakeChanges<User>(json, PluginServices.getUserDao());
else if (NameMaps.TABLE_ID_USER_ACTIVITY.equals(table))
return new MakeChanges<UserActivity>(json, PluginServices.getUserActivityDao());
else if (NameMaps.TABLE_ID_ATTACHMENTS.equals(table))
return new MakeChanges<TaskAttachment>(json, PluginServices.getTaskAttachmentDao());
else if (NameMaps.TABLE_ID_TASK_LIST_METADATA.equals(table))
return new MakeChanges<TaskListMetadata>(json, PluginServices.getTaskListMetadataDao());
else if (NameMaps.TABLE_ID_WAITING_ON_ME.equals(table))
return new MakeChanges<WaitingOnMe>(json, PluginServices.getWaitingOnMeDao());
else
return null;
}
private static NowBriefed<?> instantiateNowBriefed(JSONObject json) {
String table = json.optString("table");
if (NameMaps.TABLE_ID_TASKS.equals(table))
return new NowBriefed<Task>(json, PluginServices.getTaskDao());
else if (NameMaps.TABLE_ID_TAGS.equals(table))
return new NowBriefed<TagData>(json, PluginServices.getTagDataDao());
else if (NameMaps.TABLE_ID_USER_ACTIVITY.equals(table))
return new NowBriefed<UserActivity>(json, PluginServices.getUserActivityDao());
else if (NameMaps.TABLE_ID_USERS.equals(table))
return new NowBriefed<User>(json, PluginServices.getUserDao());
else if (NameMaps.TABLE_ID_ATTACHMENTS.equals(table))
return new NowBriefed<TaskAttachment>(json, PluginServices.getTaskAttachmentDao());
else if (NameMaps.TABLE_ID_TASK_LIST_METADATA.equals(table))
return new NowBriefed<TaskListMetadata>(json, PluginServices.getTaskListMetadataDao());
else if (NameMaps.TABLE_ID_WAITING_ON_ME.equals(table))
return new NowBriefed<WaitingOnMe>(json, PluginServices.getWaitingOnMeDao());
else
return null;
}
}