|
|
|
@ -1,6 +1,7 @@ |
|
|
|
package net.pokeranalytics.android.model.filter |
|
|
|
package net.pokeranalytics.android.model.filter |
|
|
|
|
|
|
|
|
|
|
|
import android.content.Context |
|
|
|
import android.content.Context |
|
|
|
|
|
|
|
import com.ibm.icu.text.RuleBasedNumberFormat |
|
|
|
import io.realm.Realm |
|
|
|
import io.realm.Realm |
|
|
|
import io.realm.RealmQuery |
|
|
|
import io.realm.RealmQuery |
|
|
|
import io.realm.RealmResults |
|
|
|
import io.realm.RealmResults |
|
|
|
@ -128,13 +129,13 @@ sealed class QueryCondition : FilterElementRow { |
|
|
|
|
|
|
|
|
|
|
|
abstract class SingleValue<T>: ListOfValues<T>() where T:Comparable<T> { |
|
|
|
abstract class SingleValue<T>: ListOfValues<T>() where T:Comparable<T> { |
|
|
|
override var listOfValues = ArrayList<T>() |
|
|
|
override var listOfValues = ArrayList<T>() |
|
|
|
abstract var singleValue : T |
|
|
|
abstract var singleValue : T? |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
abstract class ListOfDouble: ListOfValues<Double>() { |
|
|
|
abstract class ListOfDouble: ListOfValues<Double>() { |
|
|
|
open var sign: Int = 1 |
|
|
|
open var sign: Int = 1 |
|
|
|
override var operator: Operator = Operator.ANY |
|
|
|
override var operator: Operator = Operator.ANY |
|
|
|
override var listOfValues = arrayListOf(0.0) |
|
|
|
override var listOfValues : ArrayList<Double> = arrayListOf() |
|
|
|
override fun updateValueBy(filterCondition: FilterCondition) { |
|
|
|
override fun updateValueBy(filterCondition: FilterCondition) { |
|
|
|
super.updateValueBy(filterCondition) |
|
|
|
super.updateValueBy(filterCondition) |
|
|
|
listOfValues = filterCondition.getValues() |
|
|
|
listOfValues = filterCondition.getValues() |
|
|
|
@ -149,7 +150,7 @@ sealed class QueryCondition : FilterElementRow { |
|
|
|
|
|
|
|
|
|
|
|
abstract class ListOfInt: ListOfValues<Int>() { |
|
|
|
abstract class ListOfInt: ListOfValues<Int>() { |
|
|
|
override var operator: Operator = Operator.ANY |
|
|
|
override var operator: Operator = Operator.ANY |
|
|
|
override var listOfValues = arrayListOf(0) |
|
|
|
override var listOfValues : ArrayList<Int> = arrayListOf() |
|
|
|
override fun updateValueBy(filterCondition: FilterCondition) { |
|
|
|
override fun updateValueBy(filterCondition: FilterCondition) { |
|
|
|
super.updateValueBy(filterCondition) |
|
|
|
super.updateValueBy(filterCondition) |
|
|
|
listOfValues = filterCondition.getValues() |
|
|
|
listOfValues = filterCondition.getValues() |
|
|
|
@ -182,11 +183,11 @@ sealed class QueryCondition : FilterElementRow { |
|
|
|
|
|
|
|
|
|
|
|
override var listOfValues = ArrayList<Date>() |
|
|
|
override var listOfValues = ArrayList<Date>() |
|
|
|
|
|
|
|
|
|
|
|
override var singleValue: Date |
|
|
|
override var singleValue: Date? |
|
|
|
get() { return listOfValues.firstOrNull() ?: Date() } |
|
|
|
get() { return listOfValues.firstOrNull() } |
|
|
|
set(value) { |
|
|
|
set(value) { |
|
|
|
listOfValues.removeAll(this.listOfValues) |
|
|
|
listOfValues.removeAll(this.listOfValues) |
|
|
|
listOfValues.add(value) |
|
|
|
value?.let { listOfValues.add(it) } |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
override fun updateValueBy(filterCondition: FilterCondition) { |
|
|
|
override fun updateValueBy(filterCondition: FilterCondition) { |
|
|
|
@ -203,11 +204,11 @@ sealed class QueryCondition : FilterElementRow { |
|
|
|
return prefix+value.toString() |
|
|
|
return prefix+value.toString() |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
override var singleValue: Int |
|
|
|
override var singleValue: Int? |
|
|
|
get() { return listOfValues.firstOrNull() ?: 0 } |
|
|
|
get() { return listOfValues.firstOrNull() } |
|
|
|
set(value) { |
|
|
|
set(value) { |
|
|
|
listOfValues.removeAll(this.listOfValues) |
|
|
|
listOfValues.removeAll(this.listOfValues) |
|
|
|
listOfValues.add(value) |
|
|
|
value?.let { listOfValues.add(it) } |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
override fun updateValueBy(filterCondition: FilterCondition) { |
|
|
|
override fun updateValueBy(filterCondition: FilterCondition) { |
|
|
|
@ -389,8 +390,8 @@ sealed class QueryCondition : FilterElementRow { |
|
|
|
val prefix = this.resId?.let { |
|
|
|
val prefix = this.resId?.let { |
|
|
|
context.getString(it) + " " |
|
|
|
context.getString(it) + " " |
|
|
|
} ?: "" |
|
|
|
} ?: "" |
|
|
|
//TODO add a int helper to display 1st, 2nd, 3rd, 4th, etc. |
|
|
|
val nf = RuleBasedNumberFormat(Locale.getDefault(), RuleBasedNumberFormat.ORDINAL) |
|
|
|
return prefix + value.toString() |
|
|
|
return prefix + nf.format(value) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@ -471,9 +472,9 @@ sealed class QueryCondition : FilterElementRow { |
|
|
|
|
|
|
|
|
|
|
|
class Duration: SingleInt() { |
|
|
|
class Duration: SingleInt() { |
|
|
|
override var operator = Operator.EQUALS |
|
|
|
override var operator = Operator.EQUALS |
|
|
|
var minutes:Int |
|
|
|
var minutes:Int? |
|
|
|
get() { return singleValue } |
|
|
|
get() { return singleValue } |
|
|
|
set(value) { listOfValues = arrayListOf(value) } |
|
|
|
set(value) { singleValue = value } |
|
|
|
|
|
|
|
|
|
|
|
override val viewType: Int = RowViewType.TITLE_VALUE_CHECK.ordinal |
|
|
|
override val viewType: Int = RowViewType.TITLE_VALUE_CHECK.ordinal |
|
|
|
override val bottomSheetType: BottomSheetType = BottomSheetType.DOUBLE_EDIT_TEXT |
|
|
|
override val bottomSheetType: BottomSheetType = BottomSheetType.DOUBLE_EDIT_TEXT |
|
|
|
@ -482,14 +483,14 @@ sealed class QueryCondition : FilterElementRow { |
|
|
|
class StartedFromTime(startTime:Date = Date().startOfDay()): TimeQuery() { |
|
|
|
class StartedFromTime(startTime:Date = Date().startOfDay()): TimeQuery() { |
|
|
|
override var operator = Operator.MORE |
|
|
|
override var operator = Operator.MORE |
|
|
|
init { |
|
|
|
init { |
|
|
|
this.listOfValues = arrayListOf(startTime) |
|
|
|
this.listOfValues = arrayListOf() |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
class EndedToTime(endTime:Date = Date().endOfDay()): TimeQuery() { |
|
|
|
class EndedToTime(endTime:Date = Date().endOfDay()): TimeQuery() { |
|
|
|
override var operator = Operator.LESS |
|
|
|
override var operator = Operator.LESS |
|
|
|
init { |
|
|
|
init { |
|
|
|
this.listOfValues = arrayListOf(endTime) |
|
|
|
this.listOfValues = arrayListOf() |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@ -550,11 +551,14 @@ sealed class QueryCondition : FilterElementRow { |
|
|
|
return realmQuery.greaterThanOrEqualTo(fieldName, calendar.time.startOfDay()).and().lessThanOrEqualTo(fieldName, calendar.time.endOfDay()) |
|
|
|
return realmQuery.greaterThanOrEqualTo(fieldName, calendar.time.startOfDay()).and().lessThanOrEqualTo(fieldName, calendar.time.endOfDay()) |
|
|
|
} |
|
|
|
} |
|
|
|
is PastDay -> { |
|
|
|
is PastDay -> { |
|
|
|
val startDate = Date() |
|
|
|
singleValue?.let { |
|
|
|
val calendar = Calendar.getInstance() |
|
|
|
val startDate = Date() |
|
|
|
calendar.time = startDate |
|
|
|
val calendar = Calendar.getInstance() |
|
|
|
calendar.add(Calendar.DAY_OF_YEAR, -singleValue) |
|
|
|
calendar.time = startDate |
|
|
|
return realmQuery.greaterThanOrEqualTo(fieldName, calendar.time.startOfDay()).and().lessThanOrEqualTo(fieldName, startDate.endOfDay()) |
|
|
|
calendar.add(Calendar.DAY_OF_YEAR, -it) |
|
|
|
|
|
|
|
return realmQuery.greaterThanOrEqualTo(fieldName, calendar.time.startOfDay()).and().lessThanOrEqualTo(fieldName, startDate.endOfDay()) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
return realmQuery |
|
|
|
} |
|
|
|
} |
|
|
|
is DuringThisWeek -> { |
|
|
|
is DuringThisWeek -> { |
|
|
|
val startDate = Date() |
|
|
|
val startDate = Date() |
|
|
|
@ -602,8 +606,8 @@ sealed class QueryCondition : FilterElementRow { |
|
|
|
return when (operator) { |
|
|
|
return when (operator) { |
|
|
|
Operator.EQUALS -> { |
|
|
|
Operator.EQUALS -> { |
|
|
|
when (this) { |
|
|
|
when (this) { |
|
|
|
is SingleDate -> realmQuery.equalTo(fieldName, singleValue) |
|
|
|
is SingleDate -> realmQuery.equalTo(fieldName, singleValue?:throw PokerAnalyticsException.FilterElementExpectedValueMissing) |
|
|
|
is SingleInt -> realmQuery.equalTo(fieldName, singleValue) |
|
|
|
is SingleInt -> realmQuery.equalTo(fieldName, singleValue?:throw PokerAnalyticsException.FilterElementExpectedValueMissing) |
|
|
|
is ListOfInt -> realmQuery.equalTo(fieldName, listOfValues.first()) |
|
|
|
is ListOfInt -> realmQuery.equalTo(fieldName, listOfValues.first()) |
|
|
|
is ListOfDouble -> realmQuery.equalTo(fieldName, listOfValues.first() * sign) |
|
|
|
is ListOfDouble -> realmQuery.equalTo(fieldName, listOfValues.first() * sign) |
|
|
|
is ListOfString -> realmQuery.equalTo(fieldName, listOfValues.first()) |
|
|
|
is ListOfString -> realmQuery.equalTo(fieldName, listOfValues.first()) |
|
|
|
@ -612,8 +616,8 @@ sealed class QueryCondition : FilterElementRow { |
|
|
|
} |
|
|
|
} |
|
|
|
Operator.MORE -> { |
|
|
|
Operator.MORE -> { |
|
|
|
when (this) { |
|
|
|
when (this) { |
|
|
|
is SingleDate -> realmQuery.greaterThanOrEqualTo(fieldName, singleValue) |
|
|
|
is SingleDate -> realmQuery.greaterThanOrEqualTo(fieldName, singleValue?:throw PokerAnalyticsException.FilterElementExpectedValueMissing) |
|
|
|
is SingleInt -> realmQuery.greaterThanOrEqualTo(fieldName, singleValue) |
|
|
|
is SingleInt -> realmQuery.greaterThanOrEqualTo(fieldName, singleValue?:throw PokerAnalyticsException.FilterElementExpectedValueMissing) |
|
|
|
is ListOfInt -> realmQuery.greaterThanOrEqualTo(fieldName, listOfValues.first()) |
|
|
|
is ListOfInt -> realmQuery.greaterThanOrEqualTo(fieldName, listOfValues.first()) |
|
|
|
is ListOfDouble -> realmQuery.greaterThanOrEqualTo(fieldName, listOfValues.first() * sign) |
|
|
|
is ListOfDouble -> realmQuery.greaterThanOrEqualTo(fieldName, listOfValues.first() * sign) |
|
|
|
else -> realmQuery |
|
|
|
else -> realmQuery |
|
|
|
@ -621,8 +625,8 @@ sealed class QueryCondition : FilterElementRow { |
|
|
|
} |
|
|
|
} |
|
|
|
Operator.LESS -> { |
|
|
|
Operator.LESS -> { |
|
|
|
when (this) { |
|
|
|
when (this) { |
|
|
|
is SingleDate -> realmQuery.lessThanOrEqualTo(fieldName, singleValue) |
|
|
|
is SingleDate -> realmQuery.lessThanOrEqualTo(fieldName, singleValue?:throw PokerAnalyticsException.FilterElementExpectedValueMissing) |
|
|
|
is SingleInt -> realmQuery.lessThanOrEqualTo(fieldName, singleValue) |
|
|
|
is SingleInt -> realmQuery.lessThanOrEqualTo(fieldName, singleValue?:throw PokerAnalyticsException.FilterElementExpectedValueMissing) |
|
|
|
is ListOfInt -> realmQuery.lessThanOrEqualTo(fieldName, listOfValues.first()) |
|
|
|
is ListOfInt -> realmQuery.lessThanOrEqualTo(fieldName, listOfValues.first()) |
|
|
|
is ListOfDouble -> realmQuery.lessThanOrEqualTo(fieldName, listOfValues.first() * sign) |
|
|
|
is ListOfDouble -> realmQuery.lessThanOrEqualTo(fieldName, listOfValues.first() * sign) |
|
|
|
else -> realmQuery |
|
|
|
else -> realmQuery |
|
|
|
|