Remove RemoteModel and RemoteModelDao

pull/618/head
Alex Baker 7 years ago
parent afa9622f78
commit 8bc9cadf72

@ -2,7 +2,6 @@ package com.todoroo.astrid.sync;
import android.support.test.runner.AndroidJUnit4;
import com.todoroo.astrid.data.RemoteModel;
import org.tasks.data.TagData;
import com.todoroo.astrid.data.Task;
@ -17,13 +16,13 @@ public class SyncModelTest extends NewSyncTestCase {
@Test
public void testCreateTaskMakesUuid() {
Task task = createTask();
assertFalse(RemoteModel.NO_UUID.equals(task.getUUID()));
assertFalse(Task.NO_UUID.equals(task.getUUID()));
}
@Test
public void testCreateTagMakesUuid() {
TagData tag = createTagData();
assertFalse(RemoteModel.NO_UUID.equals(tag.getRemoteId()));
assertFalse(Task.NO_UUID.equals(tag.getRemoteId()));
}
}

@ -5,7 +5,7 @@ import android.content.ContentValues;
import com.todoroo.andlib.data.Property;
import com.todoroo.andlib.data.Table;
import com.todoroo.astrid.data.RemoteModel;
import com.todoroo.astrid.data.Task;
import java.util.Set;
@ -24,7 +24,7 @@ public class RemoteModelHelpers {
return result;
}
public static void compareRemoteModel(RemoteModel expected, RemoteModel actual) {
public static void compareRemoteModel(Task expected, Task actual) {
compareContentValues(expected.getSetValues(), actual.getSetValues());
compareContentValues(expected.getDatabaseValues(), actual.getDatabaseValues());
}

@ -12,6 +12,7 @@ import com.todoroo.andlib.sql.Criterion;
import com.todoroo.andlib.sql.Query;
import com.todoroo.astrid.dao.Database;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.helper.UUIDHelper;
import org.tasks.BuildConfig;
@ -154,6 +155,10 @@ public class DatabaseDao {
* @return returns true on success.
*/
public boolean createNew(final Task item) {
if (!item.containsValue(Task.UUID) || Task.isUuidEmpty(item.getUuidProperty())) {
item.setUuidProperty(UUIDHelper.newUUID());
}
item.clearValue(AbstractModel.ID_PROPERTY);
DatabaseChangeOp insert = new DatabaseChangeOp() {

@ -18,7 +18,6 @@ import com.todoroo.andlib.data.Property.LongProperty;
import com.todoroo.andlib.data.Property.StringProperty;
import com.todoroo.andlib.data.TodorooCursor;
import com.todoroo.astrid.activity.TaskListFragment;
import com.todoroo.astrid.data.RemoteModel;
import com.todoroo.astrid.data.Task;
import org.tasks.data.TaskAttachment;
@ -127,10 +126,10 @@ public class TaskAdapter extends CursorAdapter implements Filterable {
if (c.moveToPosition(position)) {
return c.get(Task.UUID);
} else {
return RemoteModel.NO_UUID;
return Task.NO_UUID;
}
} else {
return RemoteModel.NO_UUID;
return Task.NO_UUID;
}
}

@ -1,29 +0,0 @@
package com.todoroo.astrid.dao;
import com.todoroo.andlib.data.DatabaseDao;
import com.todoroo.astrid.data.RemoteModel;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.helper.UUIDHelper;
/**
* This class is meant to be subclassed for daos whose models
* require UUID generation (i.e., most RemoteModels). The createNew
* method takes care of automatically generating a new UUID for each newly
* created model if one doesn't already exist.
* @author Sam
*
*/
public class RemoteModelDao extends DatabaseDao {
public RemoteModelDao(Database database) {
super(database);
}
@Override
public boolean createNew(Task item) {
if (!item.containsValue(RemoteModel.UUID_PROPERTY) || RemoteModel.isUuidEmpty(item.getUuidProperty())) {
item.setUuidProperty(UUIDHelper.newUUID());
}
return super.createNew(item);
}
}

@ -11,6 +11,7 @@ import android.content.Context;
import android.database.sqlite.SQLiteConstraintException;
import com.todoroo.andlib.data.AbstractModel;
import com.todoroo.andlib.data.DatabaseDao;
import com.todoroo.andlib.data.Property;
import com.todoroo.andlib.data.TodorooCursor;
import com.todoroo.andlib.sql.Criterion;
@ -19,7 +20,6 @@ import com.todoroo.andlib.sql.Query;
import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.api.PermaSql;
import com.todoroo.astrid.data.RemoteModel;
import com.todoroo.astrid.data.SyncFlags;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.data.TaskApiDao;
@ -49,7 +49,7 @@ public abstract class TaskDao {
public static final String TRANS_SUPPRESS_REFRESH = "suppress-refresh";
private final RemoteModelDao dao;
private final DatabaseDao dao;
private LocalBroadcastManager localBroadcastManager;
private Preferences preferences;
@ -60,7 +60,7 @@ public abstract class TaskDao {
private Context context;
public TaskDao(Database database) {
dao = new RemoteModelDao(database);
dao = new DatabaseDao(database);
}
public void initialize(Context context, Preferences preferences, LocalBroadcastManager localBroadcastManager,
@ -170,13 +170,13 @@ public abstract class TaskDao {
}
public String uuidFromLocalId(long localId) {
TodorooCursor cursor = dao.query(Query.select(RemoteModel.UUID_PROPERTY).where(AbstractModel.ID_PROPERTY.eq(localId)));
TodorooCursor cursor = dao.query(Query.select(Task.UUID).where(AbstractModel.ID_PROPERTY.eq(localId)));
try {
if (cursor.getCount() == 0) {
return RemoteModel.NO_UUID;
return Task.NO_UUID;
}
cursor.moveToFirst();
return cursor.get(RemoteModel.UUID_PROPERTY);
return cursor.get(Task.UUID);
} finally {
cursor.close();
}

@ -1,95 +0,0 @@
/**
* Copyright (c) 2012 Todoroo Inc
*
* See the file "LICENSE" for the full license governing this code.
*/
package com.todoroo.astrid.data;
import android.content.ContentValues;
import android.net.Uri;
import android.text.TextUtils;
import com.todoroo.andlib.data.AbstractModel;
import com.todoroo.andlib.data.Property.StringProperty;
import com.todoroo.andlib.data.TodorooCursor;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.File;
import timber.log.Timber;
/**
* A model that is synchronized to a remote server and has a remote id
*
* @author Tim Su <tim@todoroo.com>
*
*/
abstract public class RemoteModel extends AbstractModel {
RemoteModel() {
super();
}
RemoteModel(TodorooCursor cursor) {
super(cursor);
}
RemoteModel(AbstractModel model) {
super(model);
}
/** remote id property common to all remote models */
static final String UUID_PROPERTY_NAME = "remoteId"; //$NON-NLS-1$
/** remote id property */
public static final StringProperty UUID_PROPERTY = new StringProperty(null, UUID_PROPERTY_NAME);
/** constant value for no uuid */
public static final String NO_UUID = "0"; //$NON-NLS-1$
public static boolean isValidUuid(String uuid) {
try {
long value = Long.parseLong(uuid);
return value > 0;
} catch (NumberFormatException e) {
Timber.e(e, e.getMessage());
return isUuidEmpty(uuid);
}
}
String getUuidHelper(StringProperty uuid) {
if(setValues != null && setValues.containsKey(uuid.name)) {
return setValues.getAsString(uuid.name);
} else if(values != null && values.containsKey(uuid.name)) {
return values.getAsString(uuid.name);
} else {
return NO_UUID;
}
}
public void setUuid(String uuid) {
if (setValues == null) {
setValues = new ContentValues();
}
if(NO_UUID.equals(uuid)) {
clearValue(UUID_PROPERTY);
} else {
setValues.put(UUID_PROPERTY_NAME, uuid);
}
}
public static boolean isUuidEmpty(String uuid) {
return NO_UUID.equals(uuid) || TextUtils.isEmpty(uuid);
}
public String getUuidProperty() {
return getValue(UUID_PROPERTY);
}
public void setUuidProperty(String uuidProperty) {
setValue(UUID_PROPERTY, uuidProperty);
}
}

@ -15,6 +15,7 @@ import android.content.ContentValues;
import android.text.TextUtils;
import com.google.ical.values.RRule;
import com.todoroo.andlib.data.AbstractModel;
import com.todoroo.andlib.data.Property;
import com.todoroo.andlib.data.Property.IntegerProperty;
import com.todoroo.andlib.data.Property.LongProperty;
@ -25,6 +26,8 @@ import com.todoroo.andlib.utility.DateUtilities;
import org.tasks.time.DateTime;
import timber.log.Timber;
import static org.tasks.date.DateTimeUtils.newDateTime;
/**
@ -35,7 +38,7 @@ import static org.tasks.date.DateTimeUtils.newDateTime;
*/
@Entity(tableName = "tasks",
indices = @Index(name = "t_rid", value = "remoteId", unique = true))
public class Task extends RemoteModel {
public class Task extends AbstractModel {
// --- table and uri
@ -162,11 +165,14 @@ public class Task extends RemoteModel {
// --- for astrid.com
/** constant value for no uuid */
public static final String NO_UUID = "0"; //$NON-NLS-1$
/** Remote id */
@ColumnInfo(name = "remoteId")
public String remoteId = RemoteModel.NO_UUID;
public String remoteId = NO_UUID;
public static final StringProperty UUID = new StringProperty(
TABLE, UUID_PROPERTY_NAME, Property.PROP_FLAG_NULLABLE);
TABLE, "remoteId", Property.PROP_FLAG_NULLABLE);
/** List of all properties for this model */
public static final Property<?>[] PROPERTIES = generateProperties(Task.class);
@ -642,4 +648,48 @@ public class Task extends RemoteModel {
public boolean isNew() {
return getId() == NO_ID;
}
public static boolean isValidUuid(String uuid) {
try {
long value = Long.parseLong(uuid);
return value > 0;
} catch (NumberFormatException e) {
Timber.e(e, e.getMessage());
return isUuidEmpty(uuid);
}
}
private String getUuidHelper(StringProperty uuid) {
if(setValues != null && setValues.containsKey(uuid.name)) {
return setValues.getAsString(uuid.name);
} else if(values != null && values.containsKey(uuid.name)) {
return values.getAsString(uuid.name);
} else {
return NO_UUID;
}
}
public void setUuid(String uuid) {
if (setValues == null) {
setValues = new ContentValues();
}
if(NO_UUID.equals(uuid)) {
clearValue(UUID);
} else {
setValues.put(UUID.name, uuid);
}
}
public static boolean isUuidEmpty(String uuid) {
return NO_UUID.equals(uuid) || TextUtils.isEmpty(uuid);
}
public String getUuidProperty() {
return getValue(UUID);
}
public void setUuidProperty(String uuidProperty) {
setValue(UUID, uuidProperty);
}
}

@ -13,7 +13,6 @@ import com.todoroo.astrid.activity.TaskListFragment;
import com.todoroo.astrid.adapter.TaskAdapter;
import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.dao.TaskDao;
import com.todoroo.astrid.data.RemoteModel;
import com.todoroo.astrid.data.Task;
import org.tasks.data.TaskListMetadata;
@ -83,7 +82,7 @@ class AstridOrderedListFragmentHelper {
@Override
public void moved(int from, int to) {
String targetTaskId = taskAdapter.getItemUuid(from);
if (!RemoteModel.isValidUuid(targetTaskId)) {
if (!Task.isValidUuid(targetTaskId)) {
return; // This can happen with gestures on empty parts of the list (e.g. extra space below tasks)
}
String destinationTaskId = taskAdapter.getItemUuid(to);
@ -105,7 +104,7 @@ class AstridOrderedListFragmentHelper {
@Override
public void indented(int which, int delta) {
String targetTaskId = taskAdapter.getItemUuid(which);
if (!RemoteModel.isValidUuid(targetTaskId)) {
if (!Task.isValidUuid(targetTaskId)) {
return; // This can happen with gestures on empty parts of the list (e.g. extra space below tasks)
}
try {

@ -6,7 +6,7 @@ import com.todoroo.andlib.data.TodorooCursor;
import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.dao.TaskDao;
import org.tasks.data.TaskListMetadataDao;
import com.todoroo.astrid.data.RemoteModel;
import com.todoroo.astrid.data.Task;
import org.tasks.data.TaskListMetadata;
@ -383,7 +383,7 @@ public class SubtasksFilterUpdater {
}
void onCreateTask(TaskListMetadata list, Filter filter, String uuid) {
if (idToNode.containsKey(uuid) || !RemoteModel.isValidUuid(uuid)) {
if (idToNode.containsKey(uuid) || !Task.isValidUuid(uuid)) {
return;
}

@ -13,7 +13,6 @@ import com.todoroo.astrid.core.BuiltInFilterExposer;
import org.tasks.data.TagDataDao;
import com.todoroo.astrid.dao.TaskDao;
import org.tasks.data.TaskListMetadataDao;
import com.todoroo.astrid.data.RemoteModel;
import org.tasks.data.TagData;
import com.todoroo.astrid.data.Task;
import org.tasks.data.TaskListMetadata;
@ -146,7 +145,7 @@ public class SubtasksHelper {
Node child = children.get(i);
T key = helper.getKeyFromOldUuid(child.uuid);
String uuid = idMap.get(key);
if (!RemoteModel.isValidUuid(uuid)) {
if (!Task.isValidUuid(uuid)) {
children.remove(i);
children.addAll(i, child.children);
i--;

@ -13,7 +13,6 @@ import com.todoroo.astrid.activity.TaskListFragment;
import com.todoroo.astrid.adapter.TaskAdapter;
import com.todoroo.astrid.api.TagFilter;
import org.tasks.data.TaskListMetadataDao;
import com.todoroo.astrid.data.RemoteModel;
import org.tasks.data.TagData;
import com.todoroo.astrid.data.Task;
import org.tasks.data.TaskListMetadata;
@ -50,7 +49,7 @@ public class SubtasksTagListFragment extends TagListFragment {
public void setTaskAdapter() {
String tdId = tagData.getRemoteId();
TaskListMetadata taskListMetadata = taskListMetadataDao.fetchByTagId(tagData.getRemoteId());
if (taskListMetadata == null && !RemoteModel.isUuidEmpty(tdId)) {
if (taskListMetadata == null && !Task.isUuidEmpty(tdId)) {
taskListMetadata = new TaskListMetadata();
taskListMetadata.setTagUuid(tdId);
taskListMetadataDao.createNew(taskListMetadata);

@ -40,7 +40,6 @@ import com.google.common.collect.Ordering;
import com.google.common.collect.Sets;
import com.todoroo.andlib.utility.DateUtilities;
import org.tasks.data.TagDataDao;
import com.todoroo.astrid.data.RemoteModel;
import org.tasks.data.TagData;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.utility.Flags;
@ -383,7 +382,7 @@ public final class TagsControlSet extends TaskEditControlFragment {
*/
private boolean synchronizeTags(long taskId, String taskUuid) {
for (TagData tagData : selectedTags) {
if (RemoteModel.NO_UUID.equals(tagData.getRemoteId())) {
if (Task.NO_UUID.equals(tagData.getRemoteId())) {
tagDataDao.persist(tagData);
}
}

@ -7,7 +7,7 @@ import android.arch.persistence.room.PrimaryKey;
import android.os.Parcel;
import android.os.Parcelable;
import com.todoroo.astrid.data.RemoteModel;
import com.todoroo.astrid.data.Task;
import org.tasks.backup.XmlReader;
import org.tasks.backup.XmlWriter;
@ -20,7 +20,7 @@ public final class TagData implements Parcelable {
private Long id;
@ColumnInfo(name = "remoteId")
private String remoteId = RemoteModel.NO_UUID;
private String remoteId = Task.NO_UUID;
@ColumnInfo(name = "name")
private String name = "";

@ -5,7 +5,7 @@ import android.arch.persistence.room.Insert;
import android.arch.persistence.room.OnConflictStrategy;
import android.arch.persistence.room.Query;
import com.todoroo.astrid.data.RemoteModel;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.helper.UUIDHelper;
import java.util.List;
@ -39,7 +39,7 @@ public abstract class TagDataDao {
public abstract void insert(TagData tag);
public void createNew(TagData tag) {
if (RemoteModel.isUuidEmpty(tag.getRemoteId())) {
if (Task.isUuidEmpty(tag.getRemoteId())) {
tag.setRemoteId(UUIDHelper.newUUID());
}
insert(tag);

@ -7,7 +7,7 @@ import android.arch.persistence.room.PrimaryKey;
import com.todoroo.andlib.data.Property;
import com.todoroo.andlib.data.Table;
import com.todoroo.astrid.data.RemoteModel;
import com.todoroo.astrid.data.Task;
@Entity(tableName = "task_attachments")
public final class TaskAttachment {
@ -24,10 +24,10 @@ public final class TaskAttachment {
private Long id;
@ColumnInfo(name = "remoteId")
private String remoteId = RemoteModel.NO_UUID;
private String remoteId = Task.NO_UUID;
@ColumnInfo(name = "task_id")
private String taskId = RemoteModel.NO_UUID;
private String taskId = Task.NO_UUID;
@ColumnInfo(name = "name")
private String name = "";

@ -7,7 +7,7 @@ import android.arch.persistence.room.OnConflictStrategy;
import android.arch.persistence.room.Query;
import android.arch.persistence.room.Update;
import com.todoroo.astrid.data.RemoteModel;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.helper.UUIDHelper;
import java.util.List;
@ -28,7 +28,7 @@ public abstract class TaskAttachmentDao {
public abstract void update(TaskAttachment attachment);
public void createNew(TaskAttachment attachment) {
if (RemoteModel.isUuidEmpty(attachment.getRemoteId())) {
if (Task.isUuidEmpty(attachment.getRemoteId())) {
attachment.setRemoteId(UUIDHelper.newUUID());
}
insert(attachment);

@ -4,13 +4,8 @@ package org.tasks.data;
import android.arch.persistence.room.ColumnInfo;
import android.arch.persistence.room.Entity;
import android.arch.persistence.room.PrimaryKey;
import android.content.ContentValues;
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.astrid.data.RemoteModel;
import com.todoroo.astrid.data.Task;
/**
* Data Model which represents a user.
@ -29,10 +24,10 @@ public class TaskListMetadata {
private Long id;
@ColumnInfo(name = "remoteId")
private String remoteId = RemoteModel.NO_UUID;
private String remoteId = Task.NO_UUID;
@ColumnInfo(name = "tag_uuid")
private String tagUuid = RemoteModel.NO_UUID;
private String tagUuid = Task.NO_UUID;
@ColumnInfo(name = "filter")
private String filter = "";

@ -6,7 +6,7 @@ import android.arch.persistence.room.OnConflictStrategy;
import android.arch.persistence.room.Query;
import android.arch.persistence.room.Update;
import com.todoroo.astrid.data.RemoteModel;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.helper.UUIDHelper;
@Dao
@ -22,7 +22,7 @@ public abstract class TaskListMetadataDao {
public abstract void insert(TaskListMetadata taskListMetadata);
public void createNew(TaskListMetadata taskListMetadata) {
if (RemoteModel.isUuidEmpty(taskListMetadata.getRemoteId())) {
if (Task.isUuidEmpty(taskListMetadata.getRemoteId())) {
taskListMetadata.setRemoteId(UUIDHelper.newUUID());
}
insert(taskListMetadata);

@ -8,7 +8,7 @@ import android.net.Uri;
import android.os.Parcel;
import android.os.Parcelable;
import com.todoroo.astrid.data.RemoteModel;
import com.todoroo.astrid.data.Task;
import org.json.JSONException;
import org.json.JSONObject;
@ -29,7 +29,7 @@ public class UserActivity implements Parcelable {
private Long id;
@ColumnInfo(name = "remoteId")
private String remoteId = RemoteModel.NO_UUID;
private String remoteId = Task.NO_UUID;
@ColumnInfo(name = "action")
private String action = "";
@ -41,7 +41,7 @@ public class UserActivity implements Parcelable {
private String picture = "";
@ColumnInfo(name = "target_id")
private String targetId = RemoteModel.NO_UUID;
private String targetId = Task.NO_UUID;
@ColumnInfo(name = "created_at")
private Long created = 0L;

@ -5,7 +5,7 @@ import android.arch.persistence.room.Insert;
import android.arch.persistence.room.Query;
import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.astrid.data.RemoteModel;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.helper.UUIDHelper;
import java.util.List;
@ -23,7 +23,7 @@ public abstract class UserActivityDao {
if (item.getCreated() == null || item.getCreated() == 0L) {
item.setCreated(DateUtilities.now());
}
if (RemoteModel.isUuidEmpty(item.getRemoteId())) {
if (Task.isUuidEmpty(item.getRemoteId())) {
item.setRemoteId(UUIDHelper.newUUID());
}
insert(item);

Loading…
Cancel
Save