Add mapping between CSV and custom fields

csv
Laurent 6 years ago
parent 36f52b6681
commit 07e61e9839
  1. 14
      app/src/main/java/net/pokeranalytics/android/model/realm/CustomField.kt
  2. 2
      app/src/main/java/net/pokeranalytics/android/ui/fragment/data/CustomFieldDataFragment.kt
  3. 27
      app/src/main/java/net/pokeranalytics/android/util/csv/CSVField.kt
  4. 10
      app/src/main/java/net/pokeranalytics/android/util/csv/SessionCSVDescriptor.kt
  5. 12
      app/src/main/java/net/pokeranalytics/android/util/csv/SessionField.kt

@ -251,7 +251,7 @@ open class CustomField : RealmObject(), NameManageable, StaticRowRepresentableDa
/**
* Add an entry
*/
fun addEntry(): CustomFieldEntry {
fun addEmptyEntry(): CustomFieldEntry {
val entry = CustomFieldEntry()
this.entries.add(entry)
sortEntries()
@ -314,4 +314,16 @@ open class CustomField : RealmObject(), NameManageable, StaticRowRepresentableDa
}
}
fun getOrCreateListEntry(name: String) : CustomFieldEntry {
this.entries.firstOrNull { it.name == name }?.let {
return it
}
val entry = this.realm.copyToRealm(CustomFieldEntry())
entry.name = name
this.entries.add(entry)
return entry
}
}

@ -216,7 +216,7 @@ class CustomFieldDataFragment : EditableDataFragment(), StaticRowRepresentableDa
}
addItem.setOnClickListener {
val customFieldEntry = customField.addEntry()
val customFieldEntry = customField.addEmptyEntry()
rowRepresentableAdapter.notifyDataSetChanged()
onRowSelected(-1, customFieldEntry)
}

@ -86,10 +86,35 @@ interface BlindCSVField : TypedCSVField<Pair<Double, Double>> {
interface CustomEntryCSVField : TypedCSVField<CustomFieldEntry>, CustomCSVField {
override fun parse(value: String): CustomFieldEntry? {
return if (value.isNotEmpty()) {
this.customField.getOrCreateListEntry(value)
} else {
null
}
}
}
interface CustomNumberCSVField : NumberCSVField, CustomCSVField {
interface CustomNumberCSVField : TypedCSVField<CustomFieldEntry>, CustomCSVField {
val numberFormat: String?
override fun parse(value: String): CustomFieldEntry? {
val formatter = NumberFormat.getInstance()
return try {
val number = formatter.parse(value).toDouble()
val entry = this.customField.realm.copyToRealm(CustomFieldEntry())
entry.numericValue = number
this.customField.entries.add(entry)
entry
} catch (e: ParseException) {
Timber.d("Field ${header} > Unparseable number: $value")
null
}
}
}
interface CustomCSVField {

@ -220,6 +220,16 @@ class SessionCSVDescriptor(source: DataSource, private var isTournament: Boolean
is SessionField.StackingOut -> {
stackingOut = field.parse(value)
}
is MappedCustomCVSField.Number -> {
field.parse(value)?.let {
session.customFieldEntries.add(it)
}
}
is MappedCustomCVSField.List -> {
field.parse(value)?.let {
session.customFieldEntries.add(it)
}
}
else -> {
}
}

@ -8,20 +8,15 @@ sealed class MappedCustomCVSField {
data class Number(
override var header: String,
override var callback: ((String) -> Double?)? = null,
override var callback: ((String) -> CustomFieldEntry?)? = null,
override val numberFormat: String?,
override var customField: CustomField) : CustomNumberCSVField
data class List(
override var header: String,
override var callback: ((String) -> CustomFieldEntry?)? = null,
override var customField: CustomField) : CustomEntryCSVField {
override fun parse(value: String): CustomFieldEntry? {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
}
override var customField: CustomField) : CustomEntryCSVField
}
sealed class TransactionField {
@ -160,4 +155,5 @@ sealed class SessionField {
override var callback: ((String) -> Double?)? = null,
override val numberFormat: String? = null
) : NumberCSVField
}

Loading…
Cancel
Save