Added a tag metadata table for things like tag to user join table

pull/14/head
Sam Bosley 12 years ago
parent b1d32f61b4
commit f3cced5d02

@ -0,0 +1,99 @@
package com.todoroo.astrid.data;
import android.content.ContentValues;
import android.net.Uri;
import com.todoroo.andlib.data.AbstractModel;
import com.todoroo.andlib.data.Property;
import com.todoroo.andlib.data.Property.LongProperty;
import com.todoroo.andlib.data.Property.StringProperty;
import com.todoroo.andlib.data.Table;
import com.todoroo.andlib.data.TodorooCursor;
import com.todoroo.astrid.api.AstridApiConstants;
@SuppressWarnings("nls")
public class TagMetadata extends AbstractModel {
public static final Table TABLE = new Table("tag_metadata", TagMetadata.class);
/** content uri for this model */
public static final Uri CONTENT_URI = Uri.parse("content://" + AstridApiConstants.API_PACKAGE + "/" +
TABLE.name);
// --- properties
/** ID */
public static final LongProperty ID = new LongProperty(
TABLE, ID_PROPERTY_NAME);
/** Tag uuid */
public static final StringProperty TAG_UUID = new StringProperty(
TABLE, "tag_uuid");
/** Metadata Key */
public static final StringProperty KEY = new StringProperty(
TABLE, "key");
/** Metadata Text Value Column 1 */
public static final StringProperty VALUE1 = new StringProperty(
TABLE, "value");
/** Metadata Text Value Column 2 */
public static final StringProperty VALUE2 = new StringProperty(
TABLE, "value2");
/** Metadata Text Value Column 3 */
public static final StringProperty VALUE3 = new StringProperty(
TABLE, "value3");
/** Unixtime Metadata was created */
public static final LongProperty CREATION_DATE = new LongProperty(
TABLE, "created");
/** Unixtime metadata was deleted/tombstoned */
public static final LongProperty DELETION_DATE = new LongProperty(
TABLE, "deleted");
/** List of all properties for this model */
public static final Property<?>[] PROPERTIES = generateProperties(TagMetadata.class);
/** Default values container */
private static final ContentValues defaultValues = new ContentValues();
static {
defaultValues.put(DELETION_DATE.name, 0L);
}
@Override
public ContentValues getDefaultValues() {
return defaultValues;
}
public TagMetadata() {
super();
}
public TagMetadata(TodorooCursor<TagMetadata> cursor) {
this();
readPropertiesFromCursor(cursor);
}
public void readFromCursor(TodorooCursor<Metadata> cursor) {
super.readPropertiesFromCursor(cursor);
}
@Override
public long getId() {
return getIdHelper(ID);
}
// --- parcelable helpers
private static final Creator<TagMetadata> CREATOR = new ModelCreator<TagMetadata>(TagMetadata.class);
@Override
protected Creator<? extends AbstractModel> getCreator() {
return CREATOR;
}
}

