Infrastructure for adding/removing members to tags during sync

pull/14/head
Sam Bosley 13 years ago
parent f3cced5d02
commit 26e6e13b16

@ -19,13 +19,14 @@ import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.andlib.utility.Preferences; import com.todoroo.andlib.utility.Preferences;
import com.todoroo.astrid.core.PluginServices; import com.todoroo.astrid.core.PluginServices;
import com.todoroo.astrid.dao.RemoteModelDao; import com.todoroo.astrid.dao.RemoteModelDao;
import com.todoroo.astrid.dao.TagMetadataDao;
import com.todoroo.astrid.data.Metadata; import com.todoroo.astrid.data.Metadata;
import com.todoroo.astrid.data.MetadataApiDao.MetadataCriteria; import com.todoroo.astrid.data.MetadataApiDao.MetadataCriteria;
import com.todoroo.astrid.data.RemoteModel; import com.todoroo.astrid.data.RemoteModel;
import com.todoroo.astrid.data.SyncFlags; import com.todoroo.astrid.data.SyncFlags;
import com.todoroo.astrid.data.TagData; import com.todoroo.astrid.data.TagData;
import com.todoroo.astrid.tags.TaskToTagMetadata;
import com.todoroo.astrid.tags.TagService; import com.todoroo.astrid.tags.TagService;
import com.todoroo.astrid.tags.TaskToTagMetadata;
@SuppressWarnings("nls") @SuppressWarnings("nls")
public class MakeChanges<TYPE extends RemoteModel> extends ServerToClientMessage { public class MakeChanges<TYPE extends RemoteModel> extends ServerToClientMessage {
@ -215,6 +216,7 @@ public class MakeChanges<TYPE extends RemoteModel> extends ServerToClientMessage
super(model, changes, uuid); super(model, changes, uuid);
} }
@SuppressWarnings("null")
@Override @Override
public void performChanges() { public void performChanges() {
if (changes.has("name")) { if (changes.has("name")) {
@ -225,9 +227,37 @@ public class MakeChanges<TYPE extends RemoteModel> extends ServerToClientMessage
TaskToTagMetadata.TAG_UUID.eq(uuid)), template); TaskToTagMetadata.TAG_UUID.eq(uuid)), template);
} }
if (changes.has("member_added")) { TagMetadataDao tagMetadataDao = PluginServices.getTagMetadataDao();
model.setValue(TagData.MEMBERS, "{}"); // Clear this value for migration purposes
//TODO: Do more things here also JSONArray addMembers = changes.optJSONArray("member_added");
JSONArray removeMembers = changes.optJSONArray("member_removed");
boolean membersAdded = (addMembers != null && addMembers.length() > 0);
boolean membersRemoved = (removeMembers != null && removeMembers.length() > 0);
if (membersAdded) {
model.setValue(TagData.MEMBERS, ""); // Clear this value for migration purposes
model.setValue(TagData.MEMBERS, ""); // Clear this value for migration purposes
for (int i = 0; i < addMembers.length(); i++) {
try {
String memberId = addMembers.getString(i);
tagMetadataDao.createMemberLink(uuid, memberId);
} catch (JSONException e) {
//
}
}
}
if (membersRemoved) {
ArrayList<String> toRemove = new ArrayList<String>(removeMembers.length());
for (int i = 0; i < removeMembers.length(); i++) {
try {
String tagUuid = removeMembers.getString(i);
toRemove.add(tagUuid);
} catch (JSONException e) {
//
}
}
tagMetadataDao.removeMemberLinks(uuid, toRemove.toArray(new String[toRemove.size()]));
} }
} }
} }

