add filter realm part

feature/top10
Razmig Sarkissian 7 years ago
parent 36b1dddec4
commit 5cb406dc96
  1. 18
      app/src/androidTest/java/net/pokeranalytics/android/filter/BlindFilterInstrumentedTest.kt
  2. 20
      app/src/androidTest/java/net/pokeranalytics/android/filter/DateFilterInstrumentedUnitTest.kt
  3. 9
      app/src/androidTest/java/net/pokeranalytics/android/filter/ExceptionFilterInstrumentedTest.kt
  4. 42
      app/src/androidTest/java/net/pokeranalytics/android/filter/SessionFilterInstrumentedUnitTest.kt
  5. 77
      app/src/main/java/net/pokeranalytics/android/model/filter/DateFilterable.kt
  6. 5
      app/src/main/java/net/pokeranalytics/android/model/filter/FilterComponent.kt
  7. 115
      app/src/main/java/net/pokeranalytics/android/model/filter/FilterType.kt
  8. 3
      app/src/main/java/net/pokeranalytics/android/model/filter/interfaces/ValueFilterable.kt
  9. 3
      app/src/main/java/net/pokeranalytics/android/model/realm/Filter.kt
  10. 83
      app/src/main/java/net/pokeranalytics/android/model/realm/FilterComponent.kt
  11. 37
      app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterRow.kt

