Convert Tag to data class

pull/2906/head
Alex Baker 2 years ago
parent ad833b5f49
commit 64e05c9f8f

@ -10,13 +10,10 @@ import org.junit.Assert.assertTrue
import org.junit.Test import org.junit.Test
import org.tasks.data.dao.TagDao import org.tasks.data.dao.TagDao
import org.tasks.data.dao.TagDataDao import org.tasks.data.dao.TagDataDao
import org.tasks.data.entity.Tag
import org.tasks.data.entity.TagData import org.tasks.data.entity.TagData
import org.tasks.injection.InjectingTestCase import org.tasks.injection.InjectingTestCase
import org.tasks.injection.ProductionModule 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.ID
import org.tasks.makers.TaskMaker.newTask import org.tasks.makers.TaskMaker.newTask
import javax.inject.Inject import javax.inject.Inject
@ -71,8 +68,8 @@ class TagDataDaoTest : InjectingTestCase() {
taskDao.createNew(taskTwo) taskDao.createNew(taskTwo)
val tagOne = TagData(name = "one").let { it.copy(id = tagDataDao.insert(it)) } val tagOne = TagData(name = "one").let { it.copy(id = tagDataDao.insert(it)) }
val tagTwo = TagData(name = "two").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(Tag(task = taskOne.id, taskUid = taskOne.uuid, tagUid = tagOne.remoteId))
tagDao.insert(newTag(with(TAGDATA, tagTwo), with(TASK, taskTwo))) tagDao.insert(Tag(task = taskTwo.id, taskUid = taskTwo.uuid, tagUid = tagTwo.remoteId))
assertEquals(listOf(tagOne), tagDataDao.getTagDataForTask(taskOne.id)) assertEquals(listOf(tagOne), tagDataDao.getTagDataForTask(taskOne.id))
} }
@ -133,7 +130,7 @@ class TagDataDaoTest : InjectingTestCase() {
val task = newTask(with(ID, taskId)) val task = newTask(with(ID, taskId))
taskDao.createNew(task) taskDao.createNew(task)
for (tag in tags) { for (tag in tags) {
tagDao.insert(newTag(with(TASK, task), with(TAGUID, tag))) tagDao.insert(Tag(task = task.id, taskUid = task.uuid, tagUid = tag))
} }
} }
} }

@ -13,10 +13,10 @@ import org.tasks.data.dao.TagDao
import org.tasks.data.dao.TagDataDao import org.tasks.data.dao.TagDataDao
import org.tasks.data.dao.UpgraderDao import org.tasks.data.dao.UpgraderDao
import org.tasks.data.entity.CaldavTask import org.tasks.data.entity.CaldavTask
import org.tasks.data.entity.Tag
import org.tasks.data.entity.TagData import org.tasks.data.entity.TagData
import org.tasks.injection.InjectingTestCase import org.tasks.injection.InjectingTestCase
import org.tasks.injection.ProductionModule import org.tasks.injection.ProductionModule
import org.tasks.makers.TagMaker
import org.tasks.makers.TaskMaker import org.tasks.makers.TaskMaker
import javax.inject.Inject import javax.inject.Inject
@ -38,8 +38,8 @@ class UpgraderDaoTests : InjectingTestCase() {
val two = TagData() val two = TagData()
tagDataDao.insert(one) tagDataDao.insert(one)
tagDataDao.insert(two) tagDataDao.insert(two)
tagDao.insert(TagMaker.newTag(MakeItEasy.with(TagMaker.TASK, task), MakeItEasy.with(TagMaker.TAGDATA, one))) tagDao.insert(Tag(task = task.id, taskUid = task.uuid, tagUid = one.remoteId))
tagDao.insert(TagMaker.newTag(MakeItEasy.with(TagMaker.TASK, task), MakeItEasy.with(TagMaker.TAGDATA, two))) tagDao.insert(Tag(task = task.id, taskUid = task.uuid, tagUid = two.remoteId))
caldavDao.insert(CaldavTask(task = task.id, calendar = "calendar")) caldavDao.insert(CaldavTask(task = task.id, calendar = "calendar"))
assertEquals(listOf(task.id), upgraderDao.tasksWithTags()) assertEquals(listOf(task.id), upgraderDao.tasksWithTags())
} }
@ -50,7 +50,7 @@ class UpgraderDaoTests : InjectingTestCase() {
taskDao.createNew(task) taskDao.createNew(task)
val tag = TagData() val tag = TagData()
tagDataDao.insert(tag) 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()) assertTrue(upgraderDao.tasksWithTags().isEmpty())
} }

