diff --git a/app/src/androidTest/java/net/pokeranalytics/android/filter/BlindFilterInstrumentedTest.kt b/app/src/androidTest/java/net/pokeranalytics/android/filter/BlindFilterInstrumentedTest.kt index a3ffd4a9..b4d27bde 100644 --- a/app/src/androidTest/java/net/pokeranalytics/android/filter/BlindFilterInstrumentedTest.kt +++ b/app/src/androidTest/java/net/pokeranalytics/android/filter/BlindFilterInstrumentedTest.kt @@ -1,7 +1,7 @@ package net.pokeranalytics.android.filter import net.pokeranalytics.android.model.filter.FilterManager -import net.pokeranalytics.android.model.filter.SessionFilterable +import net.pokeranalytics.android.model.filter.FilterType import net.pokeranalytics.android.model.realm.Bankroll import net.pokeranalytics.android.model.realm.Session import org.junit.Assert @@ -37,8 +37,8 @@ class BlindFilterInstrumentedTest : BaseFilterInstrumentedUnitTest() { realm.commitTransaction() - val filter = SessionFilterable.BLINDS - filter.valueMap = mapOf("map" to arrayOf(mapOf( + val filter = FilterType.BLINDS + filter.valueMap = mapOf("blinds" to arrayOf(mapOf( "sb" to 0.5, "bb" to 1.0, "code" to null @@ -84,8 +84,8 @@ class BlindFilterInstrumentedTest : BaseFilterInstrumentedUnitTest() { realm.commitTransaction() - val filter = SessionFilterable.BLINDS - filter.valueMap = mapOf("map" to arrayOf(mapOf( + val filter = FilterType.BLINDS + filter.valueMap = mapOf("blinds" to arrayOf(mapOf( "sb" to null, "bb" to 1.0, "code" to null @@ -131,8 +131,8 @@ class BlindFilterInstrumentedTest : BaseFilterInstrumentedUnitTest() { realm.commitTransaction() - val filter = SessionFilterable.BLINDS - filter.valueMap = mapOf("map" to arrayOf(mapOf( + val filter = FilterType.BLINDS + filter.valueMap = mapOf("blinds" to arrayOf(mapOf( "sb" to 1.0, "bb" to 2.0, "code" to "AUD" @@ -178,8 +178,8 @@ class BlindFilterInstrumentedTest : BaseFilterInstrumentedUnitTest() { realm.commitTransaction() - val filter = SessionFilterable.BLINDS - filter.valueMap = mapOf("map" to arrayOf( + val filter = FilterType.BLINDS + filter.valueMap = mapOf("blinds" to arrayOf( mapOf( "sb" to 1.0, "bb" to 2.0, diff --git a/app/src/androidTest/java/net/pokeranalytics/android/filter/DateFilterInstrumentedUnitTest.kt b/app/src/androidTest/java/net/pokeranalytics/android/filter/DateFilterInstrumentedUnitTest.kt index 700856ab..7f611d41 100644 --- a/app/src/androidTest/java/net/pokeranalytics/android/filter/DateFilterInstrumentedUnitTest.kt +++ b/app/src/androidTest/java/net/pokeranalytics/android/filter/DateFilterInstrumentedUnitTest.kt @@ -1,7 +1,7 @@ package net.pokeranalytics.android.filter import androidx.test.ext.junit.runners.AndroidJUnit4 -import net.pokeranalytics.android.model.filter.DateFilterable +import net.pokeranalytics.android.model.filter.FilterType import net.pokeranalytics.android.model.filter.FilterManager import net.pokeranalytics.android.model.realm.Session import org.junit.Assert @@ -25,7 +25,7 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { Session.testInstance(100.0, true, cal.time) realm.commitTransaction() - val filter = DateFilterable.DAY_OF_WEEK + val filter = FilterType.DAY_OF_WEEK cal.time = s1.startDate filter.valueMap = mapOf("dayOfWeek" to cal.get(Calendar.DAY_OF_WEEK)) @@ -54,7 +54,7 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { Session.testInstance(100.0, true, cal.time) realm.commitTransaction() - val filter = DateFilterable.MONTH + val filter = FilterType.MONTH cal.time = s1.startDate filter.valueMap = mapOf("month" to cal.get(Calendar.MONTH)) @@ -83,7 +83,7 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { Session.testInstance(100.0, true, cal.time) realm.commitTransaction() - val filter = DateFilterable.YEAR + val filter = FilterType.YEAR cal.time = s1.startDate filter.valueMap = mapOf("year" to cal.get(Calendar.YEAR)) @@ -116,7 +116,7 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { val sessions = FilterManager().filter( realm, Session::class.java, - arrayListOf(DateFilterable.WEEK_END) + arrayListOf(FilterType.WEEK_END) ) Assert.assertEquals(1, sessions.size) @@ -141,7 +141,7 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { val sessions = FilterManager().filter( realm, Session::class.java, - arrayListOf(DateFilterable.WEEK_DAY) + arrayListOf(FilterType.WEEK_DAY) ) Assert.assertEquals(1, sessions.size) @@ -165,7 +165,7 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { val s2 = Session.testInstance(100.0, true, cal.time, 1) realm.commitTransaction() - val filter = DateFilterable.STARTED_FROM_DATE + val filter = FilterType.STARTED_FROM_DATE filter.valueMap = mapOf("date" to s2.startDate) val sessions = FilterManager().filter( @@ -195,7 +195,7 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { realm.commitTransaction() - val filter = DateFilterable.STARTED_TO_DATE + val filter = FilterType.STARTED_TO_DATE filter.valueMap = mapOf("date" to s1.startDate) val sessions = FilterManager().filter( @@ -226,7 +226,7 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { realm.commitTransaction() - val filter = DateFilterable.ENDED_FROM_DATE + val filter = FilterType.ENDED_FROM_DATE filter.valueMap = mapOf("date" to s2.endDate) val sessions = FilterManager().filter( @@ -257,7 +257,7 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { realm.commitTransaction() - val filter = DateFilterable.ENDED_TO_DATE + val filter = FilterType.ENDED_TO_DATE filter.valueMap = mapOf("date" to s1.endDate) val sessions = FilterManager().filter( diff --git a/app/src/androidTest/java/net/pokeranalytics/android/filter/ExceptionFilterInstrumentedTest.kt b/app/src/androidTest/java/net/pokeranalytics/android/filter/ExceptionFilterInstrumentedTest.kt index bc453c26..b2976510 100644 --- a/app/src/androidTest/java/net/pokeranalytics/android/filter/ExceptionFilterInstrumentedTest.kt +++ b/app/src/androidTest/java/net/pokeranalytics/android/filter/ExceptionFilterInstrumentedTest.kt @@ -2,9 +2,8 @@ package net.pokeranalytics.android.filter import androidx.test.ext.junit.runners.AndroidJUnit4 import net.pokeranalytics.android.exceptions.FilterValueMapException -import net.pokeranalytics.android.model.filter.DateFilterable +import net.pokeranalytics.android.model.filter.FilterType import net.pokeranalytics.android.model.filter.FilterManager -import net.pokeranalytics.android.model.filter.SessionFilterable import net.pokeranalytics.android.model.realm.Session import org.junit.Test import org.junit.runner.RunWith @@ -19,13 +18,13 @@ class ExceptionFilterInstrumentedTest: BaseFilterInstrumentedUnitTest() { FilterManager().filter( realm, Session::class.java, - arrayListOf(SessionFilterable.BLINDS) + arrayListOf(FilterType.BLINDS) ) } @Test(expected = FilterValueMapException::class) fun testValueKeyFilterException() { - val filter = DateFilterable.STARTED_FROM_DATE + val filter = FilterType.STARTED_FROM_DATE filter.valueMap = mapOf("bob" to Date()) val realm = this.mockRealm @@ -38,7 +37,7 @@ class ExceptionFilterInstrumentedTest: BaseFilterInstrumentedUnitTest() { @Test(expected = FilterValueMapException::class) fun testSubValueKeyFilterException() { - val filter = SessionFilterable.BLINDS + val filter = FilterType.BLINDS filter.valueMap = mapOf("map" to arrayOf(mapOf( "bob" to 0.5, "bb" to 1.0, diff --git a/app/src/androidTest/java/net/pokeranalytics/android/filter/SessionFilterInstrumentedUnitTest.kt b/app/src/androidTest/java/net/pokeranalytics/android/filter/SessionFilterInstrumentedUnitTest.kt index e2112c36..e3d9896c 100644 --- a/app/src/androidTest/java/net/pokeranalytics/android/filter/SessionFilterInstrumentedUnitTest.kt +++ b/app/src/androidTest/java/net/pokeranalytics/android/filter/SessionFilterInstrumentedUnitTest.kt @@ -3,7 +3,7 @@ package net.pokeranalytics.android.filter import androidx.test.ext.junit.runners.AndroidJUnit4 import io.realm.RealmList import net.pokeranalytics.android.model.filter.FilterManager -import net.pokeranalytics.android.model.filter.SessionFilterable +import net.pokeranalytics.android.model.filter.FilterType import net.pokeranalytics.android.model.realm.* import org.junit.Assert import org.junit.Test @@ -26,7 +26,7 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { val sessions = FilterManager().filter( realm, Session::class.java, - arrayListOf(SessionFilterable.CASH) + arrayListOf(FilterType.CASH) ) Assert.assertEquals(1, sessions.size) @@ -48,7 +48,7 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { val sessions = FilterManager().filter( realm, Session::class.java, - arrayListOf(SessionFilterable.TOURNAMENT) + arrayListOf(FilterType.TOURNAMENT) ) Assert.assertEquals(1, sessions.size) @@ -75,7 +75,7 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { val sessions = FilterManager().filter( realm, Session::class.java, - arrayListOf(SessionFilterable.LIVE) + arrayListOf(FilterType.LIVE) ) Assert.assertEquals(1, sessions.size) @@ -101,7 +101,7 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { val sessions = FilterManager().filter( realm, Session::class.java, - arrayListOf(SessionFilterable.ONLINE) + arrayListOf(FilterType.ONLINE) ) Assert.assertEquals(1, sessions.size) @@ -122,7 +122,7 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { Session.testInstance(bankroll = b2) realm.commitTransaction() - val filter = SessionFilterable.BANKROLL + val filter = FilterType.BANKROLL filter.valueMap = mapOf("ids" to arrayOf(b1.id)) val sessions = FilterManager().filter( @@ -155,7 +155,7 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { Session.testInstance(bankroll = b3) realm.commitTransaction() - val filter = SessionFilterable.BANKROLL + val filter = FilterType.BANKROLL filter.valueMap = mapOf("ids" to arrayOf(b1.id, b2.id)) val sessions = FilterManager().filter( @@ -183,7 +183,7 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { Session.testInstance(game = g2) realm.commitTransaction() - val filter = SessionFilterable.GAME + val filter = FilterType.GAME filter.valueMap = mapOf("ids" to arrayOf(g2.id)) val sessions = FilterManager().filter( @@ -216,7 +216,7 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { Session.testInstance(game = g3) realm.commitTransaction() - val filter = SessionFilterable.GAME + val filter = FilterType.GAME filter.valueMap = mapOf("ids" to arrayOf(g2.id, g3.id)) val sessions = FilterManager().filter( @@ -244,7 +244,7 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { Session.testInstance(location = l2) realm.commitTransaction() - val filter = SessionFilterable.LOCATION + val filter = FilterType.LOCATION filter.valueMap = mapOf("ids" to arrayOf(l1.id)) val sessions = FilterManager().filter( @@ -277,7 +277,7 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { Session.testInstance(location = l3) realm.commitTransaction() - val filter = SessionFilterable.LOCATION + val filter = FilterType.LOCATION filter.valueMap = mapOf("ids" to arrayOf(l1.id, l3.id)) val sessions = FilterManager().filter( @@ -305,7 +305,7 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { Session.testInstance(tournamentName = t2) realm.commitTransaction() - val filter = SessionFilterable.TOURNAMENT_NAME + val filter = FilterType.TOURNAMENT_NAME filter.valueMap = mapOf("ids" to arrayOf(t1.id)) val sessions = FilterManager().filter( @@ -338,7 +338,7 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { Session.testInstance(tournamentName = t3) realm.commitTransaction() - val filter = SessionFilterable.TOURNAMENT_NAME + val filter = FilterType.TOURNAMENT_NAME filter.valueMap = mapOf("ids" to arrayOf(t1.id, t2.id)) val sessions = FilterManager().filter( @@ -374,7 +374,7 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { Session.testInstance(tournamentFeatures = RealmList(t1)) realm.commitTransaction() - val filter = SessionFilterable.ALL_TOURNAMENT_FEATURES + val filter = FilterType.ALL_TOURNAMENT_FEATURES filter.valueMap = mapOf("ids" to arrayOf(t1.id, t2.id, t3.id, t4.id)) val sessions = FilterManager().filter( @@ -407,7 +407,7 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { Session.testInstance(tournamentFeatures = RealmList(t1)) realm.commitTransaction() - val filter = SessionFilterable.ANY_TOURNAMENT_FEATURES + val filter = FilterType.ANY_TOURNAMENT_FEATURES filter.valueMap = mapOf("ids" to arrayOf(t1.id, t2.id, t3.id, t4.id)) val sessions = FilterManager().filter( @@ -437,7 +437,7 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { Session.testInstance(tournamentFeatures = RealmList(t1)) realm.commitTransaction() - val filter = SessionFilterable.ANY_TOURNAMENT_FEATURES + val filter = FilterType.ANY_TOURNAMENT_FEATURES filter.valueMap = mapOf("ids" to arrayOf(t2.id)) val sessions = FilterManager().filter( @@ -464,7 +464,7 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { Session.testInstance(tableSize = 10) realm.commitTransaction() - val filter = SessionFilterable.TABLE_SIZE + val filter = FilterType.TABLE_SIZE filter.valueMap = mapOf("values" to arrayOf(2,4)) val sessions = FilterManager().filter( @@ -491,7 +491,7 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { val s2 = Session.testInstance(netResult = 570.0) realm.commitTransaction() - val filter = SessionFilterable.MORE_THAN_NET_RESULT + val filter = FilterType.MORE_THAN_NET_RESULT filter.valueMap = mapOf("value" to 204.0) val sessions = FilterManager().filter( @@ -518,7 +518,7 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { Session.testInstance(netResult = 570.0) realm.commitTransaction() - val filter = SessionFilterable.LESS_THAN_NET_RESULT + val filter = FilterType.LESS_THAN_NET_RESULT filter.valueMap = mapOf("value" to 540.0) val sessions = FilterManager().filter( @@ -545,10 +545,10 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { Session.testInstance(netResult = 570.0) realm.commitTransaction() - val filterMore = SessionFilterable.MORE_THAN_NET_RESULT + val filterMore = FilterType.MORE_THAN_NET_RESULT filterMore.valueMap = mapOf("value" to 200.0) - val filterLess = SessionFilterable.LESS_THAN_NET_RESULT + val filterLess = FilterType.LESS_THAN_NET_RESULT filterLess.valueMap = mapOf("value" to 400.0) val sessions = FilterManager().filter( diff --git a/app/src/main/java/net/pokeranalytics/android/model/filter/DateFilterable.kt b/app/src/main/java/net/pokeranalytics/android/model/filter/DateFilterable.kt deleted file mode 100644 index 3693d10c..00000000 --- a/app/src/main/java/net/pokeranalytics/android/model/filter/DateFilterable.kt +++ /dev/null @@ -1,77 +0,0 @@ -package net.pokeranalytics.android.model.filter - -import io.realm.RealmObject -import io.realm.RealmQuery -import net.pokeranalytics.android.model.filter.interfaces.Filterable -import java.util.* - -enum class DateFilterable : Filterable { - STARTED_FROM_DATE, - STARTED_TO_DATE, - ENDED_FROM_DATE, - ENDED_TO_DATE, - DAY_OF_WEEK, - MONTH, - YEAR, - WEEK_DAY, - WEEK_END, - ; - - private enum class Field(var fieldName:String) { - START_DATE("startDate"), - END_DATE("endDate"), - DAY("dayOfWeek"), - MONTH("month"), - YEAR("year"), - } - - override var valueMap : Map? = null - - override val filterValuesExpectedKeys : Array? - get() { - return when (this) { - STARTED_FROM_DATE, STARTED_TO_DATE, ENDED_FROM_DATE, ENDED_TO_DATE -> arrayOf("date") - DAY_OF_WEEK -> arrayOf("dayOfWeek") - MONTH -> arrayOf("month") - YEAR -> arrayOf("year") - else -> null - } - } - - override fun filter(realmQuery: RealmQuery): RealmQuery { - return when (this) { - STARTED_FROM_DATE -> { - val date : Date by filterValues - realmQuery.greaterThanOrEqualTo(Field.START_DATE.fieldName, date) - } - STARTED_TO_DATE -> { - val date : Date by filterValues - realmQuery.lessThanOrEqualTo(Field.START_DATE.fieldName, date) - } - ENDED_FROM_DATE -> { - val date : Date by filterValues - realmQuery.greaterThanOrEqualTo(Field.END_DATE.fieldName, date) - } - ENDED_TO_DATE -> { - val date : Date by filterValues - realmQuery.lessThanOrEqualTo(Field.END_DATE.fieldName, date) - } - DAY_OF_WEEK -> { - val dayOfWeek : Int by filterValues - realmQuery.equalTo(Field.DAY.fieldName, dayOfWeek) - } - MONTH -> { - val month: Int by filterValues - realmQuery.equalTo(Field.MONTH.fieldName, month) - } - YEAR -> { - val year: Int by filterValues - realmQuery.equalTo(Field.YEAR.fieldName, year) - } - WEEK_END -> { - realmQuery.`in`(Field.DAY.fieldName, arrayOf(Calendar.SATURDAY,Calendar.SUNDAY)) - } - WEEK_DAY -> WEEK_END.filter(realmQuery.not()) - } - } -} \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/model/filter/FilterComponent.kt b/app/src/main/java/net/pokeranalytics/android/model/filter/FilterComponent.kt deleted file mode 100644 index d647bfa1..00000000 --- a/app/src/main/java/net/pokeranalytics/android/model/filter/FilterComponent.kt +++ /dev/null @@ -1,5 +0,0 @@ -package net.pokeranalytics.android.model.filter - -enum class FilterComponent { - -} diff --git a/app/src/main/java/net/pokeranalytics/android/model/filter/SessionFilterable.kt b/app/src/main/java/net/pokeranalytics/android/model/filter/FilterType.kt similarity index 62% rename from app/src/main/java/net/pokeranalytics/android/model/filter/SessionFilterable.kt rename to app/src/main/java/net/pokeranalytics/android/model/filter/FilterType.kt index a4520966..a39188da 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/filter/SessionFilterable.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/filter/FilterType.kt @@ -4,9 +4,11 @@ import io.realm.RealmObject import io.realm.RealmQuery import net.pokeranalytics.android.exceptions.FilterValueMapException import net.pokeranalytics.android.model.filter.interfaces.Filterable +import net.pokeranalytics.android.model.realm.FilterComponent import net.pokeranalytics.android.model.realm.Session +import java.util.* -enum class SessionFilterable(private var fieldName:String? = null, private var subType:SubType? = null): Filterable { +enum class FilterType(private var fieldName:String? = null, private var subType:SubType? = null): Filterable { LIVE, CASH, ONLINE, @@ -38,6 +40,18 @@ enum class SessionFilterable(private var fieldName:String? = null, private var s MORE_THAN_TOURNAMENT_FEE(Field.NET_RESULT.fieldName, SubType.MORE), LESS_THAN_TOURNAMENT_FEE(Field.NET_RESULT.fieldName, SubType.LESS), BETWEEN_TOURNAMENT_FEE(Field.TOURNAMENT_FEE.fieldName, SubType.BETWEEN), + + // Dates + STARTED_FROM_DATE, + STARTED_TO_DATE, + ENDED_FROM_DATE, + ENDED_TO_DATE, + DAY_OF_WEEK, + MONTH, + YEAR, + WEEK_DAY, + WEEK_END, + ; enum class SubType { @@ -62,6 +76,12 @@ enum class SessionFilterable(private var fieldName:String? = null, private var s NUMBER_OF_TABLE("numberOfTable"), NUMBER_OF_PLAYER("tournamentNumberOfPlayers"), TOURNAMENT_FEE("tournamentEntryFee"), + START_DATE("startDate"), + END_DATE("endDate"), + DAY("dayOfWeek"), + MONTH("month"), + YEAR("year"), + ; } @@ -78,7 +98,11 @@ enum class SessionFilterable(private var fieldName:String? = null, private var s return when (this) { BANKROLL, GAME, LOCATION, ANY_TOURNAMENT_FEATURES, ALL_TOURNAMENT_FEATURES -> arrayOf("ids") LIMIT, TOURNAMENT_TYPE, TABLE_SIZE -> arrayOf("values") - BLINDS -> arrayOf("map") + BLINDS -> arrayOf("blinds") + STARTED_FROM_DATE, STARTED_TO_DATE, ENDED_FROM_DATE, ENDED_TO_DATE -> arrayOf("date") + DAY_OF_WEEK -> arrayOf("dayOfWeek") + MONTH -> arrayOf("month") + YEAR -> arrayOf("year") else -> null } } @@ -142,9 +166,9 @@ enum class SessionFilterable(private var fieldName:String? = null, private var s } } BLINDS -> { - val map : Array> by filterValues + val blinds : Array> by filterValues val expectedSubKeys = arrayOf("sb", "bb", "code") - map.forEachIndexed { index, subMap -> + blinds.forEachIndexed { index, subMap -> val missingKeys = subMap.keys.filter { !expectedSubKeys.contains(it) } if (subMap.keys.size == expectedSubKeys.size && missingKeys.isNotEmpty()) { throw FilterValueMapException("subValueMap does not contain $missingKeys") @@ -175,14 +199,93 @@ enum class SessionFilterable(private var fieldName:String? = null, private var s realmQuery.endGroup() - if (index < map.size - 1) { + if (index < blinds.size - 1) { realmQuery.or() } } realmQuery } + STARTED_FROM_DATE -> { + val date : Date by filterValues + realmQuery.greaterThanOrEqualTo(Field.START_DATE.fieldName, date) + } + STARTED_TO_DATE -> { + val date : Date by filterValues + realmQuery.lessThanOrEqualTo(Field.START_DATE.fieldName, date) + } + ENDED_FROM_DATE -> { + val date : Date by filterValues + realmQuery.greaterThanOrEqualTo(Field.END_DATE.fieldName, date) + } + ENDED_TO_DATE -> { + val date : Date by filterValues + realmQuery.lessThanOrEqualTo(Field.END_DATE.fieldName, date) + } + DAY_OF_WEEK -> { + val dayOfWeek : Int by filterValues + realmQuery.equalTo(Field.DAY.fieldName, dayOfWeek) + } + MONTH -> { + val month: Int by filterValues + realmQuery.equalTo(Field.MONTH.fieldName, month) + } + YEAR -> { + val year: Int by filterValues + realmQuery.equalTo(Field.YEAR.fieldName, year) + } + WEEK_END -> { + realmQuery.`in`(Field.DAY.fieldName, arrayOf(Calendar.SATURDAY,Calendar.SUNDAY)) + } + WEEK_DAY -> WEEK_END.filter(realmQuery.not()) else -> { - realmQuery + throw FilterValueMapException("filter type not handled") + } + } + } + + override fun setValueFrom(filterComponent: FilterComponent) { + this.subType?.let { subType -> + this.fieldName?.let { + return when (subType) { + SubType.LESS, SubType.MORE -> { + filterValues = mapOf("value" to filterComponent.value) + } + SubType.BETWEEN -> { + filterValues = mapOf( + "leftValue" to filterComponent.leftValue, + "rightValue" to filterComponent.rightValue + ) + } + } + } ?: run { + throw FilterValueMapException("fieldName is missing") + } + } + + when (this) { + ALL_TOURNAMENT_FEATURES, ANY_TOURNAMENT_FEATURES, BANKROLL, GAME, LOCATION, TOURNAMENT_NAME -> { + filterValues = mapOf("ids" to filterComponent.ids) + } + LIMIT, TOURNAMENT_TYPE, TABLE_SIZE -> { + filterValues = mapOf("values" to filterComponent.values) + } + BLINDS -> { + filterValues = mapOf("blinds" to filterComponent.blinds) + } + STARTED_FROM_DATE, STARTED_TO_DATE, ENDED_FROM_DATE, ENDED_TO_DATE -> { + filterValues = mapOf("date" to filterComponent.date) + } + DAY_OF_WEEK -> { + filterValues = mapOf("dayOfWeek" to filterComponent.dayOfWeek) + } + MONTH -> { + filterValues = mapOf("month" to filterComponent.month) + } + YEAR -> { + filterValues = mapOf("year" to filterComponent.year) + } + else -> { + throw FilterValueMapException("filter type not handled") } } } diff --git a/app/src/main/java/net/pokeranalytics/android/model/filter/interfaces/ValueFilterable.kt b/app/src/main/java/net/pokeranalytics/android/model/filter/interfaces/ValueFilterable.kt index 729cee60..f49f6f2a 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/filter/interfaces/ValueFilterable.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/filter/interfaces/ValueFilterable.kt @@ -1,6 +1,7 @@ package net.pokeranalytics.android.model.filter.interfaces import net.pokeranalytics.android.exceptions.FilterValueMapException +import net.pokeranalytics.android.model.realm.FilterComponent interface ValueFilterable { @@ -25,4 +26,6 @@ interface ValueFilterable { } val filterValuesExpectedKeys : Array? + + fun setValueFrom(filterComponent: FilterComponent) } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Filter.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Filter.kt index 26ed01d6..e3843a17 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/Filter.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/Filter.kt @@ -1,6 +1,7 @@ package net.pokeranalytics.android.model.realm import io.realm.MutableRealmInteger +import io.realm.RealmList import io.realm.RealmObject import io.realm.annotations.PrimaryKey import java.util.* @@ -20,6 +21,6 @@ open class Filter : RealmObject() { // for MutableRealmInteger, see https://realm.io/docs/java/latest/#counters val usageCount: MutableRealmInteger = MutableRealmInteger.valueOf(0) -// var components: List = listOf() + var components: RealmList? = null } diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/FilterComponent.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/FilterComponent.kt new file mode 100644 index 00000000..75cda2ab --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/FilterComponent.kt @@ -0,0 +1,83 @@ +package net.pokeranalytics.android.model.realm + +import io.realm.RealmList +import io.realm.RealmObject +import io.realm.annotations.Ignore +import net.pokeranalytics.android.model.filter.FilterType +import net.pokeranalytics.android.ui.view.rowrepresentable.FilterElement +import net.pokeranalytics.android.ui.view.rowrepresentable.FilterElement.* +import java.util.* +import kotlin.collections.ArrayList + +open class FilterComponent(filterName : String = "") : RealmObject() { + + var filterName : String = filterName + + constructor(filterElements: ArrayList) : this(filterElements.first().filterType.name) { + this.ids = when (FilterType.valueOf(this.filterName)) { + FilterType.GAME -> { + RealmList().apply { + this.addAll(filterElements.map { + (it as FilterElement.Game).game.id + }) + } + } + else -> null + } + + this.values = when (FilterType.valueOf(filterName)) { + FilterType.LIMIT -> { + RealmList().apply { + this.addAll(filterElements.map { + (it as FilterElement.Limit).limit.ordinal + }) + } + } + else -> null + } + } + + constructor(filterElement:FilterElement) : this(filterElement.filterType.name) { + when (filterElement) { + is From -> date = filterElement.date + is To -> date = filterElement.date + } + } + + val filterType : FilterType + get() = FilterType.valueOf(filterName) + .apply { + this.setValueFrom(this@FilterComponent) + } + + var date : Date? = null + var values : RealmList? = null + var ids : RealmList? = null + + @Ignore + val value : Double? = null + + @Ignore + val leftValue : Double? = null + + @Ignore + val rightValue : Double? = null + + @Ignore + val blinds : Array>? = null + + @Ignore + val dayOfWeek : Int? = null + + @Ignore + val month : Int? = null + + @Ignore + val year : Int? = null +} + +open class BlindFilterComponent : RealmObject() { + var sb : Double? = null + var bb : Double? = null + var code : String? = null +} \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterRow.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterRow.kt index f57c2b64..89cdb7ac 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterRow.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterRow.kt @@ -2,7 +2,9 @@ package net.pokeranalytics.android.ui.view.rowrepresentable import io.realm.Realm import net.pokeranalytics.android.R +import net.pokeranalytics.android.exceptions.FilterValueMapException import net.pokeranalytics.android.model.LiveData +import net.pokeranalytics.android.model.filter.FilterType import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowViewType import net.pokeranalytics.android.ui.view.rowrepresentable.FilterSection.* @@ -107,6 +109,41 @@ sealed class FilterElement : RowRepresentable { var filterSection: FilterSectionDataSource? = null + val filterType : FilterType + get() { + return when (this) { + is Cash -> FilterType.CASH + is Tournament -> FilterType.TOURNAMENT +/* is Today -> FilterType. + is Yesterday -> R.string.yesterday + is TodayAndYesterday -> R.string.yesterday_and_today + is CurrentWeek -> R.string.current_week + is CurrentMonth -> R.string.current_month + is CurrentYear -> R.string.current_year + is From -> R.string.from + is To -> R.string.to + is Live -> R.string.live + is Online -> R.string.online + is Weekday -> R.string.week_days + is Weekend-> R.string.weekend + is Year-> R.string.year + is Month-> R.string.month_of_the_year + is Day -> R.string.day_of_the_week + is PastDays -> R.string.period_in_days + is Limit -> R.string.limit + is TableSize -> R.string.table_size + is Bankroll -> R.string.bankroll + */ + is Game -> FilterType.GAME + /* + is Location -> R.string.location + is TournamentName -> R.string.tournament_name + is TournamentFeature -> R.string.tournament_feature + */ + else -> throw FilterValueMapException("no filter type for filter element") //TODO create exception + } + } + override val resId: Int? get() { return when (this) {