@ -53,8 +53,11 @@ import com.todoroo.andlib.utility.Preferences;
import com.todoroo.astrid.actfm.sync.ActFmPreferenceService;
import com.todoroo.astrid.actfm.sync.ActFmSyncService;
import com.todoroo.astrid.activity.TaskEditFragment;
import com.todoroo.astrid.core.PluginServices;
import com.todoroo.astrid.dao.UserDao;
import com.todoroo.astrid.data.Metadata;
import com.todoroo.astrid.data.TagData;
import com.todoroo.astrid.data.TagMetadata;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.data.User;
import com.todoroo.astrid.helper.AsyncImageView;
@ -65,6 +68,7 @@ import com.todoroo.astrid.service.StatisticsService;
import com.todoroo.astrid.service.TagDataService;
import com.todoroo.astrid.service.TaskService;
import com.todoroo.astrid.service.abtesting.ABChooser;
import com.todoroo.astrid.tags.TagMemberMetadata;
import com.todoroo.astrid.tags.TagService;
import com.todoroo.astrid.ui.PeopleContainer;
import com.todoroo.astrid.ui.PeopleContainer.ParseSharedException;
@ -176,7 +180,6 @@ public class EditPeopleControlSet extends PopupControlSet {
this.task = task;
}
@SuppressWarnings("nls")
public void setUpData(final Task task, final TagData includeTag) {
new Thread(new Runnable() {
@Override
@ -187,26 +190,13 @@ public class EditPeopleControlSet extends PopupControlSet {
TagData tagData = new TagData();
for(tags.moveToFirst(); !tags.isAfterLast(); tags.moveToNext()) {
tagData.readFromCursor(tags);
final String tag = tagData.getValue(TagData.NAME);
if(tagData.getValue(TagData.MEMBER_COUNT) > 0) {
try {
addMembersFromTagData(tagData, tag, sharedPeople);
} catch (JSONException e) {
exceptionService.reportError("json-reading-data", e);
}
}
addMembersFromTagData(tagData, sharedPeople);
}
if (includeTag != null && tags.getCount() == 0) {
try {
addMembersFromTagData(includeTag, null, sharedPeople);
} catch (JSONException e) {
exceptionService.reportError("json-reading-data", e);
}
addMembersFromTagData(includeTag, sharedPeople);
}
// if(collaborators.size() > 0)
// buildCollaborators(collaborators);
buildAssignedToSpinner(task, sharedPeople);
} finally {
tags.close();
@ -216,56 +206,35 @@ public class EditPeopleControlSet extends PopupControlSet {
}).start();
}
@SuppressWarnings("nls")
private static void addMembersFromTagData(TagData tagData, String tag, ArrayList<JSONObject> sharedPeople) throws JSONException {
JSONArray members = new JSONArray(tagData.getValue(TagData.MEMBERS));
if (tag == null)
tag = tagData.getValue(TagData.NAME);
for(int i = 0; i < members.length(); i++) {
JSONObject user = members.getJSONObject(i);
user.put("tag", tag);
sharedPeople.add(user);
}
if(!TextUtils.isEmpty(tagData.getValue(TagData.USER))) {
JSONObject user = new JSONObject(tagData.getValue(TagData.USER));
user.put("tag", tag);
sharedPeople.add(user);
private static void addMembersFromTagData(TagData tagData, ArrayList<JSONObject> sharedPeople) {
try {
JSONArray members = new JSONArray(tagData.getValue(TagData.MEMBERS));
for (int i = 0; i < members.length(); i++) {
JSONObject user = members.getJSONObject(i);
sharedPeople.add(user);
}
if(!TextUtils.isEmpty(tagData.getValue(TagData.USER))) {
JSONObject user = new JSONObject(tagData.getValue(TagData.USER));
sharedPeople.add(user);
}
} catch (JSONException e) {
TodorooCursor<User> users = PluginServices.getUserDao().query(Query.select(User.PROPERTIES).where(User.UUID.in(
Query.select(TagMemberMetadata.USER_UUID).from(Metadata.TABLE).where(TagMetadata.TAG_UUID.eq(tagData.getUuid())))));
User user = new User();
for (users.moveToFirst(); !users.isAfterLast(); users.moveToNext()) {
user.clear();
user.readFromCursor(users);
JSONObject userJson = new JSONObject();
try {
ActFmSyncService.JsonHelper.jsonFromUser(userJson, user);
sharedPeople.add(userJson);
} catch (JSONException e2) {
//
}
}
}
}
// @SuppressWarnings("nls")
// private void buildCollaborators(final ArrayList<JSONObject> sharedPeople) {
//
// activity.runOnUiThread(new Runnable() {
// @Override
// public void run() {
// HashSet<Long> userIds = new HashSet<Long>();
// LinearLayout collaborators = (LinearLayout) getSharedWithView().findViewById(R.id.collaborators);
//
// for(JSONObject person : sharedPeople) {
// if(person == null)
// continue;
// long id = person.optLong("id", -1);
// if(id == 0 || id == ActFmPreferenceService.userId() || (id > -1 && userIds.contains(id)))
// continue;
// userIds.add(id);
//
// View contact = activity.getLayoutInflater().inflate(R.layout.contact_adapter_row, collaborators, false);
// AsyncImageView icon = (AsyncImageView) contact.findViewById(R.id.icon);
// TextView name = (TextView) contact.findViewById(android.R.id.text1);
// TextView tag = (TextView) contact.findViewById(android.R.id.text2);
//
// icon.setUrl(person.optString("picture"));
// name.setText(person.optString("name"));
// name.setTextAppearance(activity, R.style.TextAppearance_Medium);
// tag.setText(activity.getString(R.string.actfm_EPA_list, person.optString("tag")));
//
// collaborators.addView(contact);
// }
// }
// });
// }
public static class AssignedToUser {
public String label;
public JSONObject user;

@ -76,7 +76,7 @@ import com.todoroo.astrid.service.TaskService;
import com.todoroo.astrid.service.abtesting.ABTestEventReportingService;
import com.todoroo.astrid.subtasks.SubtasksHelper;
import com.todoroo.astrid.sync.SyncV2Provider.SyncExceptionHandler;
import com.todoroo.astrid.tags.TagMetadata;
import com.todoroo.astrid.tags.TaskToTagMetadata;
import com.todoroo.astrid.tags.TagService;
import com.todoroo.astrid.tags.reusable.FeaturedListFilterExposer;
import com.todoroo.astrid.utility.Flags;
@ -493,13 +493,13 @@ public final class ActFmSyncService {
Metadata metadata = new Metadata();
for(cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {
metadata.readFromCursor(cursor);
if(metadata.containsNonNullValue(TagMetadata.TAG_UUID) &&
!RemoteModel.NO_UUID.equals(metadata.getValue(TagMetadata.TAG_UUID))) {
if(metadata.containsNonNullValue(TaskToTagMetadata.TAG_UUID) &&
!RemoteModel.NO_UUID.equals(metadata.getValue(TaskToTagMetadata.TAG_UUID))) {
params.add("tag_ids[]");
params.add(metadata.getValue(TagMetadata.TAG_UUID));
params.add(metadata.getValue(TaskToTagMetadata.TAG_UUID));
} else {
params.add("tags[]");
params.add(metadata.getValue(TagMetadata.TAG_NAME));
params.add(metadata.getValue(TaskToTagMetadata.TAG_NAME));
}
}
}
@ -1014,7 +1014,7 @@ public final class ActFmSyncService {
JsonHelper.taskFromJson(result, task, metadata);
task.putTransitory(SyncFlags.ACTFM_SUPPRESS_SYNC, true);
taskService.save(task);
metadataService.synchronizeMetadata(task.getId(), metadata, Metadata.KEY.eq(TagMetadata.KEY), false);
metadataService.synchronizeMetadata(task.getId(), metadata, Metadata.KEY.eq(TaskToTagMetadata.KEY), false);
synchronizeAttachments(result, task);
}
@ -1524,7 +1524,7 @@ public final class ActFmSyncService {
}
ids.add(remote.getId());
metadataService.synchronizeMetadata(remote.getId(), metadata, MetadataCriteria.withKey(TagMetadata.KEY), false);
metadataService.synchronizeMetadata(remote.getId(), metadata, MetadataCriteria.withKey(TaskToTagMetadata.KEY), false);
synchronizeAttachments(item, remote);
remote.clear();
}
@ -1847,7 +1847,7 @@ public final class ActFmSyncService {
String name = tag.getString("name");
if(TextUtils.isEmpty(name))
continue;
Metadata tagMetadata = TagMetadata.newTagMetadata(model.getId(), remoteId, name, tag.getString("id"));
Metadata tagMetadata = TaskToTagMetadata.newTagMetadata(model.getId(), remoteId, name, tag.getString("id"));
metadata.add(tagMetadata);
}
}

@ -42,7 +42,7 @@ import com.todoroo.astrid.service.TaskService;
import com.todoroo.astrid.subtasks.SubtasksUpdater;
import com.todoroo.astrid.sync.SyncResultCallback;
import com.todoroo.astrid.sync.SyncV2Provider;
import com.todoroo.astrid.tags.TagMetadata;
import com.todoroo.astrid.tags.TaskToTagMetadata;
import com.todoroo.astrid.tags.TagService;
import com.todoroo.astrid.utility.Flags;
@ -572,8 +572,8 @@ public class ActFmSyncV2Provider extends SyncV2Provider {
private void pushQueuedTasksByTag(TagData tagData, SyncResultCallback callback, AtomicInteger finisher) {
Long[] ids;
TodorooCursor<Metadata> allTagged = metadataService.query(Query.select(Metadata.TASK).where(Criterion.and(Metadata.KEY.eq(TagMetadata.KEY),
TagMetadata.TAG_NAME.eqCaseInsensitive(tagData.getValue(TagData.NAME)))));
TodorooCursor<Metadata> allTagged = metadataService.query(Query.select(Metadata.TASK).where(Criterion.and(Metadata.KEY.eq(TaskToTagMetadata.KEY),
TaskToTagMetadata.TAG_NAME.eqCaseInsensitive(tagData.getValue(TagData.NAME)))));
try {
ids = new Long[allTagged.getCount()];
Metadata m = new Metadata();
@ -588,8 +588,8 @@ public class ActFmSyncV2Provider extends SyncV2Provider {
}
TodorooCursor<Task> taskCursor = taskService.query(Query.select(Task.PROPERTIES)
.join(Join.inner(Metadata.TABLE, Criterion.and(Metadata.KEY.eq(TagMetadata.KEY), Metadata.TASK.eq(Task.ID),
TagMetadata.TAG_NAME.eqCaseInsensitive(tagData.getValue(TagData.NAME)))))
.join(Join.inner(Metadata.TABLE, Criterion.and(Metadata.KEY.eq(TaskToTagMetadata.KEY), Metadata.TASK.eq(Task.ID),
TaskToTagMetadata.TAG_NAME.eqCaseInsensitive(tagData.getValue(TagData.NAME)))))
.where(Criterion.or(
Criterion.and(TaskCriteria.isActive(),
Task.REMOTE_ID.isNull()),

@ -25,7 +25,7 @@ import com.todoroo.astrid.data.Update;
import com.todoroo.astrid.helper.UUIDHelper;
import com.todoroo.astrid.service.MetadataService;
import com.todoroo.astrid.service.TagDataService;
import com.todoroo.astrid.tags.TagMetadata;
import com.todoroo.astrid.tags.TaskToTagMetadata;
import com.todoroo.astrid.utility.Constants;
@SuppressWarnings("nls")
@ -55,9 +55,9 @@ public class AstridNewSyncMigrator {
// First ensure that a TagData object exists for each tag metadata
// --------------
Query noTagDataQuery = Query.select(Metadata.PROPERTIES).where(Criterion.and(
MetadataCriteria.withKey(TagMetadata.KEY),
Criterion.or(TagMetadata.TAG_UUID.isNull(), TagMetadata.TAG_UUID.eq(0)),
Criterion.not(TagMetadata.TAG_NAME.in(Query.select(TagData.NAME).from(TagData.TABLE))))).groupBy(TagMetadata.TAG_NAME);
MetadataCriteria.withKey(TaskToTagMetadata.KEY),
Criterion.or(TaskToTagMetadata.TAG_UUID.isNull(), TaskToTagMetadata.TAG_UUID.eq(0)),
Criterion.not(TaskToTagMetadata.TAG_NAME.in(Query.select(TagData.NAME).from(TagData.TABLE))))).groupBy(TaskToTagMetadata.TAG_NAME);
TodorooCursor<Metadata> noTagData = metadataService.query(noTagDataQuery);
try {
@ -66,10 +66,10 @@ public class AstridNewSyncMigrator {
tag.readFromCursor(noTagData);
if (Constants.DEBUG)
Log.w(LOG_TAG, "CREATING TAG DATA " + tag.getValue(TagMetadata.TAG_NAME));
Log.w(LOG_TAG, "CREATING TAG DATA " + tag.getValue(TaskToTagMetadata.TAG_NAME));
TagData newTagData = new TagData();
newTagData.setValue(TagData.NAME, tag.getValue(TagMetadata.TAG_NAME));
newTagData.setValue(TagData.NAME, tag.getValue(TaskToTagMetadata.TAG_NAME));
tagDataService.save(newTagData);
}
} finally {
@ -124,9 +124,9 @@ public class AstridNewSyncMigrator {
// Finally, ensure that all tag metadata entities have all important fields filled in
// --------------
Query incompleteQuery = Query.select(Metadata.PROPERTIES).where(Criterion.and(
MetadataCriteria.withKey(TagMetadata.KEY),
Criterion.or(TagMetadata.TASK_UUID.eq(0), TagMetadata.TASK_UUID.isNull(),
TagMetadata.TAG_UUID.eq(0), TagMetadata.TAG_UUID.isNull())));
MetadataCriteria.withKey(TaskToTagMetadata.KEY),
Criterion.or(TaskToTagMetadata.TASK_UUID.eq(0), TaskToTagMetadata.TASK_UUID.isNull(),
TaskToTagMetadata.TAG_UUID.eq(0), TaskToTagMetadata.TAG_UUID.isNull())));
TodorooCursor<Metadata> incompleteMetadata = metadataService.query(incompleteQuery);
try {
Metadata m = new Metadata();
@ -136,16 +136,16 @@ public class AstridNewSyncMigrator {
boolean changes = false;
if (Constants.DEBUG)
Log.w(LOG_TAG, "Incomplete linking task " + m.getValue(Metadata.TASK) + " to " + m.getValue(TagMetadata.TAG_NAME));
Log.w(LOG_TAG, "Incomplete linking task " + m.getValue(Metadata.TASK) + " to " + m.getValue(TaskToTagMetadata.TAG_NAME));
if (!m.containsNonNullValue(TagMetadata.TASK_UUID) || RemoteModel.NO_UUID.equals(m.getValue(TagMetadata.TASK_UUID))) {
if (!m.containsNonNullValue(TaskToTagMetadata.TASK_UUID) || RemoteModel.NO_UUID.equals(m.getValue(TaskToTagMetadata.TASK_UUID))) {
if (Constants.DEBUG)
Log.w(LOG_TAG, "No task uuid");
updateTaskUuid(m);
changes = true;
}
if (!m.containsNonNullValue(TagMetadata.TAG_UUID) || RemoteModel.NO_UUID.equals(m.getValue(TagMetadata.TAG_UUID))) {
if (!m.containsNonNullValue(TaskToTagMetadata.TAG_UUID) || RemoteModel.NO_UUID.equals(m.getValue(TaskToTagMetadata.TAG_UUID))) {
if (Constants.DEBUG)
Log.w(LOG_TAG, "No tag uuid");
updateTagUuid(m);
@ -197,7 +197,7 @@ public class AstridNewSyncMigrator {
if (task != null) {
if (Constants.DEBUG)
Log.w(LOG_TAG, "Linking with task uuid " + task.getValue(Task.UUID));
m.setValue(TagMetadata.TASK_UUID, task.getValue(Task.UUID));
m.setValue(TaskToTagMetadata.TASK_UUID, task.getValue(Task.UUID));
} else {
if (Constants.DEBUG)
Log.w(LOG_TAG, "Task not found, deleting link");
@ -206,12 +206,12 @@ public class AstridNewSyncMigrator {
}
private void updateTagUuid(Metadata m) {
String tag = m.getValue(TagMetadata.TAG_NAME);
String tag = m.getValue(TaskToTagMetadata.TAG_NAME);
TagData tagData = tagDataService.getTag(tag, TagData.UUID);
if (tagData != null) {
if (Constants.DEBUG)
Log.w(LOG_TAG, "Linking with tag uuid " + tagData.getValue(TagData.UUID));
m.setValue(TagMetadata.TAG_UUID, tagData.getValue(TagData.UUID));
m.setValue(TaskToTagMetadata.TAG_UUID, tagData.getValue(TagData.UUID));
} else {
if (Constants.DEBUG)
Log.w(LOG_TAG, "Tag not found, deleting link");

@ -24,7 +24,7 @@ import com.todoroo.astrid.data.MetadataApiDao.MetadataCriteria;
import com.todoroo.astrid.data.RemoteModel;
import com.todoroo.astrid.data.SyncFlags;
import com.todoroo.astrid.data.TagData;
import com.todoroo.astrid.tags.TagMetadata;
import com.todoroo.astrid.tags.TaskToTagMetadata;
import com.todoroo.astrid.tags.TagService;
@SuppressWarnings("nls")
@ -219,10 +219,10 @@ public class MakeChanges<TYPE extends RemoteModel> extends ServerToClientMessage
public void performChanges() {
if (changes.has("name")) {
Metadata template = new Metadata();
template.setValue(TagMetadata.TAG_NAME, changes.optString("name"));
template.setValue(TaskToTagMetadata.TAG_NAME, changes.optString("name"));
PluginServices.getMetadataService().update(
Criterion.and(MetadataCriteria.withKey(TagMetadata.KEY),
TagMetadata.TAG_UUID.eq(uuid)), template);
Criterion.and(MetadataCriteria.withKey(TaskToTagMetadata.KEY),
TaskToTagMetadata.TAG_UUID.eq(uuid)), template);
}
if (changes.has("member_added")) {

@ -26,7 +26,7 @@ import com.todoroo.astrid.data.Metadata;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.data.TaskApiDao.TaskCriteria;
import com.todoroo.astrid.service.ThemeService;
import com.todoroo.astrid.tags.TagMetadata;
import com.todoroo.astrid.tags.TaskToTagMetadata;
/**
* Exposes Astrid's built in filters to the {@link FilterListFragment}
@ -66,8 +66,8 @@ public final class CoreFilterExposer extends BroadcastReceiver implements Astrid
new QueryTemplate().where(
Criterion.and(TaskCriteria.activeVisibleMine(),
Criterion.not(Task.ID.in(Query.select(Metadata.TASK).from(Metadata.TABLE).where(
Criterion.and(MetadataCriteria.withKey(TagMetadata.KEY),
TagMetadata.TAG_NAME.like("x_%", "x"))))))), //$NON-NLS-1$ //$NON-NLS-2$
Criterion.and(MetadataCriteria.withKey(TaskToTagMetadata.KEY),
TaskToTagMetadata.TAG_NAME.like("x_%", "x"))))))), //$NON-NLS-1$ //$NON-NLS-2$
null);
int themeFlags = ThemeService.getFilterThemeFlags();
inbox.listingIcon = ((BitmapDrawable)r.getDrawable(

@ -39,7 +39,7 @@ import com.todoroo.astrid.data.TagData;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.data.User;
import com.todoroo.astrid.service.ThemeService;
import com.todoroo.astrid.tags.TagMetadata;
import com.todoroo.astrid.tags.TaskToTagMetadata;
import com.todoroo.astrid.utility.AstridPreferences;
public class PeopleFilterExposer extends BroadcastReceiver {
@ -141,8 +141,8 @@ public class PeopleFilterExposer extends BroadcastReceiver {
String title = context.getString(R.string.actfm_my_shared_tasks_title);
QueryTemplate template = new QueryTemplate().join(Join.inner(Metadata.TABLE.as("mtags"),
Criterion.and(Task.ID.eq(Field.field("mtags." + Metadata.TASK.name)),
Field.field("mtags." + Metadata.KEY.name).eq(TagMetadata.KEY),
Field.field("mtags." + TagMetadata.TAG_NAME.name).in(names),
Field.field("mtags." + Metadata.KEY.name).eq(TaskToTagMetadata.KEY),
Field.field("mtags." + TaskToTagMetadata.TAG_NAME.name).in(names),
TaskCriteria.activeVisibleMine())));
FilterWithCustomIntent filter = new FilterWithCustomIntent(title, title, template, null);

@ -35,7 +35,7 @@ import com.todoroo.astrid.notes.NoteMetadata;
import com.todoroo.astrid.producteev.ProducteevUtilities;
import com.todoroo.astrid.producteev.api.ApiUtilities;
import com.todoroo.astrid.service.MetadataService;
import com.todoroo.astrid.tags.TagMetadata;
import com.todoroo.astrid.tags.TaskToTagMetadata;
public final class ProducteevDataService {
@ -157,7 +157,7 @@ public final class ProducteevDataService {
// note we don't include note metadata, since we only receive deltas
metadataService.synchronizeMetadata(task.task.getId(), task.metadata,
Criterion.or(MetadataCriteria.withKey(ProducteevTask.METADATA_KEY),
MetadataCriteria.withKey(TagMetadata.KEY)), true);
MetadataCriteria.withKey(TaskToTagMetadata.KEY)), true);
}
/**
@ -172,7 +172,7 @@ public final class ProducteevDataService {
ArrayList<Metadata> metadata = new ArrayList<Metadata>();
TodorooCursor<Metadata> metadataCursor = metadataService.query(Query.select(Metadata.PROPERTIES).
where(Criterion.and(MetadataCriteria.byTask(task.getId()),
Criterion.or(MetadataCriteria.withKey(TagMetadata.KEY),
Criterion.or(MetadataCriteria.withKey(TaskToTagMetadata.KEY),
MetadataCriteria.withKey(ProducteevTask.METADATA_KEY),
MetadataCriteria.withKey(NoteMetadata.METADATA_KEY)))));
try {

@ -57,7 +57,7 @@ import com.todoroo.astrid.service.StatisticsService;
import com.todoroo.astrid.sync.SyncContainer;
import com.todoroo.astrid.sync.SyncProvider;
import com.todoroo.astrid.sync.SyncProviderUtilities;
import com.todoroo.astrid.tags.TagMetadata;
import com.todoroo.astrid.tags.TaskToTagMetadata;
import com.todoroo.astrid.utility.Constants;
@SuppressWarnings("nls")
@ -394,8 +394,8 @@ public class ProducteevSyncProvider extends SyncProvider<ProducteevTaskContainer
continue;
Metadata tagData = new Metadata();
tagData.setValue(Metadata.KEY, TagMetadata.KEY);
tagData.setValue(TagMetadata.TAG_NAME, ApiUtilities.decode(label.getString("title")));
tagData.setValue(Metadata.KEY, TaskToTagMetadata.KEY);
tagData.setValue(TaskToTagMetadata.TAG_NAME, ApiUtilities.decode(label.getString("title")));
metadata.add(tagData);
}
@ -572,12 +572,12 @@ public class ProducteevSyncProvider extends SyncProvider<ProducteevTaskContainer
HashSet<String> localTags = new HashSet<String>();
HashSet<String> remoteTags = new HashSet<String>();
for(Metadata item : local.metadata)
if(TagMetadata.KEY.equals(item.getValue(Metadata.KEY)))
localTags.add(item.getValue(TagMetadata.TAG_NAME));
if(TaskToTagMetadata.KEY.equals(item.getValue(Metadata.KEY)))
localTags.add(item.getValue(TaskToTagMetadata.TAG_NAME));
if(remote != null && remote.metadata != null) {
for(Metadata item : remote.metadata)
if(TagMetadata.KEY.equals(item.getValue(Metadata.KEY)))
remoteTags.add(item.getValue(TagMetadata.TAG_NAME));
if(TaskToTagMetadata.KEY.equals(item.getValue(Metadata.KEY)))
remoteTags.add(item.getValue(TaskToTagMetadata.TAG_NAME));
}
if(!localTags.equals(remoteTags)) {

@ -111,7 +111,7 @@ public class TagCaseMigrator {
@Deprecated
private static Criterion tagEq(String tag, Criterion additionalCriterion) {
return Criterion.and(
MetadataCriteria.withKey(TagMetadata.KEY), TagMetadata.TAG_NAME.eq(tag),
MetadataCriteria.withKey(TaskToTagMetadata.KEY), TaskToTagMetadata.TAG_NAME.eq(tag),
additionalCriterion);
}
@ -121,14 +121,14 @@ public class TagCaseMigrator {
try {
for (tasks.moveToFirst(); !tasks.isAfterLast(); tasks.moveToNext()) {
Task curr = new Task(tasks);
TodorooCursor<Metadata> tagMetadata = metadataService.query(Query.select(TagMetadata.TAG_NAME)
.where(Criterion.and(TagMetadata.TAG_NAME.eq(target), Metadata.KEY.eq(TagMetadata.KEY), Metadata.TASK.eq(curr.getId()))));
TodorooCursor<Metadata> tagMetadata = metadataService.query(Query.select(TaskToTagMetadata.TAG_NAME)
.where(Criterion.and(TaskToTagMetadata.TAG_NAME.eq(target), Metadata.KEY.eq(TaskToTagMetadata.KEY), Metadata.TASK.eq(curr.getId()))));
try {
if (tagMetadata.getCount() == 0) {
Metadata newTag = new Metadata();
newTag.setValue(Metadata.KEY, TagMetadata.KEY);
newTag.setValue(Metadata.KEY, TaskToTagMetadata.KEY);
newTag.setValue(Metadata.TASK, curr.getId());
newTag.setValue(TagMetadata.TAG_NAME, target);
newTag.setValue(TaskToTagMetadata.TAG_NAME, target);
metadataService.save(newTag);
} // else already exists for some weird reason
} finally {

@ -46,16 +46,16 @@ public class TagCustomFilterCriteriaExposer extends BroadcastReceiver {
for(int i = 0; i < tags.length; i++)
tagNames[i] = tags[i].tag;
ContentValues values = new ContentValues();
values.put(Metadata.KEY.name, TagMetadata.KEY);
values.put(TagMetadata.TAG_NAME.name, "?");
values.put(Metadata.KEY.name, TaskToTagMetadata.KEY);
values.put(TaskToTagMetadata.TAG_NAME.name, "?");
CustomFilterCriterion criterion = new MultipleSelectCriterion(
IDENTIFIER_TAG_IS,
context.getString(R.string.CFC_tag_text),
Query.select(Metadata.TASK).from(Metadata.TABLE).join(Join.inner(
Task.TABLE, Metadata.TASK.eq(Task.ID))).where(Criterion.and(
TaskDao.TaskCriteria.activeAndVisible(),
MetadataDao.MetadataCriteria.withKey(TagMetadata.KEY),
TagMetadata.TAG_NAME.eq("?"))).toString(),
MetadataDao.MetadataCriteria.withKey(TaskToTagMetadata.KEY),
TaskToTagMetadata.TAG_NAME.eq("?"))).toString(),
values, tagNames, tagNames,
((BitmapDrawable)r.getDrawable(TagService.getDefaultImageIDForTag(RemoteModel.NO_UUID))).getBitmap(),
context.getString(R.string.CFC_tag_name));
@ -70,8 +70,8 @@ public class TagCustomFilterCriteriaExposer extends BroadcastReceiver {
Query.select(Metadata.TASK).from(Metadata.TABLE).join(Join.inner(
Task.TABLE, Metadata.TASK.eq(Task.ID))).where(Criterion.and(
TaskDao.TaskCriteria.activeAndVisible(),
MetadataDao.MetadataCriteria.withKey(TagMetadata.KEY),
TagMetadata.TAG_NAME.like("%?%"))).toString(),
MetadataDao.MetadataCriteria.withKey(TaskToTagMetadata.KEY),
TaskToTagMetadata.TAG_NAME.like("%?%"))).toString(),
null, context.getString(R.string.CFC_tag_contains_name), "",
((BitmapDrawable)r.getDrawable(TagService.getDefaultImageIDForTag(RemoteModel.NO_UUID))).getBitmap(),
context.getString(R.string.CFC_tag_contains_name));

@ -72,9 +72,9 @@ public class TagFilterExposer extends BroadcastReceiver implements AstridFilterE
return null;
QueryTemplate tagTemplate = tag.queryTemplate(criterion);
ContentValues contentValues = new ContentValues();
contentValues.put(Metadata.KEY.name, TagMetadata.KEY);
contentValues.put(TagMetadata.TAG_NAME.name, tag.tag);
contentValues.put(TagMetadata.TAG_UUID.name, tag.uuid.toString());
contentValues.put(Metadata.KEY.name, TaskToTagMetadata.KEY);
contentValues.put(TaskToTagMetadata.TAG_NAME.name, tag.tag);
contentValues.put(TaskToTagMetadata.TAG_UUID.name, tag.uuid.toString());
FilterWithUpdate filter = new FilterWithUpdate(tag.tag,
title, tagTemplate,

@ -0,0 +1,12 @@
package com.todoroo.astrid.tags;
import com.todoroo.andlib.data.Property.StringProperty;
import com.todoroo.astrid.data.TagMetadata;
public class TagMemberMetadata {
public static final String KEY = "tag-members"; //$NON-NLS-1$
public static final StringProperty USER_UUID = new StringProperty(
TagMetadata.TABLE, TagMetadata.VALUE1.name);
}

@ -93,7 +93,7 @@ public final class TagService {
* Property for retrieving count of aggregated rows
*/
private static final CountProperty COUNT = new CountProperty();
public static final Order GROUPED_TAGS_BY_ALPHA = Order.asc(Functions.upper(TagMetadata.TAG_NAME));
public static final Order GROUPED_TAGS_BY_ALPHA = Order.asc(Functions.upper(TaskToTagMetadata.TAG_NAME));
public static final Order GROUPED_TAGS_BY_SIZE = Order.desc(COUNT);
/**
@ -152,11 +152,11 @@ public final class TagService {
*/
public QueryTemplate queryTemplate(Criterion criterion) {
Criterion fullCriterion = Criterion.and(
Field.field("mtags." + Metadata.KEY.name).eq(TagMetadata.KEY),
Field.field("mtags." + TagMetadata.TAG_UUID.name).eq(uuid),
Field.field("mtags." + Metadata.KEY.name).eq(TaskToTagMetadata.KEY),
Field.field("mtags." + TaskToTagMetadata.TAG_UUID.name).eq(uuid),
Field.field("mtags." + Metadata.DELETION_DATE.name).eq(0),
criterion);
return new QueryTemplate().join(Join.inner(Metadata.TABLE.as("mtags"), Task.UUID.eq(Field.field("mtags." + TagMetadata.TASK_UUID.name))))
return new QueryTemplate().join(Join.inner(Metadata.TABLE.as("mtags"), Task.UUID.eq(Field.field("mtags." + TaskToTagMetadata.TASK_UUID.name))))
.where(fullCriterion);
}
@ -165,13 +165,13 @@ public final class TagService {
@Deprecated
private static Criterion tagEq(String tag, Criterion additionalCriterion) {
return Criterion.and(
MetadataCriteria.withKey(TagMetadata.KEY), TagMetadata.TAG_NAME.eq(tag),
MetadataCriteria.withKey(TaskToTagMetadata.KEY), TaskToTagMetadata.TAG_NAME.eq(tag),
additionalCriterion);
}
public static Criterion tagEqIgnoreCase(String tag, Criterion additionalCriterion) {
return Criterion.and(
MetadataCriteria.withKey(TagMetadata.KEY), TagMetadata.TAG_NAME.eqCaseInsensitive(tag),
MetadataCriteria.withKey(TaskToTagMetadata.KEY), TaskToTagMetadata.TAG_NAME.eqCaseInsensitive(tag),
additionalCriterion);
}
@ -179,8 +179,8 @@ public final class TagService {
String[] emergentTags = getEmergentTagIds();
return new QueryTemplate().where(Criterion.and(
Criterion.not(Task.UUID.in(Query.select(TagMetadata.TASK_UUID).from(Metadata.TABLE)
.where(Criterion.and(MetadataCriteria.withKey(TagMetadata.KEY), Metadata.DELETION_DATE.eq(0), Criterion.not(TagMetadata.TAG_UUID.in(emergentTags)))))),
Criterion.not(Task.UUID.in(Query.select(TaskToTagMetadata.TASK_UUID).from(Metadata.TABLE)
.where(Criterion.and(MetadataCriteria.withKey(TaskToTagMetadata.KEY), Metadata.DELETION_DATE.eq(0), Criterion.not(TaskToTagMetadata.TAG_UUID.in(emergentTags)))))),
TaskCriteria.isActive(),
TaskApiDao.TaskCriteria.ownedByMe(),
TaskCriteria.isVisible()));
@ -197,19 +197,19 @@ public final class TagService {
public Tag[] getGroupedTags(Order order, Criterion activeStatus, boolean includeEmergent) {
Criterion criterion;
if (includeEmergent)
criterion = Criterion.and(activeStatus, MetadataCriteria.withKey(TagMetadata.KEY));
criterion = Criterion.and(activeStatus, MetadataCriteria.withKey(TaskToTagMetadata.KEY));
else
criterion = Criterion.and(activeStatus, MetadataCriteria.withKey(TagMetadata.KEY), Criterion.not(TagMetadata.TAG_UUID.in(getEmergentTagIds())));
Query query = Query.select(TagMetadata.TAG_NAME, TagMetadata.TAG_UUID, COUNT).
criterion = Criterion.and(activeStatus, MetadataCriteria.withKey(TaskToTagMetadata.KEY), Criterion.not(TaskToTagMetadata.TAG_UUID.in(getEmergentTagIds())));
Query query = Query.select(TaskToTagMetadata.TAG_NAME, TaskToTagMetadata.TAG_UUID, COUNT).
join(Join.inner(Task.TABLE, Metadata.TASK.eq(Task.ID))).
where(criterion).
orderBy(order).groupBy(TagMetadata.TAG_NAME);
orderBy(order).groupBy(TaskToTagMetadata.TAG_NAME);
TodorooCursor<Metadata> cursor = metadataDao.query(query);
try {
ArrayList<Tag> array = new ArrayList<Tag>();
for (int i = 0; i < cursor.getCount(); i++) {
cursor.moveToNext();
Tag tag = Tag.tagFromUUID(cursor.get(TagMetadata.TAG_UUID));
Tag tag = Tag.tagFromUUID(cursor.get(TaskToTagMetadata.TAG_UUID));
if (tag != null)
array.add(tag);
}
@ -258,9 +258,9 @@ public final class TagService {
}
public void createLink(Task task, String tagName, String tagUuid) {
Metadata link = TagMetadata.newTagMetadata(task.getId(), task.getUuid(), tagName, tagUuid);
if (metadataDao.update(Criterion.and(MetadataCriteria.byTaskAndwithKey(task.getId(), TagMetadata.KEY),
TagMetadata.TASK_UUID.eq(task.getValue(Task.UUID)), TagMetadata.TAG_UUID.eq(tagUuid)), link) <= 0) {
Metadata link = TaskToTagMetadata.newTagMetadata(task.getId(), task.getUuid(), tagName, tagUuid);
if (metadataDao.update(Criterion.and(MetadataCriteria.byTaskAndwithKey(task.getId(), TaskToTagMetadata.KEY),
TaskToTagMetadata.TASK_UUID.eq(task.getValue(Task.UUID)), TaskToTagMetadata.TAG_UUID.eq(tagUuid)), link) <= 0) {
metadataDao.createNew(link);
}
}
@ -282,11 +282,11 @@ public final class TagService {
name = tagData.getValue(TagData.NAME);
}
Metadata link = TagMetadata.newTagMetadata(taskId, taskUuid, name, tagUuid);
Metadata link = TaskToTagMetadata.newTagMetadata(taskId, taskUuid, name, tagUuid);
if (suppressOutstanding)
link.putTransitory(SyncFlags.ACTFM_SUPPRESS_OUTSTANDING_ENTRIES, true);
if (metadataDao.update(Criterion.and(MetadataCriteria.byTaskAndwithKey(taskId, TagMetadata.KEY),
TagMetadata.TASK_UUID.eq(taskUuid), TagMetadata.TAG_UUID.eq(tagUuid)), link) <= 0) {
if (metadataDao.update(Criterion.and(MetadataCriteria.byTaskAndwithKey(taskId, TaskToTagMetadata.KEY),
TaskToTagMetadata.TASK_UUID.eq(taskUuid), TaskToTagMetadata.TAG_UUID.eq(tagUuid)), link) <= 0) {
if (suppressOutstanding)
link.putTransitory(SyncFlags.ACTFM_SUPPRESS_OUTSTANDING_ENTRIES, true);
metadataDao.createNew(link);
@ -307,10 +307,10 @@ public final class TagService {
if (suppressOutstanding)
deleteTemplate.putTransitory(SyncFlags.ACTFM_SUPPRESS_OUTSTANDING_ENTRIES, true);
deleteTemplate.setValue(Metadata.TASK, taskId); // Need this for recording changes in outstanding table
deleteTemplate.setValue(TagMetadata.TAG_UUID, tagUuid); // Need this for recording changes in outstanding table
deleteTemplate.setValue(TaskToTagMetadata.TAG_UUID, tagUuid); // Need this for recording changes in outstanding table
deleteTemplate.setValue(Metadata.DELETION_DATE, DateUtilities.now());
metadataDao.update(Criterion.and(MetadataCriteria.withKey(TagMetadata.KEY), Metadata.DELETION_DATE.eq(0),
TagMetadata.TASK_UUID.eq(taskUuid), TagMetadata.TAG_UUID.eq(tagUuid)), deleteTemplate);
metadataDao.update(Criterion.and(MetadataCriteria.withKey(TaskToTagMetadata.KEY), Metadata.DELETION_DATE.eq(0),
TaskToTagMetadata.TASK_UUID.eq(taskUuid), TaskToTagMetadata.TAG_UUID.eq(tagUuid)), deleteTemplate);
}
/**
@ -326,11 +326,11 @@ public final class TagService {
for (String uuid : tagUuids) {
// TODO: Right now this is in a loop because each deleteTemplate needs the individual tagUuid in order to record
// the outstanding entry correctly. If possible, this should be improved to a single query
deleteTemplate.setValue(TagMetadata.TAG_UUID, uuid); // Need this for recording changes in outstanding table
deleteTemplate.setValue(TaskToTagMetadata.TAG_UUID, uuid); // Need this for recording changes in outstanding table
if (suppressOutstanding)
deleteTemplate.putTransitory(SyncFlags.ACTFM_SUPPRESS_OUTSTANDING_ENTRIES, true);
metadataDao.update(Criterion.and(MetadataCriteria.withKey(TagMetadata.KEY), Metadata.DELETION_DATE.eq(0),
TagMetadata.TASK_UUID.eq(taskUuid), TagMetadata.TAG_UUID.eq(uuid)), deleteTemplate);
metadataDao.update(Criterion.and(MetadataCriteria.withKey(TaskToTagMetadata.KEY), Metadata.DELETION_DATE.eq(0),
TaskToTagMetadata.TASK_UUID.eq(taskUuid), TaskToTagMetadata.TAG_UUID.eq(uuid)), deleteTemplate);
}
}
}
@ -344,21 +344,21 @@ public final class TagService {
public TodorooCursor<Metadata> getTags(long taskId, boolean includeEmergent) {
Criterion criterion;
if (includeEmergent)
criterion = Criterion.and(MetadataCriteria.withKey(TagMetadata.KEY),
criterion = Criterion.and(MetadataCriteria.withKey(TaskToTagMetadata.KEY),
Metadata.DELETION_DATE.eq(0),
MetadataCriteria.byTask(taskId));
else
criterion = Criterion.and(MetadataCriteria.withKey(TagMetadata.KEY),
criterion = Criterion.and(MetadataCriteria.withKey(TaskToTagMetadata.KEY),
Metadata.DELETION_DATE.eq(0),
MetadataCriteria.byTask(taskId), Criterion.not(TagMetadata.TAG_UUID.in(getEmergentTagIds())));
Query query = Query.select(TagMetadata.TAG_NAME, TagMetadata.TAG_UUID).where(criterion).orderBy(Order.asc(Functions.upper(TagMetadata.TAG_NAME)));
MetadataCriteria.byTask(taskId), Criterion.not(TaskToTagMetadata.TAG_UUID.in(getEmergentTagIds())));
Query query = Query.select(TaskToTagMetadata.TAG_NAME, TaskToTagMetadata.TAG_UUID).where(criterion).orderBy(Order.asc(Functions.upper(TaskToTagMetadata.TAG_NAME)));
return metadataDao.query(query);
}
public TodorooCursor<TagData> getTagDataForTask(long taskId, boolean includeEmergent, Property<?>... properties) {
Criterion criterion = TagData.UUID.in(Query.select(TagMetadata.TAG_UUID)
Criterion criterion = TagData.UUID.in(Query.select(TaskToTagMetadata.TAG_UUID)
.from(Metadata.TABLE)
.where(Criterion.and(MetadataCriteria.withKey(TagMetadata.KEY),
.where(Criterion.and(MetadataCriteria.withKey(TaskToTagMetadata.KEY),
Metadata.DELETION_DATE.eq(0),
Metadata.TASK.eq(taskId))));
if (!includeEmergent)
@ -368,9 +368,9 @@ public final class TagService {
}
public TodorooCursor<TagData> getTagDataForTask(long taskId, Criterion additionalCriterion, Property<?>... properties) {
Criterion criterion = TagData.UUID.in(Query.select(TagMetadata.TAG_UUID).from(Metadata.TABLE).where(
Criterion criterion = TagData.UUID.in(Query.select(TaskToTagMetadata.TAG_UUID).from(Metadata.TABLE).where(
Criterion.and(Metadata.DELETION_DATE.eq(0),
MetadataCriteria.byTaskAndwithKey(taskId, TagMetadata.KEY))));
MetadataCriteria.byTaskAndwithKey(taskId, TaskToTagMetadata.KEY))));
return tagDataService.query(Query.select(properties).where(Criterion.and(criterion, additionalCriterion)));
}
@ -399,7 +399,7 @@ public final class TagService {
for (int i = 0; i < length; i++) {
tags.moveToNext();
metadata.readFromCursor(tags);
tagBuilder.append(metadata.getValue(TagMetadata.TAG_NAME));
tagBuilder.append(metadata.getValue(TaskToTagMetadata.TAG_NAME));
if (i < length - 1)
tagBuilder.append(separator);
}
@ -492,11 +492,11 @@ public final class TagService {
public boolean synchronizeTags(long taskId, String taskUuid, Set<String> tags) {
HashSet<String> existingLinks = new HashSet<String>();
TodorooCursor<Metadata> links = metadataDao.query(Query.select(Metadata.PROPERTIES)
.where(Criterion.and(TagMetadata.TASK_UUID.eq(taskUuid), Metadata.DELETION_DATE.eq(0))));
.where(Criterion.and(TaskToTagMetadata.TASK_UUID.eq(taskUuid), Metadata.DELETION_DATE.eq(0))));
try {
for (links.moveToFirst(); !links.isAfterLast(); links.moveToNext()) {
Metadata link = new Metadata(links);
existingLinks.add(link.getValue(TagMetadata.TAG_UUID));
existingLinks.add(link.getValue(TaskToTagMetadata.TAG_UUID));
}
} finally {
links.close();
@ -512,7 +512,7 @@ public final class TagService {
if (existingLinks.contains(tagData.getValue(TagData.UUID))) {
existingLinks.remove(tagData.getValue(TagData.UUID));
} else {
Metadata newLink = TagMetadata.newTagMetadata(taskId, taskUuid, tag, tagData.getValue(TagData.UUID));
Metadata newLink = TaskToTagMetadata.newTagMetadata(taskId, taskUuid, tag, tagData.getValue(TagData.UUID));
metadataDao.createNew(newLink);
}
}
@ -532,12 +532,12 @@ public final class TagService {
public String getTagWithCase(String tag) {
MetadataService service = PluginServices.getMetadataService();
String tagWithCase = tag;
TodorooCursor<Metadata> tagMetadata = service.query(Query.select(TagMetadata.TAG_NAME).where(TagService.tagEqIgnoreCase(tag, Criterion.all)).limit(1));
TodorooCursor<Metadata> tagMetadata = service.query(Query.select(TaskToTagMetadata.TAG_NAME).where(TagService.tagEqIgnoreCase(tag, Criterion.all)).limit(1));
try {
if (tagMetadata.getCount() > 0) {
tagMetadata.moveToFirst();
Metadata tagMatch = new Metadata(tagMetadata);
tagWithCase = tagMatch.getValue(TagMetadata.TAG_NAME);
tagWithCase = tagMatch.getValue(TaskToTagMetadata.TAG_NAME);
} else {
TodorooCursor<TagData> tagData = tagDataService.query(Query.select(TagData.NAME).where(TagData.NAME.eqCaseInsensitive(tag)));
try {
@ -595,7 +595,7 @@ public final class TagService {
// Then rename all instances of oldTag to newTag.
Metadata metadata = new Metadata();
metadata.setValue(TagMetadata.TAG_NAME, newTag);
metadata.setValue(TaskToTagMetadata.TAG_NAME, newTag);
int ret;
if (caseSensitive)
ret = metadataService.update(tagEq(oldTag, Criterion.all), metadata);

@ -232,7 +232,7 @@ public final class TagsControlSet extends PopupControlSet {
LinkedHashSet<String> tags = new LinkedHashSet<String>(cursor.getCount());
try {
for(cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {
String tag = cursor.get(TagMetadata.TAG_NAME);
String tag = cursor.get(TaskToTagMetadata.TAG_NAME);
tags.add(tag);
}
} finally {

@ -3,7 +3,7 @@ package com.todoroo.astrid.tags;
import com.todoroo.andlib.data.Property.StringProperty;
import com.todoroo.astrid.data.Metadata;
public class TagMetadata {
public class TaskToTagMetadata {
/** Metadata key for tag data */
public static final String KEY = "tags-tag"; //$NON-NLS-1$

@ -26,7 +26,7 @@ import com.todoroo.astrid.data.Metadata;
import com.todoroo.astrid.data.TagData;
import com.todoroo.astrid.data.TaskApiDao.TaskCriteria;
import com.todoroo.astrid.tags.TagFilterExposer;
import com.todoroo.astrid.tags.TagMetadata;
import com.todoroo.astrid.tags.TaskToTagMetadata;
import com.todoroo.astrid.tags.TagService;
import com.todoroo.astrid.tags.TagService.Tag;
@ -48,9 +48,9 @@ public class FeaturedListFilterExposer extends TagFilterExposer {
String title = tag.tag;
QueryTemplate tagTemplate = tag.queryTemplate(criterion);
ContentValues contentValues = new ContentValues();
contentValues.put(Metadata.KEY.name, TagMetadata.KEY);
contentValues.put(TagMetadata.TAG_NAME.name, tag.tag);
contentValues.put(TagMetadata.TAG_UUID.name, tag.uuid.toString());
contentValues.put(Metadata.KEY.name, TaskToTagMetadata.KEY);
contentValues.put(TaskToTagMetadata.TAG_NAME.name, tag.tag);
contentValues.put(TaskToTagMetadata.TAG_UUID.name, tag.uuid.toString());
FilterWithUpdate filter = new FilterWithUpdate(tag.tag,
title, tagTemplate,

@ -101,7 +101,7 @@ import com.todoroo.astrid.service.ThemeService;
import com.todoroo.astrid.service.UpgradeService;
import com.todoroo.astrid.subtasks.SubtasksListFragment;
import com.todoroo.astrid.sync.SyncProviderPreferences;
import com.todoroo.astrid.tags.TagMetadata;
import com.todoroo.astrid.tags.TaskToTagMetadata;
import com.todoroo.astrid.tags.TagService;
import com.todoroo.astrid.taskrabbit.TaskRabbitMetadata;
import com.todoroo.astrid.timers.TimerPlugin;
@ -951,15 +951,15 @@ public class TaskListFragment extends ListFragment implements OnScrollListener,
tagName = getActiveTagData().getValue(TagData.NAME);
String[] emergentTagIds = TagService.getInstance().getEmergentTagIds();
StringProperty tagProperty = new StringProperty(null, TAGS_METADATA_JOIN + "." + TagMetadata.TAG_UUID.name);
StringProperty tagProperty = new StringProperty(null, TAGS_METADATA_JOIN + "." + TaskToTagMetadata.TAG_UUID.name);
Criterion tagsJoinCriterion = Criterion.and(
Field.field(TAGS_METADATA_JOIN + "." + Metadata.KEY.name).eq(TagMetadata.KEY), //$NON-NLS-1$
Field.field(TAGS_METADATA_JOIN + "." + Metadata.KEY.name).eq(TaskToTagMetadata.KEY), //$NON-NLS-1$
Field.field(TAGS_METADATA_JOIN + "." + Metadata.DELETION_DATE.name).eq(0),
Task.ID.eq(Field.field(TAGS_METADATA_JOIN + "." + Metadata.TASK.name)),
Criterion.not(tagProperty.in(emergentTagIds)));
if (tagName != null)
tagsJoinCriterion = Criterion.and(tagsJoinCriterion, Field.field(TAGS_METADATA_JOIN + "." + TagMetadata.TAG_NAME.name).neq(tagName));
tagsJoinCriterion = Criterion.and(tagsJoinCriterion, Field.field(TAGS_METADATA_JOIN + "." + TaskToTagMetadata.TAG_NAME.name).neq(tagName));
// TODO: For now, we'll modify the query to join and include the task rabbit and tag data here.
// Eventually, we might consider restructuring things so that this query is constructed elsewhere.

@ -91,7 +91,7 @@ import com.todoroo.astrid.notes.NotesAction;
import com.todoroo.astrid.notes.NotesDecorationExposer;
import com.todoroo.astrid.service.TaskService;
import com.todoroo.astrid.service.ThemeService;
import com.todoroo.astrid.tags.TagMetadata;
import com.todoroo.astrid.tags.TaskToTagMetadata;
import com.todoroo.astrid.timers.TimerDecorationExposer;
import com.todoroo.astrid.ui.CheckableImageView;
import com.todoroo.astrid.utility.Constants;
@ -116,7 +116,7 @@ public class TaskAdapter extends CursorAdapter implements Filterable {
Metadata.ID.name).as("taskRabId"); //$NON-NLS-1$
@SuppressWarnings("nls")
private static final StringProperty TAGS = new StringProperty(null, "group_concat(" + TaskListFragment.TAGS_METADATA_JOIN + "." + TagMetadata.TAG_NAME.name + ", ' | ')").as("tags");
private static final StringProperty TAGS = new StringProperty(null, "group_concat(" + TaskListFragment.TAGS_METADATA_JOIN + "." + TaskToTagMetadata.TAG_NAME.name + ", ' | ')").as("tags");
// --- other constants

@ -18,6 +18,7 @@ import com.todoroo.astrid.data.ABTestEvent;
import com.todoroo.astrid.data.Metadata;
import com.todoroo.astrid.data.StoreObject;
import com.todoroo.astrid.data.TagData;
import com.todoroo.astrid.data.TagMetadata;
import com.todoroo.astrid.data.TagOutstanding;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.data.TaskOutstanding;
@ -61,6 +62,7 @@ public class Database extends AbstractDatabase {
Update.TABLE,
User.TABLE,
ABTestEvent.TABLE,
TagMetadata.TABLE,
TaskOutstanding.TABLE,
TagOutstanding.TABLE,
@ -358,6 +360,7 @@ public class Database extends AbstractDatabase {
case 28: try {
database.execSQL(createTableSql(visitor, TaskOutstanding.TABLE.name, TaskOutstanding.PROPERTIES));
database.execSQL(createTableSql(visitor, TagOutstanding.TABLE.name, TagOutstanding.PROPERTIES));
database.execSQL(createTableSql(visitor, TagMetadata.TABLE.name, TagMetadata.PROPERTIES));
database.execSQL(addColumnSql(Task.TABLE, Task.PUSHED_AT, visitor, null));
database.execSQL(addColumnSql(Task.TABLE, Task.UUID, visitor, null));

@ -28,7 +28,7 @@ import com.todoroo.astrid.data.TaskOutstanding;
import com.todoroo.astrid.provider.Astrid2TaskProvider;
import com.todoroo.astrid.service.StatisticsConstants;
import com.todoroo.astrid.service.StatisticsService;
import com.todoroo.astrid.tags.TagMetadata;
import com.todoroo.astrid.tags.TaskToTagMetadata;
import com.todoroo.astrid.utility.AstridPreferences;
/**
@ -78,7 +78,7 @@ public class MetadataDao extends DatabaseDao<Metadata> {
ContentValues cv = item.getSetValues();
return super.shouldRecordOutstanding(item) && cv != null &&
((cv.containsKey(Metadata.KEY.name) &&
TagMetadata.KEY.equals(item.getValue(Metadata.KEY))) ||
TaskToTagMetadata.KEY.equals(item.getValue(Metadata.KEY))) ||
(cv.containsKey(Metadata.DELETION_DATE.name) &&
item.getValue(Metadata.DELETION_DATE) > 0));
}
@ -86,7 +86,7 @@ public class MetadataDao extends DatabaseDao<Metadata> {
@Override
protected boolean createOutstandingEntries(long modelId, ContentValues modelSetValues) {
Long taskId = modelSetValues.getAsLong(Metadata.TASK.name);
String tagUuid = modelSetValues.getAsString(TagMetadata.TAG_UUID.name);
String tagUuid = modelSetValues.getAsString(TaskToTagMetadata.TAG_UUID.name);
Long deletionDate = modelSetValues.getAsLong(Metadata.DELETION_DATE.name);
if (taskId == null || taskId == AbstractModel.NO_ID || RemoteModel.isUuidEmpty(tagUuid))
return false;
@ -113,7 +113,7 @@ public class MetadataDao extends DatabaseDao<Metadata> {
boolean state = super.persist(item);
if(Preferences.getBoolean(AstridPreferences.P_FIRST_LIST, true)) {
if (state && item.containsNonNullValue(Metadata.KEY) &&
item.getValue(Metadata.KEY).equals(TagMetadata.KEY)) {
item.getValue(Metadata.KEY).equals(TaskToTagMetadata.KEY)) {
StatisticsService.reportEvent(StatisticsConstants.USER_FIRST_LIST);
Preferences.setBoolean(AstridPreferences.P_FIRST_LIST, false);
}

@ -47,7 +47,7 @@ import com.todoroo.astrid.legacy.LegacyAlertModel;
import com.todoroo.astrid.legacy.LegacyRepeatInfo;
import com.todoroo.astrid.legacy.LegacyTaskModel;
import com.todoroo.astrid.legacy.TransitionalAlarm;
import com.todoroo.astrid.tags.TagMetadata;
import com.todoroo.astrid.tags.TaskToTagMetadata;
public class Astrid2To3UpgradeHelper {
@ -400,7 +400,7 @@ public class Astrid2To3UpgradeHelper {
return;
Metadata metadata = new Metadata();
metadata.setValue(Metadata.KEY, TagMetadata.KEY);
metadata.setValue(Metadata.KEY, TaskToTagMetadata.KEY);
long tagId = -1;
String tag = null;
for(mapCursor.moveToFirst(); !mapCursor.isAfterLast(); mapCursor.moveToNext()) {
@ -417,8 +417,8 @@ public class Astrid2To3UpgradeHelper {
tag = tagCursor.getString(1);
long task = mapCursor.getLong(1);
metadata.setValue(Metadata.TASK, task);
metadata.setValue(Metadata.KEY, TagMetadata.KEY);
metadata.setValue(TagMetadata.TAG_NAME, tag);
metadata.setValue(Metadata.KEY, TaskToTagMetadata.KEY);
metadata.setValue(TaskToTagMetadata.TAG_NAME, tag);
metadataDao.createNew(metadata);
metadata.clearValue(Metadata.ID);
}

@ -67,7 +67,7 @@ import com.todoroo.astrid.service.abtesting.ABChooser;
import com.todoroo.astrid.service.abtesting.ABTestInvoker;
import com.todoroo.astrid.service.abtesting.ABTests;
import com.todoroo.astrid.subtasks.SubtasksMetadata;
import com.todoroo.astrid.tags.TagMetadata;
import com.todoroo.astrid.tags.TaskToTagMetadata;
import com.todoroo.astrid.ui.TaskListFragmentPager;
import com.todoroo.astrid.utility.AstridPreferences;
import com.todoroo.astrid.utility.Constants;
@ -274,9 +274,9 @@ public class StartupService {
Metadata m = new Metadata();
if (values != null) {
if (values.containsKey(TagData.NAME.name)) {
m.setValue(TagMetadata.TAG_NAME, model.getValue(TagData.NAME));
PluginServices.getMetadataService().update(Criterion.and(MetadataCriteria.withKey(TagMetadata.KEY),
TagMetadata.TAG_UUID.eq(model.getValue(TagData.UUID))), m);
m.setValue(TaskToTagMetadata.TAG_NAME, model.getValue(TagData.NAME));
PluginServices.getMetadataService().update(Criterion.and(MetadataCriteria.withKey(TaskToTagMetadata.KEY),
TaskToTagMetadata.TAG_UUID.eq(model.getValue(TagData.UUID))), m);
}
}
}

@ -39,7 +39,7 @@ import com.todoroo.astrid.gcal.GCalHelper;
import com.todoroo.astrid.gtasks.GtasksMetadata;
import com.todoroo.astrid.opencrx.OpencrxCoreUtils;
import com.todoroo.astrid.producteev.sync.ProducteevTask;
import com.todoroo.astrid.tags.TagMetadata;
import com.todoroo.astrid.tags.TaskToTagMetadata;
import com.todoroo.astrid.tags.TagService;
import com.todoroo.astrid.utility.TitleParser;
@ -550,13 +550,13 @@ public class TaskService {
Metadata metadata = new Metadata();
metadata.setValue(Metadata.TASK, task.getId());
metadata.mergeWith(forMetadata);
if (TagMetadata.KEY.equals(metadata.getValue(Metadata.KEY))) {
if (metadata.containsNonNullValue(TagMetadata.TAG_UUID) && !RemoteModel.NO_UUID.equals(metadata.getValue(TagMetadata.TAG_UUID))) {
if (TaskToTagMetadata.KEY.equals(metadata.getValue(Metadata.KEY))) {
if (metadata.containsNonNullValue(TaskToTagMetadata.TAG_UUID) && !RemoteModel.NO_UUID.equals(metadata.getValue(TaskToTagMetadata.TAG_UUID))) {
// This is more efficient
TagService.getInstance().createLink(task, metadata.getValue(TagMetadata.TAG_NAME), metadata.getValue(TagMetadata.TAG_UUID));
TagService.getInstance().createLink(task, metadata.getValue(TaskToTagMetadata.TAG_NAME), metadata.getValue(TaskToTagMetadata.TAG_UUID));
} else {
// This is necessary for backwards compatibility
TagService.getInstance().createLink(task, metadata.getValue(TagMetadata.TAG_NAME));
TagService.getInstance().createLink(task, metadata.getValue(TaskToTagMetadata.TAG_NAME));
}
} else {
PluginServices.getMetadataService().save(metadata);

@ -18,7 +18,7 @@ import com.todoroo.astrid.data.Metadata;
import com.todoroo.astrid.data.RemoteModel;
import com.todoroo.astrid.data.TagData;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.tags.TagMetadata;
import com.todoroo.astrid.tags.TaskToTagMetadata;
public class AstridNewSyncMigrationTest extends NewSyncTestCase {
@ -47,44 +47,44 @@ public class AstridNewSyncMigrationTest extends NewSyncTestCase {
}
Metadata m = new Metadata();
m.setValue(Metadata.KEY, TagMetadata.KEY);
m.setValue(Metadata.KEY, TaskToTagMetadata.KEY);
m.setValue(Metadata.TASK, 1L);
m.setValue(TagMetadata.TAG_NAME, "Tag 1");
m.setValue(TaskToTagMetadata.TAG_NAME, "Tag 1");
metadataDao.createNew(m);
m.clear();
m.setValue(Metadata.KEY, TagMetadata.KEY);
m.setValue(Metadata.KEY, TaskToTagMetadata.KEY);
m.setValue(Metadata.TASK, 2L);
m.setValue(TagMetadata.TAG_NAME, "New tag");
m.setValue(TaskToTagMetadata.TAG_NAME, "New tag");
metadataDao.createNew(m);
m.clear();
m.setValue(Metadata.KEY, TagMetadata.KEY);
m.setValue(Metadata.KEY, TaskToTagMetadata.KEY);
m.setValue(Metadata.TASK, 3L);
m.setValue(TagMetadata.TAG_NAME, "Tag 3");
m.setValue(TaskToTagMetadata.TAG_NAME, "Tag 3");
metadataDao.createNew(m);
m.clear();
m.setValue(Metadata.KEY, TagMetadata.KEY);
m.setValue(Metadata.KEY, TaskToTagMetadata.KEY);
m.setValue(Metadata.TASK, 3L);
m.setValue(TagMetadata.TAG_NAME, "Tag 4");
m.setValue(TaskToTagMetadata.TAG_NAME, "Tag 4");
metadataDao.createNew(m);
m.clear();
m.setValue(Metadata.KEY, TagMetadata.KEY);
m.setValue(Metadata.KEY, TaskToTagMetadata.KEY);
m.setValue(Metadata.TASK, 5L);
m.setValue(TagMetadata.TAG_NAME, "Tag 1");
m.setValue(TaskToTagMetadata.TAG_NAME, "Tag 1");
metadataDao.createNew(m);
m.clear();
m.setValue(Metadata.KEY, TagMetadata.KEY);
m.setValue(Metadata.KEY, TaskToTagMetadata.KEY);
m.setValue(Metadata.TASK, 5L);
m.setValue(TagMetadata.TAG_NAME, "Tag 5");
m.setValue(TaskToTagMetadata.TAG_NAME, "Tag 5");
metadataDao.createNew(m);
m.setValue(Metadata.KEY, TagMetadata.KEY);
m.setValue(Metadata.KEY, TaskToTagMetadata.KEY);
m.setValue(Metadata.TASK, 5L);
m.setValue(TagMetadata.TAG_NAME, "New tag 2");
m.setValue(TaskToTagMetadata.TAG_NAME, "New tag 2");
metadataDao.createNew(m);
// State (task: tags)
@ -138,15 +138,15 @@ public class AstridNewSyncMigrationTest extends NewSyncTestCase {
private void assertAllMetadataHasAllFields() {
TodorooCursor<Metadata> tagMetadata = metadataDao.query(Query.select(Metadata.PROPERTIES)
.where(MetadataCriteria.withKey(TagMetadata.KEY)));
.where(MetadataCriteria.withKey(TaskToTagMetadata.KEY)));
try {
assertEquals(tagMetadata.getCount(), 7);
Metadata m = new Metadata();
for (tagMetadata.moveToFirst(); !tagMetadata.isAfterLast(); tagMetadata.moveToNext()) {
m.readFromCursor(tagMetadata);
assertTrue(!TextUtils.isEmpty(m.getValue(TagMetadata.TAG_NAME)));
assertTrue(!RemoteModel.NO_UUID.equals(m.getValue(TagMetadata.TASK_UUID)));
assertTrue(!RemoteModel.NO_UUID.equals(m.getValue(TagMetadata.TAG_UUID)));
assertTrue(!TextUtils.isEmpty(m.getValue(TaskToTagMetadata.TAG_NAME)));
assertTrue(!RemoteModel.NO_UUID.equals(m.getValue(TaskToTagMetadata.TASK_UUID)));
assertTrue(!RemoteModel.NO_UUID.equals(m.getValue(TaskToTagMetadata.TAG_UUID)));
}
} finally {
tagMetadata.close();

Loading…
Cancel
Save