feature/top10
Laurent 7 years ago
parent c97282a47d
commit 37e6c98008
  1. 3
      app/src/main/java/net/pokeranalytics/android/model/filter/Filterable.kt
  2. 2
      app/src/main/java/net/pokeranalytics/android/model/filter/QueryType.kt
  3. 49
      app/src/main/java/net/pokeranalytics/android/model/realm/Filter.kt
  4. 7
      app/src/main/java/net/pokeranalytics/android/model/realm/SessionSet.kt

@ -3,6 +3,7 @@ package net.pokeranalytics.android.model.filter
import io.realm.RealmModel
import net.pokeranalytics.android.model.realm.ComputableResult
import net.pokeranalytics.android.model.realm.Session
import net.pokeranalytics.android.model.realm.SessionSet
/**
* We want to be able to store filters in the database:
@ -58,7 +59,7 @@ class FilterHelper {
Session.fieldNameForQueryType(queryType)
}
ComputableResult::class.java -> ComputableResult.fieldNameForQueryType(queryType)
// is SessionSet -> SessionSet.fieldNameForQueryType(queryType)
SessionSet::class.java -> SessionSet.fieldNameForQueryType(queryType)
else -> {
throw UnmanagedFilterField("Filterable type fields are not defined for class ${T::class}")
}

@ -6,7 +6,6 @@ import net.pokeranalytics.android.exceptions.PokerAnalyticsException
import net.pokeranalytics.android.model.realm.FilterElement
import net.pokeranalytics.android.model.realm.FilterElementBlind
import net.pokeranalytics.android.model.realm.Session
import timber.log.Timber
import java.util.*
@ -142,7 +141,6 @@ enum class QueryType(var subType:SubType? = null) {
val fieldName = FilterHelper.fieldNameForQueryType<T>(this)
fieldName ?: throw PokerAnalyticsException.QueryValueMapUnknown
Timber.d(">>>> fi = ${fieldName}")
this.subType?.let { subType ->
return when (subType) {

@ -10,7 +10,6 @@ import net.pokeranalytics.android.ui.view.rowrepresentable.FilterCategoryRow
import net.pokeranalytics.android.ui.view.rowrepresentable.FilterElementRow
import net.pokeranalytics.android.ui.view.rowrepresentable.FilterSectionRow
import org.jetbrains.annotations.TestOnly
import timber.log.Timber
import java.util.*
/**
@ -18,44 +17,13 @@ import java.util.*
* It contains a list of [FilterElement] describing the complete query to launch
* The [Filter] is working closely with a [Filterable] interface providing the entity we want the query being launched on
*/
open class Filter(entity: Filterable) : RealmObject() {
open class Filter : RealmObject() {
constructor() : this(entity = Session)
private var entityType : Int? = Entity.SESSION.ordinal
private var entityType : Int? = FilterableClass.filterableClass(entity = entity).ordinal
private val filterableClass : FilterableClass?
get() {
entityType?.let {
return FilterableClass.values()[it]
}
return null
}
private enum class FilterableClass {
private enum class Entity {
SESSION,
;
companion object {
fun filterableClass(entity: Filterable): FilterableClass {
return when (entity) {
is Session.Companion -> SESSION
else -> throw PokerAnalyticsException.FilterUnhandledEntity
}
}
}
}
companion object {
@TestOnly
inline fun <reified T : Filterable> queryOn(realm: Realm, queries: List<QueryType>): RealmResults<T> {
var realmQuery = realm.where<T>()
queries.forEach {
realmQuery = it.filter<T>(realmQuery)
}
Timber.d(">>>>> query = ${realmQuery.description}")
return realmQuery.findAll()
}
}
@PrimaryKey
@ -71,6 +39,17 @@ open class Filter(entity: Filterable) : RealmObject() {
var filterElements: RealmList<FilterElement> = RealmList()
private set
companion object {
@TestOnly
inline fun <reified T : Filterable> queryOn(realm: Realm, queries: List<QueryType>): RealmResults<T> {
var realmQuery = realm.where<T>()
queries.forEach {
realmQuery = it.filter<T>(realmQuery)
}
return realmQuery.findAll()
}
}
fun createOrUpdateFilterElements(filterElementRows: ArrayList<FilterElementRow>) {
filterElements.clear()
filterElementRows

@ -6,6 +6,7 @@ import io.realm.RealmResults
import io.realm.annotations.Ignore
import io.realm.annotations.LinkingObjects
import net.pokeranalytics.android.model.filter.Filterable
import net.pokeranalytics.android.model.filter.QueryType
import net.pokeranalytics.android.model.interfaces.Timed
import java.util.*
@ -48,13 +49,17 @@ open class SessionSet : RealmObject(), Timed, Filterable {
*/
override var netDuration: Long = 0L
companion object {
companion object : Filterable {
fun newInstance(realm: Realm) : SessionSet {
val sessionSet: SessionSet = realm.createObject(SessionSet::class.java)
return realm.copyToRealm(sessionSet)
}
fun fieldNameForQueryType(queryType: QueryType): String? {
return "sessions." + Session.fieldNameForQueryType(queryType)
}
}
fun computeStats() {

Loading…
Cancel
Save