diff --git a/app/src/androidTest/java/org/tasks/data/TagDataDaoTest.kt b/app/src/androidTest/java/org/tasks/data/TagDataDaoTest.kt index 059ad8038..6b12b9c49 100644 --- a/app/src/androidTest/java/org/tasks/data/TagDataDaoTest.kt +++ b/app/src/androidTest/java/org/tasks/data/TagDataDaoTest.kt @@ -10,13 +10,10 @@ import org.junit.Assert.assertTrue import org.junit.Test import org.tasks.data.dao.TagDao import org.tasks.data.dao.TagDataDao +import org.tasks.data.entity.Tag import org.tasks.data.entity.TagData import org.tasks.injection.InjectingTestCase import org.tasks.injection.ProductionModule -import org.tasks.makers.TagMaker.TAGDATA -import org.tasks.makers.TagMaker.TAGUID -import org.tasks.makers.TagMaker.TASK -import org.tasks.makers.TagMaker.newTag import org.tasks.makers.TaskMaker.ID import org.tasks.makers.TaskMaker.newTask import javax.inject.Inject @@ -71,8 +68,8 @@ class TagDataDaoTest : InjectingTestCase() { taskDao.createNew(taskTwo) val tagOne = TagData(name = "one").let { it.copy(id = tagDataDao.insert(it)) } val tagTwo = TagData(name = "two").let { it.copy(id = tagDataDao.insert(it)) } - tagDao.insert(newTag(with(TAGDATA, tagOne), with(TASK, taskOne))) - tagDao.insert(newTag(with(TAGDATA, tagTwo), with(TASK, taskTwo))) + tagDao.insert(Tag(task = taskOne.id, taskUid = taskOne.uuid, tagUid = tagOne.remoteId)) + tagDao.insert(Tag(task = taskTwo.id, taskUid = taskTwo.uuid, tagUid = tagTwo.remoteId)) assertEquals(listOf(tagOne), tagDataDao.getTagDataForTask(taskOne.id)) } @@ -133,7 +130,7 @@ class TagDataDaoTest : InjectingTestCase() { val task = newTask(with(ID, taskId)) taskDao.createNew(task) for (tag in tags) { - tagDao.insert(newTag(with(TASK, task), with(TAGUID, tag))) + tagDao.insert(Tag(task = task.id, taskUid = task.uuid, tagUid = tag)) } } } \ No newline at end of file diff --git a/app/src/androidTest/java/org/tasks/data/UpgraderDaoTests.kt b/app/src/androidTest/java/org/tasks/data/UpgraderDaoTests.kt index fce3cfd8f..863ca0f67 100644 --- a/app/src/androidTest/java/org/tasks/data/UpgraderDaoTests.kt +++ b/app/src/androidTest/java/org/tasks/data/UpgraderDaoTests.kt @@ -13,10 +13,10 @@ import org.tasks.data.dao.TagDao import org.tasks.data.dao.TagDataDao import org.tasks.data.dao.UpgraderDao import org.tasks.data.entity.CaldavTask +import org.tasks.data.entity.Tag import org.tasks.data.entity.TagData import org.tasks.injection.InjectingTestCase import org.tasks.injection.ProductionModule -import org.tasks.makers.TagMaker import org.tasks.makers.TaskMaker import javax.inject.Inject @@ -38,8 +38,8 @@ class UpgraderDaoTests : InjectingTestCase() { val two = TagData() tagDataDao.insert(one) tagDataDao.insert(two) - tagDao.insert(TagMaker.newTag(MakeItEasy.with(TagMaker.TASK, task), MakeItEasy.with(TagMaker.TAGDATA, one))) - tagDao.insert(TagMaker.newTag(MakeItEasy.with(TagMaker.TASK, task), MakeItEasy.with(TagMaker.TAGDATA, two))) + tagDao.insert(Tag(task = task.id, taskUid = task.uuid, tagUid = one.remoteId)) + tagDao.insert(Tag(task = task.id, taskUid = task.uuid, tagUid = two.remoteId)) caldavDao.insert(CaldavTask(task = task.id, calendar = "calendar")) assertEquals(listOf(task.id), upgraderDao.tasksWithTags()) } @@ -50,7 +50,7 @@ class UpgraderDaoTests : InjectingTestCase() { taskDao.createNew(task) val tag = TagData() tagDataDao.insert(tag) - tagDao.insert(TagMaker.newTag(MakeItEasy.with(TagMaker.TASK, task), MakeItEasy.with(TagMaker.TAGDATA, tag))) + tagDao.insert(Tag(task = task.id, taskUid = task.uuid, tagUid = tag.remoteId)) assertTrue(upgraderDao.tasksWithTags().isEmpty()) } diff --git a/app/src/androidTest/java/org/tasks/opentasks/OpenTasksPropertiesTests.kt b/app/src/androidTest/java/org/tasks/opentasks/OpenTasksPropertiesTests.kt index 7e68877d7..4e964d203 100644 --- a/app/src/androidTest/java/org/tasks/opentasks/OpenTasksPropertiesTests.kt +++ b/app/src/androidTest/java/org/tasks/opentasks/OpenTasksPropertiesTests.kt @@ -20,6 +20,7 @@ import org.tasks.data.dao.TagDao import org.tasks.data.dao.TagDataDao import org.tasks.data.entity.Alarm import org.tasks.data.entity.Alarm.Companion.TYPE_SNOOZE +import org.tasks.data.entity.Tag import org.tasks.data.entity.TagData import org.tasks.data.entity.Task import org.tasks.injection.ProductionModule @@ -27,9 +28,6 @@ import org.tasks.makers.CaldavTaskMaker import org.tasks.makers.CaldavTaskMaker.CALENDAR import org.tasks.makers.CaldavTaskMaker.REMOTE_ID import org.tasks.makers.CaldavTaskMaker.newCaldavTask -import org.tasks.makers.TagMaker.TAGDATA -import org.tasks.makers.TagMaker.TASK -import org.tasks.makers.TagMaker.newTag import org.tasks.makers.TaskMaker import org.tasks.makers.TaskMaker.COLLAPSED import org.tasks.makers.TaskMaker.ORDER @@ -302,9 +300,9 @@ class OpenTasksPropertiesTests : OpenTasksTest() { } private suspend fun insertTag(task: Task, name: String) = - TagData(name = name) - .apply { tagDataDao.insert(this) } - .let { tagDao.insert(newTag(with(TASK, task), with(TAGDATA, it))) } + TagData(name = name) + .apply { tagDataDao.insert(this) } + .let { tagDao.insert(Tag(task = task.id, taskUid = task.uuid, tagUid = it.remoteId)) } companion object { private val CHICAGO = TimeZone.getTimeZone("America/Chicago") diff --git a/app/src/main/java/com/todoroo/astrid/service/TaskCreator.kt b/app/src/main/java/com/todoroo/astrid/service/TaskCreator.kt index 326ad0b2b..dc6a13202 100644 --- a/app/src/main/java/com/todoroo/astrid/service/TaskCreator.kt +++ b/app/src/main/java/com/todoroo/astrid/service/TaskCreator.kt @@ -201,7 +201,14 @@ class TaskCreator @Inject constructor( for (tag in task.tags) { val tagData = tagDataDao.getTagByName(tag) ?: TagData(name = tag).also { tagDataDao.insert(it) } - tagDao.insert(Tag(task, tagData)) + tagDao.insert( + Tag( + task = task.id, + taskUid = task.uuid, + name = tagData.name, + tagUid = tagData.remoteId + ) + ) } } diff --git a/app/src/main/java/com/todoroo/astrid/service/TaskDuplicator.kt b/app/src/main/java/com/todoroo/astrid/service/TaskDuplicator.kt index dce511131..2ed83ee41 100644 --- a/app/src/main/java/com/todoroo/astrid/service/TaskDuplicator.kt +++ b/app/src/main/java/com/todoroo/astrid/service/TaskDuplicator.kt @@ -64,7 +64,16 @@ class TaskDuplicator @Inject constructor( val newId = taskDao.createNew(clone) val tags = tagDataDao.getTagDataForTask(task.id) if (tags.isNotEmpty()) { - tagDao.insert(tags.map { Tag(clone, it) }) + tagDao.insert( + tags.map { + Tag( + task = clone.id, + taskUid = clone.uuid, + name = it.name, + tagUid = it.remoteId + ) + } + ) } val googleTask = googleTaskDao.getByTaskId(task.id) val caldavTask = caldavDao.getTask(task.id) diff --git a/app/src/main/java/org/tasks/backup/TasksJsonImporter.kt b/app/src/main/java/org/tasks/backup/TasksJsonImporter.kt index 6413f0cb0..4450cb10b 100644 --- a/app/src/main/java/org/tasks/backup/TasksJsonImporter.kt +++ b/app/src/main/java/org/tasks/backup/TasksJsonImporter.kt @@ -258,10 +258,13 @@ class TasksJsonImporter @Inject constructor( } for (tag in backup.tags) { val tagData = findTagData(tag) ?: continue - tag.task = taskId - tag.tagUid = tagData.remoteId - tag.setTaskUid(taskUuid) - tagDao.insert(tag) + tagDao.insert( + tag.copy( + task = taskId, + taskUid = task.remoteId, + tagUid = tagData.remoteId + ) + ) } backup.geofences?.forEach { geofence -> locationDao.insert( diff --git a/app/src/test/java/org/tasks/makers/TagMaker.kt b/app/src/test/java/org/tasks/makers/TagMaker.kt deleted file mode 100644 index cec1a20dc..000000000 --- a/app/src/test/java/org/tasks/makers/TagMaker.kt +++ /dev/null @@ -1,35 +0,0 @@ -package org.tasks.makers - -import com.natpryce.makeiteasy.Instantiator -import com.natpryce.makeiteasy.Property -import com.natpryce.makeiteasy.Property.newProperty -import com.natpryce.makeiteasy.PropertyLookup -import com.natpryce.makeiteasy.PropertyValue -import org.tasks.data.entity.Task -import org.tasks.data.entity.Tag -import org.tasks.data.entity.TagData -import org.tasks.makers.Maker.make - -object TagMaker { - val TAGDATA: Property = newProperty() - val TASK: Property = newProperty() - val TAGUID: Property = newProperty() - - private val instantiator = Instantiator { lookup: PropertyLookup -> - val tag = Tag() - val task = lookup.valueOf(TASK, null as Task?)!! - tag.task = task.id - tag.setTaskUid(task.uuid) - tag.tagUid = lookup.valueOf(TAGUID, null as String?) - val tagData = lookup.valueOf(TAGDATA, null as TagData?) - if (tagData != null) { - tag.tagUid = tagData.remoteId - } - assert(tag.tagUid != null) - tag - } - - fun newTag(vararg properties: PropertyValue): Tag { - return make(instantiator, *properties) - } -} \ No newline at end of file diff --git a/data/src/main/kotlin/org/tasks/data/dao/TagDao.kt b/data/src/main/kotlin/org/tasks/data/dao/TagDao.kt index d60972969..f9a5d5f0b 100644 --- a/data/src/main/kotlin/org/tasks/data/dao/TagDao.kt +++ b/data/src/main/kotlin/org/tasks/data/dao/TagDao.kt @@ -1,9 +1,13 @@ package org.tasks.data.dao -import androidx.room.* -import org.tasks.data.entity.Task +import androidx.room.Dao +import androidx.room.Delete +import androidx.room.Insert +import androidx.room.Query +import androidx.room.Transaction import org.tasks.data.entity.Tag import org.tasks.data.entity.TagData +import org.tasks.data.entity.Task @Dao abstract class TagDao { @@ -44,7 +48,16 @@ abstract class TagDao { suspend fun insert(task: Task, tags: Collection) { if (!tags.isEmpty()) { - insert(tags.map { Tag(task, it) }) + insert( + tags.map { + Tag( + task = task.id, + taskUid = task.uuid, + name = it.name, + tagUid = it.remoteId + ) + } + ) } } } \ No newline at end of file diff --git a/data/src/main/kotlin/org/tasks/data/dao/TagDataDao.kt b/data/src/main/kotlin/org/tasks/data/dao/TagDataDao.kt index 36f371a64..62a68da29 100644 --- a/data/src/main/kotlin/org/tasks/data/dao/TagDataDao.kt +++ b/data/src/main/kotlin/org/tasks/data/dao/TagDataDao.kt @@ -93,7 +93,16 @@ abstract class TagDataDao { val added = selected subtract getTagDataForTask(task.id) if (added.isNotEmpty()) { modified.add(task.id) - insert(added.map { Tag(task, it) }) + insert( + added.map { + Tag( + task = task.id, + taskUid = task.uuid, + name = it.name, + tagUid = it.remoteId + ) + } + ) } } return ArrayList(modified) diff --git a/data/src/main/kotlin/org/tasks/data/entity/Tag.kt b/data/src/main/kotlin/org/tasks/data/entity/Tag.kt index 6a111698d..3e3ed2b78 100644 --- a/data/src/main/kotlin/org/tasks/data/entity/Tag.kt +++ b/data/src/main/kotlin/org/tasks/data/entity/Tag.kt @@ -3,7 +3,6 @@ package org.tasks.data.entity import androidx.room.ColumnInfo import androidx.room.Entity import androidx.room.ForeignKey -import androidx.room.Ignore import androidx.room.PrimaryKey import kotlinx.serialization.Serializable import kotlinx.serialization.Transient @@ -21,51 +20,22 @@ import org.tasks.data.db.Table ), ] ) -class Tag { +data class Tag( @PrimaryKey(autoGenerate = true) @ColumnInfo(name = "_id") @Transient - var id: Long = 0 - + val id: Long = 0, @ColumnInfo(name = "task", index = true) @Transient - var task: Long = 0 - + val task: Long = 0, @ColumnInfo(name = "name") - var name: String? = null - + val name: String? = null, @ColumnInfo(name = "tag_uid") - var tagUid: String? = null - + val tagUid: String? = null, @ColumnInfo(name = "task_uid") @Transient - private var taskUid: String? = null - - constructor() - - @Ignore - constructor(task: Task, tagData: TagData) : this(task, tagData.name, tagData.remoteId) - - @Ignore - constructor(task: Task, name: String?, tagUid: String?) : this(task.id, task.uuid, name, tagUid) - - @Ignore - constructor(taskId: Long, taskUid: String?, name: String?, tagUid: String?) { - task = taskId - this.taskUid = taskUid - this.name = name - this.tagUid = tagUid - } - - fun getTaskUid(): String = taskUid!! - - fun setTaskUid(taskUid: String) { - this.taskUid = taskUid - } - - override fun toString(): String = - "Tag(id=$id, task=$task, name=$name, tagUid=$tagUid, taskUid=$taskUid)" - + val taskUid: String? = null, +) { companion object { const val KEY = "tags-tag" // $NON-NLS-1$ @JvmField val TABLE = Table("tags")