From e5a454c4bd3416f85e7c69d7838dee2976025c09 Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Tue, 9 Apr 2019 18:06:24 +0200 Subject: [PATCH] Add getValue methods --- .../android/model/realm/Filter.kt | 121 ++++++++++-------- .../android/model/realm/FilterCondition.kt | 11 ++ 2 files changed, 77 insertions(+), 55 deletions(-) diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Filter.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Filter.kt index 9ccaa0a0..f3569573 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/Filter.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/Filter.kt @@ -39,15 +39,15 @@ open class Filter : RealmObject() { return realm.where().equalTo("id", filterId).findFirst() } - @TestOnly - inline fun queryOn(realm: Realm, queries: List): RealmResults { - var realmQuery = realm.where() - queries.forEach { - realmQuery = it.filter(realmQuery) - } - return realmQuery.findAll() - } - } + @TestOnly + inline fun queryOn(realm: Realm, queries: List): RealmResults { + var realmQuery = realm.where() + queries.forEach { + realmQuery = it.filter(realmQuery) + } + return realmQuery.findAll() + } + } @PrimaryKey var id = UUID.randomUUID().toString() @@ -59,59 +59,70 @@ open class Filter : RealmObject() { // for MutableRealmInteger, see https://realm.io/docs/java/latest/#counters val usageCount: MutableRealmInteger = MutableRealmInteger.valueOf(0) - var filterConditions: RealmList = RealmList() - private set - - fun createOrUpdateFilterConditions(filterConditionRows: ArrayList) { - filterConditions.clear() - filterConditionRows - .map { - it.filterSectionRow - } - .distinct() - .forEach { section -> - filterConditionRows - .filter { - it.filterSectionRow == section - } - .apply { - - if (this.size == 1) { - filterConditions.add(FilterCondition(this.first())) - } else { - val casted = arrayListOf() - casted.addAll(this) - filterConditions.add(FilterCondition(casted)) - } + var filterConditions: RealmList = RealmList() + private set + + fun createOrUpdateFilterConditions(filterConditionRows: ArrayList) { + filterConditions.clear() + filterConditionRows + .map { + it.filterSectionRow + } + .distinct() + .forEach { section -> + filterConditionRows + .filter { + it.filterSectionRow == section + } + .apply { + if (this.size == 1) { + filterConditions.add(FilterCondition(this.first())) + } else { + val casted = arrayListOf() + casted.addAll(this) + filterConditions.add(FilterCondition(casted)) + } } } } - fun countBy(filterCategoryRow: FilterCategoryRow) : Int { - val sections = filterCategoryRow.filterSectionRows - return filterConditions.count { - sections.contains(FilterSectionRow.valueOf(it.sectionName ?: throw PokerAnalyticsException.FilterElementUnknownSectionName)) - } - } - - fun contains(filterElementRow:FilterElementRow) : Boolean { - val filtered = filterConditions.filter { - it.filterName == filterElementRow.filterName - } - if (filtered.isEmpty()) { - return false - } - return filterElementRow.contains(filtered) - } + fun countBy(filterCategoryRow: FilterCategoryRow): Int { + val sections = filterCategoryRow.filterSectionRows + return filterConditions.count { + sections.contains(FilterSectionRow.valueOf(it.sectionName ?: throw PokerAnalyticsException.FilterElementUnknownSectionName)) + } + } + + fun contains(filterElementRow: FilterElementRow): Boolean { + val filtered = filterConditions.filter { + it.filterName == filterElementRow.filterName + } + if (filtered.isEmpty()) { + return false + } + 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 results(): RealmResults { - var realmQuery = realm.where() - this.filterConditions.map { - it.queryCondition - }.forEach { - realmQuery = it.filter(realmQuery) - } + var realmQuery = realm.where() + this.filterConditions.map { + it.queryCondition + }.forEach { + realmQuery = it.filter(realmQuery) + } return realmQuery.findAll() } diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/FilterCondition.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/FilterCondition.kt index be7aa78c..b9eb4d09 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/FilterCondition.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/FilterCondition.kt @@ -157,4 +157,15 @@ open class FilterCondition() : RealmObject() { val year: Int 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 + } + } + }