mirror of https://github.com/tasks/tasks
Convert TagDataDao to Room
parent
c2255296d7
commit
5bee730f1c
@ -0,0 +1,110 @@
|
|||||||
|
{
|
||||||
|
"formatVersion": 1,
|
||||||
|
"database": {
|
||||||
|
"version": 40,
|
||||||
|
"identityHash": "522b606947ecd5beebfb95d548aef0c4",
|
||||||
|
"entities": [
|
||||||
|
{
|
||||||
|
"tableName": "notification",
|
||||||
|
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`uid` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `task` INTEGER NOT NULL, `timestamp` INTEGER NOT NULL, `type` INTEGER NOT NULL)",
|
||||||
|
"fields": [
|
||||||
|
{
|
||||||
|
"fieldPath": "uid",
|
||||||
|
"columnName": "uid",
|
||||||
|
"affinity": "INTEGER",
|
||||||
|
"notNull": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldPath": "taskId",
|
||||||
|
"columnName": "task",
|
||||||
|
"affinity": "INTEGER",
|
||||||
|
"notNull": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldPath": "timestamp",
|
||||||
|
"columnName": "timestamp",
|
||||||
|
"affinity": "INTEGER",
|
||||||
|
"notNull": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldPath": "type",
|
||||||
|
"columnName": "type",
|
||||||
|
"affinity": "INTEGER",
|
||||||
|
"notNull": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"primaryKey": {
|
||||||
|
"columnNames": [
|
||||||
|
"uid"
|
||||||
|
],
|
||||||
|
"autoGenerate": true
|
||||||
|
},
|
||||||
|
"indices": [
|
||||||
|
{
|
||||||
|
"name": "index_notification_task",
|
||||||
|
"unique": true,
|
||||||
|
"columnNames": [
|
||||||
|
"task"
|
||||||
|
],
|
||||||
|
"createSql": "CREATE UNIQUE INDEX `index_notification_task` ON `${TABLE_NAME}` (`task`)"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"foreignKeys": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tableName": "tagdata",
|
||||||
|
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `remoteId` TEXT, `name` TEXT, `color` INTEGER, `tagOrdering` TEXT, `deleted` INTEGER)",
|
||||||
|
"fields": [
|
||||||
|
{
|
||||||
|
"fieldPath": "id",
|
||||||
|
"columnName": "_id",
|
||||||
|
"affinity": "INTEGER",
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldPath": "remoteId",
|
||||||
|
"columnName": "remoteId",
|
||||||
|
"affinity": "TEXT",
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldPath": "name",
|
||||||
|
"columnName": "name",
|
||||||
|
"affinity": "TEXT",
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldPath": "color",
|
||||||
|
"columnName": "color",
|
||||||
|
"affinity": "INTEGER",
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldPath": "tagOrdering",
|
||||||
|
"columnName": "tagOrdering",
|
||||||
|
"affinity": "TEXT",
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldPath": "deleted",
|
||||||
|
"columnName": "deleted",
|
||||||
|
"affinity": "INTEGER",
|
||||||
|
"notNull": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"primaryKey": {
|
||||||
|
"columnNames": [
|
||||||
|
"_id"
|
||||||
|
],
|
||||||
|
"autoGenerate": true
|
||||||
|
},
|
||||||
|
"indices": [],
|
||||||
|
"foreignKeys": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"setupQueries": [
|
||||||
|
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
|
||||||
|
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, \"522b606947ecd5beebfb95d548aef0c4\")"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
@ -1,121 +1,180 @@
|
|||||||
/**
|
|
||||||
* Copyright (c) 2012 Todoroo Inc
|
|
||||||
*
|
|
||||||
* See the file "LICENSE" for the full license governing this code.
|
|
||||||
*/
|
|
||||||
package com.todoroo.astrid.data;
|
package com.todoroo.astrid.data;
|
||||||
|
|
||||||
|
import android.arch.persistence.room.ColumnInfo;
|
||||||
|
import android.arch.persistence.room.Entity;
|
||||||
|
import android.arch.persistence.room.Ignore;
|
||||||
|
import android.arch.persistence.room.PrimaryKey;
|
||||||
|
import android.os.Parcel;
|
||||||
|
import android.os.Parcelable;
|
||||||
|
|
||||||
import android.content.ContentValues;
|
import org.tasks.backup.XmlReader;
|
||||||
|
import org.tasks.backup.XmlWriter;
|
||||||
|
|
||||||
import com.todoroo.andlib.data.Property;
|
@Entity(tableName = "tagdata")
|
||||||
import com.todoroo.andlib.data.Property.IntegerProperty;
|
public final class TagData implements Parcelable {
|
||||||
import com.todoroo.andlib.data.Property.LongProperty;
|
|
||||||
import com.todoroo.andlib.data.Property.StringProperty;
|
|
||||||
import com.todoroo.andlib.data.Table;
|
|
||||||
|
|
||||||
/**
|
@PrimaryKey(autoGenerate = true)
|
||||||
* Data Model which represents a collaboration space for users / tasks.
|
@ColumnInfo(name = "_id")
|
||||||
*
|
private Long id;
|
||||||
* @author Tim Su <tim@todoroo.com>
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public final class TagData extends RemoteModel {
|
|
||||||
|
|
||||||
// --- table and uri
|
@ColumnInfo(name = "remoteId")
|
||||||
|
private String remoteId = RemoteModel.NO_UUID;
|
||||||
|
|
||||||
/** table for this model */
|
@ColumnInfo(name = "name")
|
||||||
public static final Table TABLE = new Table("tagdata", TagData.class);
|
private String name = "";
|
||||||
|
|
||||||
// --- properties
|
@ColumnInfo(name = "color")
|
||||||
|
private Integer color = -1;
|
||||||
|
|
||||||
/** ID */
|
@ColumnInfo(name = "tagOrdering")
|
||||||
public static final LongProperty ID = new LongProperty(
|
private String tagOrdering = "[]";
|
||||||
TABLE, ID_PROPERTY_NAME);
|
|
||||||
|
|
||||||
/** Remote goal id */
|
@Deprecated
|
||||||
public static final StringProperty UUID = new StringProperty(
|
@ColumnInfo(name = "deleted")
|
||||||
TABLE, UUID_PROPERTY_NAME);
|
private Long deleted = 0L;
|
||||||
|
|
||||||
/** Name of Tag */
|
public TagData() {
|
||||||
public static final StringProperty NAME = new StringProperty(
|
}
|
||||||
TABLE, "name");
|
|
||||||
|
|
||||||
public static final IntegerProperty COLOR = new IntegerProperty(
|
@Ignore
|
||||||
TABLE, "color");
|
public TagData(XmlReader reader) {
|
||||||
|
reader.readString("remoteId", this::setRemoteId);
|
||||||
|
reader.readString("name", this::setName);
|
||||||
|
reader.readInteger("color", this::setColor);
|
||||||
|
reader.readString("tagOrdering", this::setTagOrdering);
|
||||||
|
reader.readLong("deleted", this::setDeleted);
|
||||||
|
}
|
||||||
|
|
||||||
/** Unixtime Project was deleted. 0 means not deleted */
|
@Ignore
|
||||||
@Deprecated
|
private TagData(Parcel parcel) {
|
||||||
public static final LongProperty DELETION_DATE = new LongProperty(
|
id = parcel.readLong();
|
||||||
TABLE, "deleted", Property.PROP_FLAG_DATE);
|
remoteId = parcel.readString();
|
||||||
|
name = parcel.readString();
|
||||||
|
color = parcel.readInt();
|
||||||
|
tagOrdering = parcel.readString();
|
||||||
|
deleted = parcel.readLong();
|
||||||
|
}
|
||||||
|
|
||||||
/** Tag ordering */
|
public void writeToXml(XmlWriter writer) {
|
||||||
@Deprecated
|
writer.writeString("remoteId", remoteId);
|
||||||
public static final StringProperty TAG_ORDERING = new StringProperty(
|
writer.writeString("name", name);
|
||||||
TABLE, "tagOrdering");
|
writer.writeInteger("color", color);
|
||||||
|
writer.writeString("tagOrdering", tagOrdering);
|
||||||
|
writer.writeLong("deleted", deleted);
|
||||||
|
}
|
||||||
|
|
||||||
/** List of all properties for this model */
|
public Long getId() {
|
||||||
public static final Property<?>[] PROPERTIES = generateProperties(TagData.class);
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
// --- defaults
|
public void setId(long id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
/** Default values container */
|
public String getRemoteId() {
|
||||||
private static final ContentValues defaultValues = new ContentValues();
|
return remoteId;
|
||||||
|
}
|
||||||
|
|
||||||
static {
|
public void setRemoteId(String remoteId) {
|
||||||
defaultValues.put(UUID.name, NO_UUID);
|
this.remoteId = remoteId;
|
||||||
defaultValues.put(NAME.name, "");
|
|
||||||
defaultValues.put(DELETION_DATE.name, 0);
|
|
||||||
defaultValues.put(TAG_ORDERING.name, "[]");
|
|
||||||
defaultValues.put(COLOR.name, -1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
public String getName() {
|
||||||
public ContentValues getDefaultValues() {
|
return name;
|
||||||
return defaultValues;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
public void setName(String name) {
|
||||||
public long getId() {
|
this.name = name;
|
||||||
return getIdHelper(ID);
|
}
|
||||||
|
|
||||||
|
public String getTagOrdering() {
|
||||||
|
return tagOrdering;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getUuid() {
|
public void setTagOrdering(String tagOrdering) {
|
||||||
return getUuidHelper(UUID);
|
this.tagOrdering = tagOrdering;
|
||||||
}
|
}
|
||||||
|
|
||||||
// --- parcelable helpers
|
public Integer getColor() {
|
||||||
|
return color;
|
||||||
|
}
|
||||||
|
|
||||||
public static final Creator<TagData> CREATOR = new ModelCreator<>(TagData.class);
|
public void setColor(int color) {
|
||||||
|
this.color = color;
|
||||||
|
}
|
||||||
|
|
||||||
// --- data access methods
|
public Long getDeleted() {
|
||||||
|
return deleted;
|
||||||
|
}
|
||||||
|
|
||||||
public String getName() {
|
public void setDeleted(long deleted) {
|
||||||
return getValue(NAME);
|
this.deleted = deleted;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setName(String name) {
|
public static final Creator<TagData> CREATOR = new Creator<TagData>() {
|
||||||
setValue(NAME, name);
|
@Override
|
||||||
|
public TagData createFromParcel(Parcel source) {
|
||||||
|
return new TagData(source);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getTagOrdering() {
|
@Override
|
||||||
return getValue(TAG_ORDERING);
|
public TagData[] newArray(int size) {
|
||||||
|
return new TagData[size];
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
public void setColor(int color) {
|
@Override
|
||||||
setValue(COLOR, color);
|
public int describeContents() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void writeToParcel(Parcel dest, int flags) {
|
||||||
|
dest.writeLong(id);
|
||||||
|
dest.writeString(remoteId);
|
||||||
|
dest.writeString(name);
|
||||||
|
dest.writeInt(color);
|
||||||
|
dest.writeString(tagOrdering);
|
||||||
|
dest.writeLong(deleted);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getColor() {
|
@Override
|
||||||
return getValue(COLOR);
|
public boolean equals(Object o) {
|
||||||
|
if (this == o) return true;
|
||||||
|
if (o == null || getClass() != o.getClass()) return false;
|
||||||
|
|
||||||
|
TagData tagData = (TagData) o;
|
||||||
|
|
||||||
|
if (id != null ? !id.equals(tagData.id) : tagData.id != null) return false;
|
||||||
|
if (remoteId != null ? !remoteId.equals(tagData.remoteId) : tagData.remoteId != null)
|
||||||
|
return false;
|
||||||
|
if (name != null ? !name.equals(tagData.name) : tagData.name != null) return false;
|
||||||
|
if (color != null ? !color.equals(tagData.color) : tagData.color != null) return false;
|
||||||
|
if (tagOrdering != null ? !tagOrdering.equals(tagData.tagOrdering) : tagData.tagOrdering != null)
|
||||||
|
return false;
|
||||||
|
return deleted != null ? deleted.equals(tagData.deleted) : tagData.deleted == null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: remove?
|
@Override
|
||||||
public String getUUID() {
|
public int hashCode() {
|
||||||
return getValue(UUID);
|
int result = id != null ? id.hashCode() : 0;
|
||||||
|
result = 31 * result + (remoteId != null ? remoteId.hashCode() : 0);
|
||||||
|
result = 31 * result + (name != null ? name.hashCode() : 0);
|
||||||
|
result = 31 * result + (color != null ? color.hashCode() : 0);
|
||||||
|
result = 31 * result + (tagOrdering != null ? tagOrdering.hashCode() : 0);
|
||||||
|
result = 31 * result + (deleted != null ? deleted.hashCode() : 0);
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setUUID(String uuid) {
|
@Override
|
||||||
setValue(UUID, uuid);
|
public String toString() {
|
||||||
|
return "TagData{" +
|
||||||
|
"id=" + id +
|
||||||
|
", remoteId='" + remoteId + '\'' +
|
||||||
|
", name='" + name + '\'' +
|
||||||
|
", color=" + color +
|
||||||
|
", tagOrdering='" + tagOrdering + '\'' +
|
||||||
|
", deleted=" + deleted +
|
||||||
|
'}';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,41 @@
|
|||||||
|
package org.tasks.backup;
|
||||||
|
|
||||||
|
import com.todoroo.astrid.backup.TasksXmlExporter;
|
||||||
|
|
||||||
|
import org.xmlpull.v1.XmlPullParser;
|
||||||
|
|
||||||
|
public class XmlReader {
|
||||||
|
|
||||||
|
public interface ValueWriter<T> {
|
||||||
|
void write(T value);
|
||||||
|
}
|
||||||
|
|
||||||
|
private final XmlPullParser xpp;
|
||||||
|
|
||||||
|
public XmlReader(XmlPullParser xpp) {
|
||||||
|
this.xpp = xpp;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void readLong(String name, ValueWriter<Long> writer) {
|
||||||
|
String value = xpp.getAttributeValue(null, name);
|
||||||
|
if(value != null) {
|
||||||
|
writer.write(TasksXmlExporter.XML_NULL.equals(value) ?
|
||||||
|
null : Long.parseLong(value));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void readInteger(String name, ValueWriter<Integer> writer) {
|
||||||
|
String value = xpp.getAttributeValue(null, name);
|
||||||
|
if(value != null) {
|
||||||
|
writer.write(TasksXmlExporter.XML_NULL.equals(value) ?
|
||||||
|
null : Integer.parseInt(value));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void readString(String name, ValueWriter<String> writer) {
|
||||||
|
String value = xpp.getAttributeValue(null, name);
|
||||||
|
if (value != null) {
|
||||||
|
writer.write(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,54 @@
|
|||||||
|
package org.tasks.backup;
|
||||||
|
|
||||||
|
import org.xmlpull.v1.XmlSerializer;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import timber.log.Timber;
|
||||||
|
|
||||||
|
import static com.todoroo.astrid.backup.TasksXmlExporter.XML_NULL;
|
||||||
|
|
||||||
|
public class XmlWriter {
|
||||||
|
private final XmlSerializer xml;
|
||||||
|
|
||||||
|
public XmlWriter(XmlSerializer xml) {
|
||||||
|
this.xml = xml;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void writeLong(String name, Long value) {
|
||||||
|
try {
|
||||||
|
String valueString = (value == null) ? XML_NULL : value.toString();
|
||||||
|
xml.attribute(null, name, valueString);
|
||||||
|
} catch (UnsupportedOperationException e) {
|
||||||
|
// didn't read this value, do nothing
|
||||||
|
Timber.e(e, e.getMessage());
|
||||||
|
} catch (IllegalArgumentException | IOException | IllegalStateException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void writeString(String name, String value) {
|
||||||
|
try {
|
||||||
|
if(value != null) {
|
||||||
|
xml.attribute(null, name, value);
|
||||||
|
}
|
||||||
|
} catch (UnsupportedOperationException e) {
|
||||||
|
// didn't read this value, do nothing
|
||||||
|
Timber.v(e, e.getMessage());
|
||||||
|
} catch (IllegalArgumentException | IOException | IllegalStateException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void writeInteger(String name, Integer value) {
|
||||||
|
try {
|
||||||
|
String valueString = (value == null) ? XML_NULL : value.toString();
|
||||||
|
xml.attribute(null, name, valueString);
|
||||||
|
} catch (UnsupportedOperationException e) {
|
||||||
|
// didn't read this value, do nothing
|
||||||
|
Timber.e(e, e.getMessage());
|
||||||
|
} catch (IllegalArgumentException | IOException | IllegalStateException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue