Add getValue methods

feature/top10
Aurelien Hubert 7 years ago
parent 30c2b100c4
commit e5a454c4bd
  1. 121
      app/src/main/java/net/pokeranalytics/android/model/realm/Filter.kt
  2. 11
      app/src/main/java/net/pokeranalytics/android/model/realm/FilterCondition.kt

@ -39,15 +39,15 @@ open class Filter : RealmObject() {
return realm.where<Filter>().equalTo("id", filterId).findFirst() return realm.where<Filter>().equalTo("id", filterId).findFirst()
} }
@TestOnly @TestOnly
inline fun <reified T : Filterable> queryOn(realm: Realm, queries: List<QueryCondition>): RealmResults<T> { inline fun <reified T : Filterable> queryOn(realm: Realm, queries: List<QueryCondition>): RealmResults<T> {
var realmQuery = realm.where<T>() var realmQuery = realm.where<T>()
queries.forEach { queries.forEach {
realmQuery = it.filter<T>(realmQuery) realmQuery = it.filter<T>(realmQuery)
} }
return realmQuery.findAll() return realmQuery.findAll()
} }
} }
@PrimaryKey @PrimaryKey
var id = UUID.randomUUID().toString() var id = UUID.randomUUID().toString()
@ -59,59 +59,70 @@ open class Filter : RealmObject() {
// for MutableRealmInteger, see https://realm.io/docs/java/latest/#counters // for MutableRealmInteger, see https://realm.io/docs/java/latest/#counters
val usageCount: MutableRealmInteger = MutableRealmInteger.valueOf(0) val usageCount: MutableRealmInteger = MutableRealmInteger.valueOf(0)
var filterConditions: RealmList<FilterCondition> = RealmList() var filterConditions: RealmList<FilterCondition> = RealmList()
private set private set
fun createOrUpdateFilterConditions(filterConditionRows: ArrayList<FilterElementRow>) { fun createOrUpdateFilterConditions(filterConditionRows: ArrayList<FilterElementRow>) {
filterConditions.clear() filterConditions.clear()
filterConditionRows filterConditionRows
.map { .map {
it.filterSectionRow it.filterSectionRow
} }
.distinct() .distinct()
.forEach { section -> .forEach { section ->
filterConditionRows filterConditionRows
.filter { .filter {
it.filterSectionRow == section it.filterSectionRow == section
} }
.apply { .apply {
if (this.size == 1) {
if (this.size == 1) { filterConditions.add(FilterCondition(this.first()))
filterConditions.add(FilterCondition(this.first())) } else {
} else { val casted = arrayListOf<FilterElementRow>()
val casted = arrayListOf<FilterElementRow>() casted.addAll(this)
casted.addAll(this) filterConditions.add(FilterCondition(casted))
filterConditions.add(FilterCondition(casted)) }
}
} }
} }
} }
fun countBy(filterCategoryRow: FilterCategoryRow) : Int { fun countBy(filterCategoryRow: FilterCategoryRow): Int {
val sections = filterCategoryRow.filterSectionRows val sections = filterCategoryRow.filterSectionRows
return filterConditions.count { return filterConditions.count {
sections.contains(FilterSectionRow.valueOf(it.sectionName ?: throw PokerAnalyticsException.FilterElementUnknownSectionName)) sections.contains(FilterSectionRow.valueOf(it.sectionName ?: throw PokerAnalyticsException.FilterElementUnknownSectionName))
} }
} }
fun contains(filterElementRow:FilterElementRow) : Boolean { fun contains(filterElementRow: FilterElementRow): Boolean {
val filtered = filterConditions.filter { val filtered = filterConditions.filter {
it.filterName == filterElementRow.filterName it.filterName == filterElementRow.filterName
} }
if (filtered.isEmpty()) { if (filtered.isEmpty()) {
return false return false
} }
return filterElementRow.contains(filtered) return filterElementRow.contains(filtered)
} }
fun getValueForElement(filterElementRow: FilterElementRow): Any? {
val filtered = filterConditions.filter {
it.filterName == filterElementRow.filterName
}
if (filtered.isNotEmpty()) {
return filtered.first().getValue(filterElementRow)
}
return null
}
inline fun <reified T : Filterable> results(): RealmResults<T> { inline fun <reified T : Filterable> results(): RealmResults<T> {
var realmQuery = realm.where<T>() var realmQuery = realm.where<T>()
this.filterConditions.map { this.filterConditions.map {
it.queryCondition it.queryCondition
}.forEach { }.forEach {
realmQuery = it.filter(realmQuery) realmQuery = it.filter(realmQuery)
} }
return realmQuery.findAll() return realmQuery.findAll()
} }

@ -157,4 +157,15 @@ open class FilterCondition() : RealmObject() {
val year: Int val year: Int
get() = numericValues?.first()?.toInt() ?: throw PokerAnalyticsException.FilterElementExpectedValueMissing get() = numericValues?.first()?.toInt() ?: throw PokerAnalyticsException.FilterElementExpectedValueMissing
/**
* Return the value associated with the given filter element row
*/
fun getValue(filterElementRow: FilterElementRow): Any? {
return when (filterElementRow) {
is From, is To -> dateValue
else -> null
}
}
} }

Loading…
Cancel
Save