@ -20,6 +20,7 @@ import org.tasks.data.dao.TagDao
import org.tasks.data.dao.TagDataDao import org.tasks.data.dao.TagDataDao
import org.tasks.data.entity.Alarm import org.tasks.data.entity.Alarm
import org.tasks.data.entity.Alarm.Companion.TYPE_SNOOZE 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.TagData
import org.tasks.data.entity.Task import org.tasks.data.entity.Task
import org.tasks.injection.ProductionModule 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.CALENDAR
import org.tasks.makers.CaldavTaskMaker.REMOTE_ID import org.tasks.makers.CaldavTaskMaker.REMOTE_ID
import org.tasks.makers.CaldavTaskMaker.newCaldavTask 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
import org.tasks.makers.TaskMaker.COLLAPSED import org.tasks.makers.TaskMaker.COLLAPSED
import org.tasks.makers.TaskMaker.ORDER import org.tasks.makers.TaskMaker.ORDER
@ -304,7 +302,7 @@ class OpenTasksPropertiesTests : OpenTasksTest() {
private suspend fun insertTag(task: Task, name: String) = private suspend fun insertTag(task: Task, name: String) =
TagData(name = name) TagData(name = name)
.apply { tagDataDao.insert(this) } .apply { tagDataDao.insert(this) }
.let { tagDao.insert(newTag(with(TASK, task), with(TAGDATA, it))) } .let { tagDao.insert(Tag(task = task.id, taskUid = task.uuid, tagUid = it.remoteId)) }
companion object { companion object {
private val CHICAGO = TimeZone.getTimeZone("America/Chicago") private val CHICAGO = TimeZone.getTimeZone("America/Chicago")

@ -201,7 +201,14 @@ class TaskCreator @Inject constructor(
for (tag in task.tags) { for (tag in task.tags) {
val tagData = tagDataDao.getTagByName(tag) val tagData = tagDataDao.getTagByName(tag)
?: TagData(name = tag).also { tagDataDao.insert(it) } ?: 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
)
)
} }
} }

@ -64,7 +64,16 @@ class TaskDuplicator @Inject constructor(
val newId = taskDao.createNew(clone) val newId = taskDao.createNew(clone)
val tags = tagDataDao.getTagDataForTask(task.id) val tags = tagDataDao.getTagDataForTask(task.id)
if (tags.isNotEmpty()) { 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 googleTask = googleTaskDao.getByTaskId(task.id)
val caldavTask = caldavDao.getTask(task.id) val caldavTask = caldavDao.getTask(task.id)

@ -258,10 +258,13 @@ class TasksJsonImporter @Inject constructor(
} }
for (tag in backup.tags) { for (tag in backup.tags) {
val tagData = findTagData(tag) ?: continue val tagData = findTagData(tag) ?: continue
tag.task = taskId tagDao.insert(
tag.tagUid = tagData.remoteId tag.copy(
tag.setTaskUid(taskUuid) task = taskId,
tagDao.insert(tag) taskUid = task.remoteId,
tagUid = tagData.remoteId
)
)
} }
backup.geofences?.forEach { geofence -> backup.geofences?.forEach { geofence ->
locationDao.insert( locationDao.insert(

@ -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<Tag, TagData?> = newProperty()
val TASK: Property<Tag, Task?> = newProperty()
val TAGUID: Property<Tag, String?> = newProperty()
private val instantiator = Instantiator { lookup: PropertyLookup<Tag> ->
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<in Tag?, *>): Tag {
return make(instantiator, *properties)
}
}

@ -1,9 +1,13 @@
package org.tasks.data.dao package org.tasks.data.dao
import androidx.room.* import androidx.room.Dao
import org.tasks.data.entity.Task 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.Tag
import org.tasks.data.entity.TagData import org.tasks.data.entity.TagData
import org.tasks.data.entity.Task
@Dao @Dao
abstract class TagDao { abstract class TagDao {
@ -44,7 +48,16 @@ abstract class TagDao {
suspend fun insert(task: Task, tags: Collection<TagData>) { suspend fun insert(task: Task, tags: Collection<TagData>) {
if (!tags.isEmpty()) { 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
)
}
)
} }
} }
} }

@ -93,7 +93,16 @@ abstract class TagDataDao {
val added = selected subtract getTagDataForTask(task.id) val added = selected subtract getTagDataForTask(task.id)
if (added.isNotEmpty()) { if (added.isNotEmpty()) {
modified.add(task.id) 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) return ArrayList(modified)

@ -3,7 +3,6 @@ package org.tasks.data.entity
import androidx.room.ColumnInfo import androidx.room.ColumnInfo
import androidx.room.Entity import androidx.room.Entity
import androidx.room.ForeignKey import androidx.room.ForeignKey
import androidx.room.Ignore
import androidx.room.PrimaryKey import androidx.room.PrimaryKey
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient import kotlinx.serialization.Transient
@ -21,51 +20,22 @@ import org.tasks.data.db.Table
), ),
] ]
) )
class Tag { data class Tag(
@PrimaryKey(autoGenerate = true) @PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "_id") @ColumnInfo(name = "_id")
@Transient @Transient
var id: Long = 0 val id: Long = 0,
@ColumnInfo(name = "task", index = true) @ColumnInfo(name = "task", index = true)
@Transient @Transient
var task: Long = 0 val task: Long = 0,
@ColumnInfo(name = "name") @ColumnInfo(name = "name")
var name: String? = null val name: String? = null,
@ColumnInfo(name = "tag_uid") @ColumnInfo(name = "tag_uid")
var tagUid: String? = null val tagUid: String? = null,
@ColumnInfo(name = "task_uid") @ColumnInfo(name = "task_uid")
@Transient @Transient
private var taskUid: String? = null val 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)"
companion object { companion object {
const val KEY = "tags-tag" // $NON-NLS-1$ const val KEY = "tags-tag" // $NON-NLS-1$
@JvmField val TABLE = Table("tags") @JvmField val TABLE = Table("tags")

Loading…
Cancel
Save