fix unit tests clean up queryCondition interfaces

feature/top10
Razmig Sarkissian 7 years ago
parent 0e6028f085
commit 83817b9d83
  1. 2
      app/src/androidTest/java/net/pokeranalytics/android/components/BaseFilterInstrumentedUnitTest.kt
  2. 12
      app/src/androidTest/java/net/pokeranalytics/android/unitTests/filter/BlindFilterInstrumentedTest.kt
  3. 15
      app/src/androidTest/java/net/pokeranalytics/android/unitTests/filter/DateFilterInstrumentedUnitTest.kt
  4. 11
      app/src/androidTest/java/net/pokeranalytics/android/unitTests/filter/ExceptionFilterInstrumentedTest.kt
  5. 18
      app/src/androidTest/java/net/pokeranalytics/android/unitTests/filter/SessionFilterInstrumentedUnitTest.kt
  6. 10
      app/src/main/java/net/pokeranalytics/android/model/Criteria.kt
  7. 172
      app/src/main/java/net/pokeranalytics/android/model/filter/QueryCondition.kt
  8. 82
      app/src/main/java/net/pokeranalytics/android/model/realm/FilterCondition.kt
  9. 6
      app/src/main/java/net/pokeranalytics/android/ui/fragment/CalendarFragment.kt
  10. 12
      app/src/main/java/net/pokeranalytics/android/ui/fragment/FilterDetailsFragment.kt

