|
|
|
|
@ -16,7 +16,6 @@ import net.pokeranalytics.android.model.Criteria.TournamentFees.comparison |
|
|
|
|
import net.pokeranalytics.android.model.Criteria.TournamentNames.comparison |
|
|
|
|
import net.pokeranalytics.android.model.Criteria.TournamentTypes.comparison |
|
|
|
|
import net.pokeranalytics.android.model.Criteria.TransactionTypes.comparison |
|
|
|
|
import net.pokeranalytics.android.model.filter.FilterHelper |
|
|
|
|
import net.pokeranalytics.android.model.filter.Query |
|
|
|
|
import net.pokeranalytics.android.model.filter.QueryCondition |
|
|
|
|
import net.pokeranalytics.android.model.interfaces.NameManageable |
|
|
|
|
@ -61,21 +60,22 @@ sealed class Criteria(override var uniqueIdentifier: Int) : IntIdentifiable, Row |
|
|
|
|
|
|
|
|
|
abstract class RealmCriteria(uniqueIdentifier: Int) : Criteria(uniqueIdentifier) { |
|
|
|
|
inline fun <reified T : NameManageable> comparison(): List<Query> { |
|
|
|
|
if (this is ListCustomFields) { |
|
|
|
|
val objects = mutableListOf<QueryCondition.CustomFieldListQuery>() |
|
|
|
|
val realm = Realm.getDefaultInstance() |
|
|
|
|
realm.where<CustomFieldEntry>().equalTo("customField.id", this.customField.id).findAll().forEach { |
|
|
|
|
objects.add(QueryCondition.CustomFieldListQuery(it)) |
|
|
|
|
} |
|
|
|
|
objects.sorted() |
|
|
|
|
realm.close() |
|
|
|
|
return objects.map { Query(it) } |
|
|
|
|
} |
|
|
|
|
if (this is ListCustomFields) { |
|
|
|
|
val objects = mutableListOf<QueryCondition.CustomFieldListQuery>() |
|
|
|
|
val realm = Realm.getDefaultInstance() |
|
|
|
|
realm.where<CustomFieldEntry>().equalTo("customField.id", this.customFieldId).findAll().forEach { |
|
|
|
|
objects.add(QueryCondition.CustomFieldListQuery(it)) |
|
|
|
|
} |
|
|
|
|
objects.sorted() |
|
|
|
|
realm.close() |
|
|
|
|
return objects.map { Query(it) } |
|
|
|
|
} |
|
|
|
|
return compare<QueryCondition.QueryDataCondition<NameManageable>, T>() |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
abstract class SimpleCriteria(private val conditions: List<QueryCondition>, uniqueIdentifier: Int) : Criteria(uniqueIdentifier) { |
|
|
|
|
abstract class SimpleCriteria(private val conditions: List<QueryCondition>, uniqueIdentifier: Int) : |
|
|
|
|
Criteria(uniqueIdentifier) { |
|
|
|
|
fun comparison(): List<Query> { |
|
|
|
|
return conditions.map { Query(it) } |
|
|
|
|
} |
|
|
|
|
@ -84,22 +84,25 @@ sealed class Criteria(override var uniqueIdentifier: Int) : IntIdentifiable, Row |
|
|
|
|
abstract class ListCriteria(uniqueIdentifier: Int) : Criteria(uniqueIdentifier) { |
|
|
|
|
inline fun <reified T : QueryCondition.ListOfValues<S>, reified S : Comparable<S>> comparison(): List<Query> { |
|
|
|
|
|
|
|
|
|
if (this is ValueCustomFields) { |
|
|
|
|
val realm = Realm.getDefaultInstance() |
|
|
|
|
val distincts = realm.where<CustomFieldEntry>().equalTo("customField.id", this.customField.id).distinct("value").findAll().sort("value", Sort.ASCENDING) |
|
|
|
|
realm.close() |
|
|
|
|
|
|
|
|
|
val objects = mutableListOf<QueryCondition.CustomFieldNumberQuery>() |
|
|
|
|
distincts.distinct().forEach { |
|
|
|
|
val condition: QueryCondition.CustomFieldNumberQuery = QueryCondition.CustomFieldNumberQuery().apply { |
|
|
|
|
this.customFieldId = this@ListCriteria.customField.id |
|
|
|
|
listOfValues = arrayListOf(it.value) |
|
|
|
|
} |
|
|
|
|
objects.add(condition) |
|
|
|
|
objects.sorted() |
|
|
|
|
return objects.map { Query(it) } |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (this is ValueCustomFields) { |
|
|
|
|
val realm = Realm.getDefaultInstance() |
|
|
|
|
val distincts = |
|
|
|
|
realm.where<CustomFieldEntry>().equalTo("customField.id", this.customFieldId).distinct("value") |
|
|
|
|
.findAll().sort("value", Sort.ASCENDING) |
|
|
|
|
realm.close() |
|
|
|
|
|
|
|
|
|
val objects = mutableListOf<QueryCondition.CustomFieldNumberQuery>() |
|
|
|
|
distincts.distinct().forEach { |
|
|
|
|
val condition: QueryCondition.CustomFieldNumberQuery = |
|
|
|
|
QueryCondition.CustomFieldNumberQuery().apply { |
|
|
|
|
this.customFieldId = this@ListCriteria.customFieldId |
|
|
|
|
listOfValues = arrayListOf(it.value) |
|
|
|
|
} |
|
|
|
|
objects.add(condition) |
|
|
|
|
objects.sorted() |
|
|
|
|
return objects.map { Query(it) } |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
QueryCondition.distinct<Session, T, S>()?.let { |
|
|
|
|
val values = it.mapNotNull { session -> |
|
|
|
|
@ -155,8 +158,13 @@ sealed class Criteria(override var uniqueIdentifier: Int) : IntIdentifiable, Row |
|
|
|
|
object TournamentFees : ListCriteria(18) |
|
|
|
|
object Cash : SimpleCriteria(listOf(QueryCondition.IsCash), 19) |
|
|
|
|
object Tournament : SimpleCriteria(listOf(QueryCondition.IsTournament), 20) |
|
|
|
|
data class ListCustomFields(var customField: CustomField) : RealmCriteria(21) |
|
|
|
|
data class ValueCustomFields(var customField: CustomField) : ListCriteria(22) |
|
|
|
|
data class ListCustomFields(override var customField: CustomField) : RealmCriteria(21), CustomFieldCriteria { |
|
|
|
|
override var customFieldId: String = customField.id |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
data class ValueCustomFields(override var customField: CustomField) : ListCriteria(22), CustomFieldCriteria { |
|
|
|
|
override var customFieldId: String = customField.id |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
val queries: List<Query> |
|
|
|
|
get() { |
|
|
|
|
@ -230,7 +238,7 @@ sealed class Criteria(override var uniqueIdentifier: Int) : IntIdentifiable, Row |
|
|
|
|
years |
|
|
|
|
} |
|
|
|
|
is Blinds -> comparison<QueryCondition.AnyBlind, String>() |
|
|
|
|
is ListCustomFields -> comparison<CustomFieldEntry>() |
|
|
|
|
is ListCustomFields -> comparison<CustomFieldEntry>() |
|
|
|
|
else -> throw PokerAnalyticsException.QueryTypeUnhandled |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
@ -255,8 +263,8 @@ sealed class Criteria(override var uniqueIdentifier: Int) : IntIdentifiable, Row |
|
|
|
|
AllMonthsUpToNow -> R.string.month |
|
|
|
|
Blinds -> R.string.blind |
|
|
|
|
TournamentFees -> R.string.entry_fees |
|
|
|
|
is ListCustomFields -> this.customField.resId |
|
|
|
|
is ValueCustomFields -> this.customField.resId |
|
|
|
|
is ListCustomFields -> this.customField.resId |
|
|
|
|
is ValueCustomFields -> this.customField.resId |
|
|
|
|
else -> null |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
@ -308,3 +316,8 @@ sealed class Criteria(override var uniqueIdentifier: Int) : IntIdentifiable, Row |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
interface CustomFieldCriteria { |
|
|
|
|
var customField: CustomField |
|
|
|
|
var customFieldId: String |
|
|
|
|
} |