commit
18aeba7b62
@ -0,0 +1,27 @@ |
|||||||
|
package net.pokeranalytics.android.filter |
||||||
|
|
||||||
|
import net.pokeranalytics.android.RealmInstrumentedUnitTest |
||||||
|
import net.pokeranalytics.android.model.realm.Bankroll |
||||||
|
import net.pokeranalytics.android.model.realm.Session |
||||||
|
import java.util.* |
||||||
|
|
||||||
|
open class BaseFilterInstrumentedUnitTest : RealmInstrumentedUnitTest() { |
||||||
|
|
||||||
|
// convenience extension |
||||||
|
fun Session.Companion.testInstance( |
||||||
|
netResult: Double, |
||||||
|
isTournament: Boolean, |
||||||
|
startDate: Date, |
||||||
|
endDate: Int = 1, |
||||||
|
bankroll: Bankroll? = null |
||||||
|
): Session { |
||||||
|
val session: Session = Session.newInstance(super.mockRealm, isTournament, bankroll) |
||||||
|
session.result?.netResult = netResult |
||||||
|
session.startDate = startDate |
||||||
|
val cal = Calendar.getInstance() // creates calendar |
||||||
|
cal.time = startDate // sets calendar time/date |
||||||
|
cal.add(Calendar.HOUR_OF_DAY, endDate) // adds one hour |
||||||
|
session.endDate = cal.time // returns new date object, one hour in the future |
||||||
|
return session |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,274 @@ |
|||||||
|
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.FilterManager |
||||||
|
import net.pokeranalytics.android.model.realm.Session |
||||||
|
import org.junit.Assert |
||||||
|
import org.junit.Test |
||||||
|
import org.junit.runner.RunWith |
||||||
|
import java.util.* |
||||||
|
|
||||||
|
@RunWith(AndroidJUnit4::class) |
||||||
|
class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { |
||||||
|
|
||||||
|
@Test |
||||||
|
fun testDayOfWeekFilter() { |
||||||
|
|
||||||
|
val realm = this.mockRealm |
||||||
|
realm.beginTransaction() |
||||||
|
|
||||||
|
val cal = Calendar.getInstance() // creates calendar |
||||||
|
cal.time = Date() // sets calendar time/date |
||||||
|
val s1 = Session.testInstance(100.0, false, cal.time) |
||||||
|
cal.add(Calendar.DAY_OF_MONTH, 1) // adds one hour |
||||||
|
Session.testInstance(100.0, true, cal.time) |
||||||
|
realm.commitTransaction() |
||||||
|
|
||||||
|
val filter = DateFilterable.DAY_OF_WEEK |
||||||
|
cal.time = s1.startDate |
||||||
|
filter.valueMap = mapOf("dayOfWeek" to cal.get(Calendar.DAY_OF_WEEK)) |
||||||
|
|
||||||
|
val sessions = FilterManager().filter( |
||||||
|
realm, |
||||||
|
Session::class.java, |
||||||
|
arrayListOf(filter) |
||||||
|
) |
||||||
|
|
||||||
|
Assert.assertEquals(1, sessions.size) |
||||||
|
sessions[0]?.run { |
||||||
|
Assert.assertEquals(s1.id, (this as Session).id) |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
fun testMonthFilter() { |
||||||
|
|
||||||
|
val realm = this.mockRealm |
||||||
|
realm.beginTransaction() |
||||||
|
val cal = Calendar.getInstance() |
||||||
|
cal.time = Date() |
||||||
|
val s1 = Session.testInstance(100.0, false, cal.time) |
||||||
|
cal.add(Calendar.MONTH, 1) |
||||||
|
|
||||||
|
Session.testInstance(100.0, true, cal.time) |
||||||
|
realm.commitTransaction() |
||||||
|
|
||||||
|
val filter = DateFilterable.MONTH |
||||||
|
cal.time = s1.startDate |
||||||
|
filter.valueMap = mapOf("month" to cal.get(Calendar.MONTH)) |
||||||
|
|
||||||
|
val sessions = FilterManager().filter( |
||||||
|
realm, |
||||||
|
Session::class.java, |
||||||
|
arrayListOf(filter) |
||||||
|
) |
||||||
|
|
||||||
|
Assert.assertEquals(1, sessions.size) |
||||||
|
sessions[0]?.run { |
||||||
|
Assert.assertEquals(s1.id, (this as Session).id) |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
fun testYearFilter() { |
||||||
|
|
||||||
|
val realm = this.mockRealm |
||||||
|
realm.beginTransaction() |
||||||
|
val cal = Calendar.getInstance() |
||||||
|
cal.time = Date() |
||||||
|
val s1 = Session.testInstance(100.0, false, cal.time) |
||||||
|
cal.add(Calendar.YEAR, 1) |
||||||
|
|
||||||
|
Session.testInstance(100.0, true, cal.time) |
||||||
|
realm.commitTransaction() |
||||||
|
|
||||||
|
val filter = DateFilterable.YEAR |
||||||
|
cal.time = s1.startDate |
||||||
|
filter.valueMap = mapOf("year" to cal.get(Calendar.YEAR)) |
||||||
|
|
||||||
|
val sessions = FilterManager().filter( |
||||||
|
realm, |
||||||
|
Session::class.java, |
||||||
|
arrayListOf(filter) |
||||||
|
) |
||||||
|
|
||||||
|
Assert.assertEquals(1, sessions.size) |
||||||
|
sessions[0]?.run { |
||||||
|
Assert.assertEquals(s1.id, (this as Session).id) |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@Test |
||||||
|
fun testWeekEndFilter() { |
||||||
|
|
||||||
|
val realm = this.mockRealm |
||||||
|
realm.beginTransaction() |
||||||
|
val cal = Calendar.getInstance() |
||||||
|
cal.time = Date() |
||||||
|
cal.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY) |
||||||
|
val s1 = Session.testInstance(100.0, false, cal.time) |
||||||
|
cal.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY) |
||||||
|
|
||||||
|
Session.testInstance(100.0, true, cal.time) |
||||||
|
realm.commitTransaction() |
||||||
|
val sessions = FilterManager().filter( |
||||||
|
realm, |
||||||
|
Session::class.java, |
||||||
|
arrayListOf(DateFilterable.WEEK_END) |
||||||
|
) |
||||||
|
|
||||||
|
Assert.assertEquals(1, sessions.size) |
||||||
|
sessions[0]?.run { |
||||||
|
Assert.assertEquals(s1.id, (this as Session).id) |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
fun testWeekDayFilter() { |
||||||
|
|
||||||
|
val realm = this.mockRealm |
||||||
|
realm.beginTransaction() |
||||||
|
val cal = Calendar.getInstance() |
||||||
|
cal.time = Date() |
||||||
|
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY) |
||||||
|
val s1 = Session.testInstance(100.0, false, cal.time) |
||||||
|
cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY) |
||||||
|
|
||||||
|
Session.testInstance(100.0, true, cal.time) |
||||||
|
realm.commitTransaction() |
||||||
|
val sessions = FilterManager().filter( |
||||||
|
realm, |
||||||
|
Session::class.java, |
||||||
|
arrayListOf(DateFilterable.WEEK_DAY) |
||||||
|
) |
||||||
|
|
||||||
|
Assert.assertEquals(1, sessions.size) |
||||||
|
sessions[0]?.run { |
||||||
|
Assert.assertEquals(s1.id, (this as Session).id) |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
fun testStartedFomDateFilter() { |
||||||
|
|
||||||
|
val realm = this.mockRealm |
||||||
|
realm.beginTransaction() |
||||||
|
|
||||||
|
val cal = Calendar.getInstance() // creates calendar |
||||||
|
cal.time = Date() // sets calendar time/date |
||||||
|
|
||||||
|
Session.testInstance(100.0, false, cal.time, 1) |
||||||
|
|
||||||
|
cal.add(Calendar.HOUR_OF_DAY, 2) // adds one hour |
||||||
|
val s2 = Session.testInstance(100.0, true, cal.time, 1) |
||||||
|
realm.commitTransaction() |
||||||
|
|
||||||
|
val filter = DateFilterable.STARTED_FROM_DATE |
||||||
|
filter.valueMap = mapOf("date" to s2.startDate) |
||||||
|
|
||||||
|
val sessions = FilterManager().filter( |
||||||
|
realm, |
||||||
|
Session::class.java, |
||||||
|
arrayListOf(filter) |
||||||
|
) |
||||||
|
|
||||||
|
Assert.assertEquals(1, sessions.size) |
||||||
|
sessions[0]?.run { |
||||||
|
Assert.assertEquals(s2.id, (this as Session).id) |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
fun testStartedToDateFilter() { |
||||||
|
|
||||||
|
val realm = this.mockRealm |
||||||
|
realm.beginTransaction() |
||||||
|
|
||||||
|
val cal = Calendar.getInstance() // creates calendar |
||||||
|
cal.time = Date() // sets calendar time/date |
||||||
|
val s1 = Session.testInstance(100.0, false, cal.time, 1) |
||||||
|
|
||||||
|
cal.add(Calendar.HOUR_OF_DAY, 2) // adds one hour |
||||||
|
Session.testInstance(100.0, true, cal.time, 1) |
||||||
|
|
||||||
|
realm.commitTransaction() |
||||||
|
|
||||||
|
val filter = DateFilterable.STARTED_TO_DATE |
||||||
|
filter.valueMap = mapOf("date" to s1.startDate) |
||||||
|
|
||||||
|
val sessions = FilterManager().filter( |
||||||
|
realm, |
||||||
|
Session::class.java, |
||||||
|
arrayListOf(filter) |
||||||
|
) |
||||||
|
|
||||||
|
Assert.assertEquals(1, sessions.size) |
||||||
|
sessions[0]?.run { |
||||||
|
Assert.assertEquals(s1.id, (this as Session).id) |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
fun testEndedFomDateFilter() { |
||||||
|
|
||||||
|
val realm = this.mockRealm |
||||||
|
realm.beginTransaction() |
||||||
|
|
||||||
|
val cal = Calendar.getInstance() // creates calendar |
||||||
|
cal.time = Date() // sets calendar time/date |
||||||
|
|
||||||
|
Session.testInstance(100.0, false, cal.time, 1) |
||||||
|
|
||||||
|
cal.add(Calendar.HOUR_OF_DAY, 2) // adds one hour |
||||||
|
val s2 = Session.testInstance(100.0, true, cal.time, 1) |
||||||
|
|
||||||
|
realm.commitTransaction() |
||||||
|
|
||||||
|
val filter = DateFilterable.ENDED_FROM_DATE |
||||||
|
filter.valueMap = mapOf("date" to s2.endDate) |
||||||
|
|
||||||
|
val sessions = FilterManager().filter( |
||||||
|
realm, |
||||||
|
Session::class.java, |
||||||
|
arrayListOf(filter) |
||||||
|
) |
||||||
|
|
||||||
|
Assert.assertEquals(1, sessions.size) |
||||||
|
sessions[0]?.run { |
||||||
|
Assert.assertEquals(s2.id, (this as Session).id) |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
fun testEndedToDateFilter() { |
||||||
|
|
||||||
|
val realm = this.mockRealm |
||||||
|
realm.beginTransaction() |
||||||
|
|
||||||
|
val cal = Calendar.getInstance() // creates calendar |
||||||
|
cal.time = Date() // sets calendar time/date |
||||||
|
val s1 = Session.testInstance(100.0, false, cal.time, 1) |
||||||
|
|
||||||
|
cal.add(Calendar.HOUR_OF_DAY, 2) // adds one hour |
||||||
|
|
||||||
|
Session.testInstance(100.0, true, cal.time, 1) |
||||||
|
realm.commitTransaction() |
||||||
|
|
||||||
|
|
||||||
|
val filter = DateFilterable.ENDED_TO_DATE |
||||||
|
filter.valueMap = mapOf("date" to s1.endDate) |
||||||
|
|
||||||
|
val sessions = FilterManager().filter( |
||||||
|
realm, |
||||||
|
Session::class.java, |
||||||
|
arrayListOf(filter) |
||||||
|
) |
||||||
|
|
||||||
|
Assert.assertEquals(1, sessions.size) |
||||||
|
sessions[0]?.run { |
||||||
|
Assert.assertEquals(s1.id, (this as Session).id) |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,55 @@ |
|||||||
|
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.FilterManager |
||||||
|
import net.pokeranalytics.android.model.filter.SessionFilterable |
||||||
|
import net.pokeranalytics.android.model.realm.Session |
||||||
|
import org.junit.Test |
||||||
|
import org.junit.runner.RunWith |
||||||
|
import java.util.* |
||||||
|
|
||||||
|
@RunWith(AndroidJUnit4::class) |
||||||
|
class ExceptionFilterInstrumentedTest: BaseFilterInstrumentedUnitTest() { |
||||||
|
|
||||||
|
@Test(expected = FilterValueMapException::class) |
||||||
|
fun testFilterException() { |
||||||
|
val realm = this.mockRealm |
||||||
|
FilterManager().filter( |
||||||
|
realm, |
||||||
|
Session::class.java, |
||||||
|
arrayListOf(SessionFilterable.BLINDS) |
||||||
|
) |
||||||
|
} |
||||||
|
|
||||||
|
@Test(expected = FilterValueMapException::class) |
||||||
|
fun testValueKeyFilterException() { |
||||||
|
val filter = DateFilterable.STARTED_FROM_DATE |
||||||
|
filter.valueMap = mapOf("bob" to Date()) |
||||||
|
|
||||||
|
val realm = this.mockRealm |
||||||
|
FilterManager().filter( |
||||||
|
realm, |
||||||
|
Session::class.java, |
||||||
|
arrayListOf(filter) |
||||||
|
) |
||||||
|
} |
||||||
|
|
||||||
|
@Test(expected = FilterValueMapException::class) |
||||||
|
fun testSubValueKeyFilterException() { |
||||||
|
val filter = SessionFilterable.BLINDS |
||||||
|
filter.valueMap = mapOf("map" to arrayOf(mapOf( |
||||||
|
"bob" to 0.5, |
||||||
|
"bb" to 1.0, |
||||||
|
"code" to null |
||||||
|
))) |
||||||
|
|
||||||
|
val realm = this.mockRealm |
||||||
|
FilterManager().filter( |
||||||
|
realm, |
||||||
|
Session::class.java, |
||||||
|
arrayListOf(filter) |
||||||
|
) |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,77 @@ |
|||||||
|
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 filterValuesExceptedKeys : 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,154 +1,5 @@ |
|||||||
package net.pokeranalytics.android.model.filter |
package net.pokeranalytics.android.model.filter |
||||||
|
|
||||||
import io.realm.RealmObject |
|
||||||
import io.realm.RealmQuery |
|
||||||
import net.pokeranalytics.android.exceptions.FilterValueMapException |
|
||||||
import net.pokeranalytics.android.model.realm.Session |
|
||||||
import java.util.* |
|
||||||
|
|
||||||
|
|
||||||
enum class FilterComponent { |
enum class FilterComponent { |
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
enum class SessionFilterable(var fieldName:String? = null) : Filterable { |
|
||||||
LIVE("bankroll.live"), |
|
||||||
CASH("type"), |
|
||||||
ONLINE, |
|
||||||
TOURNAMENT, |
|
||||||
BANKROLL("bankroll.id"), |
|
||||||
GAME("game.id"), |
|
||||||
LIMIT("limit"), |
|
||||||
TABLE_SIZE("tableSize"), |
|
||||||
LOCATION("location.id"), |
|
||||||
NUMBEROFTABLE("numberOfTable"), |
|
||||||
COMMENT("comment"), |
|
||||||
TOURNAMENT_TYPE("tournamentType"), |
|
||||||
TOURNAMENT_NAME("tournamentName.id"), |
|
||||||
TOURNAMENT_FEATURES("tournamentFeature.id"), |
|
||||||
TOURNAMENT_NUMBER_OF_PLAYER("tournamentNumberOfPlayers"), |
|
||||||
TOURNAMENT_ENTRY_FEE("tournamentEntryFee"), |
|
||||||
RESULT_BUYIN("result.buyin"), |
|
||||||
RESULT_CASHED_OUT("result.cashout"), |
|
||||||
RESULT_NET("result.ratedNet"), |
|
||||||
RESULT_TIPS("result.tips"), |
|
||||||
STARTED_FROM_DATE, |
|
||||||
STARTED_TO_DATE, |
|
||||||
ENDED_FROM_DATE, |
|
||||||
ENDED_TO_DATE, |
|
||||||
BLINDS, |
|
||||||
; |
|
||||||
|
|
||||||
private enum class Field(var fieldName:String) { |
|
||||||
START_DATE("startDate"), |
|
||||||
END_DATE("endDate"), |
|
||||||
CURRENCY("bankroll.currency"), |
|
||||||
CURRENCY_CODE("bankroll.currency.code"), |
|
||||||
BIG_BLIND("cgBigBlind"), |
|
||||||
SMALL_BLIND("cgSmallBlind"); |
|
||||||
} |
|
||||||
|
|
||||||
private var _valueMap: Map<String, Any?>? = null |
|
||||||
var valueMap : Map<String, Any?>? |
|
||||||
get() { |
|
||||||
this.valueMapExceptedKeys?.let { valueMapExceptedKeys -> |
|
||||||
_valueMap?.let { map -> |
|
||||||
println("valueMapExceptedKeys $valueMapExceptedKeys") |
|
||||||
println("map.keys $map.keys") |
|
||||||
var missingKeys = map.keys.filter { !valueMapExceptedKeys.contains(it) } |
|
||||||
println("missingKeys $missingKeys") |
|
||||||
if (map.keys.size == valueMapExceptedKeys.size && missingKeys.isNotEmpty()) { |
|
||||||
throw FilterValueMapException("valueMap does not contain ${missingKeys}") |
|
||||||
} |
|
||||||
} ?: run { |
|
||||||
throw FilterValueMapException("valueMap null not expected") |
|
||||||
} |
|
||||||
} |
|
||||||
return _valueMap |
|
||||||
} |
|
||||||
set(value) { |
|
||||||
_valueMap = value |
|
||||||
} |
|
||||||
|
|
||||||
private val valueMapExceptedKeys : Array<String>? |
|
||||||
get() { |
|
||||||
return when (this) { |
|
||||||
BANKROLL -> arrayOf("ids") |
|
||||||
STARTED_FROM_DATE, STARTED_TO_DATE, ENDED_FROM_DATE, ENDED_TO_DATE -> arrayOf("date") |
|
||||||
BLINDS -> arrayOf("map") |
|
||||||
else -> null |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
override fun filter(realmQuery: RealmQuery<*>): RealmQuery<out RealmObject> { |
|
||||||
return when (this) { |
|
||||||
LIVE -> realmQuery.equalTo(this.fieldName, true) |
|
||||||
CASH -> realmQuery.equalTo(this.fieldName, Session.Type.CASH_GAME.ordinal) |
|
||||||
ONLINE -> LIVE.filter(realmQuery.not()) |
|
||||||
TOURNAMENT -> CASH.filter(realmQuery.not()) |
|
||||||
BANKROLL -> { |
|
||||||
val ids : Array<String> by valueMap |
|
||||||
realmQuery.`in`(this.fieldName, ids) |
|
||||||
} |
|
||||||
STARTED_FROM_DATE -> { |
|
||||||
val date : Date by valueMap |
|
||||||
realmQuery.greaterThanOrEqualTo(Field.START_DATE.fieldName, date) |
|
||||||
} |
|
||||||
STARTED_TO_DATE -> { |
|
||||||
val date : Date by valueMap |
|
||||||
realmQuery.lessThanOrEqualTo(Field.START_DATE.fieldName, date) |
|
||||||
} |
|
||||||
ENDED_FROM_DATE -> { |
|
||||||
val date : Date by valueMap |
|
||||||
realmQuery.greaterThanOrEqualTo(Field.END_DATE.fieldName, date) |
|
||||||
} |
|
||||||
ENDED_TO_DATE -> { |
|
||||||
val date : Date by valueMap |
|
||||||
realmQuery.lessThanOrEqualTo(Field.END_DATE.fieldName, date) |
|
||||||
} |
|
||||||
|
|
||||||
BLINDS -> { |
|
||||||
val map : Array<Map<String,Any?>> by valueMap |
|
||||||
var finalQuery = realmQuery |
|
||||||
val expectedSubKeys = arrayOf("sb", "bb", "code") as Array<String> |
|
||||||
map.forEachIndexed { index, subMap -> |
|
||||||
var missingKeys = subMap.keys.filter { !expectedSubKeys.contains(it) } |
|
||||||
if (subMap.keys.size == expectedSubKeys.size && missingKeys.isNotEmpty()) { |
|
||||||
throw FilterValueMapException("subValueMap does not contain ${missingKeys}") |
|
||||||
} |
|
||||||
|
|
||||||
val sb : Double? by subMap |
|
||||||
val bb : Double? by subMap |
|
||||||
val code : String? by subMap |
|
||||||
|
|
||||||
finalQuery |
|
||||||
.beginGroup() |
|
||||||
|
|
||||||
sb?.let { |
|
||||||
finalQuery |
|
||||||
.equalTo(Field.SMALL_BLIND.fieldName, sb) |
|
||||||
.and() |
|
||||||
} |
|
||||||
|
|
||||||
finalQuery |
|
||||||
.equalTo(Field.BIG_BLIND.fieldName, bb) |
|
||||||
.and() |
|
||||||
|
|
||||||
code?.let { |
|
||||||
finalQuery.equalTo(Field.CURRENCY_CODE.fieldName, code) |
|
||||||
} ?: run { |
|
||||||
finalQuery.isNull(Field.CURRENCY_CODE.fieldName) |
|
||||||
} |
|
||||||
|
|
||||||
finalQuery.endGroup() |
|
||||||
|
|
||||||
if (index < map.size - 1) { |
|
||||||
finalQuery.or() |
|
||||||
} |
|
||||||
} |
|
||||||
finalQuery |
|
||||||
} |
|
||||||
else -> realmQuery |
|
||||||
} as RealmQuery<out RealmObject> |
|
||||||
} |
|
||||||
} |
} |
||||||
@ -0,0 +1,109 @@ |
|||||||
|
package net.pokeranalytics.android.model.filter |
||||||
|
|
||||||
|
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.Session |
||||||
|
|
||||||
|
enum class SessionFilterable: Filterable { |
||||||
|
LIVE, |
||||||
|
CASH, |
||||||
|
ONLINE, |
||||||
|
TOURNAMENT, |
||||||
|
BANKROLL, |
||||||
|
BLINDS, |
||||||
|
; |
||||||
|
|
||||||
|
private enum class Field(var fieldName:String) { |
||||||
|
LIVE("bankroll.live"), |
||||||
|
CASH("type"), |
||||||
|
BANKROLL("bankroll.id"), |
||||||
|
START_DATE("startDate"), |
||||||
|
END_DATE("endDate"), |
||||||
|
CURRENCY("bankroll.currency"), |
||||||
|
CURRENCY_CODE("bankroll.currency.code"), |
||||||
|
BIG_BLIND("cgBigBlind"), |
||||||
|
SMALL_BLIND("cgSmallBlind"), |
||||||
|
GAME("game.id"), |
||||||
|
LIMIT("limit"), |
||||||
|
TABLE_SIZE("tableSize"), |
||||||
|
LOCATION("location.id"), |
||||||
|
NUMBER_OF_TABLE("numberOfTable"), |
||||||
|
COMMENT("comment"), |
||||||
|
TOURNAMENT_TYPE("tournamentType"), |
||||||
|
TOURNAMENT_NAME("tournamentName.id"), |
||||||
|
TOURNAMENT_FEATURES("tournamentFeature.id"), |
||||||
|
TOURNAMENT_NUMBER_OF_PLAYER("tournamentNumberOfPlayers"), |
||||||
|
TOURNAMENT_ENTRY_FEE("tournamentEntryFee"), |
||||||
|
RESULT_BUY_IN("result.buyin"), |
||||||
|
RESULT_CASHED_OUT("result.cashout"), |
||||||
|
RESULT_NET("result.ratedNet"), |
||||||
|
RESULT_TIPS("result.tips"), |
||||||
|
; |
||||||
|
} |
||||||
|
|
||||||
|
override var valueMap : Map<String, Any?>? = null |
||||||
|
|
||||||
|
override val filterValuesExceptedKeys : Array<String>? |
||||||
|
get() { |
||||||
|
return when (this) { |
||||||
|
BANKROLL -> arrayOf("ids") |
||||||
|
BLINDS -> arrayOf("map") |
||||||
|
else -> null |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
override fun filter(realmQuery: RealmQuery<out RealmObject>): RealmQuery<out RealmObject> { |
||||||
|
return when (this) { |
||||||
|
LIVE -> realmQuery.equalTo(Field.LIVE.fieldName, true) |
||||||
|
CASH -> realmQuery.equalTo(Field.CASH.fieldName, Session.Type.CASH_GAME.ordinal) |
||||||
|
ONLINE -> LIVE.filter(realmQuery.not()) |
||||||
|
TOURNAMENT -> CASH.filter(realmQuery.not()) |
||||||
|
BANKROLL -> { |
||||||
|
val ids : Array<String> by filterValues |
||||||
|
realmQuery.`in`(Field.BANKROLL.fieldName, ids) |
||||||
|
} |
||||||
|
BLINDS -> { |
||||||
|
val map : Array<Map<String,Any?>> by filterValues |
||||||
|
val expectedSubKeys = arrayOf("sb", "bb", "code") |
||||||
|
map.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") |
||||||
|
} |
||||||
|
|
||||||
|
val sb : Double? by subMap |
||||||
|
val bb : Double? by subMap |
||||||
|
val code : String? by subMap |
||||||
|
|
||||||
|
realmQuery |
||||||
|
.beginGroup() |
||||||
|
|
||||||
|
sb?.let { |
||||||
|
realmQuery |
||||||
|
.equalTo(Field.SMALL_BLIND.fieldName, sb) |
||||||
|
.and() |
||||||
|
} |
||||||
|
|
||||||
|
realmQuery |
||||||
|
.equalTo(Field.BIG_BLIND.fieldName, bb) |
||||||
|
.and() |
||||||
|
|
||||||
|
code?.let { |
||||||
|
realmQuery.equalTo(Field.CURRENCY_CODE.fieldName, code) |
||||||
|
} ?: run { |
||||||
|
realmQuery.isNull(Field.CURRENCY_CODE.fieldName) |
||||||
|
} |
||||||
|
|
||||||
|
realmQuery.endGroup() |
||||||
|
|
||||||
|
if (index < map.size - 1) { |
||||||
|
realmQuery.or() |
||||||
|
} |
||||||
|
} |
||||||
|
realmQuery |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,8 @@ |
|||||||
|
package net.pokeranalytics.android.model.filter.interfaces |
||||||
|
|
||||||
|
import io.realm.RealmObject |
||||||
|
import io.realm.RealmQuery |
||||||
|
|
||||||
|
interface Filterable : ValueFilterable { |
||||||
|
fun filter(realmQuery: RealmQuery<out RealmObject>): RealmQuery<out RealmObject> |
||||||
|
} |
||||||
@ -0,0 +1,20 @@ |
|||||||
|
package net.pokeranalytics.android.model.filter.interfaces |
||||||
|
|
||||||
|
import java.util.* |
||||||
|
|
||||||
|
interface TimeFilterable { |
||||||
|
|
||||||
|
var dayOfWeek : Int? |
||||||
|
var month : Int? |
||||||
|
var year : Int? |
||||||
|
|
||||||
|
fun updateTimeParameter(startDate: Date?) { |
||||||
|
startDate?.let { |
||||||
|
val cal = Calendar.getInstance() |
||||||
|
cal.time = it |
||||||
|
dayOfWeek = cal.get(Calendar.DAY_OF_WEEK) |
||||||
|
month = cal.get(Calendar.MONTH) |
||||||
|
year = cal.get(Calendar.YEAR) |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,28 @@ |
|||||||
|
package net.pokeranalytics.android.model.filter.interfaces |
||||||
|
|
||||||
|
import net.pokeranalytics.android.exceptions.FilterValueMapException |
||||||
|
|
||||||
|
interface ValueFilterable { |
||||||
|
|
||||||
|
var valueMap: Map<String, Any?>? |
||||||
|
|
||||||
|
var filterValues : Map<String, Any?>? |
||||||
|
get() { |
||||||
|
this.filterValuesExceptedKeys?.let { valueMapExceptedKeys -> |
||||||
|
valueMap?.let { map -> |
||||||
|
var missingKeys = map.keys.filter { !valueMapExceptedKeys.contains(it) } |
||||||
|
if (map.keys.size == valueMapExceptedKeys.size && missingKeys.isNotEmpty()) { |
||||||
|
throw FilterValueMapException("valueMap does not contain ${missingKeys}") |
||||||
|
} |
||||||
|
} ?: run { |
||||||
|
throw FilterValueMapException("valueMap null not expected") |
||||||
|
} |
||||||
|
} |
||||||
|
return this.valueMap |
||||||
|
} |
||||||
|
set(value) { |
||||||
|
valueMap = value |
||||||
|
} |
||||||
|
|
||||||
|
val filterValuesExceptedKeys : Array<String>? |
||||||
|
} |
||||||
Loading…
Reference in new issue