@ -30,7 +30,7 @@ open class BaseFilterInstrumentedUnitTest : RealmInstrumentedUnitTest() {
session.numberOfTables = numberOfTable session.numberOfTables = numberOfTable
session.tableSize = tableSize session.tableSize = tableSize
session.startDate = startDate session.startDate = startDate
session.result?.netResult = netResult session.result?.cashout = netResult
val cal = Calendar.getInstance() // creates calendar val cal = Calendar.getInstance() // creates calendar
cal.time = startDate // sets calendar time/date cal.time = startDate // sets calendar time/date
cal.add(Calendar.HOUR_OF_DAY, endDate) // adds one hour cal.add(Calendar.HOUR_OF_DAY, endDate) // adds one hour

@ -44,7 +44,7 @@ class BlindFilterInstrumentedTest : BaseFilterInstrumentedUnitTest() {
val filter = QueryCondition.BLIND() val filter = QueryCondition.BLIND()
val blind = QueryCondition.BLIND().apply { val blind = QueryCondition.BLIND().apply {
stringValues = arrayListOf(s1.blinds!!) listOfValues = arrayListOf(s1.blinds!!)
} }
blind.filterSectionRow = FilterSectionRow.BLIND blind.filterSectionRow = FilterSectionRow.BLIND
@ -91,10 +91,10 @@ class BlindFilterInstrumentedTest : BaseFilterInstrumentedUnitTest() {
val filter = QueryCondition.BLIND() val filter = QueryCondition.BLIND()
val blind1 = QueryCondition.BLIND().apply { val blind1 = QueryCondition.BLIND().apply {
stringValues = arrayListOf(s1.blinds!!) listOfValues = arrayListOf(s1.blinds!!)
} }
val blind2 = QueryCondition.BLIND().apply { val blind2 = QueryCondition.BLIND().apply {
stringValues = arrayListOf(s2.blinds!!) listOfValues = arrayListOf(s2.blinds!!)
} }
blind1.filterSectionRow = FilterSectionRow.BLIND blind1.filterSectionRow = FilterSectionRow.BLIND
@ -143,7 +143,7 @@ class BlindFilterInstrumentedTest : BaseFilterInstrumentedUnitTest() {
val filter = QueryCondition.BLIND() val filter = QueryCondition.BLIND()
val blind = QueryCondition.BLIND().apply { val blind = QueryCondition.BLIND().apply {
stringValues = arrayListOf(s3.blinds!!) listOfValues = arrayListOf(s3.blinds!!)
} }
blind.filterSectionRow = FilterSectionRow.BLIND blind.filterSectionRow = FilterSectionRow.BLIND
@ -191,10 +191,10 @@ class BlindFilterInstrumentedTest : BaseFilterInstrumentedUnitTest() {
val filter = QueryCondition.BLIND() val filter = QueryCondition.BLIND()
val blind1 = QueryCondition.BLIND().apply { val blind1 = QueryCondition.BLIND().apply {
stringValues = arrayListOf(s1.blinds!!) listOfValues = arrayListOf(s1.blinds!!)
} }
val blind2 = QueryCondition.BLIND().apply { val blind2 = QueryCondition.BLIND().apply {
stringValues = arrayListOf(s2.blinds!!) listOfValues = arrayListOf(s2.blinds!!)
} }
blind1.filterSectionRow = FilterSectionRow.BLIND blind1.filterSectionRow = FilterSectionRow.BLIND

@ -33,7 +33,7 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
val filter = QueryCondition.DAY_OF_WEEK() val filter = QueryCondition.DAY_OF_WEEK()
cal.time = s1.startDate cal.time = s1.startDate
val filterElementRow = QueryCondition.DAY_OF_WEEK().apply { intValues = arrayListOf(cal.get(Calendar.DAY_OF_WEEK)) } val filterElementRow = QueryCondition.DAY_OF_WEEK().apply { listOfValues = arrayListOf(cal.get(Calendar.DAY_OF_WEEK)) }
filterElementRow.filterSectionRow = FilterSectionRow.DYNAMIC_DATE filterElementRow.filterSectionRow = FilterSectionRow.DYNAMIC_DATE
val filterElement = FilterCondition(arrayListOf(filterElementRow)) val filterElement = FilterCondition(arrayListOf(filterElementRow))
filter.updateValueMap(filterElement) filter.updateValueMap(filterElement)
@ -61,7 +61,8 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
val filter = QueryCondition.MONTH() val filter = QueryCondition.MONTH()
cal.time = s1.startDate cal.time = s1.startDate
val filterElementRow = QueryCondition.MONTH().apply { intValues = arrayListOf(cal.get(Calendar.MONTH)) } val filterElementRow = QueryCondition.MONTH().apply { listOfValues = arrayListOf(cal.get(Calendar.MONTH)) }
filterElementRow.filterSectionRow = FilterSectionRow.DYNAMIC_DATE filterElementRow.filterSectionRow = FilterSectionRow.DYNAMIC_DATE
val filterElement = FilterCondition(arrayListOf(filterElementRow)) val filterElement = FilterCondition(arrayListOf(filterElementRow))
filter.updateValueMap(filterElement) filter.updateValueMap(filterElement)
@ -89,7 +90,7 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
val filter = QueryCondition.YEAR() val filter = QueryCondition.YEAR()
cal.time = s1.startDate cal.time = s1.startDate
val filterElementRow = QueryCondition.YEAR().apply { intValues = arrayListOf(cal.get(Calendar.YEAR)) } val filterElementRow = QueryCondition.YEAR().apply { listOfValues = arrayListOf(cal.get(Calendar.YEAR)) }
filterElementRow.filterSectionRow = FilterSectionRow.DYNAMIC_DATE filterElementRow.filterSectionRow = FilterSectionRow.DYNAMIC_DATE
val filterElement = FilterCondition(arrayListOf(filterElementRow)) val filterElement = FilterCondition(arrayListOf(filterElementRow))
filter.updateValueMap(filterElement) filter.updateValueMap(filterElement)
@ -383,7 +384,7 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
realm.commitTransaction() realm.commitTransaction()
val filter = QueryCondition.STARTED_FROM_DATE() val filter = QueryCondition.STARTED_FROM_DATE()
val filterElementRow = QueryCondition.STARTED_FROM_DATE().apply { dateValue = s2.startDate!!} val filterElementRow = QueryCondition.STARTED_FROM_DATE().apply { singleValue = s2.startDate!!}
filterElementRow.filterSectionRow = FilterSectionRow.FIXED_DATE filterElementRow.filterSectionRow = FilterSectionRow.FIXED_DATE
filter.updateValueMap(FilterCondition(arrayListOf(filterElementRow))) filter.updateValueMap(FilterCondition(arrayListOf(filterElementRow)))
@ -411,7 +412,7 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
realm.commitTransaction() realm.commitTransaction()
val filter = QueryCondition.STARTED_TO_DATE() val filter = QueryCondition.STARTED_TO_DATE()
val filterElementRow = QueryCondition.STARTED_TO_DATE().apply { dateValue = s1.startDate!! } val filterElementRow = QueryCondition.STARTED_TO_DATE().apply { singleValue = s1.startDate!! }
filterElementRow.filterSectionRow = FilterSectionRow.FIXED_DATE filterElementRow.filterSectionRow = FilterSectionRow.FIXED_DATE
filter.updateValueMap(FilterCondition(arrayListOf(filterElementRow))) filter.updateValueMap(FilterCondition(arrayListOf(filterElementRow)))
@ -440,7 +441,7 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
realm.commitTransaction() realm.commitTransaction()
val filter = QueryCondition.ENDED_FROM_DATE() val filter = QueryCondition.ENDED_FROM_DATE()
val filterElementRow = QueryCondition.ENDED_FROM_DATE().apply { dateValue = s2.endDate() } val filterElementRow = QueryCondition.ENDED_FROM_DATE().apply { singleValue = s2.endDate() }
filterElementRow.filterSectionRow = FilterSectionRow.FIXED_DATE filterElementRow.filterSectionRow = FilterSectionRow.FIXED_DATE
filter.updateValueMap(FilterCondition(arrayListOf(filterElementRow))) filter.updateValueMap(FilterCondition(arrayListOf(filterElementRow)))
@ -469,7 +470,7 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
val filter = QueryCondition.ENDED_TO_DATE() val filter = QueryCondition.ENDED_TO_DATE()
val filterElementRow = QueryCondition.ENDED_TO_DATE().apply { dateValue = s1.endDate() } val filterElementRow = QueryCondition.ENDED_TO_DATE().apply { singleValue = s1.endDate() }
filterElementRow.filterSectionRow = FilterSectionRow.FIXED_DATE filterElementRow.filterSectionRow = FilterSectionRow.FIXED_DATE
filter.updateValueMap(FilterCondition(arrayListOf(filterElementRow))) filter.updateValueMap(FilterCondition(arrayListOf(filterElementRow)))

@ -13,17 +13,6 @@ import org.junit.runner.RunWith
@RunWith(AndroidJUnit4::class) @RunWith(AndroidJUnit4::class)
class ExceptionFilterInstrumentedTest: BaseFilterInstrumentedUnitTest() { class ExceptionFilterInstrumentedTest: BaseFilterInstrumentedUnitTest() {
@Test(expected = PokerAnalyticsException.FilterElementExpectedValueMissing::class)
fun testValueKeyFilterException() {
val filter = QueryCondition.STARTED_FROM_DATE()
val filterElement = FilterCondition()
filter.updateValueMap(filterElement)
val realm = this.mockRealm
Filter.queryOn<Session>(realm, arrayListOf(filter))
}
@Test(expected = PokerAnalyticsException.FilterElementUnknownName::class) @Test(expected = PokerAnalyticsException.FilterElementUnknownName::class)
fun testFilterException() { fun testFilterException() {
FilterCondition().queryCondition FilterCondition().queryCondition

@ -200,15 +200,13 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
Session.testInstance(game = g3) Session.testInstance(game = g3)
realm.commitTransaction() realm.commitTransaction()
val filter = QueryCondition.GAME()
val filterElementRow = QueryCondition.GAME().apply { setObject(g2) } val filterElementRow = QueryCondition.GAME().apply { setObject(g2) }
filterElementRow.filterSectionRow = FilterSectionRow.GAME filterElementRow.filterSectionRow = FilterSectionRow.GAME
val filterElementRow2 = QueryCondition.GAME().apply { setObject(g3) } val filterElementRow2 = QueryCondition.GAME().apply { setObject(g3) }
filterElementRow2.filterSectionRow = FilterSectionRow.GAME filterElementRow2.filterSectionRow = FilterSectionRow.GAME
filter.updateValueMap(FilterCondition(filterElementRows = arrayListOf(filterElementRow, filterElementRow2))) val filterCondition = FilterCondition(filterElementRows = arrayListOf(filterElementRow, filterElementRow2))
val queryCondition = filterCondition.queryCondition
val sessions = Filter.queryOn<Session>(realm, arrayListOf(filter)) val sessions = Filter.queryOn<Session>(realm, arrayListOf(queryCondition))
Assert.assertEquals(6, sessions.size) Assert.assertEquals(6, sessions.size)
@ -453,10 +451,9 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
realm.commitTransaction() realm.commitTransaction()
val filter = QueryCondition.TABLE_SIZE() val filter = QueryCondition.TABLE_SIZE()
val filterElementRow = QueryCondition.TABLE_SIZE().apply { intValues = arrayListOf(2) } val filterElementRow = QueryCondition.TABLE_SIZE().apply { listOfValues = arrayListOf(2) }
filterElementRow.filterSectionRow = FilterSectionRow.TABLE_SIZE filterElementRow.filterSectionRow = FilterSectionRow.TABLE_SIZE
val filterElementRow2 = QueryCondition.TABLE_SIZE().apply { intValues = arrayListOf(4) } val filterElementRow2 = QueryCondition.TABLE_SIZE().apply { listOfValues = arrayListOf(4) }
println("filterelement : ${filterElementRow2.doubleValues}")
filterElementRow.filterSectionRow = FilterSectionRow.TABLE_SIZE filterElementRow.filterSectionRow = FilterSectionRow.TABLE_SIZE
filter.updateValueMap(FilterCondition(filterElementRows = arrayListOf(filterElementRow, filterElementRow2))) filter.updateValueMap(FilterCondition(filterElementRows = arrayListOf(filterElementRow, filterElementRow2)))
@ -504,9 +501,6 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
val s3 = Session.testInstance(netResult = 50.0) val s3 = Session.testInstance(netResult = 50.0)
Session.testInstance(netResult = 570.0) Session.testInstance(netResult = 570.0)
realm.commitTransaction() realm.commitTransaction()
println("s1.computableResult?.ratedNet ${s1.computableResult?.ratedNet}")
println("s2.computableResult?.ratedNet ${s2.computableResult?.ratedNet}")
println("s3.computableResult?.ratedNet ${s3.computableResult?.ratedNet}")
val filter = QueryCondition.LESS_THAN_NET_RESULT() val filter = QueryCondition.LESS_THAN_NET_RESULT()
val filterElementRow = QueryCondition.LESS_THAN_NET_RESULT().apply { this.amount = 540.0 } val filterElementRow = QueryCondition.LESS_THAN_NET_RESULT().apply { this.amount = 540.0 }
@ -533,8 +527,6 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
Session.testInstance(netResult = 570.0) Session.testInstance(netResult = 570.0)
realm.commitTransaction() realm.commitTransaction()
print("s1.computableResult?.ratedNet ${s1.computableResult?.ratedNet}")
val filterMore = QueryCondition.MORE_THAN_NET_RESULT() val filterMore = QueryCondition.MORE_THAN_NET_RESULT()
val filterElementRow = QueryCondition.MORE_THAN_NET_RESULT().apply { this.amount = 200.0 } val filterElementRow = QueryCondition.MORE_THAN_NET_RESULT().apply { this.amount = 200.0 }
filterElementRow.filterSectionRow = FilterSectionRow.VALUE filterElementRow.filterSectionRow = FilterSectionRow.VALUE

@ -49,8 +49,8 @@ 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 { intValues = arrayListOf(index)} }) object monthOfYear: SimpleCriteria(List(12) { index -> QueryCondition.MONTH().apply { listOfValues = arrayListOf(index)} })
object dayOfWeek: SimpleCriteria(List(7) { index -> QueryCondition.DAY_OF_WEEK().apply { intValues = arrayListOf(index + 1) } }) object dayOfWeek: SimpleCriteria(List(7) { index -> QueryCondition.DAY_OF_WEEK().apply { listOfValues = arrayListOf(index + 1) } })
object SessionType: SimpleCriteria(listOf(QueryCondition.CASH, QueryCondition.TOURNAMENT)) object SessionType: SimpleCriteria(listOf(QueryCondition.CASH, QueryCondition.TOURNAMENT))
object BankrollType: SimpleCriteria(listOf(QueryCondition.LIVE, QueryCondition.ONLINE)) object BankrollType: SimpleCriteria(listOf(QueryCondition.LIVE, QueryCondition.ONLINE))
object dayPeriod: SimpleCriteria(listOf(QueryCondition.WEEK_DAY, QueryCondition.WEEK_END)) object dayPeriod: SimpleCriteria(listOf(QueryCondition.WEEK_DAY, QueryCondition.WEEK_END))
@ -79,7 +79,7 @@ sealed class Criteria {
realm.where<Session>().sort("year", Sort.ASCENDING).findFirst()?.year?.let { realm.where<Session>().sort("year", Sort.ASCENDING).findFirst()?.year?.let {
for (index in 0..(yearNow - it)) { for (index in 0..(yearNow - it)) {
years.add(QueryCondition.YEAR().apply { years.add(QueryCondition.YEAR().apply {
intValues = arrayListOf(yearNow - index) listOfValues = arrayListOf(yearNow - index)
}) })
} }
} }
@ -93,7 +93,7 @@ sealed class Criteria {
query.map { query.map {
it.blinds?.let { stake -> it.blinds?.let { stake ->
blinds.add(QueryCondition.BLIND().apply { blinds.add(QueryCondition.BLIND().apply {
stringValues = arrayListOf(stake) listOfValues = arrayListOf(stake)
}) })
} }
} }
@ -121,7 +121,7 @@ sealed class Criteria {
val objects = arrayListOf<S>() val objects = arrayListOf<S>()
values.forEach { values.forEach {
objects.add((S::class.java.newInstance()).apply { objects.add((S::class.java.newInstance()).apply {
intValues = arrayListOf(it) listOfValues = arrayListOf(it)
}) })
} }
return objects return objects

@ -81,52 +81,38 @@ sealed class QueryCondition : FilterElementRow {
} }
interface Valuable <T : ArrayList<T>> { interface ListOfValues <T> {
var values: ArrayList<T>? var listOfValues: ArrayList<T>
} }
interface asListOfDouble { var doubleValues : ArrayList<Double> } interface SingleValue <T> {
interface asListOfString { var stringValues : ArrayList<String> } var singleValue : T
interface asDateValue {
var dateValue: Date
val showTime: Boolean
}
interface asListOfInt : asListOfDouble {
var intValues : ArrayList<Int>
get() { return ArrayList(doubleValues.map { it.toInt() }) }
set(value) { doubleValues = ArrayList(value.map { it.toDouble() })}
}
interface asIntValue : asListOfInt {
var intValue: Int
get() { return intValues.firstOrNull() ?: 0 }
set(value) { intValues = arrayListOf(value) }
} }
interface asDoubleValue : asListOfDouble { interface ListOfDouble: ListOfValues<Double>
var doubleValue : Double interface ListOfInt: ListOfValues<Int>
get() { return doubleValues.firstOrNull() ?: 0.0 } interface ListOfString: ListOfValues<String>
set(value) { doubleValues = arrayListOf(value) } interface SingleDate: SingleValue<Date>
} interface SingleDouble: SingleValue<Double>
interface SingleInt: SingleValue<Int>
interface Duration: asDoubleValue { interface Duration: SingleInt {
var minutes: Int var minutes: Int
get() { return doubleValue.toInt() } get() { return singleValue }
set(value) { doubleValue = value.toDouble() } set(value) { singleValue = value }
} }
interface Amount: asDoubleValue { interface Amount: SingleDouble {
var amount: Double var amount: Double
get() { return doubleValue } get() { return singleValue }
set(value) { doubleValue = value } set(value) { singleValue = value }
} }
interface More interface More
interface Less interface Less
interface Between : asListOfDouble { interface Between {
val leftValue: Double get() { return doubleValues.first() } val leftValue: Double
val rightValue: Double get() { return doubleValues.last() } val rightValue: Double
} }
interface BetweenLeftExclusive : Between interface BetweenLeftExclusive : Between
@ -136,8 +122,8 @@ sealed class QueryCondition : FilterElementRow {
val id: List<String> get() { val id: List<String> get() {
return when (this) { return when (this) {
is QueryDataCondition<*> -> this.stringValues.map { "$baseId+$it" } is QueryDataCondition<*> -> this.listOfValues.map { "$baseId+$it" }
is StaticDataQueryCondition -> this.intValues.map { "$baseId+$it" } is StaticDataQueryCondition -> this.listOfValues.map { "$baseId+$it" }
else -> listOf(baseId) else -> listOf(baseId)
} }
} }
@ -153,25 +139,26 @@ sealed class QueryCondition : FilterElementRow {
override var filterSectionRow: FilterSectionRow = FilterSectionRow.CASH_TOURNAMENT override var filterSectionRow: FilterSectionRow = FilterSectionRow.CASH_TOURNAMENT
abstract class QueryDataCondition < T: NameManageable > : QueryCondition(), asListOfString { abstract class QueryDataCondition < T: NameManageable > : QueryCondition(), ListOfString {
fun setObject(dataObject: T) { fun setObject(dataObject: T) {
this.dataObject = dataObject this.dataObject = dataObject
this.stringValues.add(dataObject.id) this.listOfValues.add(dataObject.id)
} }
var dataObject: NameManageable? = null var dataObject: NameManageable? = null
override var stringValues = ArrayList<String>()
override var listOfValues = ArrayList<String>()
abstract val entity : Class<T> abstract val entity : Class<T>
fun label(): String { fun label(): String {
val realm = Realm.getDefaultInstance() val realm = Realm.getDefaultInstance()
val completeLabel = when (stringValues.size) { val completeLabel = when (listOfValues.size) {
0 -> return NULL_TEXT 0 -> return NULL_TEXT
1,2 -> { 1,2 -> {
return stringValues.map { labelForValue(realm, it) }.joinToString(", ") return listOfValues.map { labelForValue(realm, it) }.joinToString(", ")
} }
else -> "${stringValues.size} $baseId" else -> "${listOfValues.size} $baseId"
} }
realm.close() realm.close()
return completeLabel return completeLabel
@ -183,38 +170,51 @@ sealed class QueryCondition : FilterElementRow {
} }
} }
abstract class SingleValueQueryCondition : QueryCondition(), asIntValue { open class SingleValueQueryCondition : QueryCondition(), SingleInt {
override var doubleValues = ArrayList<Double>() override var singleValue: Int = 0
} }
abstract class StaticDataQueryCondition : QueryCondition(), asListOfInt { abstract class StaticDataQueryCondition : QueryCondition(), ListOfInt {
var data : RowRepresentable? = null var data : RowRepresentable? = null
override var doubleValues = ArrayList<Double>() override var listOfValues = ArrayList<Int>()
abstract fun labelForValue(value:Int): String abstract fun labelForValue(value:Int): String
fun label(): String { fun label(): String {
return when (intValues.size) { return when (listOfValues.size) {
0 -> return NULL_TEXT 0 -> return NULL_TEXT
1,2 -> intValues.map { labelForValue(it) }.joinToString(", ") 1,2 -> listOfValues.map { labelForValue(it) }.joinToString(", ")
else -> "${intValues.size} $baseId" else -> "${listOfValues.size} $baseId"
} }
} }
} }
open class OperationQueryCondition : QueryCondition(), asDoubleValue { open class OperationQueryCondition : QueryCondition()
override var doubleValues = ArrayList<Double>()
open class DurationOperationQueryCondition : OperationQueryCondition(), Duration {
override var singleValue: Int = 0
} }
open class BetweenQueryCondition : QueryCondition(), asListOfDouble { open class AmountOperationQueryCondition : OperationQueryCondition(), Amount {
override var doubleValues = ArrayList<Double>() override var singleValue: Double = 0.0
} }
open class DateQuery: QueryCondition(), asDateValue { open class BetweenQueryCondition : QueryCondition(), ListOfDouble {
override var dateValue: Date = Date() override var listOfValues = ArrayList<Double>()
val leftValue: Double get() { return listOfValues.first() }
val rightValue: Double get() { return listOfValues.last() }
}
interface DateTime {
val showTime: Boolean
}
open class DateQuery: QueryCondition(), DateTime, SingleDate {
override var singleValue: Date = Date()
override val showTime: Boolean = false override val showTime: Boolean = false
} }
open class TimeQuery: DateQuery() { open class TimeQuery: DateQuery(), DateTime, SingleDate {
override val showTime: Boolean = true override val showTime: Boolean = true
} }
@ -247,16 +247,16 @@ sealed class QueryCondition : FilterElementRow {
} }
} }
class BLIND: QueryCondition(), asListOfString { class BLIND: QueryCondition(), ListOfString {
override var stringValues = ArrayList<String>() override var listOfValues = ArrayList<String>()
fun label(): String { fun label(): String {
val completeLabel = when (stringValues.size) { val completeLabel = when (listOfValues.size) {
0 -> return NULL_TEXT 0 -> return NULL_TEXT
1,2 -> { 1,2 -> {
return stringValues.map { it }.joinToString(", ") return listOfValues.map { it }.joinToString(", ")
} }
else -> "${stringValues.size} $baseId" else -> "${listOfValues.size} $baseId"
} }
return completeLabel return completeLabel
} }
@ -269,17 +269,17 @@ sealed class QueryCondition : FilterElementRow {
class LESS_NUMBER_OF_TABLE: OperationQueryCondition(), Less class LESS_NUMBER_OF_TABLE: OperationQueryCondition(), Less
class BETWEEN_NUMBER_OF_TABLE: BetweenQueryCondition(), Between class BETWEEN_NUMBER_OF_TABLE: BetweenQueryCondition(), Between
class MORE_THAN_NET_RESULT: OperationQueryCondition(), More, Amount class MORE_THAN_NET_RESULT: AmountOperationQueryCondition(), More
class LESS_THAN_NET_RESULT: OperationQueryCondition(), Less, Amount class LESS_THAN_NET_RESULT: AmountOperationQueryCondition(), Less
class MORE_THAN_BUY_IN: OperationQueryCondition(), More, Amount class MORE_THAN_BUY_IN: AmountOperationQueryCondition(), More
class LESS_THAN_BUY_IN: OperationQueryCondition(), Less, Amount class LESS_THAN_BUY_IN: AmountOperationQueryCondition(), Less
class MORE_THAN_CASH_OUT: OperationQueryCondition(), More, Amount class MORE_THAN_CASH_OUT: AmountOperationQueryCondition(), More
class LESS_THAN_CASH_OUT: OperationQueryCondition(), Less, Amount class LESS_THAN_CASH_OUT: AmountOperationQueryCondition(), Less
class MORE_THAN_TIPS: OperationQueryCondition(), More, Amount class MORE_THAN_TIPS: AmountOperationQueryCondition(), More
class LESS_THAN_TIPS: OperationQueryCondition(), Less, Amount class LESS_THAN_TIPS: AmountOperationQueryCondition(), Less
class MORE_THAN_NUMBER_OF_PLAYER: OperationQueryCondition(), More class MORE_THAN_NUMBER_OF_PLAYER: OperationQueryCondition(), More
class LESS_THAN_NUMBER_OF_PLAYER: OperationQueryCondition(), Less class LESS_THAN_NUMBER_OF_PLAYER: OperationQueryCondition(), Less
@ -289,12 +289,12 @@ sealed class QueryCondition : FilterElementRow {
class LESS_THAN_TOURNAMENT_FEE: OperationQueryCondition(), Less class LESS_THAN_TOURNAMENT_FEE: OperationQueryCondition(), Less
class BETWEEN_TOURNAMENT_FEE: BetweenQueryCondition(), BetweenRightExclusive { class BETWEEN_TOURNAMENT_FEE: BetweenQueryCondition(), BetweenRightExclusive {
fun between(leftValue:Double, rightValue:Double) { fun between(leftValue:Double, rightValue:Double) {
doubleValues.add(leftValue) listOfValues = arrayListOf(leftValue, rightValue)
doubleValues.add(rightValue)
} }
} }
class MIN_RE_BUY: OperationQueryCondition(), More, Amount
class MAX_RE_BUY: OperationQueryCondition(), Less, Amount class MIN_RE_BUY: AmountOperationQueryCondition(), More
class MAX_RE_BUY: AmountOperationQueryCondition(), Less
class STARTED_FROM_DATE: DateQuery() class STARTED_FROM_DATE: DateQuery()
class STARTED_TO_DATE: DateQuery(), Less class STARTED_TO_DATE: DateQuery(), Less
@ -328,8 +328,8 @@ sealed class QueryCondition : FilterElementRow {
object THIS_MONTH: QueryCondition() object THIS_MONTH: QueryCondition()
object THIS_YEAR: QueryCondition() object THIS_YEAR: QueryCondition()
class PAST_DAYS: SingleValueQueryCondition() class PAST_DAYS: SingleValueQueryCondition()
class MORE_THAN_DURATION: OperationQueryCondition(), More, Duration class MORE_THAN_DURATION: DurationOperationQueryCondition(), More
class LESS_THAN_DURATION: OperationQueryCondition(), Less, Duration class LESS_THAN_DURATION: DurationOperationQueryCondition(), Less
class STARTED_FROM_TIME: TimeQuery() class STARTED_FROM_TIME: TimeQuery()
class ENDED_TO_TIME: TimeQuery(), Less class ENDED_TO_TIME: TimeQuery(), Less
@ -357,22 +357,22 @@ sealed class QueryCondition : FilterElementRow {
CASH -> realmQuery.equalTo(fieldName, Session.Type.CASH_GAME.ordinal) CASH -> realmQuery.equalTo(fieldName, Session.Type.CASH_GAME.ordinal)
TOURNAMENT -> realmQuery.equalTo(fieldName, Session.Type.TOURNAMENT.ordinal) TOURNAMENT -> realmQuery.equalTo(fieldName, Session.Type.TOURNAMENT.ordinal)
is ALL_TOURNAMENT_FEATURES -> { is ALL_TOURNAMENT_FEATURES -> {
stringValues.forEach { listOfValues.forEach {
realmQuery.equalTo(fieldName, it) realmQuery.equalTo(fieldName, it)
} }
realmQuery realmQuery
} }
is BLIND -> realmQuery.`in`(fieldName, stringValues.toTypedArray()) is BLIND -> realmQuery.`in`(fieldName, listOfValues.toTypedArray())
is QueryDataCondition<*> -> realmQuery.`in`(fieldName, stringValues.toTypedArray()) is QueryDataCondition<*> -> realmQuery.`in`(fieldName, listOfValues.toTypedArray())
is StaticDataQueryCondition -> realmQuery.`in`(fieldName, intValues.toTypedArray()) is StaticDataQueryCondition -> realmQuery.`in`(fieldName, listOfValues.toTypedArray())
is DateQuery -> { is DateQuery -> {
if (this is Less) { if (this is Less) {
realmQuery.lessThanOrEqualTo(fieldName, dateValue) realmQuery.lessThanOrEqualTo(fieldName, singleValue)
} else { } else {
realmQuery.greaterThanOrEqualTo(fieldName, dateValue) realmQuery.greaterThanOrEqualTo(fieldName, singleValue)
} }
} }
is SingleValueQueryCondition -> realmQuery.equalTo(fieldName, intValue) is SingleValueQueryCondition -> realmQuery.equalTo(fieldName, singleValue)
WEEK_END, WEEK_DAY -> { WEEK_END, WEEK_DAY -> {
var query = realmQuery var query = realmQuery
if (this == WEEK_DAY) { if (this == WEEK_DAY) {
@ -426,10 +426,12 @@ sealed class QueryCondition : FilterElementRow {
fun updateValueMap(filterCondition: FilterCondition) { fun updateValueMap(filterCondition: FilterCondition) {
when (this) { when (this) {
is asListOfDouble -> filterCondition.doubleValues.map { doubleValues.add(it) } is ListOfDouble -> listOfValues = filterCondition.getValues()
is QueryDataCondition<*> -> filterCondition.ids.map { stringValues.add(it) } is ListOfString -> listOfValues = filterCondition.getValues()
is DateQuery -> dateValue = filterCondition.date is ListOfInt -> listOfValues = filterCondition.getValues()
is BLIND -> filterCondition.blinds.map { stringValues.add(it) } is SingleDate -> singleValue = filterCondition.getValue()
is SingleInt -> singleValue = filterCondition.getValue()
is SingleDouble -> singleValue = filterCondition.getValue()
} }
} }

@ -5,6 +5,7 @@ import io.realm.RealmObject
import net.pokeranalytics.android.exceptions.PokerAnalyticsException import net.pokeranalytics.android.exceptions.PokerAnalyticsException
import net.pokeranalytics.android.model.filter.QueryCondition import net.pokeranalytics.android.model.filter.QueryCondition
import java.util.* import java.util.*
import kotlin.collections.ArrayList
open class FilterCondition() : RealmObject() { open class FilterCondition() : RealmObject() {
@ -18,23 +19,12 @@ open class FilterCondition() : RealmObject() {
this.filterName ?: throw PokerAnalyticsException.FilterElementUnknownName this.filterName ?: throw PokerAnalyticsException.FilterElementUnknownName
when (row) { when (row) {
is QueryCondition.asDateValue -> { is QueryCondition.SingleInt -> this.setValue(row.singleValue)
this.dateValue = row.dateValue is QueryCondition.SingleDouble -> this.setValue(row.singleValue)
} is QueryCondition.SingleDate -> this.setValue(row.singleValue)
is QueryCondition.asListOfString -> { is QueryCondition.ListOfDouble -> this.setValues(filterElementRows.flatMap { (it as QueryCondition.ListOfDouble).listOfValues })
this.stringValues = RealmList<String>().apply { is QueryCondition.ListOfInt -> this.setValues(filterElementRows.flatMap { (it as QueryCondition.ListOfInt).listOfValues })
this.addAll(filterElementRows.map { is QueryCondition.ListOfString -> this.setValues(filterElementRows.flatMap { (it as QueryCondition.ListOfString).listOfValues })
(it as QueryCondition.asListOfString).stringValues.firstOrNull()
})
}
}
is QueryCondition.asListOfDouble -> {
this.numericValues = RealmList<Double>().apply {
this.addAll(filterElementRows.map {
(it as QueryCondition.asListOfDouble).doubleValues.firstOrNull()
})
}
}
} }
} }
@ -47,19 +37,55 @@ open class FilterCondition() : RealmObject() {
this.updateValueMap(this@FilterCondition) this.updateValueMap(this@FilterCondition)
} }
private var numericValues: RealmList<Double>? = null var doubleValues: RealmList<Double>? = null
private var dateValue: Date? = null var intValues: RealmList<Int>? = null
private var stringValues: RealmList<String>? = null var stringValues: RealmList<String>? = null
var dateValue: Date? = null
var doubleValue: Double? = null
var intValue: Int? = null
var stringValue: String? = null
val ids: Array<String> inline fun <reified T:Any > getValues(): ArrayList < T > {
get() = stringValues?.toTypedArray() ?: throw PokerAnalyticsException.FilterElementExpectedValueMissing return when (T::class) {
Int::class -> ArrayList<T>().apply { intValues?.map { add(it as T) } }
Double::class -> ArrayList<T>().apply { doubleValues?.map { add(it as T) } }
String::class -> ArrayList<T>().apply { stringValues?.map { add(it as T) } }
else -> throw PokerAnalyticsException.QueryValueMapUnexpectedValue
}
}
val blinds: Array<String> inline fun <reified T:Any > getValue(): T {
get() = stringValues?.toTypedArray() ?: throw PokerAnalyticsException.FilterElementExpectedValueMissing return when (T::class) {
Int::class -> intValue ?: 0
Double::class -> doubleValue?: 0.0
Date::class -> dateValue ?: Date()
String::class -> stringValue ?: ""
else -> throw PokerAnalyticsException.QueryValueMapUnexpectedValue
} as T
}
val date: Date private inline fun <reified T> setValues(values:List<T>) {
get() = dateValue ?: throw PokerAnalyticsException.FilterElementExpectedValueMissing when (T::class) {
Int::class -> intValues = RealmList<Int>().apply { values.map { it as Int }.forEach { add(it) } }
Double::class -> doubleValues = RealmList<Double>().apply { values.map { it as Double }.forEach { add(it) } }
String::class -> stringValues = RealmList<String>().apply { values.map { it as String }.forEach { add(it) } }
else -> throw PokerAnalyticsException.QueryValueMapUnexpectedValue
}
}
fun setValue(value:Double) {
doubleValue = value
}
fun setValue(value:Date) {
dateValue = value
}
fun setValue(value:Int) {
intValue= value
}
val doubleValues: Array<Double> fun setValue(value:String) {
get() = numericValues?.toTypedArray() ?: throw PokerAnalyticsException.FilterElementExpectedValueMissing stringValue = value
}
} }

@ -256,8 +256,8 @@ class CalendarFragment : SessionObserverFragment(), CoroutineScope, StaticRowRep
// Set date data // Set date data
conditions.forEach { condition -> conditions.forEach { condition ->
when (condition) { when (condition) {
is QueryCondition.YEAR -> calendar.set(Calendar.YEAR, condition.intValues.first()) is QueryCondition.YEAR -> calendar.set(Calendar.YEAR, condition.listOfValues.first())
is QueryCondition.MONTH -> calendar.set(Calendar.MONTH, condition.intValues.first()) is QueryCondition.MONTH -> calendar.set(Calendar.MONTH, condition.listOfValues.first())
} }
} }
@ -282,7 +282,7 @@ class CalendarFragment : SessionObserverFragment(), CoroutineScope, StaticRowRep
// Set date data // Set date data
conditions.forEach { condition -> conditions.forEach { condition ->
when (condition) { when (condition) {
is QueryCondition.YEAR -> calendar.set(Calendar.YEAR, condition.intValues.first()) is QueryCondition.YEAR -> calendar.set(Calendar.YEAR, condition.listOfValues.first())
} }
} }
yearlyReports[calendar.time] = computedResults yearlyReports[calendar.time] = computedResults

@ -71,9 +71,9 @@ open class FilterDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresent
Timber.d("Row: $row") Timber.d("Row: $row")
when (row) { when (row) {
is QueryCondition.DateQuery -> DateTimePickerManager.create(requireContext(), row, this, row.dateValue, onlyDate = !row.showTime, onlyTime = row.showTime) is QueryCondition.DateQuery -> DateTimePickerManager.create(requireContext(), row, this, row.singleValue, onlyDate = !row.showTime, onlyTime = row.showTime)
is QueryCondition.SingleValueQueryCondition -> { is QueryCondition.SingleValueQueryCondition -> {
val valueAsString = if (row.intValue > 0) row.intValue.toString() else "" val valueAsString = if (row.singleValue > 0) row.singleValue.toString() else ""
val data = row.editingDescriptors(mapOf("valueAsString" to valueAsString)) val data = row.editingDescriptors(mapOf("valueAsString" to valueAsString))
BottomSheetFragment.create(fragmentManager, row, this, data, true) BottomSheetFragment.create(fragmentManager, row, this, data, true)
} }
@ -96,8 +96,8 @@ open class FilterDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresent
override fun stringForRow(row: RowRepresentable): String { override fun stringForRow(row: RowRepresentable): String {
return when (row) { return when (row) {
is QueryCondition.SingleValueQueryCondition -> if (row.intValue > 0) row.intValue.toString() else NULL_TEXT is QueryCondition.SingleValueQueryCondition -> if (row.singleValue > 0) row.singleValue.toString() else NULL_TEXT
is QueryCondition.DateQuery -> if (row.showTime) row.dateValue.shortTime() else row.dateValue.shortDate() is QueryCondition.DateQuery -> if (row.showTime) row.singleValue.shortTime() else row.singleValue.shortDate()
is QueryCondition.Amount -> if (row.amount > 0) row.amount.toString() else NULL_TEXT is QueryCondition.Amount -> if (row.amount > 0) row.amount.toString() else NULL_TEXT
is QueryCondition.Duration -> row.minutes.toMinutes(requireContext()) is QueryCondition.Duration -> row.minutes.toMinutes(requireContext())
else -> super.stringForRow(row) else -> super.stringForRow(row)
@ -113,8 +113,8 @@ open class FilterDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresent
Timber.d("onRowValueChanged: $row $value") Timber.d("onRowValueChanged: $row $value")
when (row) { when (row) {
is QueryCondition.DateQuery -> row.dateValue = if (value != null && value is Date) value else Date() is QueryCondition.DateQuery -> row.singleValue = if (value != null && value is Date) value else Date()
is QueryCondition.SingleValueQueryCondition -> row.intValue = if (value != null && value is String) value.toInt() else 0 is QueryCondition.SingleValueQueryCondition -> row.singleValue = if (value != null && value is String) value.toInt() else 0
is QueryCondition.Duration -> { is QueryCondition.Duration -> {
if (value is ArrayList<*>) { if (value is ArrayList<*>) {
val hours = try { val hours = try {

Loading…
Cancel
Save