From 83817b9d83994b245e45bd1e1713015a75392ba2 Mon Sep 17 00:00:00 2001 From: Razmig Sarkissian Date: Sat, 20 Apr 2019 08:44:48 +0200 Subject: [PATCH] fix unit tests clean up queryCondition interfaces --- .../BaseFilterInstrumentedUnitTest.kt | 2 +- .../filter/BlindFilterInstrumentedTest.kt | 12 +- .../filter/DateFilterInstrumentedUnitTest.kt | 15 +- .../filter/ExceptionFilterInstrumentedTest.kt | 11 -- .../SessionFilterInstrumentedUnitTest.kt | 18 +- .../pokeranalytics/android/model/Criteria.kt | 10 +- .../android/model/filter/QueryCondition.kt | 172 +++++++++--------- .../android/model/realm/FilterCondition.kt | 82 ++++++--- .../android/ui/fragment/CalendarFragment.kt | 6 +- .../ui/fragment/FilterDetailsFragment.kt | 12 +- 10 files changed, 175 insertions(+), 165 deletions(-) diff --git a/app/src/androidTest/java/net/pokeranalytics/android/components/BaseFilterInstrumentedUnitTest.kt b/app/src/androidTest/java/net/pokeranalytics/android/components/BaseFilterInstrumentedUnitTest.kt index 552f2b58..875fe032 100644 --- a/app/src/androidTest/java/net/pokeranalytics/android/components/BaseFilterInstrumentedUnitTest.kt +++ b/app/src/androidTest/java/net/pokeranalytics/android/components/BaseFilterInstrumentedUnitTest.kt @@ -30,7 +30,7 @@ open class BaseFilterInstrumentedUnitTest : RealmInstrumentedUnitTest() { session.numberOfTables = numberOfTable session.tableSize = tableSize session.startDate = startDate - session.result?.netResult = netResult + session.result?.cashout = netResult val cal = Calendar.getInstance() // creates calendar cal.time = startDate // sets calendar time/date cal.add(Calendar.HOUR_OF_DAY, endDate) // adds one hour diff --git a/app/src/androidTest/java/net/pokeranalytics/android/unitTests/filter/BlindFilterInstrumentedTest.kt b/app/src/androidTest/java/net/pokeranalytics/android/unitTests/filter/BlindFilterInstrumentedTest.kt index 91a4653f..8e223f53 100644 --- a/app/src/androidTest/java/net/pokeranalytics/android/unitTests/filter/BlindFilterInstrumentedTest.kt +++ b/app/src/androidTest/java/net/pokeranalytics/android/unitTests/filter/BlindFilterInstrumentedTest.kt @@ -44,7 +44,7 @@ class BlindFilterInstrumentedTest : BaseFilterInstrumentedUnitTest() { val filter = QueryCondition.BLIND() val blind = QueryCondition.BLIND().apply { - stringValues = arrayListOf(s1.blinds!!) + listOfValues = arrayListOf(s1.blinds!!) } blind.filterSectionRow = FilterSectionRow.BLIND @@ -91,10 +91,10 @@ class BlindFilterInstrumentedTest : BaseFilterInstrumentedUnitTest() { val filter = QueryCondition.BLIND() val blind1 = QueryCondition.BLIND().apply { - stringValues = arrayListOf(s1.blinds!!) + listOfValues = arrayListOf(s1.blinds!!) } val blind2 = QueryCondition.BLIND().apply { - stringValues = arrayListOf(s2.blinds!!) + listOfValues = arrayListOf(s2.blinds!!) } blind1.filterSectionRow = FilterSectionRow.BLIND @@ -143,7 +143,7 @@ class BlindFilterInstrumentedTest : BaseFilterInstrumentedUnitTest() { val filter = QueryCondition.BLIND() val blind = QueryCondition.BLIND().apply { - stringValues = arrayListOf(s3.blinds!!) + listOfValues = arrayListOf(s3.blinds!!) } blind.filterSectionRow = FilterSectionRow.BLIND @@ -191,10 +191,10 @@ class BlindFilterInstrumentedTest : BaseFilterInstrumentedUnitTest() { val filter = QueryCondition.BLIND() val blind1 = QueryCondition.BLIND().apply { - stringValues = arrayListOf(s1.blinds!!) + listOfValues = arrayListOf(s1.blinds!!) } val blind2 = QueryCondition.BLIND().apply { - stringValues = arrayListOf(s2.blinds!!) + listOfValues = arrayListOf(s2.blinds!!) } blind1.filterSectionRow = FilterSectionRow.BLIND diff --git a/app/src/androidTest/java/net/pokeranalytics/android/unitTests/filter/DateFilterInstrumentedUnitTest.kt b/app/src/androidTest/java/net/pokeranalytics/android/unitTests/filter/DateFilterInstrumentedUnitTest.kt index 515d37c5..1847fba8 100644 --- a/app/src/androidTest/java/net/pokeranalytics/android/unitTests/filter/DateFilterInstrumentedUnitTest.kt +++ b/app/src/androidTest/java/net/pokeranalytics/android/unitTests/filter/DateFilterInstrumentedUnitTest.kt @@ -33,7 +33,7 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { val filter = QueryCondition.DAY_OF_WEEK() 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 val filterElement = FilterCondition(arrayListOf(filterElementRow)) filter.updateValueMap(filterElement) @@ -61,7 +61,8 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { val filter = QueryCondition.MONTH() 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 val filterElement = FilterCondition(arrayListOf(filterElementRow)) filter.updateValueMap(filterElement) @@ -89,7 +90,7 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { val filter = QueryCondition.YEAR() 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 val filterElement = FilterCondition(arrayListOf(filterElementRow)) filter.updateValueMap(filterElement) @@ -383,7 +384,7 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { realm.commitTransaction() 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 filter.updateValueMap(FilterCondition(arrayListOf(filterElementRow))) @@ -411,7 +412,7 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { realm.commitTransaction() 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 filter.updateValueMap(FilterCondition(arrayListOf(filterElementRow))) @@ -440,7 +441,7 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { realm.commitTransaction() 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 filter.updateValueMap(FilterCondition(arrayListOf(filterElementRow))) @@ -469,7 +470,7 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { 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 filter.updateValueMap(FilterCondition(arrayListOf(filterElementRow))) diff --git a/app/src/androidTest/java/net/pokeranalytics/android/unitTests/filter/ExceptionFilterInstrumentedTest.kt b/app/src/androidTest/java/net/pokeranalytics/android/unitTests/filter/ExceptionFilterInstrumentedTest.kt index a5552ef1..baac1ade 100644 --- a/app/src/androidTest/java/net/pokeranalytics/android/unitTests/filter/ExceptionFilterInstrumentedTest.kt +++ b/app/src/androidTest/java/net/pokeranalytics/android/unitTests/filter/ExceptionFilterInstrumentedTest.kt @@ -13,17 +13,6 @@ import org.junit.runner.RunWith @RunWith(AndroidJUnit4::class) 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(realm, arrayListOf(filter)) - - } - @Test(expected = PokerAnalyticsException.FilterElementUnknownName::class) fun testFilterException() { FilterCondition().queryCondition diff --git a/app/src/androidTest/java/net/pokeranalytics/android/unitTests/filter/SessionFilterInstrumentedUnitTest.kt b/app/src/androidTest/java/net/pokeranalytics/android/unitTests/filter/SessionFilterInstrumentedUnitTest.kt index 5ef8f870..6f10b323 100644 --- a/app/src/androidTest/java/net/pokeranalytics/android/unitTests/filter/SessionFilterInstrumentedUnitTest.kt +++ b/app/src/androidTest/java/net/pokeranalytics/android/unitTests/filter/SessionFilterInstrumentedUnitTest.kt @@ -200,15 +200,13 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { Session.testInstance(game = g3) realm.commitTransaction() - val filter = QueryCondition.GAME() - val filterElementRow = QueryCondition.GAME().apply { setObject(g2) } filterElementRow.filterSectionRow = FilterSectionRow.GAME val filterElementRow2 = QueryCondition.GAME().apply { setObject(g3) } filterElementRow2.filterSectionRow = FilterSectionRow.GAME - filter.updateValueMap(FilterCondition(filterElementRows = arrayListOf(filterElementRow, filterElementRow2))) - - val sessions = Filter.queryOn(realm, arrayListOf(filter)) + val filterCondition = FilterCondition(filterElementRows = arrayListOf(filterElementRow, filterElementRow2)) + val queryCondition = filterCondition.queryCondition + val sessions = Filter.queryOn(realm, arrayListOf(queryCondition)) Assert.assertEquals(6, sessions.size) @@ -453,10 +451,9 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { realm.commitTransaction() 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 - val filterElementRow2 = QueryCondition.TABLE_SIZE().apply { intValues = arrayListOf(4) } - println("filterelement : ${filterElementRow2.doubleValues}") + val filterElementRow2 = QueryCondition.TABLE_SIZE().apply { listOfValues = arrayListOf(4) } filterElementRow.filterSectionRow = FilterSectionRow.TABLE_SIZE filter.updateValueMap(FilterCondition(filterElementRows = arrayListOf(filterElementRow, filterElementRow2))) @@ -504,9 +501,6 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { val s3 = Session.testInstance(netResult = 50.0) Session.testInstance(netResult = 570.0) 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 filterElementRow = QueryCondition.LESS_THAN_NET_RESULT().apply { this.amount = 540.0 } @@ -533,8 +527,6 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { Session.testInstance(netResult = 570.0) realm.commitTransaction() - print("s1.computableResult?.ratedNet ${s1.computableResult?.ratedNet}") - val filterMore = QueryCondition.MORE_THAN_NET_RESULT() val filterElementRow = QueryCondition.MORE_THAN_NET_RESULT().apply { this.amount = 200.0 } filterElementRow.filterSectionRow = FilterSectionRow.VALUE diff --git a/app/src/main/java/net/pokeranalytics/android/model/Criteria.kt b/app/src/main/java/net/pokeranalytics/android/model/Criteria.kt index a264c901..44e10bb0 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/Criteria.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/Criteria.kt @@ -49,8 +49,8 @@ sealed class Criteria { object Limits: StaticCriteria() object TableSizes: StaticCriteria() object TournamentTypes: StaticCriteria() - object monthOfYear: SimpleCriteria(List(12) { index -> QueryCondition.MONTH().apply { intValues = arrayListOf(index)} }) - object dayOfWeek: SimpleCriteria(List(7) { index -> QueryCondition.DAY_OF_WEEK().apply { intValues = arrayListOf(index + 1) } }) + object monthOfYear: SimpleCriteria(List(12) { index -> QueryCondition.MONTH().apply { listOfValues = arrayListOf(index)} }) + object dayOfWeek: SimpleCriteria(List(7) { index -> QueryCondition.DAY_OF_WEEK().apply { listOfValues = arrayListOf(index + 1) } }) object SessionType: SimpleCriteria(listOf(QueryCondition.CASH, QueryCondition.TOURNAMENT)) object BankrollType: SimpleCriteria(listOf(QueryCondition.LIVE, QueryCondition.ONLINE)) object dayPeriod: SimpleCriteria(listOf(QueryCondition.WEEK_DAY, QueryCondition.WEEK_END)) @@ -79,7 +79,7 @@ sealed class Criteria { realm.where().sort("year", Sort.ASCENDING).findFirst()?.year?.let { for (index in 0..(yearNow - it)) { years.add(QueryCondition.YEAR().apply { - intValues = arrayListOf(yearNow - index) + listOfValues = arrayListOf(yearNow - index) }) } } @@ -93,7 +93,7 @@ sealed class Criteria { query.map { it.blinds?.let { stake -> blinds.add(QueryCondition.BLIND().apply { - stringValues = arrayListOf(stake) + listOfValues = arrayListOf(stake) }) } } @@ -121,7 +121,7 @@ sealed class Criteria { val objects = arrayListOf() values.forEach { objects.add((S::class.java.newInstance()).apply { - intValues = arrayListOf(it) + listOfValues = arrayListOf(it) }) } return objects diff --git a/app/src/main/java/net/pokeranalytics/android/model/filter/QueryCondition.kt b/app/src/main/java/net/pokeranalytics/android/model/filter/QueryCondition.kt index 86f7ad56..256459f3 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/filter/QueryCondition.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/filter/QueryCondition.kt @@ -81,52 +81,38 @@ sealed class QueryCondition : FilterElementRow { } - interface Valuable > { - var values: ArrayList? + interface ListOfValues { + var listOfValues: ArrayList } - interface asListOfDouble { var doubleValues : ArrayList } - interface asListOfString { var stringValues : ArrayList } - interface asDateValue { - var dateValue: Date - val showTime: Boolean - } - - interface asListOfInt : asListOfDouble { - var intValues : ArrayList - 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 SingleValue { + var singleValue : T } - interface asDoubleValue : asListOfDouble { - var doubleValue : Double - get() { return doubleValues.firstOrNull() ?: 0.0 } - set(value) { doubleValues = arrayListOf(value) } - } + interface ListOfDouble: ListOfValues + interface ListOfInt: ListOfValues + interface ListOfString: ListOfValues + interface SingleDate: SingleValue + interface SingleDouble: SingleValue + interface SingleInt: SingleValue - interface Duration: asDoubleValue { + interface Duration: SingleInt { var minutes: Int - get() { return doubleValue.toInt() } - set(value) { doubleValue = value.toDouble() } + get() { return singleValue } + set(value) { singleValue = value } } - interface Amount: asDoubleValue { + interface Amount: SingleDouble { var amount: Double - get() { return doubleValue } - set(value) { doubleValue = value } + get() { return singleValue } + set(value) { singleValue = value } } interface More interface Less - interface Between : asListOfDouble { - val leftValue: Double get() { return doubleValues.first() } - val rightValue: Double get() { return doubleValues.last() } + interface Between { + val leftValue: Double + val rightValue: Double } interface BetweenLeftExclusive : Between @@ -136,8 +122,8 @@ sealed class QueryCondition : FilterElementRow { val id: List get() { return when (this) { - is QueryDataCondition<*> -> this.stringValues.map { "$baseId+$it" } - is StaticDataQueryCondition -> this.intValues.map { "$baseId+$it" } + is QueryDataCondition<*> -> this.listOfValues.map { "$baseId+$it" } + is StaticDataQueryCondition -> this.listOfValues.map { "$baseId+$it" } else -> listOf(baseId) } } @@ -153,25 +139,26 @@ sealed class QueryCondition : FilterElementRow { 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) { this.dataObject = dataObject - this.stringValues.add(dataObject.id) + this.listOfValues.add(dataObject.id) } var dataObject: NameManageable? = null - override var stringValues = ArrayList() + + override var listOfValues = ArrayList() abstract val entity : Class fun label(): String { val realm = Realm.getDefaultInstance() - val completeLabel = when (stringValues.size) { + val completeLabel = when (listOfValues.size) { 0 -> return NULL_TEXT 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() return completeLabel @@ -183,38 +170,51 @@ sealed class QueryCondition : FilterElementRow { } } - abstract class SingleValueQueryCondition : QueryCondition(), asIntValue { - override var doubleValues = ArrayList() + open class SingleValueQueryCondition : QueryCondition(), SingleInt { + override var singleValue: Int = 0 } - abstract class StaticDataQueryCondition : QueryCondition(), asListOfInt { + abstract class StaticDataQueryCondition : QueryCondition(), ListOfInt { var data : RowRepresentable? = null - override var doubleValues = ArrayList() + override var listOfValues = ArrayList() abstract fun labelForValue(value:Int): String fun label(): String { - return when (intValues.size) { + return when (listOfValues.size) { 0 -> return NULL_TEXT - 1,2 -> intValues.map { labelForValue(it) }.joinToString(", ") - else -> "${intValues.size} $baseId" + 1,2 -> listOfValues.map { labelForValue(it) }.joinToString(", ") + else -> "${listOfValues.size} $baseId" } } } - open class OperationQueryCondition : QueryCondition(), asDoubleValue { - override var doubleValues = ArrayList() + open class OperationQueryCondition : QueryCondition() + + open class DurationOperationQueryCondition : OperationQueryCondition(), Duration { + override var singleValue: Int = 0 } - open class BetweenQueryCondition : QueryCondition(), asListOfDouble { - override var doubleValues = ArrayList() + open class AmountOperationQueryCondition : OperationQueryCondition(), Amount { + override var singleValue: Double = 0.0 } - open class DateQuery: QueryCondition(), asDateValue { - override var dateValue: Date = Date() + open class BetweenQueryCondition : QueryCondition(), ListOfDouble { + override var listOfValues = ArrayList() + 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 } - open class TimeQuery: DateQuery() { + open class TimeQuery: DateQuery(), DateTime, SingleDate { override val showTime: Boolean = true } @@ -247,16 +247,16 @@ sealed class QueryCondition : FilterElementRow { } } - class BLIND: QueryCondition(), asListOfString { - override var stringValues = ArrayList() + class BLIND: QueryCondition(), ListOfString { + override var listOfValues = ArrayList() fun label(): String { - val completeLabel = when (stringValues.size) { + val completeLabel = when (listOfValues.size) { 0 -> return NULL_TEXT 1,2 -> { - return stringValues.map { it }.joinToString(", ") + return listOfValues.map { it }.joinToString(", ") } - else -> "${stringValues.size} $baseId" + else -> "${listOfValues.size} $baseId" } return completeLabel } @@ -269,17 +269,17 @@ sealed class QueryCondition : FilterElementRow { class LESS_NUMBER_OF_TABLE: OperationQueryCondition(), Less class BETWEEN_NUMBER_OF_TABLE: BetweenQueryCondition(), Between - class MORE_THAN_NET_RESULT: OperationQueryCondition(), More, Amount - class LESS_THAN_NET_RESULT: OperationQueryCondition(), Less, Amount + class MORE_THAN_NET_RESULT: AmountOperationQueryCondition(), More + class LESS_THAN_NET_RESULT: AmountOperationQueryCondition(), Less - class MORE_THAN_BUY_IN: OperationQueryCondition(), More, Amount - class LESS_THAN_BUY_IN: OperationQueryCondition(), Less, Amount + class MORE_THAN_BUY_IN: AmountOperationQueryCondition(), More + class LESS_THAN_BUY_IN: AmountOperationQueryCondition(), Less - class MORE_THAN_CASH_OUT: OperationQueryCondition(), More, Amount - class LESS_THAN_CASH_OUT: OperationQueryCondition(), Less, Amount + class MORE_THAN_CASH_OUT: AmountOperationQueryCondition(), More + class LESS_THAN_CASH_OUT: AmountOperationQueryCondition(), Less - class MORE_THAN_TIPS: OperationQueryCondition(), More, Amount - class LESS_THAN_TIPS: OperationQueryCondition(), Less, Amount + class MORE_THAN_TIPS: AmountOperationQueryCondition(), More + class LESS_THAN_TIPS: AmountOperationQueryCondition(), Less class MORE_THAN_NUMBER_OF_PLAYER: OperationQueryCondition(), More class LESS_THAN_NUMBER_OF_PLAYER: OperationQueryCondition(), Less @@ -289,12 +289,12 @@ sealed class QueryCondition : FilterElementRow { class LESS_THAN_TOURNAMENT_FEE: OperationQueryCondition(), Less class BETWEEN_TOURNAMENT_FEE: BetweenQueryCondition(), BetweenRightExclusive { fun between(leftValue:Double, rightValue:Double) { - doubleValues.add(leftValue) - doubleValues.add(rightValue) + listOfValues = arrayListOf(leftValue, 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_TO_DATE: DateQuery(), Less @@ -328,8 +328,8 @@ sealed class QueryCondition : FilterElementRow { object THIS_MONTH: QueryCondition() object THIS_YEAR: QueryCondition() class PAST_DAYS: SingleValueQueryCondition() - class MORE_THAN_DURATION: OperationQueryCondition(), More, Duration - class LESS_THAN_DURATION: OperationQueryCondition(), Less, Duration + class MORE_THAN_DURATION: DurationOperationQueryCondition(), More + class LESS_THAN_DURATION: DurationOperationQueryCondition(), Less class STARTED_FROM_TIME: TimeQuery() class ENDED_TO_TIME: TimeQuery(), Less @@ -357,22 +357,22 @@ sealed class QueryCondition : FilterElementRow { CASH -> realmQuery.equalTo(fieldName, Session.Type.CASH_GAME.ordinal) TOURNAMENT -> realmQuery.equalTo(fieldName, Session.Type.TOURNAMENT.ordinal) is ALL_TOURNAMENT_FEATURES -> { - stringValues.forEach { + listOfValues.forEach { realmQuery.equalTo(fieldName, it) } realmQuery } - is BLIND -> realmQuery.`in`(fieldName, stringValues.toTypedArray()) - is QueryDataCondition<*> -> realmQuery.`in`(fieldName, stringValues.toTypedArray()) - is StaticDataQueryCondition -> realmQuery.`in`(fieldName, intValues.toTypedArray()) + is BLIND -> realmQuery.`in`(fieldName, listOfValues.toTypedArray()) + is QueryDataCondition<*> -> realmQuery.`in`(fieldName, listOfValues.toTypedArray()) + is StaticDataQueryCondition -> realmQuery.`in`(fieldName, listOfValues.toTypedArray()) is DateQuery -> { if (this is Less) { - realmQuery.lessThanOrEqualTo(fieldName, dateValue) + realmQuery.lessThanOrEqualTo(fieldName, singleValue) } 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 -> { var query = realmQuery if (this == WEEK_DAY) { @@ -426,10 +426,12 @@ sealed class QueryCondition : FilterElementRow { fun updateValueMap(filterCondition: FilterCondition) { when (this) { - is asListOfDouble -> filterCondition.doubleValues.map { doubleValues.add(it) } - is QueryDataCondition<*> -> filterCondition.ids.map { stringValues.add(it) } - is DateQuery -> dateValue = filterCondition.date - is BLIND -> filterCondition.blinds.map { stringValues.add(it) } + is ListOfDouble -> listOfValues = filterCondition.getValues() + is ListOfString -> listOfValues = filterCondition.getValues() + is ListOfInt -> listOfValues = filterCondition.getValues() + is SingleDate -> singleValue = filterCondition.getValue() + is SingleInt -> singleValue = filterCondition.getValue() + is SingleDouble -> singleValue = filterCondition.getValue() } } diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/FilterCondition.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/FilterCondition.kt index 0d86f3f3..7498cbb0 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/FilterCondition.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/FilterCondition.kt @@ -5,6 +5,7 @@ import io.realm.RealmObject import net.pokeranalytics.android.exceptions.PokerAnalyticsException import net.pokeranalytics.android.model.filter.QueryCondition import java.util.* +import kotlin.collections.ArrayList open class FilterCondition() : RealmObject() { @@ -18,23 +19,12 @@ open class FilterCondition() : RealmObject() { this.filterName ?: throw PokerAnalyticsException.FilterElementUnknownName when (row) { - is QueryCondition.asDateValue -> { - this.dateValue = row.dateValue - } - is QueryCondition.asListOfString -> { - this.stringValues = RealmList().apply { - this.addAll(filterElementRows.map { - (it as QueryCondition.asListOfString).stringValues.firstOrNull() - }) - } - } - is QueryCondition.asListOfDouble -> { - this.numericValues = RealmList().apply { - this.addAll(filterElementRows.map { - (it as QueryCondition.asListOfDouble).doubleValues.firstOrNull() - }) - } - } + is QueryCondition.SingleInt -> this.setValue(row.singleValue) + is QueryCondition.SingleDouble -> this.setValue(row.singleValue) + is QueryCondition.SingleDate -> this.setValue(row.singleValue) + is QueryCondition.ListOfDouble -> this.setValues(filterElementRows.flatMap { (it as QueryCondition.ListOfDouble).listOfValues }) + is QueryCondition.ListOfInt -> this.setValues(filterElementRows.flatMap { (it as QueryCondition.ListOfInt).listOfValues }) + is QueryCondition.ListOfString -> this.setValues(filterElementRows.flatMap { (it as QueryCondition.ListOfString).listOfValues }) } } @@ -47,19 +37,55 @@ open class FilterCondition() : RealmObject() { this.updateValueMap(this@FilterCondition) } - private var numericValues: RealmList? = null - private var dateValue: Date? = null - private var stringValues: RealmList? = null + var doubleValues: RealmList? = null + var intValues: RealmList? = null + var stringValues: RealmList? = null + var dateValue: Date? = null + var doubleValue: Double? = null + var intValue: Int? = null + var stringValue: String? = null - val ids: Array - get() = stringValues?.toTypedArray() ?: throw PokerAnalyticsException.FilterElementExpectedValueMissing + inline fun getValues(): ArrayList < T > { + return when (T::class) { + Int::class -> ArrayList().apply { intValues?.map { add(it as T) } } + Double::class -> ArrayList().apply { doubleValues?.map { add(it as T) } } + String::class -> ArrayList().apply { stringValues?.map { add(it as T) } } + else -> throw PokerAnalyticsException.QueryValueMapUnexpectedValue + } + } - val blinds: Array - get() = stringValues?.toTypedArray() ?: throw PokerAnalyticsException.FilterElementExpectedValueMissing + inline fun getValue(): T { + 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 - get() = dateValue ?: throw PokerAnalyticsException.FilterElementExpectedValueMissing + private inline fun setValues(values:List) { + when (T::class) { + Int::class -> intValues = RealmList().apply { values.map { it as Int }.forEach { add(it) } } + Double::class -> doubleValues = RealmList().apply { values.map { it as Double }.forEach { add(it) } } + String::class -> stringValues = RealmList().apply { values.map { it as String }.forEach { add(it) } } + else -> throw PokerAnalyticsException.QueryValueMapUnexpectedValue + } + } - val doubleValues: Array - get() = numericValues?.toTypedArray() ?: throw PokerAnalyticsException.FilterElementExpectedValueMissing + fun setValue(value:Double) { + doubleValue = value + } + + fun setValue(value:Date) { + dateValue = value + } + + fun setValue(value:Int) { + intValue= value + } + + fun setValue(value:String) { + stringValue = value + } } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/CalendarFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/CalendarFragment.kt index 209a136f..0d374730 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/CalendarFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/CalendarFragment.kt @@ -256,8 +256,8 @@ class CalendarFragment : SessionObserverFragment(), CoroutineScope, StaticRowRep // Set date data conditions.forEach { condition -> when (condition) { - is QueryCondition.YEAR -> calendar.set(Calendar.YEAR, condition.intValues.first()) - is QueryCondition.MONTH -> calendar.set(Calendar.MONTH, condition.intValues.first()) + is QueryCondition.YEAR -> calendar.set(Calendar.YEAR, condition.listOfValues.first()) + is QueryCondition.MONTH -> calendar.set(Calendar.MONTH, condition.listOfValues.first()) } } @@ -282,7 +282,7 @@ class CalendarFragment : SessionObserverFragment(), CoroutineScope, StaticRowRep // Set date data conditions.forEach { 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 diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/FilterDetailsFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/FilterDetailsFragment.kt index 80c89ba8..9d3db017 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/FilterDetailsFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/FilterDetailsFragment.kt @@ -71,9 +71,9 @@ open class FilterDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresent Timber.d("Row: $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 -> { - 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)) BottomSheetFragment.create(fragmentManager, row, this, data, true) } @@ -96,8 +96,8 @@ open class FilterDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresent override fun stringForRow(row: RowRepresentable): String { return when (row) { - is QueryCondition.SingleValueQueryCondition -> if (row.intValue > 0) row.intValue.toString() else NULL_TEXT - is QueryCondition.DateQuery -> if (row.showTime) row.dateValue.shortTime() else row.dateValue.shortDate() + is QueryCondition.SingleValueQueryCondition -> if (row.singleValue > 0) row.singleValue.toString() else NULL_TEXT + 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.Duration -> row.minutes.toMinutes(requireContext()) else -> super.stringForRow(row) @@ -113,8 +113,8 @@ open class FilterDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresent Timber.d("onRowValueChanged: $row $value") when (row) { - is QueryCondition.DateQuery -> row.dateValue = 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.DateQuery -> row.singleValue = if (value != null && value is Date) value else Date() + is QueryCondition.SingleValueQueryCondition -> row.singleValue = if (value != null && value is String) value.toInt() else 0 is QueryCondition.Duration -> { if (value is ArrayList<*>) { val hours = try {