diff --git a/app/src/main/java/net/pokeranalytics/android/model/comparison/Comparator.kt b/app/src/main/java/net/pokeranalytics/android/model/comparison/Comparator.kt new file mode 100644 index 00000000..90e4f6f0 --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/model/comparison/Comparator.kt @@ -0,0 +1,73 @@ +package net.pokeranalytics.android.model.comparison + +import io.realm.Realm +import io.realm.RealmQuery +import io.realm.kotlin.where +import net.pokeranalytics.android.exceptions.PokerAnalyticsException +import net.pokeranalytics.android.model.filter.Filterable +import net.pokeranalytics.android.model.filter.QueryCondition + +enum class Comparator { + DAY_OF_WEEK, + MONTH, + BLIND, + ; + + val queryConditions: List + get() { + return when (this) { + DAY_OF_WEEK -> listOf() + else -> throw PokerAnalyticsException.QueryTypeUnhandled + } + } + +} + +fun List.combined(): List> { + val comparatorList = ArrayList>() + this.forEach { + comparatorList.add(it.queryConditions) + } + return getCombinations(comparatorList) +} + +inline fun List.query(realm: Realm): RealmQuery { + var realmQuery = realm.where() + this.forEach { + realmQuery = it.filter(realmQuery) + } + return realmQuery +} + +fun getCombinations(lists: List>): List> { + var combinations: MutableSet> = HashSet() + var newCombinations: MutableSet> + + var index = 0 + + // extract each of the integers in the first list + // and add each to ints as a new list + for (i in lists[0]) { + val newList = ArrayList() + newList.add(i) + combinations.add(newList) + } + index++ + while (index < lists.size) { + val nextList = lists[index] + newCombinations = HashSet() + for (first in combinations) { + for (second in nextList) { + val newList = ArrayList() + newList.addAll(first) + newList.add(second) + newCombinations.add(newList) + } + } + combinations = newCombinations + + index++ + } + + return combinations.toList() +} \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/model/migrations/PokerAnalyticsMigration.kt b/app/src/main/java/net/pokeranalytics/android/model/migrations/PokerAnalyticsMigration.kt index 2d41451d..02748a29 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/migrations/PokerAnalyticsMigration.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/migrations/PokerAnalyticsMigration.kt @@ -35,9 +35,6 @@ class PokerAnalyticsMigration : RealmMigration { // Migrate to version 2 if (currentVersion == 1) { Timber.d("*** Running migration ${currentVersion + 1}") - schema.get("Session")?.let { - it.addField("blinds", String::class.java).setNullable("blinds", true) - } schema.rename("FilterElement", "FilterCondition") schema.get("Filter")?.let { it.renameField("filterElements", "filterConditions") @@ -52,7 +49,20 @@ class PokerAnalyticsMigration : RealmMigration { if (currentVersion == 2) { Timber.d("*** Running migration ${currentVersion + 1}") schema.rename("Report", "ReportSetup") - currentVersion++ + + schema.get("Session")?.let { + it.addField("blinds", String::class.java).setNullable("blinds", true) + } + + schema.get("FilterCondition")?.let { + it.addRealmListField("booleanValues", Boolean::class.java).setNullable("booleanValues", true) + } + + schema.get("FilterCondition")?.let { + it.removeField("blindValues") + } + + currentVersion++ } }