update criteria

feature/top10
Razmig Sarkissian 7 years ago
parent 7e47f1e107
commit 058c0b0db6
  1. 91
      app/src/main/java/net/pokeranalytics/android/model/Criteria.kt

@ -1,15 +1,13 @@
package net.pokeranalytics.android.model package net.pokeranalytics.android.model
import io.realm.Realm import io.realm.Realm
import io.realm.RealmResults
import io.realm.Sort import io.realm.Sort
import io.realm.internal.Table
import io.realm.kotlin.where import io.realm.kotlin.where
import net.pokeranalytics.android.exceptions.PokerAnalyticsException import net.pokeranalytics.android.exceptions.PokerAnalyticsException
import net.pokeranalytics.android.model.filter.FilterHelper
import net.pokeranalytics.android.model.filter.QueryCondition import net.pokeranalytics.android.model.filter.QueryCondition
import net.pokeranalytics.android.model.interfaces.Identifiable import net.pokeranalytics.android.model.interfaces.Identifiable
import net.pokeranalytics.android.model.realm.* import net.pokeranalytics.android.model.realm.*
import java.util.*
sealed class Criteria { sealed class Criteria {
abstract class RealmCriteria : Criteria() { abstract class RealmCriteria : Criteria() {
@ -18,9 +16,9 @@ sealed class Criteria {
} }
} }
abstract class SimpleCriteria(private val condition:QueryCondition): Criteria() { abstract class SimpleCriteria(private val conditions:List<QueryCondition>): Criteria() {
fun comparison(): List<QueryCondition> { fun comparison(): List<QueryCondition> {
return listOf(condition) return conditions
} }
} }
@ -32,6 +30,7 @@ sealed class Criteria {
is Limits -> session.limit is Limits -> session.limit
is TournamentTypes -> session.tournamentType is TournamentTypes -> session.tournamentType
is TableSizes -> session.tableSize is TableSizes -> session.tableSize
//is TournamentFees -> session.tournamentEntryFee
else -> null else -> null
} }
} }
@ -49,8 +48,14 @@ sealed class Criteria {
object Limits: StaticCriteria() object Limits: StaticCriteria()
object TableSizes: StaticCriteria() object TableSizes: StaticCriteria()
object TournamentTypes: StaticCriteria() object TournamentTypes: StaticCriteria()
object monthOfYear: SimpleCriteria(List(12) { index -> QueryCondition.MONTH().apply { intValue = index } })
object Tournament : SimpleCriteria(QueryCondition.TOURNAMENT) object dayOfWeek: SimpleCriteria(List(7) { index -> QueryCondition.DAY_OF_WEEK().apply { intValue = index } })
object SessionType: SimpleCriteria(listOf(QueryCondition.CASH, QueryCondition.TOURNAMENT))
object BankrollType: SimpleCriteria(listOf(QueryCondition.LIVE, QueryCondition.ONLINE))
object dayPeriod: SimpleCriteria(listOf(QueryCondition.WEEK_DAY, QueryCondition.WEEK_END))
object Year: Criteria()
object Blinds: Criteria()
//object TournamentFees: StaticCriteria()
val queryConditions: List<QueryCondition> val queryConditions: List<QueryCondition>
get() { get() {
@ -64,6 +69,36 @@ sealed class Criteria {
is Limits -> comparison<QueryCondition.LIMIT>() is Limits -> comparison<QueryCondition.LIMIT>()
is TournamentTypes -> comparison<QueryCondition.TOURNAMENT_TYPE>() is TournamentTypes -> comparison<QueryCondition.TOURNAMENT_TYPE>()
is TableSizes -> comparison<QueryCondition.TABLE_SIZE>() is TableSizes -> comparison<QueryCondition.TABLE_SIZE>()
is Year -> {
val years = arrayListOf<QueryCondition.YEAR>()
val calendar = Calendar.getInstance()
calendar.time = Date()
val yearNow = calendar.get(Calendar.YEAR)
val realm = Realm.getDefaultInstance()
realm.where<Session>().sort("year", Sort.ASCENDING).findFirst()?.year?.let {
for (index in 0..(yearNow - it)) {
years.add(QueryCondition.YEAR().apply {
intValue = yearNow - index
})
}
}
realm.close()
years
}
is Blinds -> {
val blinds = arrayListOf<QueryCondition.BLIND>()
val realm = Realm.getDefaultInstance()
realm.where<Session>().distinct("blinds", "bankroll.currency.code").findAll().sort("cgSmallBlind", Sort.ASCENDING).map {
it.blinds?.let { stake ->
blinds.add(QueryCondition.BLIND().apply {
blind = stake
hasDefaultCurrency = it.hasDefaultCurrency
})
}
}
realm.close()
blinds
}
else -> throw PokerAnalyticsException.QueryTypeUnhandled else -> throw PokerAnalyticsException.QueryTypeUnhandled
} }
} }
@ -92,4 +127,46 @@ sealed class Criteria {
} }
} }
fun List<Criteria>.combined(): List<List<QueryCondition>> {
val comparatorList = ArrayList<List<QueryCondition>>()
this.forEach {
comparatorList.add(it.queryConditions)
}
return getCombinations(comparatorList)
}
private fun <T> getCombinations(lists: List<List<T>>): List<List<T>> {
var combinations: MutableSet<List<T>> = LinkedHashSet()
var newCombinations: MutableSet<List<T>>
var index = 0
// extract each of the integers in the first list
// and add each to ints as a new list
if (lists.isNotEmpty()) {
for (i in lists[0]) {
val newList = ArrayList<T>()
newList.add(i)
combinations.add(newList)
}
index++
}
while (index < lists.size) {
val nextList = lists[index]
newCombinations = LinkedHashSet()
for (first in combinations) {
for (second in nextList) {
val newList = ArrayList<T>()
newList.addAll(first)
newList.add(second)
newCombinations.add(newList)
}
}
combinations = newCombinations
index++
}
return combinations.toList()
}
} }
Loading…
Cancel
Save