@ -1,7 +1,7 @@
package net.pokeranalytics.android.filter package net.pokeranalytics.android.filter
import net.pokeranalytics.android.model.filter.FilterManager 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.Bankroll
import net.pokeranalytics.android.model.realm.Session import net.pokeranalytics.android.model.realm.Session
import org.junit.Assert import org.junit.Assert
@ -37,8 +37,8 @@ class BlindFilterInstrumentedTest : BaseFilterInstrumentedUnitTest() {
realm.commitTransaction() realm.commitTransaction()
val filter = SessionFilterable.BLINDS val filter = FilterType.BLINDS
filter.valueMap = mapOf("map" to arrayOf(mapOf( filter.valueMap = mapOf("blinds" to arrayOf(mapOf(
"sb" to 0.5, "sb" to 0.5,
"bb" to 1.0, "bb" to 1.0,
"code" to null "code" to null
@ -84,8 +84,8 @@ class BlindFilterInstrumentedTest : BaseFilterInstrumentedUnitTest() {
realm.commitTransaction() realm.commitTransaction()
val filter = SessionFilterable.BLINDS val filter = FilterType.BLINDS
filter.valueMap = mapOf("map" to arrayOf(mapOf( filter.valueMap = mapOf("blinds" to arrayOf(mapOf(
"sb" to null, "sb" to null,
"bb" to 1.0, "bb" to 1.0,
"code" to null "code" to null
@ -131,8 +131,8 @@ class BlindFilterInstrumentedTest : BaseFilterInstrumentedUnitTest() {
realm.commitTransaction() realm.commitTransaction()
val filter = SessionFilterable.BLINDS val filter = FilterType.BLINDS
filter.valueMap = mapOf("map" to arrayOf(mapOf( filter.valueMap = mapOf("blinds" to arrayOf(mapOf(
"sb" to 1.0, "sb" to 1.0,
"bb" to 2.0, "bb" to 2.0,
"code" to "AUD" "code" to "AUD"
@ -178,8 +178,8 @@ class BlindFilterInstrumentedTest : BaseFilterInstrumentedUnitTest() {
realm.commitTransaction() realm.commitTransaction()
val filter = SessionFilterable.BLINDS val filter = FilterType.BLINDS
filter.valueMap = mapOf("map" to arrayOf( filter.valueMap = mapOf("blinds" to arrayOf(
mapOf( mapOf(
"sb" to 1.0, "sb" to 1.0,
"bb" to 2.0, "bb" to 2.0,

@ -1,7 +1,7 @@
package net.pokeranalytics.android.filter package net.pokeranalytics.android.filter
import androidx.test.ext.junit.runners.AndroidJUnit4 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.filter.FilterManager
import net.pokeranalytics.android.model.realm.Session import net.pokeranalytics.android.model.realm.Session
import org.junit.Assert import org.junit.Assert
@ -25,7 +25,7 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
Session.testInstance(100.0, true, cal.time) Session.testInstance(100.0, true, cal.time)
realm.commitTransaction() realm.commitTransaction()
val filter = DateFilterable.DAY_OF_WEEK val filter = FilterType.DAY_OF_WEEK
cal.time = s1.startDate cal.time = s1.startDate
filter.valueMap = mapOf("dayOfWeek" to cal.get(Calendar.DAY_OF_WEEK)) 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) Session.testInstance(100.0, true, cal.time)
realm.commitTransaction() realm.commitTransaction()
val filter = DateFilterable.MONTH val filter = FilterType.MONTH
cal.time = s1.startDate cal.time = s1.startDate
filter.valueMap = mapOf("month" to cal.get(Calendar.MONTH)) filter.valueMap = mapOf("month" to cal.get(Calendar.MONTH))
@ -83,7 +83,7 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
Session.testInstance(100.0, true, cal.time) Session.testInstance(100.0, true, cal.time)
realm.commitTransaction() realm.commitTransaction()
val filter = DateFilterable.YEAR val filter = FilterType.YEAR
cal.time = s1.startDate cal.time = s1.startDate
filter.valueMap = mapOf("year" to cal.get(Calendar.YEAR)) filter.valueMap = mapOf("year" to cal.get(Calendar.YEAR))
@ -116,7 +116,7 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
val sessions = FilterManager().filter( val sessions = FilterManager().filter(
realm, realm,
Session::class.java, Session::class.java,
arrayListOf(DateFilterable.WEEK_END) arrayListOf(FilterType.WEEK_END)
) )
Assert.assertEquals(1, sessions.size) Assert.assertEquals(1, sessions.size)
@ -141,7 +141,7 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
val sessions = FilterManager().filter( val sessions = FilterManager().filter(
realm, realm,
Session::class.java, Session::class.java,
arrayListOf(DateFilterable.WEEK_DAY) arrayListOf(FilterType.WEEK_DAY)
) )
Assert.assertEquals(1, sessions.size) Assert.assertEquals(1, sessions.size)
@ -165,7 +165,7 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
val s2 = Session.testInstance(100.0, true, cal.time, 1) val s2 = Session.testInstance(100.0, true, cal.time, 1)
realm.commitTransaction() realm.commitTransaction()
val filter = DateFilterable.STARTED_FROM_DATE val filter = FilterType.STARTED_FROM_DATE
filter.valueMap = mapOf("date" to s2.startDate) filter.valueMap = mapOf("date" to s2.startDate)
val sessions = FilterManager().filter( val sessions = FilterManager().filter(
@ -195,7 +195,7 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
realm.commitTransaction() realm.commitTransaction()
val filter = DateFilterable.STARTED_TO_DATE val filter = FilterType.STARTED_TO_DATE
filter.valueMap = mapOf("date" to s1.startDate) filter.valueMap = mapOf("date" to s1.startDate)
val sessions = FilterManager().filter( val sessions = FilterManager().filter(
@ -226,7 +226,7 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
realm.commitTransaction() realm.commitTransaction()
val filter = DateFilterable.ENDED_FROM_DATE val filter = FilterType.ENDED_FROM_DATE
filter.valueMap = mapOf("date" to s2.endDate) filter.valueMap = mapOf("date" to s2.endDate)
val sessions = FilterManager().filter( val sessions = FilterManager().filter(
@ -257,7 +257,7 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
realm.commitTransaction() realm.commitTransaction()
val filter = DateFilterable.ENDED_TO_DATE val filter = FilterType.ENDED_TO_DATE
filter.valueMap = mapOf("date" to s1.endDate) filter.valueMap = mapOf("date" to s1.endDate)
val sessions = FilterManager().filter( val sessions = FilterManager().filter(

@ -2,9 +2,8 @@ package net.pokeranalytics.android.filter
import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.ext.junit.runners.AndroidJUnit4
import net.pokeranalytics.android.exceptions.FilterValueMapException 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.FilterManager
import net.pokeranalytics.android.model.filter.SessionFilterable
import net.pokeranalytics.android.model.realm.Session import net.pokeranalytics.android.model.realm.Session
import org.junit.Test import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
@ -19,13 +18,13 @@ class ExceptionFilterInstrumentedTest: BaseFilterInstrumentedUnitTest() {
FilterManager().filter( FilterManager().filter(
realm, realm,
Session::class.java, Session::class.java,
arrayListOf(SessionFilterable.BLINDS) arrayListOf(FilterType.BLINDS)
) )
} }
@Test(expected = FilterValueMapException::class) @Test(expected = FilterValueMapException::class)
fun testValueKeyFilterException() { fun testValueKeyFilterException() {
val filter = DateFilterable.STARTED_FROM_DATE val filter = FilterType.STARTED_FROM_DATE
filter.valueMap = mapOf("bob" to Date()) filter.valueMap = mapOf("bob" to Date())
val realm = this.mockRealm val realm = this.mockRealm
@ -38,7 +37,7 @@ class ExceptionFilterInstrumentedTest: BaseFilterInstrumentedUnitTest() {
@Test(expected = FilterValueMapException::class) @Test(expected = FilterValueMapException::class)
fun testSubValueKeyFilterException() { fun testSubValueKeyFilterException() {
val filter = SessionFilterable.BLINDS val filter = FilterType.BLINDS
filter.valueMap = mapOf("map" to arrayOf(mapOf( filter.valueMap = mapOf("map" to arrayOf(mapOf(
"bob" to 0.5, "bob" to 0.5,
"bb" to 1.0, "bb" to 1.0,

@ -3,7 +3,7 @@ package net.pokeranalytics.android.filter
import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.ext.junit.runners.AndroidJUnit4
import io.realm.RealmList import io.realm.RealmList
import net.pokeranalytics.android.model.filter.FilterManager 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 net.pokeranalytics.android.model.realm.*
import org.junit.Assert import org.junit.Assert
import org.junit.Test import org.junit.Test
@ -26,7 +26,7 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
val sessions = FilterManager().filter( val sessions = FilterManager().filter(
realm, realm,
Session::class.java, Session::class.java,
arrayListOf(SessionFilterable.CASH) arrayListOf(FilterType.CASH)
) )
Assert.assertEquals(1, sessions.size) Assert.assertEquals(1, sessions.size)
@ -48,7 +48,7 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
val sessions = FilterManager().filter( val sessions = FilterManager().filter(
realm, realm,
Session::class.java, Session::class.java,
arrayListOf(SessionFilterable.TOURNAMENT) arrayListOf(FilterType.TOURNAMENT)
) )
Assert.assertEquals(1, sessions.size) Assert.assertEquals(1, sessions.size)
@ -75,7 +75,7 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
val sessions = FilterManager().filter( val sessions = FilterManager().filter(
realm, realm,
Session::class.java, Session::class.java,
arrayListOf(SessionFilterable.LIVE) arrayListOf(FilterType.LIVE)
) )
Assert.assertEquals(1, sessions.size) Assert.assertEquals(1, sessions.size)
@ -101,7 +101,7 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
val sessions = FilterManager().filter( val sessions = FilterManager().filter(
realm, realm,
Session::class.java, Session::class.java,
arrayListOf(SessionFilterable.ONLINE) arrayListOf(FilterType.ONLINE)
) )
Assert.assertEquals(1, sessions.size) Assert.assertEquals(1, sessions.size)
@ -122,7 +122,7 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
Session.testInstance(bankroll = b2) Session.testInstance(bankroll = b2)
realm.commitTransaction() realm.commitTransaction()
val filter = SessionFilterable.BANKROLL val filter = FilterType.BANKROLL
filter.valueMap = mapOf("ids" to arrayOf(b1.id)) filter.valueMap = mapOf("ids" to arrayOf(b1.id))
val sessions = FilterManager().filter( val sessions = FilterManager().filter(
@ -155,7 +155,7 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
Session.testInstance(bankroll = b3) Session.testInstance(bankroll = b3)
realm.commitTransaction() realm.commitTransaction()
val filter = SessionFilterable.BANKROLL val filter = FilterType.BANKROLL
filter.valueMap = mapOf("ids" to arrayOf(b1.id, b2.id)) filter.valueMap = mapOf("ids" to arrayOf(b1.id, b2.id))
val sessions = FilterManager().filter( val sessions = FilterManager().filter(
@ -183,7 +183,7 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
Session.testInstance(game = g2) Session.testInstance(game = g2)
realm.commitTransaction() realm.commitTransaction()
val filter = SessionFilterable.GAME val filter = FilterType.GAME
filter.valueMap = mapOf("ids" to arrayOf(g2.id)) filter.valueMap = mapOf("ids" to arrayOf(g2.id))
val sessions = FilterManager().filter( val sessions = FilterManager().filter(
@ -216,7 +216,7 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
Session.testInstance(game = g3) Session.testInstance(game = g3)
realm.commitTransaction() realm.commitTransaction()
val filter = SessionFilterable.GAME val filter = FilterType.GAME
filter.valueMap = mapOf("ids" to arrayOf(g2.id, g3.id)) filter.valueMap = mapOf("ids" to arrayOf(g2.id, g3.id))
val sessions = FilterManager().filter( val sessions = FilterManager().filter(
@ -244,7 +244,7 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
Session.testInstance(location = l2) Session.testInstance(location = l2)
realm.commitTransaction() realm.commitTransaction()
val filter = SessionFilterable.LOCATION val filter = FilterType.LOCATION
filter.valueMap = mapOf("ids" to arrayOf(l1.id)) filter.valueMap = mapOf("ids" to arrayOf(l1.id))
val sessions = FilterManager().filter( val sessions = FilterManager().filter(
@ -277,7 +277,7 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
Session.testInstance(location = l3) Session.testInstance(location = l3)
realm.commitTransaction() realm.commitTransaction()
val filter = SessionFilterable.LOCATION val filter = FilterType.LOCATION
filter.valueMap = mapOf("ids" to arrayOf(l1.id, l3.id)) filter.valueMap = mapOf("ids" to arrayOf(l1.id, l3.id))
val sessions = FilterManager().filter( val sessions = FilterManager().filter(
@ -305,7 +305,7 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
Session.testInstance(tournamentName = t2) Session.testInstance(tournamentName = t2)
realm.commitTransaction() realm.commitTransaction()
val filter = SessionFilterable.TOURNAMENT_NAME val filter = FilterType.TOURNAMENT_NAME
filter.valueMap = mapOf("ids" to arrayOf(t1.id)) filter.valueMap = mapOf("ids" to arrayOf(t1.id))
val sessions = FilterManager().filter( val sessions = FilterManager().filter(
@ -338,7 +338,7 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
Session.testInstance(tournamentName = t3) Session.testInstance(tournamentName = t3)
realm.commitTransaction() realm.commitTransaction()
val filter = SessionFilterable.TOURNAMENT_NAME val filter = FilterType.TOURNAMENT_NAME
filter.valueMap = mapOf("ids" to arrayOf(t1.id, t2.id)) filter.valueMap = mapOf("ids" to arrayOf(t1.id, t2.id))
val sessions = FilterManager().filter( val sessions = FilterManager().filter(
@ -374,7 +374,7 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
Session.testInstance(tournamentFeatures = RealmList(t1)) Session.testInstance(tournamentFeatures = RealmList(t1))
realm.commitTransaction() 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)) filter.valueMap = mapOf("ids" to arrayOf(t1.id, t2.id, t3.id, t4.id))
val sessions = FilterManager().filter( val sessions = FilterManager().filter(
@ -407,7 +407,7 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
Session.testInstance(tournamentFeatures = RealmList(t1)) Session.testInstance(tournamentFeatures = RealmList(t1))
realm.commitTransaction() 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)) filter.valueMap = mapOf("ids" to arrayOf(t1.id, t2.id, t3.id, t4.id))
val sessions = FilterManager().filter( val sessions = FilterManager().filter(
@ -437,7 +437,7 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
Session.testInstance(tournamentFeatures = RealmList(t1)) Session.testInstance(tournamentFeatures = RealmList(t1))
realm.commitTransaction() realm.commitTransaction()
val filter = SessionFilterable.ANY_TOURNAMENT_FEATURES val filter = FilterType.ANY_TOURNAMENT_FEATURES
filter.valueMap = mapOf("ids" to arrayOf(t2.id)) filter.valueMap = mapOf("ids" to arrayOf(t2.id))
val sessions = FilterManager().filter( val sessions = FilterManager().filter(
@ -464,7 +464,7 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
Session.testInstance(tableSize = 10) Session.testInstance(tableSize = 10)
realm.commitTransaction() realm.commitTransaction()
val filter = SessionFilterable.TABLE_SIZE val filter = FilterType.TABLE_SIZE
filter.valueMap = mapOf("values" to arrayOf(2,4)) filter.valueMap = mapOf("values" to arrayOf(2,4))
val sessions = FilterManager().filter( val sessions = FilterManager().filter(
@ -491,7 +491,7 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
val s2 = Session.testInstance(netResult = 570.0) val s2 = Session.testInstance(netResult = 570.0)
realm.commitTransaction() realm.commitTransaction()
val filter = SessionFilterable.MORE_THAN_NET_RESULT val filter = FilterType.MORE_THAN_NET_RESULT
filter.valueMap = mapOf("value" to 204.0) filter.valueMap = mapOf("value" to 204.0)
val sessions = FilterManager().filter( val sessions = FilterManager().filter(
@ -518,7 +518,7 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
Session.testInstance(netResult = 570.0) Session.testInstance(netResult = 570.0)
realm.commitTransaction() realm.commitTransaction()
val filter = SessionFilterable.LESS_THAN_NET_RESULT val filter = FilterType.LESS_THAN_NET_RESULT
filter.valueMap = mapOf("value" to 540.0) filter.valueMap = mapOf("value" to 540.0)
val sessions = FilterManager().filter( val sessions = FilterManager().filter(
@ -545,10 +545,10 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
Session.testInstance(netResult = 570.0) Session.testInstance(netResult = 570.0)
realm.commitTransaction() realm.commitTransaction()
val filterMore = SessionFilterable.MORE_THAN_NET_RESULT val filterMore = FilterType.MORE_THAN_NET_RESULT
filterMore.valueMap = mapOf("value" to 200.0) 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) filterLess.valueMap = mapOf("value" to 400.0)
val sessions = FilterManager().filter( val sessions = FilterManager().filter(

@ -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<String, Any?>? = null
override val filterValuesExpectedKeys : Array<String>?
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<out RealmObject>): RealmQuery<out RealmObject> {
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())
}
}
}

@ -1,5 +0,0 @@
package net.pokeranalytics.android.model.filter
enum class FilterComponent {
}

@ -4,9 +4,11 @@ import io.realm.RealmObject
import io.realm.RealmQuery import io.realm.RealmQuery
import net.pokeranalytics.android.exceptions.FilterValueMapException import net.pokeranalytics.android.exceptions.FilterValueMapException
import net.pokeranalytics.android.model.filter.interfaces.Filterable import net.pokeranalytics.android.model.filter.interfaces.Filterable
import net.pokeranalytics.android.model.realm.FilterComponent
import net.pokeranalytics.android.model.realm.Session 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, LIVE,
CASH, CASH,
ONLINE, 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), MORE_THAN_TOURNAMENT_FEE(Field.NET_RESULT.fieldName, SubType.MORE),
LESS_THAN_TOURNAMENT_FEE(Field.NET_RESULT.fieldName, SubType.LESS), LESS_THAN_TOURNAMENT_FEE(Field.NET_RESULT.fieldName, SubType.LESS),
BETWEEN_TOURNAMENT_FEE(Field.TOURNAMENT_FEE.fieldName, SubType.BETWEEN), 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 { enum class SubType {
@ -62,6 +76,12 @@ enum class SessionFilterable(private var fieldName:String? = null, private var s
NUMBER_OF_TABLE("numberOfTable"), NUMBER_OF_TABLE("numberOfTable"),
NUMBER_OF_PLAYER("tournamentNumberOfPlayers"), NUMBER_OF_PLAYER("tournamentNumberOfPlayers"),
TOURNAMENT_FEE("tournamentEntryFee"), 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) { return when (this) {
BANKROLL, GAME, LOCATION, ANY_TOURNAMENT_FEATURES, ALL_TOURNAMENT_FEATURES -> arrayOf("ids") BANKROLL, GAME, LOCATION, ANY_TOURNAMENT_FEATURES, ALL_TOURNAMENT_FEATURES -> arrayOf("ids")
LIMIT, TOURNAMENT_TYPE, TABLE_SIZE -> arrayOf("values") 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 else -> null
} }
} }
@ -142,9 +166,9 @@ enum class SessionFilterable(private var fieldName:String? = null, private var s
} }
} }
BLINDS -> { BLINDS -> {
val map : Array<Map<String,Any?>> by filterValues val blinds : Array<Map<String,Any?>> by filterValues
val expectedSubKeys = arrayOf("sb", "bb", "code") val expectedSubKeys = arrayOf("sb", "bb", "code")
map.forEachIndexed { index, subMap -> blinds.forEachIndexed { index, subMap ->
val missingKeys = subMap.keys.filter { !expectedSubKeys.contains(it) } val missingKeys = subMap.keys.filter { !expectedSubKeys.contains(it) }
if (subMap.keys.size == expectedSubKeys.size && missingKeys.isNotEmpty()) { if (subMap.keys.size == expectedSubKeys.size && missingKeys.isNotEmpty()) {
throw FilterValueMapException("subValueMap does not contain $missingKeys") throw FilterValueMapException("subValueMap does not contain $missingKeys")
@ -175,14 +199,93 @@ enum class SessionFilterable(private var fieldName:String? = null, private var s
realmQuery.endGroup() realmQuery.endGroup()
if (index < map.size - 1) { if (index < blinds.size - 1) {
realmQuery.or() realmQuery.or()
} }
} }
realmQuery 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 -> { 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")
} }
} }
} }

@ -1,6 +1,7 @@
package net.pokeranalytics.android.model.filter.interfaces package net.pokeranalytics.android.model.filter.interfaces
import net.pokeranalytics.android.exceptions.FilterValueMapException import net.pokeranalytics.android.exceptions.FilterValueMapException
import net.pokeranalytics.android.model.realm.FilterComponent
interface ValueFilterable { interface ValueFilterable {
@ -25,4 +26,6 @@ interface ValueFilterable {
} }
val filterValuesExpectedKeys : Array<String>? val filterValuesExpectedKeys : Array<String>?
fun setValueFrom(filterComponent: FilterComponent)
} }

@ -1,6 +1,7 @@
package net.pokeranalytics.android.model.realm package net.pokeranalytics.android.model.realm
import io.realm.MutableRealmInteger import io.realm.MutableRealmInteger
import io.realm.RealmList
import io.realm.RealmObject import io.realm.RealmObject
import io.realm.annotations.PrimaryKey import io.realm.annotations.PrimaryKey
import java.util.* import java.util.*
@ -20,6 +21,6 @@ open class Filter : RealmObject() {
// for MutableRealmInteger, see https://realm.io/docs/java/latest/#counters // for MutableRealmInteger, see https://realm.io/docs/java/latest/#counters
val usageCount: MutableRealmInteger = MutableRealmInteger.valueOf(0) val usageCount: MutableRealmInteger = MutableRealmInteger.valueOf(0)
// var components: List<FilterComponent> = listOf() var components: RealmList<FilterComponent>? = null
} }

@ -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<FilterElement>) : this(filterElements.first().filterType.name) {
this.ids = when (FilterType.valueOf(this.filterName)) {
FilterType.GAME -> {
RealmList<String>().apply {
this.addAll(filterElements.map {
(it as FilterElement.Game).game.id
})
}
}
else -> null
}
this.values = when (FilterType.valueOf(filterName)) {
FilterType.LIMIT -> {
RealmList<Int>().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<Int>? = null
var ids : RealmList<String>? = null
@Ignore
val value : Double? = null
@Ignore
val leftValue : Double? = null
@Ignore
val rightValue : Double? = null
@Ignore
val blinds : Array<Map<String,Any?>>? = 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
}

@ -2,7 +2,9 @@ package net.pokeranalytics.android.ui.view.rowrepresentable
import io.realm.Realm import io.realm.Realm
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.exceptions.FilterValueMapException
import net.pokeranalytics.android.model.LiveData 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.RowRepresentable
import net.pokeranalytics.android.ui.view.RowViewType import net.pokeranalytics.android.ui.view.RowViewType
import net.pokeranalytics.android.ui.view.rowrepresentable.FilterSection.* import net.pokeranalytics.android.ui.view.rowrepresentable.FilterSection.*
@ -107,6 +109,41 @@ sealed class FilterElement : RowRepresentable {
var filterSection: FilterSectionDataSource? = null 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? override val resId: Int?
get() { get() {
return when (this) { return when (this) {

Loading…
Cancel
Save