Clean and improve models & migration

dev
Aurelien Hubert 7 years ago
parent b23591e05c
commit 386a5bab37
  1. 9
      app/src/main/java/net/pokeranalytics/android/model/migrations/PokerAnalyticsMigration.kt
  2. 39
      app/src/main/java/net/pokeranalytics/android/model/realm/CustomField.kt
  3. 25
      app/src/main/java/net/pokeranalytics/android/model/realm/CustomFieldEntry.kt

@ -2,6 +2,7 @@ package net.pokeranalytics.android.model.migrations
import io.realm.DynamicRealm import io.realm.DynamicRealm
import io.realm.RealmMigration import io.realm.RealmMigration
import net.pokeranalytics.android.model.realm.CustomField
import net.pokeranalytics.android.model.realm.CustomFieldEntry import net.pokeranalytics.android.model.realm.CustomFieldEntry
import timber.log.Timber import timber.log.Timber
@ -104,8 +105,9 @@ class PokerAnalyticsMigration : RealmMigration {
} }
schema.create("CustomFieldEntry")?.let { schema.create("CustomFieldEntry")?.let {
it.addField("id", String::class.java).setRequired("id", true) it.addField("id", String::class.java).setRequired("id", true)
it.addField("value", String::class.java).setNullable("type", false) it.addField("value", String::class.java).setNullable("value", false)
it.addField("order", Integer::class.java).setNullable("type", false) it.addField("order", Integer::class.java).setNullable("order", false)
it.addField("customField", CustomField::class.java).setNullable("customField", false)
} }
schema.get("CustomField")?.let { schema.get("CustomField")?.let {
it.addField("type", Integer::class.java).setNullable("type", false) it.addField("type", Integer::class.java).setNullable("type", false)
@ -113,7 +115,6 @@ class PokerAnalyticsMigration : RealmMigration {
it.addField("sortCondition", Integer::class.java) it.addField("sortCondition", Integer::class.java)
it.addRealmListField("entries", CustomFieldEntry::class.java) it.addRealmListField("entries", CustomFieldEntry::class.java)
} }
schema.get("ReportSetup")?.let { schema.get("ReportSetup")?.let {
it.addRealmListField("statIds", Int::class.java) it.addRealmListField("statIds", Int::class.java)
it.addRealmListField("criteriaIds", Int::class.java) it.addRealmListField("criteriaIds", Int::class.java)
@ -122,10 +123,10 @@ class PokerAnalyticsMigration : RealmMigration {
it.addRealmObjectField("filter", filterSchema) it.addRealmObjectField("filter", filterSchema)
} }
} }
schema.get("Session")?.let { schema.get("Session")?.let {
it.addField("startDateHourMinuteComponent", Double::class.java).setNullable("startDateHourMinuteComponent", true) it.addField("startDateHourMinuteComponent", Double::class.java).setNullable("startDateHourMinuteComponent", true)
it.addField("endDateHourMinuteComponent", Double::class.java).setNullable("endDateHourMinuteComponent", true) it.addField("endDateHourMinuteComponent", Double::class.java).setNullable("endDateHourMinuteComponent", true)
it.addRealmListField("customFieldEntries", CustomFieldEntry::class.java)
} }
currentVersion++ currentVersion++
} }

