|
|
|
@ -15,8 +15,10 @@ import net.pokeranalytics.android.model.realm.* |
|
|
|
import net.pokeranalytics.android.ui.view.rowrepresentable.FilterElementRow |
|
|
|
import net.pokeranalytics.android.ui.view.rowrepresentable.FilterElementRow |
|
|
|
import net.pokeranalytics.android.ui.view.rowrepresentable.FilterSectionRow |
|
|
|
import net.pokeranalytics.android.ui.view.rowrepresentable.FilterSectionRow |
|
|
|
import net.pokeranalytics.android.util.NULL_TEXT |
|
|
|
import net.pokeranalytics.android.util.NULL_TEXT |
|
|
|
|
|
|
|
import net.pokeranalytics.android.util.UserDefaults |
|
|
|
import net.pokeranalytics.android.util.extensions.endOfDay |
|
|
|
import net.pokeranalytics.android.util.extensions.endOfDay |
|
|
|
import net.pokeranalytics.android.util.extensions.startOfDay |
|
|
|
import net.pokeranalytics.android.util.extensions.startOfDay |
|
|
|
|
|
|
|
import net.pokeranalytics.android.util.extensions.toCurrency |
|
|
|
import java.text.DateFormatSymbols |
|
|
|
import java.text.DateFormatSymbols |
|
|
|
import java.util.* |
|
|
|
import java.util.* |
|
|
|
import kotlin.collections.ArrayList |
|
|
|
import kotlin.collections.ArrayList |
|
|
|
@ -45,10 +47,10 @@ inline fun <reified T : Filterable> List<QueryCondition>.queryWith(query: RealmQ |
|
|
|
sealed class QueryCondition : FilterElementRow { |
|
|
|
sealed class QueryCondition : FilterElementRow { |
|
|
|
|
|
|
|
|
|
|
|
companion object { |
|
|
|
companion object { |
|
|
|
fun valueOf(name:String) : QueryCondition { |
|
|
|
fun <T:QueryCondition> valueOf(name:String) : T { |
|
|
|
val kClass = Class.forName("${QueryCondition::class.qualifiedName}$$name").kotlin |
|
|
|
val kClass = Class.forName("${QueryCondition::class.qualifiedName}$$name").kotlin |
|
|
|
val instance = kClass.objectInstance ?: kClass.java.newInstance() |
|
|
|
val instance = kClass.objectInstance ?: kClass.java.newInstance() |
|
|
|
return instance as QueryCondition |
|
|
|
return instance as T |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
inline fun <reified T:Identifiable>getInstance(): QueryCondition { |
|
|
|
inline fun <reified T:Identifiable>getInstance(): QueryCondition { |
|
|
|
@ -62,10 +64,15 @@ sealed class QueryCondition : FilterElementRow { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
inline fun < reified T: Filterable, reified S: QueryCondition>distinct(): RealmResults<T>? { |
|
|
|
inline fun < reified T: Filterable, reified S: QueryCondition, reified U:Comparable<U>>distinct(): RealmResults<T>? { |
|
|
|
FilterHelper.fieldNameForQueryType<T>(S::class.java)?.let { |
|
|
|
FilterHelper.fieldNameForQueryType<T>(S::class.java)?.let { |
|
|
|
val realm = Realm.getDefaultInstance() |
|
|
|
val realm = Realm.getDefaultInstance() |
|
|
|
val distincts = realm.where<T>().distinct(it).findAll().sort(it, Sort.ASCENDING) |
|
|
|
|
|
|
|
|
|
|
|
val distincts = when (T::class) { |
|
|
|
|
|
|
|
String::class, Int::class -> realm.where<T>().distinct(it).findAll().sort(it, Sort.ASCENDING) |
|
|
|
|
|
|
|
else -> realm.where<T>().isNotNull(it).findAll().sort(it, Sort.ASCENDING) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
realm.close() |
|
|
|
realm.close() |
|
|
|
return distincts |
|
|
|
return distincts |
|
|
|
} |
|
|
|
} |
|
|
|
@ -133,7 +140,7 @@ sealed class QueryCondition : FilterElementRow { |
|
|
|
return when (this) { |
|
|
|
return when (this) { |
|
|
|
is StaticDataQueryCondition -> label() |
|
|
|
is StaticDataQueryCondition -> label() |
|
|
|
is QueryDataCondition<*> -> label() |
|
|
|
is QueryDataCondition<*> -> label() |
|
|
|
is AnyBlind -> label() |
|
|
|
is ListOfValueQueryCondition<*> -> label() |
|
|
|
else -> baseId |
|
|
|
else -> baseId |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
@ -332,9 +339,9 @@ sealed class QueryCondition : FilterElementRow { |
|
|
|
object DuringThisMonth: QueryCondition() |
|
|
|
object DuringThisMonth: QueryCondition() |
|
|
|
object DuringThisYear: QueryCondition() |
|
|
|
object DuringThisYear: QueryCondition() |
|
|
|
|
|
|
|
|
|
|
|
object TournamentFee: ListOfValueQueryCondition<Double>() { |
|
|
|
class TournamentFee: ListOfValueQueryCondition<Double>() { |
|
|
|
override fun labelForValue(value: Double): String { |
|
|
|
override fun labelForValue(value: Double): String { |
|
|
|
return "$value" |
|
|
|
return value.toCurrency(UserDefaults.currency) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@ -374,7 +381,7 @@ sealed class QueryCondition : FilterElementRow { |
|
|
|
realmQuery |
|
|
|
realmQuery |
|
|
|
} |
|
|
|
} |
|
|
|
is AnyBlind -> realmQuery.`in`(fieldName, listOfValues.toTypedArray()) |
|
|
|
is AnyBlind -> realmQuery.`in`(fieldName, listOfValues.toTypedArray()) |
|
|
|
is TournamentFee -> realmQuery.`in`(fieldName, listOfValues.toTypedArray()) |
|
|
|
is TournamentFee -> realmQuery.equalTo(fieldName, listOfValues.first()) |
|
|
|
is QueryDataCondition<*> -> realmQuery.`in`(fieldName, listOfValues.toTypedArray()) |
|
|
|
is QueryDataCondition<*> -> realmQuery.`in`(fieldName, listOfValues.toTypedArray()) |
|
|
|
is StaticDataQueryCondition -> realmQuery.`in`(fieldName, listOfValues.toTypedArray()) |
|
|
|
is StaticDataQueryCondition -> realmQuery.`in`(fieldName, listOfValues.toTypedArray()) |
|
|
|
is DateQuery -> { |
|
|
|
is DateQuery -> { |
|
|
|
|