@ -14,6 +14,7 @@ import com.todoroo.astrid.dao.Database;
import com.todoroo.astrid.dao.MetadataDao.MetadataCriteria; import com.todoroo.astrid.dao.MetadataDao.MetadataCriteria;
import com.todoroo.astrid.dao.StoreObjectDao; import com.todoroo.astrid.dao.StoreObjectDao;
import com.todoroo.astrid.dao.TagDataDao; import com.todoroo.astrid.dao.TagDataDao;
import com.todoroo.astrid.dao.TagMetadataDao;
import com.todoroo.astrid.dao.TagOutstandingDao; import com.todoroo.astrid.dao.TagOutstandingDao;
import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.dao.TaskDao;
import com.todoroo.astrid.dao.TaskOutstandingDao; import com.todoroo.astrid.dao.TaskOutstandingDao;
@ -48,6 +49,9 @@ public final class PluginServices {
@Autowired @Autowired
MetadataService metadataService; MetadataService metadataService;
@Autowired
TagMetadataDao tagMetadataDao;
@Autowired @Autowired
AddOnService addOnService; AddOnService addOnService;
@ -107,6 +111,10 @@ public final class PluginServices {
return getInstance().tagDataDao; return getInstance().tagDataDao;
} }
public static TagMetadataDao getTagMetadataDao() {
return getInstance().tagMetadataDao;
}
public static TaskOutstandingDao getTaskOutstandingDao() { public static TaskOutstandingDao getTaskOutstandingDao() {
return getInstance().taskOutstandingDao; return getInstance().taskOutstandingDao;
} }

@ -0,0 +1,40 @@
/**
* Copyright (c) 2012 Todoroo Inc
*
* See the file "LICENSE" for the full license governing this code.
*/
package com.todoroo.astrid.dao;
import com.todoroo.andlib.data.DatabaseDao;
import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.service.DependencyInjectionService;
import com.todoroo.astrid.data.Metadata;
import com.todoroo.astrid.data.TagMetadata;
/**
* Data Access layer for {@link Metadata}-related operations.
*
* @author Tim Su <tim@todoroo.com>
*
*/
public class TagMetadataDao extends DatabaseDao<TagMetadata> {
@Autowired
private Database database;
@edu.umd.cs.findbugs.annotations.SuppressWarnings(value="UR_UNINIT_READ")
public TagMetadataDao() {
super(TagMetadata.class);
DependencyInjectionService.getInstance().inject(this);
setDatabase(database);
}
public void createMemberLink(String tagUuid, String memberId) {
// TODO: Implement
}
public void removeMemberLinks(String tagUuid, String[] memberIds) {
// TODO: Implement
}
}

@ -19,6 +19,7 @@ import com.todoroo.astrid.dao.Database;
import com.todoroo.astrid.dao.MetadataDao; import com.todoroo.astrid.dao.MetadataDao;
import com.todoroo.astrid.dao.StoreObjectDao; import com.todoroo.astrid.dao.StoreObjectDao;
import com.todoroo.astrid.dao.TagDataDao; import com.todoroo.astrid.dao.TagDataDao;
import com.todoroo.astrid.dao.TagMetadataDao;
import com.todoroo.astrid.dao.TagOutstandingDao; import com.todoroo.astrid.dao.TagOutstandingDao;
import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.dao.TaskDao;
import com.todoroo.astrid.dao.TaskOutstandingDao; import com.todoroo.astrid.dao.TaskOutstandingDao;
@ -70,6 +71,7 @@ public class AstridDependencyInjector extends AbstractDependencyInjector {
injectables.put("database", Database.class); injectables.put("database", Database.class);
injectables.put("taskDao", TaskDao.class); injectables.put("taskDao", TaskDao.class);
injectables.put("metadataDao", MetadataDao.class); injectables.put("metadataDao", MetadataDao.class);
injectables.put("tagMetadataDao", TagMetadataDao.class);
injectables.put("tagDataDao", TagDataDao.class); injectables.put("tagDataDao", TagDataDao.class);
injectables.put("storeObjectDao", StoreObjectDao.class); injectables.put("storeObjectDao", StoreObjectDao.class);
injectables.put("updateDao", UpdateDao.class); injectables.put("updateDao", UpdateDao.class);

Loading…
Cancel
Save