@ -1,6 +1,7 @@
package net.pokeranalytics.android.model.realm package net.pokeranalytics.android.model.realm
import android.content.Context import android.content.Context
import android.text.InputType
import io.realm.Realm import io.realm.Realm
import io.realm.RealmList import io.realm.RealmList
import io.realm.RealmObject import io.realm.RealmObject
@ -11,6 +12,7 @@ import net.pokeranalytics.android.model.interfaces.DeleteValidityStatus
import net.pokeranalytics.android.model.interfaces.NameManageable import net.pokeranalytics.android.model.interfaces.NameManageable
import net.pokeranalytics.android.model.interfaces.SaveValidityStatus import net.pokeranalytics.android.model.interfaces.SaveValidityStatus
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetType
import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor
import net.pokeranalytics.android.ui.view.RowViewType import net.pokeranalytics.android.ui.view.RowViewType
@ -58,13 +60,16 @@ open class CustomField : RealmObject(), NameManageable, StaticRowRepresentableDa
updateRowRepresentation() updateRowRepresentation()
} }
override fun localizedTitle(context: Context): String {
return this.name
}
override fun getDisplayName(context: Context): String { override fun getDisplayName(context: Context): String {
return this.name return this.name
} }
@Ignore @Ignore
override val viewType: Int = RowViewType.TITLE_VALUE_ARROW.ordinal override var viewType: Int = RowViewType.TITLE_VALUE_ARROW.ordinal
@Ignore @Ignore
private var rowRepresentation: List<RowRepresentable> = mutableListOf() private var rowRepresentation: List<RowRepresentable> = mutableListOf()
@ -105,6 +110,14 @@ open class CustomField : RealmObject(), NameManageable, StaticRowRepresentableDa
return R.string.relationship_error return R.string.relationship_error
} }
override val bottomSheetType: BottomSheetType
get() {
return when (type) {
Type.LIST.uniqueIdentifier -> BottomSheetType.LIST_STATIC
else -> BottomSheetType.EDIT_TEXT
}
}
override fun editDescriptors(row: RowRepresentable): ArrayList<RowRepresentableEditDescriptor>? { override fun editDescriptors(row: RowRepresentable): ArrayList<RowRepresentableEditDescriptor>? {
return when (row) { return when (row) {
is CustomFieldEntry -> row.editingDescriptors( is CustomFieldEntry -> row.editingDescriptors(
@ -116,6 +129,28 @@ open class CustomField : RealmObject(), NameManageable, StaticRowRepresentableDa
} }
} }
override fun editingDescriptors(map: Map<String, Any?>): ArrayList<RowRepresentableEditDescriptor>? {
return when (type) {
Type.LIST.uniqueIdentifier -> {
val defaultValue: Any? by map
val data: RealmList<CustomFieldEntry>? by map
arrayListOf(
RowRepresentableEditDescriptor(defaultValue, staticData = data)
)
}
else -> {
val defaultValue: String? by map
arrayListOf(
RowRepresentableEditDescriptor(
defaultValue, inputType = InputType.TYPE_CLASS_NUMBER
or InputType.TYPE_NUMBER_FLAG_DECIMAL
or InputType.TYPE_NUMBER_FLAG_SIGNED
)
)
}
}
}
/** /**
* Update the row representation * Update the row representation
*/ */
@ -160,6 +195,7 @@ open class CustomField : RealmObject(), NameManageable, StaticRowRepresentableDa
*/ */
fun addEntry(): CustomFieldEntry { fun addEntry(): CustomFieldEntry {
val entry = CustomFieldEntry() val entry = CustomFieldEntry()
entry.customField = this
entries.add(entry) entries.add(entry)
sortEntries() sortEntries()
updateRowRepresentation() updateRowRepresentation()
@ -175,5 +211,4 @@ open class CustomField : RealmObject(), NameManageable, StaticRowRepresentableDa
updateRowRepresentation() updateRowRepresentation()
} }
} }

@ -11,15 +11,20 @@ import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor
import net.pokeranalytics.android.ui.view.RowViewType import net.pokeranalytics.android.ui.view.RowViewType
import net.pokeranalytics.android.util.NULL_TEXT import net.pokeranalytics.android.util.NULL_TEXT
import net.pokeranalytics.android.util.extensions.toCurrency
import java.util.* import java.util.*
import java.util.Currency
open class CustomFieldEntry : RealmObject(), RowRepresentable { open class CustomFieldEntry : RealmObject(), RowRepresentable {
@PrimaryKey @PrimaryKey
var id = UUID.randomUUID().toString() var id = UUID.randomUUID().toString()
var value: String = ""
var order: Int = 0 var order: Int = 0
var customField: CustomField? = null
var value: String = ""
@Ignore @Ignore
var isMovable: Boolean = false var isMovable: Boolean = false
@ -55,4 +60,22 @@ open class CustomFieldEntry : RealmObject(), RowRepresentable {
) )
} }
/**
* Return the amount
*/
fun getFormattedValue(currency: Currency? = null): String {
return when (customField?.type) {
CustomField.Type.AMOUNT.uniqueIdentifier -> {
try {
value.toDouble().toCurrency(currency)
} catch (e: Exception) {
NULL_TEXT
}
}
else -> {
value
}
}
}
} }
Loading…
Cancel
Save