fix unit tests clean up queryCondition interfaces

feature/top10
Razmig Sarkissian 7 years ago
parent 7bf44a6c61
commit 0e5877e8f3
  1. 4
      app/src/androidTest/java/net/pokeranalytics/android/unitTests/StatsInstrumentedUnitTest.kt
  2. 23
      app/src/androidTest/java/net/pokeranalytics/android/unitTests/filter/BlindFilterInstrumentedTest.kt
  3. 49
      app/src/androidTest/java/net/pokeranalytics/android/unitTests/filter/DateFilterInstrumentedUnitTest.kt
  4. 6
      app/src/androidTest/java/net/pokeranalytics/android/unitTests/filter/RealmFilterInstrumentedUnitTest.kt
  5. 92
      app/src/androidTest/java/net/pokeranalytics/android/unitTests/filter/SessionFilterInstrumentedUnitTest.kt
  6. 70
      app/src/main/java/net/pokeranalytics/android/model/Criteria.kt
  7. 23
      app/src/main/java/net/pokeranalytics/android/model/comparison/Comparator.kt
  8. 197
      app/src/main/java/net/pokeranalytics/android/model/filter/QueryCondition.kt
  9. 4
      app/src/main/java/net/pokeranalytics/android/model/realm/FilterCondition.kt
  10. 52
      app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt
  11. 12
      app/src/main/java/net/pokeranalytics/android/ui/fragment/CalendarDetailsFragment.kt
  12. 28
      app/src/main/java/net/pokeranalytics/android/ui/fragment/CalendarFragment.kt
  13. 4
      app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticsFragment.kt
  14. 46
      app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterElementRow.kt
  15. 46
      app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterSectionRow.kt

@ -724,7 +724,7 @@ class StatsInstrumentedUnitTest : SessionInstrumentedUnitTest() {
} }
val group = ComputableGroup("test", listOf(QueryCondition.CASH)) val group = ComputableGroup("test", listOf(QueryCondition.IsCash))
val options = Calculator.Options() val options = Calculator.Options()
options.displayedStats = listOf(Stat.DURATION) options.displayedStats = listOf(Stat.DURATION)
@ -769,7 +769,7 @@ class StatsInstrumentedUnitTest : SessionInstrumentedUnitTest() {
} }
val group = ComputableGroup("test", listOf(QueryCondition.CASH)) val group = ComputableGroup("test", listOf(QueryCondition.IsCash))
val options = Calculator.Options() val options = Calculator.Options()
options.displayedStats = listOf(Stat.DURATION) options.displayedStats = listOf(Stat.DURATION)

@ -6,7 +6,6 @@ import net.pokeranalytics.android.model.realm.Bankroll
import net.pokeranalytics.android.model.realm.Filter import net.pokeranalytics.android.model.realm.Filter
import net.pokeranalytics.android.model.realm.FilterCondition import net.pokeranalytics.android.model.realm.FilterCondition
import net.pokeranalytics.android.model.realm.Session import net.pokeranalytics.android.model.realm.Session
import net.pokeranalytics.android.ui.view.rowrepresentable.FilterElementRow
import net.pokeranalytics.android.ui.view.rowrepresentable.FilterSectionRow import net.pokeranalytics.android.ui.view.rowrepresentable.FilterSectionRow
import org.junit.Assert import org.junit.Assert
import org.junit.Test import org.junit.Test
@ -41,9 +40,9 @@ class BlindFilterInstrumentedTest : BaseFilterInstrumentedUnitTest() {
realm.commitTransaction() realm.commitTransaction()
val filter = QueryCondition.BLIND() val filter = QueryCondition.AnyBlind()
val blind = QueryCondition.BLIND().apply { val blind = QueryCondition.AnyBlind().apply {
listOfValues = arrayListOf(s1.blinds!!) listOfValues = arrayListOf(s1.blinds!!)
} }
@ -88,12 +87,12 @@ class BlindFilterInstrumentedTest : BaseFilterInstrumentedUnitTest() {
realm.commitTransaction() realm.commitTransaction()
val filter = QueryCondition.BLIND() val filter = QueryCondition.AnyBlind()
val blind1 = QueryCondition.BLIND().apply { val blind1 = QueryCondition.AnyBlind().apply {
listOfValues = arrayListOf(s1.blinds!!) listOfValues = arrayListOf(s1.blinds!!)
} }
val blind2 = QueryCondition.BLIND().apply { val blind2 = QueryCondition.AnyBlind().apply {
listOfValues = arrayListOf(s2.blinds!!) listOfValues = arrayListOf(s2.blinds!!)
} }
@ -140,9 +139,9 @@ class BlindFilterInstrumentedTest : BaseFilterInstrumentedUnitTest() {
realm.commitTransaction() realm.commitTransaction()
val filter = QueryCondition.BLIND() val filter = QueryCondition.AnyBlind()
val blind = QueryCondition.BLIND().apply { val blind = QueryCondition.AnyBlind().apply {
listOfValues = arrayListOf(s3.blinds!!) listOfValues = arrayListOf(s3.blinds!!)
} }
@ -150,7 +149,7 @@ class BlindFilterInstrumentedTest : BaseFilterInstrumentedUnitTest() {
val filterElement = FilterCondition(filterElementRows = arrayListOf(blind)) val filterElement = FilterCondition(filterElementRows = arrayListOf(blind))
filter.updateValueMap(filterElement) filter.updateValueMap(filterElement)
println("<<<< ${filter.listOfValues}")
val sessions = Filter.queryOn<Session>(realm, arrayListOf(filter)) val sessions = Filter.queryOn<Session>(realm, arrayListOf(filter))
Assert.assertEquals(1, sessions.size) Assert.assertEquals(1, sessions.size)
@ -188,12 +187,12 @@ class BlindFilterInstrumentedTest : BaseFilterInstrumentedUnitTest() {
val filter = QueryCondition.BLIND() val filter = QueryCondition.AnyBlind()
val blind1 = QueryCondition.BLIND().apply { val blind1 = QueryCondition.AnyBlind().apply {
listOfValues = arrayListOf(s1.blinds!!) listOfValues = arrayListOf(s1.blinds!!)
} }
val blind2 = QueryCondition.BLIND().apply { val blind2 = QueryCondition.AnyBlind().apply {
listOfValues = arrayListOf(s2.blinds!!) listOfValues = arrayListOf(s2.blinds!!)
} }

@ -6,7 +6,6 @@ import net.pokeranalytics.android.model.filter.QueryCondition
import net.pokeranalytics.android.model.realm.Filter import net.pokeranalytics.android.model.realm.Filter
import net.pokeranalytics.android.model.realm.FilterCondition import net.pokeranalytics.android.model.realm.FilterCondition
import net.pokeranalytics.android.model.realm.Session import net.pokeranalytics.android.model.realm.Session
import net.pokeranalytics.android.ui.view.rowrepresentable.FilterElementRow
import net.pokeranalytics.android.ui.view.rowrepresentable.FilterSectionRow import net.pokeranalytics.android.ui.view.rowrepresentable.FilterSectionRow
import net.pokeranalytics.android.util.extensions.startOfDay import net.pokeranalytics.android.util.extensions.startOfDay
import org.junit.Assert import org.junit.Assert
@ -30,10 +29,10 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
Session.testInstance(100.0, true, cal.time) Session.testInstance(100.0, true, cal.time)
realm.commitTransaction() realm.commitTransaction()
val filter = QueryCondition.DAY_OF_WEEK() val filter = QueryCondition.AnyDayOfWeek()
cal.time = s1.startDate cal.time = s1.startDate
val filterElementRow = QueryCondition.DAY_OF_WEEK().apply { listOfValues = arrayListOf(cal.get(Calendar.DAY_OF_WEEK)) } val filterElementRow = QueryCondition.AnyDayOfWeek().apply { listOfValues = arrayListOf(cal.get(Calendar.DAY_OF_WEEK)) }
filterElementRow.filterSectionRow = FilterSectionRow.DYNAMIC_DATE filterElementRow.filterSectionRow = FilterSectionRow.DYNAMIC_DATE
val filterElement = FilterCondition(arrayListOf(filterElementRow)) val filterElement = FilterCondition(arrayListOf(filterElementRow))
filter.updateValueMap(filterElement) filter.updateValueMap(filterElement)
@ -59,9 +58,9 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
Session.testInstance(100.0, true, cal.time) Session.testInstance(100.0, true, cal.time)
realm.commitTransaction() realm.commitTransaction()
val filter = QueryCondition.MONTH() val filter = QueryCondition.AnyMonthOfYear()
cal.time = s1.startDate cal.time = s1.startDate
val filterElementRow = QueryCondition.MONTH().apply { listOfValues = arrayListOf(cal.get(Calendar.MONTH)) } val filterElementRow = QueryCondition.AnyMonthOfYear().apply { listOfValues = arrayListOf(cal.get(Calendar.MONTH)) }
filterElementRow.filterSectionRow = FilterSectionRow.DYNAMIC_DATE filterElementRow.filterSectionRow = FilterSectionRow.DYNAMIC_DATE
val filterElement = FilterCondition(arrayListOf(filterElementRow)) val filterElement = FilterCondition(arrayListOf(filterElementRow))
@ -88,9 +87,9 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
Session.testInstance(100.0, true, cal.time) Session.testInstance(100.0, true, cal.time)
realm.commitTransaction() realm.commitTransaction()
val filter = QueryCondition.YEAR() val filter = QueryCondition.AnyYear()
cal.time = s1.startDate cal.time = s1.startDate
val filterElementRow = QueryCondition.YEAR().apply { listOfValues = arrayListOf(cal.get(Calendar.YEAR)) } val filterElementRow = QueryCondition.AnyYear().apply { listOfValues = arrayListOf(cal.get(Calendar.YEAR)) }
filterElementRow.filterSectionRow = FilterSectionRow.DYNAMIC_DATE filterElementRow.filterSectionRow = FilterSectionRow.DYNAMIC_DATE
val filterElement = FilterCondition(arrayListOf(filterElementRow)) val filterElement = FilterCondition(arrayListOf(filterElementRow))
filter.updateValueMap(filterElement) filter.updateValueMap(filterElement)
@ -118,7 +117,7 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
Session.testInstance(100.0, true, cal.time) Session.testInstance(100.0, true, cal.time)
realm.commitTransaction() realm.commitTransaction()
val sessions = Filter.queryOn<Session>(realm, arrayListOf(QueryCondition.WEEK_END)) val sessions = Filter.queryOn<Session>(realm, arrayListOf(QueryCondition.IsWeekEnd))
Assert.assertEquals(1, sessions.size) Assert.assertEquals(1, sessions.size)
sessions[0]?.run { sessions[0]?.run {
@ -143,7 +142,7 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
realm.commitTransaction() realm.commitTransaction()
val sessions = Filter.queryOn<Session>(realm, arrayListOf(QueryCondition.WEEK_DAY)) val sessions = Filter.queryOn<Session>(realm, arrayListOf(QueryCondition.IsWeekDay))
Assert.assertEquals(1, sessions.size) Assert.assertEquals(1, sessions.size)
sessions[0]?.run { sessions[0]?.run {
@ -168,7 +167,7 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
Assert.assertTrue(realm.where(Session::class.java).findAll().count() == 2) Assert.assertTrue(realm.where(Session::class.java).findAll().count() == 2)
val sessions = Filter.queryOn<Session>(realm, arrayListOf(QueryCondition.TODAY)) val sessions = Filter.queryOn<Session>(realm, arrayListOf(QueryCondition.IsToday))
Assert.assertEquals(1, sessions.size) Assert.assertEquals(1, sessions.size)
sessions[0]?.run { sessions[0]?.run {
@ -193,7 +192,7 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
Assert.assertTrue(realm.where(Session::class.java).findAll().count() == 2) Assert.assertTrue(realm.where(Session::class.java).findAll().count() == 2)
val sessions = Filter.queryOn<Session>(realm, arrayListOf(QueryCondition.TODAY)) val sessions = Filter.queryOn<Session>(realm, arrayListOf(QueryCondition.IsToday))
Assert.assertEquals(1, sessions.size) Assert.assertEquals(1, sessions.size)
sessions[0]?.run { sessions[0]?.run {
@ -221,7 +220,7 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
Assert.assertTrue(realm.where(Session::class.java).findAll().count() == 3) Assert.assertTrue(realm.where(Session::class.java).findAll().count() == 3)
val sessions = Filter.queryOn<Session>(realm, arrayListOf(QueryCondition.YESTERDAY)) val sessions = Filter.queryOn<Session>(realm, arrayListOf(QueryCondition.WasYesterday))
Assert.assertEquals(1, sessions.size) Assert.assertEquals(1, sessions.size)
sessions[0]?.run { sessions[0]?.run {
@ -248,7 +247,7 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
Assert.assertTrue(realm.where(Session::class.java).findAll().count() == 3) Assert.assertTrue(realm.where(Session::class.java).findAll().count() == 3)
val sessions = Filter.queryOn<Session>(realm, arrayListOf(QueryCondition.YESTERDAY)) val sessions = Filter.queryOn<Session>(realm, arrayListOf(QueryCondition.WasYesterday))
Assert.assertEquals(1, sessions.size) Assert.assertEquals(1, sessions.size)
sessions[0]?.run { sessions[0]?.run {
@ -275,7 +274,7 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
Assert.assertTrue(realm.where(Session::class.java).findAll().count() == 3) Assert.assertTrue(realm.where(Session::class.java).findAll().count() == 3)
val sessions = Filter.queryOn<Session>(realm, arrayListOf(QueryCondition.TODAY_AND_YESTERDAY)) val sessions = Filter.queryOn<Session>(realm, arrayListOf(QueryCondition.WasTodayAndYesterday))
Assert.assertEquals(2, sessions.size) Assert.assertEquals(2, sessions.size)
Assert.assertTrue(sessions.containsAll(arrayListOf(s1,s2))) Assert.assertTrue(sessions.containsAll(arrayListOf(s1,s2)))
@ -306,7 +305,7 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
Assert.assertTrue(realm.where(Session::class.java).findAll().count() == 5) Assert.assertTrue(realm.where(Session::class.java).findAll().count() == 5)
val sessions = Filter.queryOn<Session>(realm, arrayListOf(QueryCondition.THIS_YEAR)) val sessions = Filter.queryOn<Session>(realm, arrayListOf(QueryCondition.DuringThisYear))
Assert.assertEquals(3, sessions.size) Assert.assertEquals(3, sessions.size)
Assert.assertTrue(sessions.containsAll(arrayListOf(s1,s2, s3))) Assert.assertTrue(sessions.containsAll(arrayListOf(s1,s2, s3)))
@ -338,7 +337,7 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
Assert.assertTrue(realm.where(Session::class.java).findAll().count() == 5) Assert.assertTrue(realm.where(Session::class.java).findAll().count() == 5)
val sessions = Filter.queryOn<Session>(realm, arrayListOf(QueryCondition.THIS_MONTH)) val sessions = Filter.queryOn<Session>(realm, arrayListOf(QueryCondition.DuringThisMonth))
Assert.assertEquals(2, sessions.size) Assert.assertEquals(2, sessions.size)
Assert.assertTrue(sessions.containsAll(arrayListOf(s1,s2))) Assert.assertTrue(sessions.containsAll(arrayListOf(s1,s2)))
@ -362,7 +361,7 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
Assert.assertTrue(realm.where(Session::class.java).findAll().count() == 2) Assert.assertTrue(realm.where(Session::class.java).findAll().count() == 2)
val sessions = Filter.queryOn<Session>(realm, arrayListOf(QueryCondition.THIS_WEEK)) val sessions = Filter.queryOn<Session>(realm, arrayListOf(QueryCondition.DuringThisWeek))
Assert.assertEquals(1, sessions.size) Assert.assertEquals(1, sessions.size)
Assert.assertTrue(sessions.containsAll(arrayListOf(s1))) Assert.assertTrue(sessions.containsAll(arrayListOf(s1)))
@ -383,8 +382,8 @@ 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 = QueryCondition.STARTED_FROM_DATE() val filter = QueryCondition.StartedFromDate()
val filterElementRow = QueryCondition.STARTED_FROM_DATE().apply { singleValue = s2.startDate!!} val filterElementRow = QueryCondition.StartedFromDate().apply { singleValue = s2.startDate!!}
filterElementRow.filterSectionRow = FilterSectionRow.FIXED_DATE filterElementRow.filterSectionRow = FilterSectionRow.FIXED_DATE
filter.updateValueMap(FilterCondition(arrayListOf(filterElementRow))) filter.updateValueMap(FilterCondition(arrayListOf(filterElementRow)))
@ -411,8 +410,8 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
realm.commitTransaction() realm.commitTransaction()
val filter = QueryCondition.STARTED_TO_DATE() val filter = QueryCondition.StartedToDate()
val filterElementRow = QueryCondition.STARTED_TO_DATE().apply { singleValue = s1.startDate!! } val filterElementRow = QueryCondition.StartedToDate().apply { singleValue = s1.startDate!! }
filterElementRow.filterSectionRow = FilterSectionRow.FIXED_DATE filterElementRow.filterSectionRow = FilterSectionRow.FIXED_DATE
filter.updateValueMap(FilterCondition(arrayListOf(filterElementRow))) filter.updateValueMap(FilterCondition(arrayListOf(filterElementRow)))
@ -440,8 +439,8 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
realm.commitTransaction() realm.commitTransaction()
val filter = QueryCondition.ENDED_FROM_DATE() val filter = QueryCondition.EndedFromDate()
val filterElementRow = QueryCondition.ENDED_FROM_DATE().apply { singleValue = s2.endDate() } val filterElementRow = QueryCondition.EndedFromDate().apply { singleValue = s2.endDate() }
filterElementRow.filterSectionRow = FilterSectionRow.FIXED_DATE filterElementRow.filterSectionRow = FilterSectionRow.FIXED_DATE
filter.updateValueMap(FilterCondition(arrayListOf(filterElementRow))) filter.updateValueMap(FilterCondition(arrayListOf(filterElementRow)))
@ -469,8 +468,8 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
realm.commitTransaction() realm.commitTransaction()
val filter = QueryCondition.ENDED_TO_DATE() val filter = QueryCondition.EndedToDate()
val filterElementRow = QueryCondition.ENDED_TO_DATE().apply { singleValue = s1.endDate() } val filterElementRow = QueryCondition.EndedToDate().apply { singleValue = s1.endDate() }
filterElementRow.filterSectionRow = FilterSectionRow.FIXED_DATE filterElementRow.filterSectionRow = FilterSectionRow.FIXED_DATE
filter.updateValueMap(FilterCondition(arrayListOf(filterElementRow))) filter.updateValueMap(FilterCondition(arrayListOf(filterElementRow)))

@ -2,12 +2,10 @@ package net.pokeranalytics.android.unitTests.filter
import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.ext.junit.runners.AndroidJUnit4
import net.pokeranalytics.android.components.BaseFilterInstrumentedUnitTest import net.pokeranalytics.android.components.BaseFilterInstrumentedUnitTest
import net.pokeranalytics.android.exceptions.PokerAnalyticsException
import net.pokeranalytics.android.model.filter.QueryCondition import net.pokeranalytics.android.model.filter.QueryCondition
import net.pokeranalytics.android.model.realm.Filter import net.pokeranalytics.android.model.realm.Filter
import net.pokeranalytics.android.model.realm.Session import net.pokeranalytics.android.model.realm.Session
import net.pokeranalytics.android.ui.view.rowrepresentable.FilterCategoryRow import net.pokeranalytics.android.ui.view.rowrepresentable.FilterCategoryRow
import net.pokeranalytics.android.ui.view.rowrepresentable.FilterElementRow
import net.pokeranalytics.android.ui.view.rowrepresentable.FilterSectionRow import net.pokeranalytics.android.ui.view.rowrepresentable.FilterSectionRow
import org.junit.Assert import org.junit.Assert
import org.junit.Test import org.junit.Test
@ -25,7 +23,7 @@ class RealmFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
val filter = Filter() val filter = Filter()
filter.name = "testSaveLoadCashFilter" filter.name = "testSaveLoadCashFilter"
val filterElement = QueryCondition.CASH val filterElement = QueryCondition.IsCash
filterElement.filterSectionRow = FilterSectionRow.CASH_TOURNAMENT filterElement.filterSectionRow = FilterSectionRow.CASH_TOURNAMENT
filter.createOrUpdateFilterConditions(arrayListOf(filterElement)) filter.createOrUpdateFilterConditions(arrayListOf(filterElement))
@ -38,7 +36,7 @@ class RealmFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
val filterComponent = filter.filterConditions.first() val filterComponent = filter.filterConditions.first()
filterComponent?.let { filterComponent?.let {
Assert.assertTrue(it.queryCondition is QueryCondition.CASH) Assert.assertTrue(it.queryCondition is QueryCondition.IsCash)
} ?: run { } ?: run {
Assert.fail() Assert.fail()
} }

@ -3,10 +3,8 @@ package net.pokeranalytics.android.unitTests.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.components.BaseFilterInstrumentedUnitTest import net.pokeranalytics.android.components.BaseFilterInstrumentedUnitTest
import net.pokeranalytics.android.model.TableSize
import net.pokeranalytics.android.model.filter.QueryCondition import net.pokeranalytics.android.model.filter.QueryCondition
import net.pokeranalytics.android.model.realm.* import net.pokeranalytics.android.model.realm.*
import net.pokeranalytics.android.ui.view.rowrepresentable.FilterElementRow
import net.pokeranalytics.android.ui.view.rowrepresentable.FilterSectionRow import net.pokeranalytics.android.ui.view.rowrepresentable.FilterSectionRow
import org.junit.Assert import org.junit.Assert
import org.junit.Test import org.junit.Test
@ -26,7 +24,7 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
Session.testInstance(100.0, true, Date(), 1) Session.testInstance(100.0, true, Date(), 1)
realm.commitTransaction() realm.commitTransaction()
val sessions = Filter.queryOn<Session>(realm, arrayListOf(QueryCondition.CASH)) val sessions = Filter.queryOn<Session>(realm, arrayListOf(QueryCondition.IsCash))
Assert.assertEquals(1, sessions.size) Assert.assertEquals(1, sessions.size)
sessions[0]?.run { sessions[0]?.run {
@ -44,7 +42,7 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
Session.testInstance(100.0, true, Date(), 1) Session.testInstance(100.0, true, Date(), 1)
realm.commitTransaction() realm.commitTransaction()
val sessions = Filter.queryOn<Session>(realm, arrayListOf(QueryCondition.TOURNAMENT)) val sessions = Filter.queryOn<Session>(realm, arrayListOf(QueryCondition.IsTournament))
Assert.assertEquals(1, sessions.size) Assert.assertEquals(1, sessions.size)
sessions[0]?.run { sessions[0]?.run {
@ -67,7 +65,7 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
Session.testInstance(100.0, true, Date(), 1, b2) Session.testInstance(100.0, true, Date(), 1, b2)
realm.commitTransaction() realm.commitTransaction()
val sessions = Filter.queryOn<Session>(realm, arrayListOf(QueryCondition.LIVE)) val sessions = Filter.queryOn<Session>(realm, arrayListOf(QueryCondition.IsLive))
Assert.assertEquals(1, sessions.size) Assert.assertEquals(1, sessions.size)
(sessions[0] as Session).bankroll?.run { (sessions[0] as Session).bankroll?.run {
@ -89,7 +87,7 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
Session.testInstance(100.0, true, Date(), 1, b2) Session.testInstance(100.0, true, Date(), 1, b2)
realm.commitTransaction() realm.commitTransaction()
val sessions = Filter.queryOn<Session>(realm, arrayListOf(QueryCondition.ONLINE)) val sessions = Filter.queryOn<Session>(realm, arrayListOf(QueryCondition.IsOnline))
Assert.assertEquals(1, sessions.size) Assert.assertEquals(1, sessions.size)
(sessions[0] as Session).bankroll?.run { (sessions[0] as Session).bankroll?.run {
@ -109,8 +107,8 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
Session.testInstance(bankroll = b2) Session.testInstance(bankroll = b2)
realm.commitTransaction() realm.commitTransaction()
val filter = QueryCondition.BANKROLL() val filter = QueryCondition.AnyBankroll()
val filterElementRow = QueryCondition.BANKROLL().apply { setObject(b1) } val filterElementRow = QueryCondition.AnyBankroll().apply { setObject(b1) }
filterElementRow.filterSectionRow = FilterSectionRow.BANKROLL filterElementRow.filterSectionRow = FilterSectionRow.BANKROLL
filter.updateValueMap(FilterCondition(filterElementRows = arrayListOf(filterElementRow))) filter.updateValueMap(FilterCondition(filterElementRows = arrayListOf(filterElementRow)))
@ -140,11 +138,11 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
Session.testInstance(bankroll = b3) Session.testInstance(bankroll = b3)
realm.commitTransaction() realm.commitTransaction()
val filter = QueryCondition.BANKROLL() val filter = QueryCondition.AnyBankroll()
val filterElementRow = QueryCondition.BANKROLL().apply { setObject(b1) } val filterElementRow = QueryCondition.AnyBankroll().apply { setObject(b1) }
filterElementRow.filterSectionRow = FilterSectionRow.BANKROLL filterElementRow.filterSectionRow = FilterSectionRow.BANKROLL
val filterElementRow2 = QueryCondition.BANKROLL().apply { setObject(b2) } val filterElementRow2 = QueryCondition.AnyBankroll().apply { setObject(b2) }
filterElementRow2.filterSectionRow = FilterSectionRow.BANKROLL filterElementRow2.filterSectionRow = FilterSectionRow.BANKROLL
filter.updateValueMap(FilterCondition(filterElementRows = arrayListOf(filterElementRow, filterElementRow2))) filter.updateValueMap(FilterCondition(filterElementRows = arrayListOf(filterElementRow, filterElementRow2)))
@ -169,8 +167,8 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
Session.testInstance(game = g2) Session.testInstance(game = g2)
realm.commitTransaction() realm.commitTransaction()
val filter = QueryCondition.GAME() val filter = QueryCondition.AnyGame()
val filterElementRow = QueryCondition.GAME().apply { setObject(g2) } val filterElementRow = QueryCondition.AnyGame().apply { setObject(g2) }
filterElementRow.filterSectionRow = FilterSectionRow.GAME filterElementRow.filterSectionRow = FilterSectionRow.GAME
filter.updateValueMap(FilterCondition(filterElementRows = arrayListOf(filterElementRow))) filter.updateValueMap(FilterCondition(filterElementRows = arrayListOf(filterElementRow)))
@ -200,9 +198,9 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
Session.testInstance(game = g3) Session.testInstance(game = g3)
realm.commitTransaction() realm.commitTransaction()
val filterElementRow = QueryCondition.GAME().apply { setObject(g2) } val filterElementRow = QueryCondition.AnyGame().apply { setObject(g2) }
filterElementRow.filterSectionRow = FilterSectionRow.GAME filterElementRow.filterSectionRow = FilterSectionRow.GAME
val filterElementRow2 = QueryCondition.GAME().apply { setObject(g3) } val filterElementRow2 = QueryCondition.AnyGame().apply { setObject(g3) }
filterElementRow2.filterSectionRow = FilterSectionRow.GAME filterElementRow2.filterSectionRow = FilterSectionRow.GAME
val filterCondition = FilterCondition(filterElementRows = arrayListOf(filterElementRow, filterElementRow2)) val filterCondition = FilterCondition(filterElementRows = arrayListOf(filterElementRow, filterElementRow2))
val queryCondition = filterCondition.queryCondition val queryCondition = filterCondition.queryCondition
@ -227,8 +225,8 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
Session.testInstance(location = l2) Session.testInstance(location = l2)
realm.commitTransaction() realm.commitTransaction()
val filter = QueryCondition.LOCATION() val filter = QueryCondition.AnyLocation()
val filterElementRow = QueryCondition.LOCATION().apply { setObject(l1) } val filterElementRow = QueryCondition.AnyLocation().apply { setObject(l1) }
filterElementRow.filterSectionRow = FilterSectionRow.LOCATION filterElementRow.filterSectionRow = FilterSectionRow.LOCATION
filter.updateValueMap(FilterCondition(filterElementRows = arrayListOf(filterElementRow))) filter.updateValueMap(FilterCondition(filterElementRows = arrayListOf(filterElementRow)))
@ -258,11 +256,11 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
Session.testInstance(location = l3) Session.testInstance(location = l3)
realm.commitTransaction() realm.commitTransaction()
val filter = QueryCondition.LOCATION() val filter = QueryCondition.AnyLocation()
val filterElementRow = QueryCondition.LOCATION().apply { setObject(l1) } val filterElementRow = QueryCondition.AnyLocation().apply { setObject(l1) }
filterElementRow.filterSectionRow = FilterSectionRow.LOCATION filterElementRow.filterSectionRow = FilterSectionRow.LOCATION
val filterElementRow2 = QueryCondition.LOCATION().apply { setObject(l3) } val filterElementRow2 = QueryCondition.AnyLocation().apply { setObject(l3) }
filterElementRow2.filterSectionRow = FilterSectionRow.LOCATION filterElementRow2.filterSectionRow = FilterSectionRow.LOCATION
filter.updateValueMap(FilterCondition(filterElementRows = arrayListOf(filterElementRow, filterElementRow2))) filter.updateValueMap(FilterCondition(filterElementRows = arrayListOf(filterElementRow, filterElementRow2)))
@ -288,9 +286,9 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
Session.testInstance(tournamentName = t2) Session.testInstance(tournamentName = t2)
realm.commitTransaction() realm.commitTransaction()
val filter = QueryCondition.TOURNAMENT_NAME() val filter = QueryCondition.AnyTournamentName()
val filterElementRow = QueryCondition.TOURNAMENT_NAME().apply { setObject(t1) } val filterElementRow = QueryCondition.AnyTournamentName().apply { setObject(t1) }
filterElementRow.filterSectionRow = FilterSectionRow.TOURNAMENT_NAME filterElementRow.filterSectionRow = FilterSectionRow.TOURNAMENT_NAME
filter.updateValueMap(FilterCondition(filterElementRows = arrayListOf(filterElementRow))) filter.updateValueMap(FilterCondition(filterElementRows = arrayListOf(filterElementRow)))
@ -320,10 +318,10 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
Session.testInstance(tournamentName = t3) Session.testInstance(tournamentName = t3)
realm.commitTransaction() realm.commitTransaction()
val filter = QueryCondition.TOURNAMENT_NAME() val filter = QueryCondition.AnyTournamentName()
val filterElementRow = QueryCondition.TOURNAMENT_NAME().apply { setObject(t1) } val filterElementRow = QueryCondition.AnyTournamentName().apply { setObject(t1) }
filterElementRow.filterSectionRow = FilterSectionRow.TOURNAMENT_NAME filterElementRow.filterSectionRow = FilterSectionRow.TOURNAMENT_NAME
val filterElementRow2 = QueryCondition.TOURNAMENT_NAME().apply { setObject(t2) } val filterElementRow2 = QueryCondition.AnyTournamentName().apply { setObject(t2) }
filterElementRow.filterSectionRow = FilterSectionRow.TOURNAMENT_NAME filterElementRow.filterSectionRow = FilterSectionRow.TOURNAMENT_NAME
filter.updateValueMap(FilterCondition(filterElementRows = arrayListOf(filterElementRow, filterElementRow2))) filter.updateValueMap(FilterCondition(filterElementRows = arrayListOf(filterElementRow, filterElementRow2)))
@ -356,12 +354,12 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
Session.testInstance(tournamentFeatures = RealmList(t1)) Session.testInstance(tournamentFeatures = RealmList(t1))
realm.commitTransaction() realm.commitTransaction()
val filter = QueryCondition.ALL_TOURNAMENT_FEATURES() val filter = QueryCondition.AllTournamentFeature()
val filterElementRow = QueryCondition.ALL_TOURNAMENT_FEATURES().apply { setObject(t1) } val filterElementRow = QueryCondition.AllTournamentFeature().apply { setObject(t1) }
filterElementRow.filterSectionRow = FilterSectionRow.TOURNAMENT_FEATURE filterElementRow.filterSectionRow = FilterSectionRow.TOURNAMENT_FEATURE
val filterElementRow2 = QueryCondition.ALL_TOURNAMENT_FEATURES().apply { setObject(t2) } val filterElementRow2 = QueryCondition.AllTournamentFeature().apply { setObject(t2) }
filterElementRow2.filterSectionRow = FilterSectionRow.TOURNAMENT_FEATURE filterElementRow2.filterSectionRow = FilterSectionRow.TOURNAMENT_FEATURE
val filterElementRow3 = QueryCondition.ALL_TOURNAMENT_FEATURES().apply { setObject(t4) } val filterElementRow3 = QueryCondition.AllTournamentFeature().apply { setObject(t4) }
filterElementRow3.filterSectionRow = FilterSectionRow.TOURNAMENT_FEATURE filterElementRow3.filterSectionRow = FilterSectionRow.TOURNAMENT_FEATURE
filter.updateValueMap(FilterCondition(filterElementRows = arrayListOf(filterElementRow, filterElementRow2, filterElementRow3))) filter.updateValueMap(FilterCondition(filterElementRows = arrayListOf(filterElementRow, filterElementRow2, filterElementRow3)))
@ -391,14 +389,14 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
Session.testInstance(tournamentFeatures = RealmList(t1)) Session.testInstance(tournamentFeatures = RealmList(t1))
realm.commitTransaction() realm.commitTransaction()
val filter = QueryCondition.ANY_TOURNAMENT_FEATURES() val filter = QueryCondition.AnyTournamentFeature()
val filterElementRow = QueryCondition.ANY_TOURNAMENT_FEATURES().apply { setObject(t1) } val filterElementRow = QueryCondition.AnyTournamentFeature().apply { setObject(t1) }
filterElementRow.filterSectionRow = FilterSectionRow.TOURNAMENT_FEATURE filterElementRow.filterSectionRow = FilterSectionRow.TOURNAMENT_FEATURE
val filterElementRow2 = QueryCondition.ANY_TOURNAMENT_FEATURES().apply { setObject(t2) } val filterElementRow2 = QueryCondition.AnyTournamentFeature().apply { setObject(t2) }
filterElementRow2.filterSectionRow = FilterSectionRow.TOURNAMENT_FEATURE filterElementRow2.filterSectionRow = FilterSectionRow.TOURNAMENT_FEATURE
val filterElementRow3 = QueryCondition.ANY_TOURNAMENT_FEATURES().apply { setObject(t3) } val filterElementRow3 = QueryCondition.AnyTournamentFeature().apply { setObject(t3) }
filterElementRow3.filterSectionRow = FilterSectionRow.TOURNAMENT_FEATURE filterElementRow3.filterSectionRow = FilterSectionRow.TOURNAMENT_FEATURE
val filterElementRow4 = QueryCondition.ANY_TOURNAMENT_FEATURES().apply { setObject(t4) } val filterElementRow4 = QueryCondition.AnyTournamentFeature().apply { setObject(t4) }
filterElementRow4.filterSectionRow = FilterSectionRow.TOURNAMENT_FEATURE filterElementRow4.filterSectionRow = FilterSectionRow.TOURNAMENT_FEATURE
filter.updateValueMap(FilterCondition(filterElementRows = arrayListOf(filterElementRow, filterElementRow2, filterElementRow3, filterElementRow4))) filter.updateValueMap(FilterCondition(filterElementRows = arrayListOf(filterElementRow, filterElementRow2, filterElementRow3, filterElementRow4)))
@ -425,8 +423,8 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
Session.testInstance(tournamentFeatures = RealmList(t1)) Session.testInstance(tournamentFeatures = RealmList(t1))
realm.commitTransaction() realm.commitTransaction()
val filter = QueryCondition.ANY_TOURNAMENT_FEATURES() val filter = QueryCondition.AnyTournamentFeature()
val filterElementRow = QueryCondition.ANY_TOURNAMENT_FEATURES().apply { setObject(t2) } val filterElementRow = QueryCondition.AnyTournamentFeature().apply { setObject(t2) }
filterElementRow.filterSectionRow = FilterSectionRow.TOURNAMENT_FEATURE filterElementRow.filterSectionRow = FilterSectionRow.TOURNAMENT_FEATURE
filter.updateValueMap(FilterCondition(filterElementRows = arrayListOf(filterElementRow))) filter.updateValueMap(FilterCondition(filterElementRows = arrayListOf(filterElementRow)))
@ -450,10 +448,10 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
Session.testInstance(tableSize = 10) Session.testInstance(tableSize = 10)
realm.commitTransaction() realm.commitTransaction()
val filter = QueryCondition.TABLE_SIZE() val filter = QueryCondition.AnyTableSize()
val filterElementRow = QueryCondition.TABLE_SIZE().apply { listOfValues = arrayListOf(2) } val filterElementRow = QueryCondition.AnyTableSize().apply { listOfValues = arrayListOf(2) }
filterElementRow.filterSectionRow = FilterSectionRow.TABLE_SIZE filterElementRow.filterSectionRow = FilterSectionRow.TABLE_SIZE
val filterElementRow2 = QueryCondition.TABLE_SIZE().apply { listOfValues = arrayListOf(4) } val filterElementRow2 = QueryCondition.AnyTableSize().apply { listOfValues = arrayListOf(4) }
filterElementRow.filterSectionRow = FilterSectionRow.TABLE_SIZE filterElementRow.filterSectionRow = FilterSectionRow.TABLE_SIZE
filter.updateValueMap(FilterCondition(filterElementRows = arrayListOf(filterElementRow, filterElementRow2))) filter.updateValueMap(FilterCondition(filterElementRows = arrayListOf(filterElementRow, filterElementRow2)))
@ -477,8 +475,8 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
val s2 = Session.testInstance(netResult = 570.0) val s2 = Session.testInstance(netResult = 570.0)
realm.commitTransaction() realm.commitTransaction()
val filter = QueryCondition.MORE_THAN_NET_RESULT() val filter = QueryCondition.MoreNetResult()
val filterElementRow = QueryCondition.MORE_THAN_NET_RESULT().apply { this.amount = 204.0 } val filterElementRow = QueryCondition.MoreNetResult().apply { this.amount = 204.0 }
filterElementRow.filterSectionRow = FilterSectionRow.VALUE filterElementRow.filterSectionRow = FilterSectionRow.VALUE
filter.updateValueMap(FilterCondition(arrayListOf(filterElementRow))) filter.updateValueMap(FilterCondition(arrayListOf(filterElementRow)))
@ -502,8 +500,8 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
Session.testInstance(netResult = 570.0) Session.testInstance(netResult = 570.0)
realm.commitTransaction() realm.commitTransaction()
val filter = QueryCondition.LESS_THAN_NET_RESULT() val filter = QueryCondition.LessNetResult()
val filterElementRow = QueryCondition.LESS_THAN_NET_RESULT().apply { this.amount = 540.0 } val filterElementRow = QueryCondition.LessNetResult().apply { this.amount = 540.0 }
filterElementRow.filterSectionRow = FilterSectionRow.VALUE filterElementRow.filterSectionRow = FilterSectionRow.VALUE
filter.updateValueMap(FilterCondition(arrayListOf(filterElementRow))) filter.updateValueMap(FilterCondition(arrayListOf(filterElementRow)))
@ -527,13 +525,13 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
Session.testInstance(netResult = 570.0) Session.testInstance(netResult = 570.0)
realm.commitTransaction() realm.commitTransaction()
val filterMore = QueryCondition.MORE_THAN_NET_RESULT() val filterMore = QueryCondition.MoreNetResult()
val filterElementRow = QueryCondition.MORE_THAN_NET_RESULT().apply { this.amount = 200.0 } val filterElementRow = QueryCondition.MoreNetResult().apply { this.amount = 200.0 }
filterElementRow.filterSectionRow = FilterSectionRow.VALUE filterElementRow.filterSectionRow = FilterSectionRow.VALUE
filterMore.updateValueMap(FilterCondition(arrayListOf(filterElementRow))) filterMore.updateValueMap(FilterCondition(arrayListOf(filterElementRow)))
val filterLess = QueryCondition.LESS_THAN_NET_RESULT() val filterLess = QueryCondition.LessNetResult()
val filterElementRow2 = QueryCondition.LESS_THAN_NET_RESULT().apply { this.amount = 400.0 } val filterElementRow2 = QueryCondition.LessNetResult().apply { this.amount = 400.0 }
filterElementRow2.filterSectionRow = FilterSectionRow.VALUE filterElementRow2.filterSectionRow = FilterSectionRow.VALUE
filterLess.updateValueMap(FilterCondition(arrayListOf(filterElementRow2))) filterLess.updateValueMap(FilterCondition(arrayListOf(filterElementRow2)))

@ -5,10 +5,10 @@ import io.realm.Sort
import io.realm.kotlin.where import io.realm.kotlin.where
import net.pokeranalytics.android.exceptions.PokerAnalyticsException import net.pokeranalytics.android.exceptions.PokerAnalyticsException
import net.pokeranalytics.android.model.filter.QueryCondition import net.pokeranalytics.android.model.filter.QueryCondition
import net.pokeranalytics.android.model.interfaces.Identifiable
import net.pokeranalytics.android.model.interfaces.NameManageable import net.pokeranalytics.android.model.interfaces.NameManageable
import net.pokeranalytics.android.model.realm.* import net.pokeranalytics.android.model.realm.*
import java.util.* import java.util.*
import kotlin.collections.ArrayList
sealed class Criteria { sealed class Criteria {
abstract class RealmCriteria : Criteria() { abstract class RealmCriteria : Criteria() {
@ -23,40 +23,42 @@ sealed class Criteria {
} }
} }
abstract class StaticCriteria : Criteria() { abstract class ListCriteria : Criteria() {
inline fun <reified T:QueryCondition.StaticDataQueryCondition> comparison(): List<QueryCondition> { inline fun <reified T:QueryCondition.ListOfValueQueryCondition<S>, reified S:Any> comparison(): List<QueryCondition> {
QueryCondition.distinct<Session, T>()?.let { QueryCondition.distinct<Session, T>()?.let {
val values = it.mapNotNull { session -> val values = it.mapNotNull { session ->
when (this) { when (this) {
is Limits -> session.limit is Limits -> if (session.limit is S) { session.limit as S } else throw PokerAnalyticsException.QueryValueMapUnexpectedValue
is TournamentTypes -> session.tournamentType is TournamentTypes -> if (session.tournamentType is S) { session.tournamentType as S } else throw PokerAnalyticsException.QueryValueMapUnexpectedValue
is TableSizes -> session.tableSize is TableSizes -> if (session.tableSize is S) { session.tableSize as S } else throw PokerAnalyticsException.QueryValueMapUnexpectedValue
//is TournamentFees -> session.tournamentEntryFee is TournamentFees -> if (session.tournamentEntryFee is S) { session.tournamentEntryFee as S } else throw PokerAnalyticsException.QueryValueMapUnexpectedValue
is Blinds -> if (session.blinds is S) { session.blinds as S } else throw PokerAnalyticsException.QueryValueMapUnexpectedValue
else -> null else -> null
} }
} }
return compare<T>(values) return compareList<T, S>(values = values)
} }
return listOf<T>() return listOf<T>()
} }
} }
object Bankrolls: RealmCriteria() object Bankrolls: RealmCriteria()
object Games: RealmCriteria() object Games: RealmCriteria()
object TournamentNames: RealmCriteria() object TournamentNames: RealmCriteria()
object Locations: RealmCriteria() object Locations: RealmCriteria()
object TournamentFeatures: RealmCriteria() object TournamentFeatures: RealmCriteria()
object Limits: StaticCriteria() object Limits: ListCriteria()
object TableSizes: StaticCriteria() object TableSizes: ListCriteria()
object TournamentTypes: StaticCriteria() object TournamentTypes: ListCriteria()
object monthOfYear: SimpleCriteria(List(12) { index -> QueryCondition.MONTH().apply { listOfValues = arrayListOf(index)} }) object MonthsOfYear: SimpleCriteria(List(12) { index -> QueryCondition.AnyMonthOfYear().apply { listOfValues = arrayListOf(index)} })
object dayOfWeek: SimpleCriteria(List(7) { index -> QueryCondition.DAY_OF_WEEK().apply { listOfValues = arrayListOf(index + 1) } }) object DaysOfWeek: SimpleCriteria(List(7) { index -> QueryCondition.AnyDayOfWeek().apply { listOfValues = arrayListOf(index + 1) } })
object SessionType: SimpleCriteria(listOf(QueryCondition.CASH, QueryCondition.TOURNAMENT)) object SessionTypes: SimpleCriteria(listOf(QueryCondition.IsCash, QueryCondition.IsTournament))
object BankrollType: SimpleCriteria(listOf(QueryCondition.LIVE, QueryCondition.ONLINE)) object BankrollTypes: SimpleCriteria(listOf(QueryCondition.IsLive, QueryCondition.IsOnline))
object dayPeriod: SimpleCriteria(listOf(QueryCondition.WEEK_DAY, QueryCondition.WEEK_END)) object DayPeriods: SimpleCriteria(listOf(QueryCondition.IsWeekDay, QueryCondition.IsWeekEnd))
object Year: Criteria() object Years: Criteria()
object Blinds: Criteria() object Blinds: ListCriteria()
//object TournamentFees: StaticCriteria() object TournamentFees: ListCriteria()
val queryConditions: List<QueryCondition> val queryConditions: List<QueryCondition>
get() { get() {
@ -67,18 +69,19 @@ sealed class Criteria {
is TournamentNames-> comparison<TournamentName>() is TournamentNames-> comparison<TournamentName>()
is Locations -> comparison<Location>() is Locations -> comparison<Location>()
is SimpleCriteria -> comparison() is SimpleCriteria -> comparison()
is Limits -> comparison<QueryCondition.LIMIT>() is Limits -> comparison<QueryCondition.AnyLimit, Int>()
is TournamentTypes -> comparison<QueryCondition.TOURNAMENT_TYPE>() is TournamentTypes -> comparison<QueryCondition.AnyTournamentType, Int>()
is TableSizes -> comparison<QueryCondition.TABLE_SIZE>() is TableSizes -> comparison<QueryCondition.AnyTableSize, Int>()
is Year -> { is TournamentFees -> comparison<QueryCondition.TournamentFee, Double >()
val years = arrayListOf<QueryCondition.YEAR>() is Years -> {
val years = arrayListOf<QueryCondition.AnyYear>()
val calendar = Calendar.getInstance() val calendar = Calendar.getInstance()
calendar.time = Date() calendar.time = Date()
val yearNow = calendar.get(Calendar.YEAR) val yearNow = calendar.get(Calendar.YEAR)
val realm = Realm.getDefaultInstance() val realm = Realm.getDefaultInstance()
realm.where<Session>().sort("year", Sort.ASCENDING).findFirst()?.year?.let { realm.where<Session>().sort("year", Sort.ASCENDING).findFirst()?.year?.let {
for (index in 0..(yearNow - it)) { for (index in 0..(yearNow - it)) {
years.add(QueryCondition.YEAR().apply { years.add(QueryCondition.AnyYear().apply {
listOfValues = arrayListOf(yearNow - index) listOfValues = arrayListOf(yearNow - index)
}) })
} }
@ -86,20 +89,7 @@ sealed class Criteria {
realm.close() realm.close()
years years
} }
is Blinds -> { is Blinds -> comparison<QueryCondition.AnyBlind, String >()
val blinds = arrayListOf<QueryCondition.BLIND>()
val realm = Realm.getDefaultInstance()
val query = realm.where<Session>().distinct("blinds").findAll().sort("cgSmallBlind", Sort.ASCENDING)
query.map {
it.blinds?.let { stake ->
blinds.add(QueryCondition.BLIND().apply {
listOfValues = arrayListOf(stake)
})
}
}
realm.close()
blinds
}
else -> throw PokerAnalyticsException.QueryTypeUnhandled else -> throw PokerAnalyticsException.QueryTypeUnhandled
} }
} }
@ -117,7 +107,7 @@ sealed class Criteria {
return objects return objects
} }
inline fun < reified S : QueryCondition.StaticDataQueryCondition > compare(values:List<Int>): List<S> { inline fun < reified S : QueryCondition.ListOfValueQueryCondition<T>, T:Any > compareList(values:List<T>): List<S> {
val objects = arrayListOf<S>() val objects = arrayListOf<S>()
values.forEach { values.forEach {
objects.add((S::class.java.newInstance()).apply { objects.add((S::class.java.newInstance()).apply {

@ -5,7 +5,6 @@ import io.realm.Sort
import io.realm.kotlin.where import io.realm.kotlin.where
import net.pokeranalytics.android.exceptions.PokerAnalyticsException import net.pokeranalytics.android.exceptions.PokerAnalyticsException
import net.pokeranalytics.android.model.Criteria import net.pokeranalytics.android.model.Criteria
import net.pokeranalytics.android.model.filter.Filterable
import net.pokeranalytics.android.model.filter.QueryCondition import net.pokeranalytics.android.model.filter.QueryCondition
import net.pokeranalytics.android.model.realm.* import net.pokeranalytics.android.model.realm.*
import java.util.* import java.util.*
@ -36,25 +35,25 @@ enum class Comparator {
get() { get() {
return when (this) { return when (this) {
TOURNAMENT_ENTRY_FEE -> { TOURNAMENT_ENTRY_FEE -> {
val fees = arrayListOf<QueryCondition.BETWEEN_TOURNAMENT_FEE>() val fees = arrayListOf<QueryCondition.BetweenTournamentFee>()
val realm = Realm.getDefaultInstance() val realm = Realm.getDefaultInstance()
val fieldName = Session.fieldNameForQueryType(QueryCondition.BETWEEN_TOURNAMENT_FEE::class.java)!! val fieldName = Session.fieldNameForQueryType(QueryCondition.BetweenTournamentFee::class.java)!!
realm.where<Session>().distinct(fieldName).findAll().sort(fieldName, Sort.ASCENDING).map { realm.where<Session>().distinct(fieldName).findAll().sort(fieldName, Sort.ASCENDING).map {
it.tournamentEntryFee?.let { fee -> it.tournamentEntryFee?.let { fee ->
fees.add(QueryCondition.BETWEEN_TOURNAMENT_FEE().apply { between(fee, fee) }) fees.add(QueryCondition.BetweenTournamentFee().apply { between(fee, fee) })
} }
} }
realm.close() realm.close()
fees fees
} }
MONTH_OF_YEAR -> Criteria.monthOfYear.queryConditions MONTH_OF_YEAR -> Criteria.MonthsOfYear.queryConditions
DAY_OF_WEEK -> Criteria.dayOfWeek.queryConditions DAY_OF_WEEK -> Criteria.DaysOfWeek.queryConditions
YEAR -> Criteria.Year.queryConditions YEAR -> Criteria.Years.queryConditions
DAY_PERIOD -> Criteria.dayPeriod.queryConditions DAY_PERIOD -> Criteria.DayPeriods.queryConditions
CASH -> listOf(QueryCondition.CASH) CASH -> listOf(QueryCondition.IsCash)
TOURNAMENT -> listOf(QueryCondition.TOURNAMENT) TOURNAMENT -> listOf(QueryCondition.IsTournament)
LIVE -> listOf(QueryCondition.LIVE) LIVE -> listOf(QueryCondition.IsLive)
ONLINE -> listOf(QueryCondition.ONLINE) ONLINE -> listOf(QueryCondition.IsOnline)
BLIND -> Criteria.Blinds.queryConditions BLIND -> Criteria.Blinds.queryConditions
BANKROLL -> Criteria.Bankrolls.queryConditions BANKROLL -> Criteria.Bankrolls.queryConditions
GAME -> Criteria.Games.queryConditions GAME -> Criteria.Games.queryConditions

@ -12,7 +12,6 @@ import net.pokeranalytics.android.model.TournamentType
import net.pokeranalytics.android.model.interfaces.Identifiable import net.pokeranalytics.android.model.interfaces.Identifiable
import net.pokeranalytics.android.model.interfaces.NameManageable import net.pokeranalytics.android.model.interfaces.NameManageable
import net.pokeranalytics.android.model.realm.* import net.pokeranalytics.android.model.realm.*
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.rowrepresentable.FilterElementRow import net.pokeranalytics.android.ui.view.rowrepresentable.FilterElementRow
import net.pokeranalytics.android.ui.view.rowrepresentable.FilterSectionRow import net.pokeranalytics.android.ui.view.rowrepresentable.FilterSectionRow
import net.pokeranalytics.android.util.NULL_TEXT import net.pokeranalytics.android.util.NULL_TEXT
@ -41,8 +40,6 @@ inline fun <reified T : Filterable> List<QueryCondition>.queryWith(query: RealmQ
/** /**
* Enum describing the way a query should be handled * Enum describing the way a query should be handled
* Some queries requires a value to be checked upon through equals, in, more, less, between * Some queries requires a value to be checked upon through equals, in, more, less, between
* To handle that, the enum has a public [valueMap] variable
* A new type should also set the expected numericValues required in the [filterValuesExpectedKeys]
*/ */
sealed class QueryCondition : FilterElementRow { sealed class QueryCondition : FilterElementRow {
@ -56,11 +53,11 @@ sealed class QueryCondition : FilterElementRow {
inline fun <reified T:Identifiable>getInstance(): QueryCondition { inline fun <reified T:Identifiable>getInstance(): QueryCondition {
return when (T::class.java) { return when (T::class.java) {
Bankroll::class.java -> BANKROLL() AnyBankroll::class.java -> AnyBankroll()
Game::class.java -> GAME() Game::class.java -> AnyGame()
Location::class.java -> LOCATION() Location::class.java -> AnyLocation()
TournamentName::class.java -> TOURNAMENT_NAME() TournamentName::class.java -> AnyTournamentName()
TournamentFeature::class.java -> ANY_TOURNAMENT_FEATURES() TournamentFeature::class.java -> AnyTournamentFeature()
else -> throw PokerAnalyticsException.QueryTypeUnhandled else -> throw PokerAnalyticsException.QueryTypeUnhandled
} }
} }
@ -129,7 +126,7 @@ sealed class QueryCondition : FilterElementRow {
return when (this) { return when (this) {
is StaticDataQueryCondition -> label() is StaticDataQueryCondition -> label()
is QueryDataCondition<*> -> label() is QueryDataCondition<*> -> label()
is BLIND -> label() is AnyBlind -> label()
else -> baseId else -> baseId
} }
} }
@ -138,12 +135,9 @@ sealed class QueryCondition : FilterElementRow {
abstract class QueryDataCondition < T: NameManageable > : QueryCondition(), ListOfString { abstract class QueryDataCondition < T: NameManageable > : QueryCondition(), ListOfString {
fun setObject(dataObject: T) { fun setObject(dataObject: T) {
this.dataObject = dataObject
this.listOfValues.add(dataObject.id) this.listOfValues.add(dataObject.id)
} }
var dataObject: NameManageable? = null
override var listOfValues = ArrayList<String>() override var listOfValues = ArrayList<String>()
abstract val entity : Class<T> abstract val entity : Class<T>
@ -161,7 +155,7 @@ sealed class QueryCondition : FilterElementRow {
return completeLabel return completeLabel
} }
fun labelForValue(realm:Realm, value:String): String { private fun labelForValue(realm:Realm, value:String): String {
val query = realm.where(entity) val query = realm.where(entity)
return query.equalTo("id", value).findFirst()?.name ?: NULL_TEXT return query.equalTo("id", value).findFirst()?.name ?: NULL_TEXT
} }
@ -171,10 +165,9 @@ sealed class QueryCondition : FilterElementRow {
override var singleValue: Int = 0 override var singleValue: Int = 0
} }
abstract class StaticDataQueryCondition : QueryCondition(), ListOfInt { abstract class ListOfValueQueryCondition < T: Any > : QueryCondition(), ListOfValues<T> {
var data : RowRepresentable? = null override var listOfValues = ArrayList<T>()
override var listOfValues = ArrayList<Int>() abstract fun labelForValue(value:T): String
abstract fun labelForValue(value:Int): String
fun label(): String { fun label(): String {
return when (listOfValues.size) { return when (listOfValues.size) {
@ -185,6 +178,10 @@ sealed class QueryCondition : FilterElementRow {
} }
} }
abstract class StaticDataQueryCondition : ListOfValueQueryCondition<Int>() {
override var listOfValues = ArrayList<Int>()
}
open class OperationQueryCondition : QueryCondition() open class OperationQueryCondition : QueryCondition()
open class DurationOperationQueryCondition : OperationQueryCondition(), Duration { open class DurationOperationQueryCondition : OperationQueryCondition(), Duration {
@ -215,122 +212,120 @@ sealed class QueryCondition : FilterElementRow {
override val showTime: Boolean = true override val showTime: Boolean = true
} }
object LIVE : QueryCondition() object IsLive : QueryCondition()
object CASH : QueryCondition() object IsCash : QueryCondition()
object ONLINE : QueryCondition() object IsOnline : QueryCondition()
object TOURNAMENT: QueryCondition() object IsTournament : QueryCondition()
class BANKROLL: QueryDataCondition<Bankroll>() { override val entity: Class<Bankroll> = Bankroll::class.java } class AnyBankroll: QueryDataCondition<Bankroll>() { override val entity: Class<Bankroll> = Bankroll::class.java }
class GAME: QueryDataCondition<Game>() { override val entity: Class<Game> = Game::class.java } class AnyGame: QueryDataCondition<Game>() { override val entity: Class<Game> = Game::class.java }
class TOURNAMENT_NAME: QueryDataCondition<TournamentName>() { override val entity: Class<TournamentName> = TournamentName::class.java } class AnyTournamentName: QueryDataCondition<TournamentName>() { override val entity: Class<TournamentName> = TournamentName::class.java }
class ANY_TOURNAMENT_FEATURES: QueryDataCondition<TournamentFeature>() { override val entity: Class<TournamentFeature> = TournamentFeature::class.java } class AnyTournamentFeature: QueryDataCondition<TournamentFeature>() { override val entity: Class<TournamentFeature> = TournamentFeature::class.java }
class ALL_TOURNAMENT_FEATURES: QueryDataCondition<TournamentFeature>() { override val entity: Class<TournamentFeature> = TournamentFeature::class.java } class AllTournamentFeature: QueryDataCondition<TournamentFeature>() { override val entity: Class<TournamentFeature> = TournamentFeature::class.java }
class LOCATION: QueryDataCondition<Location>() { override val entity: Class<Location> = Location::class.java } class AnyLocation: QueryDataCondition<Location>() { override val entity: Class<Location> = Location::class.java }
class LIMIT: StaticDataQueryCondition() { class AnyLimit: StaticDataQueryCondition() {
override fun labelForValue(value: Int): String { override fun labelForValue(value: Int): String {
return Limit.values()[value].getDisplayName() return Limit.values()[value].getDisplayName()
} }
} }
class TABLE_SIZE: StaticDataQueryCondition() { class AnyTableSize: StaticDataQueryCondition() {
override fun labelForValue(value: Int): String { override fun labelForValue(value: Int): String {
return TableSize(value).getDisplayName() return TableSize(value).getDisplayName()
} }
} }
class TOURNAMENT_TYPE: StaticDataQueryCondition() { class AnyTournamentType: StaticDataQueryCondition() {
override fun labelForValue(value: Int): String { override fun labelForValue(value: Int): String {
return TournamentType.values()[value].getDisplayName() return TournamentType.values()[value].getDisplayName()
} }
} }
class BLIND: QueryCondition(), ListOfString { class AnyBlind: ListOfValueQueryCondition<String>() {
override var listOfValues = ArrayList<String>() override var listOfValues = ArrayList<String>()
override fun labelForValue(value:String): String { return value }
fun label(): String {
val completeLabel = when (listOfValues.size) {
0 -> return NULL_TEXT
1,2 -> {
return listOfValues.map { it }.joinToString(", ")
}
else -> "${listOfValues.size} $baseId"
}
return completeLabel
}
} }
class LAST_GAMES: SingleValueQueryCondition() class LastGame: SingleValueQueryCondition()
class LAST_SESSIONS: SingleValueQueryCondition() class LastSession: SingleValueQueryCondition()
class MORE_NUMBER_OF_TABLE: OperationQueryCondition(), More class MoreNumberOfTable: OperationQueryCondition(), More
class LESS_NUMBER_OF_TABLE: OperationQueryCondition(), Less class LessNumberOfTable: OperationQueryCondition(), Less
class BETWEEN_NUMBER_OF_TABLE: BetweenQueryCondition(), Between class BetweenNumberOfTable: BetweenQueryCondition(), Between
class MORE_THAN_NET_RESULT: AmountOperationQueryCondition(), More class MoreNetResult: AmountOperationQueryCondition(), More
class LESS_THAN_NET_RESULT: AmountOperationQueryCondition(), Less class LessNetResult: AmountOperationQueryCondition(), Less
class MORE_THAN_BUY_IN: AmountOperationQueryCondition(), More class MoreBuyIn: AmountOperationQueryCondition(), More
class LESS_THAN_BUY_IN: AmountOperationQueryCondition(), Less class LessBuyIn: AmountOperationQueryCondition(), Less
class MORE_THAN_CASH_OUT: AmountOperationQueryCondition(), More class MoreCashOut: AmountOperationQueryCondition(), More
class LESS_THAN_CASH_OUT: AmountOperationQueryCondition(), Less class LessCashOut: AmountOperationQueryCondition(), Less
class MORE_THAN_TIPS: AmountOperationQueryCondition(), More class MoreTips: AmountOperationQueryCondition(), More
class LESS_THAN_TIPS: AmountOperationQueryCondition(), Less class LessTips: AmountOperationQueryCondition(), Less
class MORE_THAN_NUMBER_OF_PLAYER: OperationQueryCondition(), More class MoreNumberOfPlayer: OperationQueryCondition(), More
class LESS_THAN_NUMBER_OF_PLAYER: OperationQueryCondition(), Less class LessNumberOfPlayer: OperationQueryCondition(), Less
class BETWEEN_NUMBER_OF_PLAYER: BetweenQueryCondition(), Between class BetweenNumberOfPlayer: BetweenQueryCondition(), Between
class MORE_THAN_TOURNAMENT_FEE: OperationQueryCondition(), More class MoreTournamentFee: OperationQueryCondition(), More
class LESS_THAN_TOURNAMENT_FEE: OperationQueryCondition(), Less class LessTournamentFee: OperationQueryCondition(), Less
class BETWEEN_TOURNAMENT_FEE: BetweenQueryCondition(), BetweenRightExclusive { class BetweenTournamentFee: BetweenQueryCondition(), BetweenRightExclusive {
fun between(leftValue:Double, rightValue:Double) { fun between(leftValue:Double, rightValue:Double) {
listOfValues = arrayListOf(leftValue, rightValue) listOfValues = arrayListOf(leftValue, rightValue)
} }
} }
class MIN_RE_BUY: AmountOperationQueryCondition(), More class MoreRebuy: AmountOperationQueryCondition(), More
class MAX_RE_BUY: AmountOperationQueryCondition(), Less class LessRebuy: AmountOperationQueryCondition(), Less
class STARTED_FROM_DATE: DateQuery() class StartedFromDate: DateQuery()
class STARTED_TO_DATE: DateQuery(), Less class StartedToDate: DateQuery(), Less
class ENDED_FROM_DATE: DateQuery() class EndedFromDate: DateQuery()
class ENDED_TO_DATE: DateQuery(), Less class EndedToDate: DateQuery(), Less
class DAY_OF_WEEK: StaticDataQueryCondition() { class AnyDayOfWeek: StaticDataQueryCondition() {
override fun labelForValue(value: Int): String { override fun labelForValue(value: Int): String {
return DateFormatSymbols.getInstance(Locale.getDefault()).weekdays[value] return DateFormatSymbols.getInstance(Locale.getDefault()).weekdays[value]
} }
} }
class MONTH: StaticDataQueryCondition() { class AnyMonthOfYear: StaticDataQueryCondition() {
override fun labelForValue(value: Int): String { override fun labelForValue(value: Int): String {
return DateFormatSymbols.getInstance(Locale.getDefault()).months[value] return DateFormatSymbols.getInstance(Locale.getDefault()).months[value]
} }
} }
class YEAR: StaticDataQueryCondition() { class AnyYear: StaticDataQueryCondition() {
override fun labelForValue(value: Int): String { override fun labelForValue(value: Int): String {
return "$value" return "$value"
} }
} }
object WEEK_DAY: QueryCondition() object IsWeekDay: QueryCondition()
object WEEK_END: QueryCondition() object IsWeekEnd: QueryCondition()
object TODAY: QueryCondition() object IsToday: QueryCondition()
object YESTERDAY: QueryCondition() object WasYesterday: QueryCondition()
object TODAY_AND_YESTERDAY: QueryCondition() object WasTodayAndYesterday: QueryCondition()
object THIS_WEEK: QueryCondition() object DuringThisWeek: QueryCondition()
object THIS_MONTH: QueryCondition() object DuringThisMonth: QueryCondition()
object THIS_YEAR: QueryCondition() object DuringThisYear: QueryCondition()
class PAST_DAYS: SingleValueQueryCondition()
class MORE_THAN_DURATION: DurationOperationQueryCondition(), More object TournamentFee: ListOfValueQueryCondition<Double>() {
class LESS_THAN_DURATION: DurationOperationQueryCondition(), Less override fun labelForValue(value: Double): String {
class STARTED_FROM_TIME: TimeQuery() return "$value"
class ENDED_TO_TIME: TimeQuery(), Less }
}
class COMMENT: QueryCondition()
class PastDay: SingleValueQueryCondition()
class MoreDuration: DurationOperationQueryCondition(), More
class LessDuration: DurationOperationQueryCondition(), Less
class StartedFromTime: TimeQuery()
class EndedToTime: TimeQuery(), Less
class HasComment: QueryCondition()
/** /**
* main method of the enum * main method of the enum
@ -350,16 +345,17 @@ sealed class QueryCondition : FilterElementRow {
is Between -> realmQuery.between(fieldName, leftValue, rightValue) is Between -> realmQuery.between(fieldName, leftValue, rightValue)
is BetweenLeftExclusive -> realmQuery.greaterThan(fieldName, leftValue).and().lessThanOrEqualTo(fieldName, rightValue) is BetweenLeftExclusive -> realmQuery.greaterThan(fieldName, leftValue).and().lessThanOrEqualTo(fieldName, rightValue)
is BetweenRightExclusive -> realmQuery.greaterThanOrEqualTo(fieldName, leftValue).and().lessThan(fieldName, rightValue) is BetweenRightExclusive -> realmQuery.greaterThanOrEqualTo(fieldName, leftValue).and().lessThan(fieldName, rightValue)
LIVE, ONLINE -> realmQuery.equalTo(fieldName, this == LIVE) IsLive, IsOnline -> realmQuery.equalTo(fieldName, this == IsLive)
CASH -> realmQuery.equalTo(fieldName, Session.Type.CASH_GAME.ordinal) IsCash -> realmQuery.equalTo(fieldName, Session.Type.CASH_GAME.ordinal)
TOURNAMENT -> realmQuery.equalTo(fieldName, Session.Type.TOURNAMENT.ordinal) IsTournament -> realmQuery.equalTo(fieldName, Session.Type.TOURNAMENT.ordinal)
is ALL_TOURNAMENT_FEATURES -> { is AllTournamentFeature -> {
listOfValues.forEach { listOfValues.forEach {
realmQuery.equalTo(fieldName, it) realmQuery.equalTo(fieldName, it)
} }
realmQuery realmQuery
} }
is BLIND -> realmQuery.`in`(fieldName, listOfValues.toTypedArray()) is AnyBlind -> realmQuery.`in`(fieldName, listOfValues.toTypedArray())
is TournamentFee -> realmQuery.`in`(fieldName, listOfValues.toTypedArray())
is QueryDataCondition<*> -> realmQuery.`in`(fieldName, listOfValues.toTypedArray()) is QueryDataCondition<*> -> realmQuery.`in`(fieldName, listOfValues.toTypedArray())
is StaticDataQueryCondition -> realmQuery.`in`(fieldName, listOfValues.toTypedArray()) is StaticDataQueryCondition -> realmQuery.`in`(fieldName, listOfValues.toTypedArray())
is DateQuery -> { is DateQuery -> {
@ -370,45 +366,45 @@ sealed class QueryCondition : FilterElementRow {
} }
} }
is SingleValueQueryCondition -> realmQuery.equalTo(fieldName, singleValue) is SingleValueQueryCondition -> realmQuery.equalTo(fieldName, singleValue)
WEEK_END, WEEK_DAY -> { IsWeekEnd, IsWeekDay -> {
var query = realmQuery var query = realmQuery
if (this == WEEK_DAY) { if (this == IsWeekDay) {
query = realmQuery.not() query = realmQuery.not()
} }
query.`in`(fieldName, arrayOf(Calendar.SATURDAY, Calendar.SUNDAY)) query.`in`(fieldName, arrayOf(Calendar.SATURDAY, Calendar.SUNDAY))
} }
TODAY -> { IsToday -> {
val startDate = Date() val startDate = Date()
realmQuery.between(fieldName, startDate.startOfDay(), startDate.endOfDay()) realmQuery.between(fieldName, startDate.startOfDay(), startDate.endOfDay())
} }
TODAY_AND_YESTERDAY-> { WasTodayAndYesterday-> {
val startDate = Date() val startDate = Date()
val calendar = Calendar.getInstance() val calendar = Calendar.getInstance()
calendar.time = startDate calendar.time = startDate
calendar.add(Calendar.HOUR_OF_DAY, -24) calendar.add(Calendar.HOUR_OF_DAY, -24)
realmQuery.between(fieldName, calendar.time.startOfDay(), startDate.endOfDay()) realmQuery.between(fieldName, calendar.time.startOfDay(), startDate.endOfDay())
} }
YESTERDAY -> { WasYesterday -> {
val calendar = Calendar.getInstance() val calendar = Calendar.getInstance()
calendar.time = Date() calendar.time = Date()
calendar.add(Calendar.HOUR_OF_DAY, -24) calendar.add(Calendar.HOUR_OF_DAY, -24)
realmQuery.between(fieldName, calendar.time.startOfDay(), calendar.time.endOfDay()) realmQuery.between(fieldName, calendar.time.startOfDay(), calendar.time.endOfDay())
} }
THIS_WEEK -> { DuringThisWeek -> {
val startDate = Date() val startDate = Date()
val calendar = Calendar.getInstance() val calendar = Calendar.getInstance()
calendar.time = startDate calendar.time = startDate
calendar.set(Calendar.DAY_OF_WEEK_IN_MONTH, Calendar.SUNDAY) calendar.set(Calendar.DAY_OF_WEEK_IN_MONTH, Calendar.SUNDAY)
realmQuery.between(fieldName, calendar.time.startOfDay(), startDate.endOfDay()) realmQuery.between(fieldName, calendar.time.startOfDay(), startDate.endOfDay())
} }
THIS_MONTH -> { DuringThisMonth -> {
val startDate = Date() val startDate = Date()
val calendar = Calendar.getInstance() val calendar = Calendar.getInstance()
calendar.time = startDate calendar.time = startDate
calendar.set(Calendar.DAY_OF_MONTH, 1) calendar.set(Calendar.DAY_OF_MONTH, 1)
realmQuery.between(fieldName, calendar.time.startOfDay(), startDate.endOfDay()) realmQuery.between(fieldName, calendar.time.startOfDay(), startDate.endOfDay())
} }
THIS_YEAR -> { DuringThisYear -> {
val startDate = Date() val startDate = Date()
val calendar = Calendar.getInstance() val calendar = Calendar.getInstance()
calendar.time = startDate calendar.time = startDate
@ -429,6 +425,9 @@ sealed class QueryCondition : FilterElementRow {
is SingleDate -> singleValue = filterCondition.getValue() is SingleDate -> singleValue = filterCondition.getValue()
is SingleInt -> singleValue = filterCondition.getValue() is SingleInt -> singleValue = filterCondition.getValue()
is SingleDouble -> singleValue = filterCondition.getValue() is SingleDouble -> singleValue = filterCondition.getValue()
//TODO POURQUOI ?
is AnyBlind -> listOfValues = filterCondition.getValues()
is StaticDataQueryCondition -> listOfValues = filterCondition.getValues()
} }
} }

@ -25,6 +25,9 @@ open class FilterCondition() : RealmObject() {
is QueryCondition.ListOfDouble -> this.setValues(filterElementRows.flatMap { (it as QueryCondition.ListOfDouble).listOfValues }) 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.ListOfInt -> this.setValues(filterElementRows.flatMap { (it as QueryCondition.ListOfInt).listOfValues })
is QueryCondition.ListOfString -> this.setValues(filterElementRows.flatMap { (it as QueryCondition.ListOfString).listOfValues }) is QueryCondition.ListOfString -> this.setValues(filterElementRows.flatMap { (it as QueryCondition.ListOfString).listOfValues })
//TODO POURQUOI ?
is QueryCondition.StaticDataQueryCondition -> this.setValues(filterElementRows.flatMap { (it as QueryCondition.StaticDataQueryCondition).listOfValues })
is QueryCondition.AnyBlind -> this.setValues(filterElementRows.flatMap { (it as QueryCondition.AnyBlind).listOfValues })
} }
} }
@ -46,6 +49,7 @@ open class FilterCondition() : RealmObject() {
var stringValue: String? = null var stringValue: String? = null
inline fun <reified T:Any > getValues(): ArrayList < T > { inline fun <reified T:Any > getValues(): ArrayList < T > {
println("<<<< r $stringValues")
return when (T::class) { return when (T::class) {
Int::class -> ArrayList<T>().apply { intValues?.map { add(it as T) } } Int::class -> ArrayList<T>().apply { intValues?.map { add(it as T) } }
Double::class -> ArrayList<T>().apply { doubleValues?.map { add(it as T) } } Double::class -> ArrayList<T>().apply { doubleValues?.map { add(it as T) } }

@ -67,31 +67,31 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat
fun fieldNameForQueryType(queryCondition: Class < out QueryCondition >): String? { fun fieldNameForQueryType(queryCondition: Class < out QueryCondition >): String? {
return when (queryCondition) { return when (queryCondition) {
LIVE::class.java, ONLINE::class.java -> "bankroll.live" IsLive::class.java, IsOnline::class.java -> "bankroll.live"
CASH::class.java, TOURNAMENT::class.java -> "type" IsCash::class.java, IsTournament::class.java -> "type"
BANKROLL::class.java -> "bankroll.id" AnyBankroll::class.java -> "bankroll.id"
GAME::class.java -> "game.id" AnyGame::class.java -> "game.id"
TOURNAMENT_NAME::class.java -> "tournamentName.id" AnyTournamentName::class.java -> "tournamentName.id"
ANY_TOURNAMENT_FEATURES::class.java, ALL_TOURNAMENT_FEATURES::class.java -> "tournamentFeatures.id" AnyTournamentFeature::class.java, AllTournamentFeature::class.java -> "tournamentFeatures.id"
LOCATION::class.java -> "location.id" AnyLocation::class.java -> "location.id"
LIMIT::class.java -> "limit" AnyLimit::class.java -> "limit"
TABLE_SIZE::class.java -> "tableSize" AnyTableSize::class.java -> "tableSize"
TOURNAMENT_TYPE::class.java -> "tournamentType" AnyTournamentType::class.java -> "tournamentType"
BLIND::class.java -> "blinds" AnyBlind::class.java -> "blinds"
COMMENT::class.java -> "comment" HasComment::class.java -> "comment"
BETWEEN_NUMBER_OF_TABLE::class.java, MORE_NUMBER_OF_TABLE::class.java, LESS_NUMBER_OF_TABLE::class.java -> "numberOfTable" BetweenNumberOfTable::class.java, MoreNumberOfTable::class.java, LessNumberOfTable::class.java -> "numberOfTable"
MORE_THAN_NET_RESULT::class.java, LESS_THAN_NET_RESULT::class.java -> "computableResults.ratedNet" MoreNetResult::class.java, LessNetResult::class.java -> "computableResults.ratedNet"
MORE_THAN_BUY_IN::class.java, LESS_THAN_BUY_IN::class.java -> "result.buyin" MoreBuyIn::class.java, LessBuyIn::class.java -> "result.buyin"
MORE_THAN_CASH_OUT::class.java, LESS_THAN_CASH_OUT::class.java -> "result.cashout" MoreCashOut::class.java, LessCashOut::class.java -> "result.cashout"
MORE_THAN_TIPS::class.java, LESS_THAN_TIPS::class.java -> "result.tips" MoreTips::class.java, LessTips::class.java -> "result.tips"
MORE_THAN_NUMBER_OF_PLAYER::class.java, LESS_THAN_NUMBER_OF_PLAYER::class.java, BETWEEN_NUMBER_OF_PLAYER::class.java -> "tournamentNumberOfPlayers" MoreNumberOfPlayer::class.java, LessNumberOfPlayer::class.java, BetweenNumberOfPlayer::class.java -> "tournamentNumberOfPlayers"
MORE_THAN_TOURNAMENT_FEE::class.java, LESS_THAN_TOURNAMENT_FEE::class.java, BETWEEN_TOURNAMENT_FEE::class.java -> "tournamentEntryFee" TournamentFee::class.java, MoreTournamentFee::class.java, LessTournamentFee::class.java, BetweenTournamentFee::class.java -> "tournamentEntryFee"
STARTED_FROM_DATE::class.java, STARTED_TO_DATE::class.java -> "startDate" StartedFromDate::class.java, StartedToDate::class.java -> "startDate"
ENDED_FROM_DATE::class.java, ENDED_TO_DATE::class.java -> "endDate" EndedFromDate::class.java, EndedToDate::class.java -> "endDate"
DAY_OF_WEEK::class.java, WEEK_END::class.java, WEEK_DAY::class.java -> "dayOfWeek" AnyDayOfWeek::class.java, IsWeekEnd::class.java, IsWeekDay::class.java -> "dayOfWeek"
MONTH::class.java -> "month" AnyMonthOfYear::class.java -> "month"
YEAR::class.java -> "year" AnyYear::class.java -> "year"
TODAY::class.java, YESTERDAY::class.java, TODAY_AND_YESTERDAY::class.java, THIS_YEAR::class.java, THIS_MONTH::class.java, THIS_WEEK::class.java -> "startDate" IsToday::class.java, WasYesterday::class.java, WasTodayAndYesterday::class.java, DuringThisYear::class.java, DuringThisMonth::class.java, DuringThisWeek::class.java -> "startDate"
else -> null else -> null
} }
} }
@ -306,7 +306,7 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat
*/ */
val bbNet: BB val bbNet: BB
get() { get() {
val bb = this.cgBigBlind; val bb = this.cgBigBlind
val result = this.result val result = this.result
if (bb != null && result != null) { if (bb != null && result != null) {
return result.net / bb return result.net / bb

@ -98,8 +98,8 @@ class CalendarDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresentable
override fun onTabSelected(tab: TabLayout.Tab) { override fun onTabSelected(tab: TabLayout.Tab) {
when (tab.position) { when (tab.position) {
0 -> sessionTypeCondition = null 0 -> sessionTypeCondition = null
1 -> sessionTypeCondition = QueryCondition.CASH 1 -> sessionTypeCondition = QueryCondition.IsCash
2 -> sessionTypeCondition = QueryCondition.TOURNAMENT 2 -> sessionTypeCondition = QueryCondition.IsTournament
} }
launchStatComputation() launchStatComputation()
} }
@ -134,8 +134,8 @@ class CalendarDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresentable
sessionTypeCondition?.let { sessionTypeCondition?.let {
when (it) { when (it) {
QueryCondition.CASH -> tabs.getTabAt(1)?.select() QueryCondition.IsCash -> tabs.getTabAt(1)?.select()
QueryCondition.TOURNAMENT -> tabs.getTabAt(2)?.select() QueryCondition.IsTournament -> tabs.getTabAt(2)?.select()
else -> tabs.getTabAt(0)?.select() else -> tabs.getTabAt(0)?.select()
} }
} }
@ -166,8 +166,8 @@ class CalendarDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresentable
removeAll(Comparator.TOURNAMENT.queryConditions) removeAll(Comparator.TOURNAMENT.queryConditions)
when (sessionTypeCondition) { when (sessionTypeCondition) {
QueryCondition.CASH -> addAll(Comparator.CASH.queryConditions) QueryCondition.IsCash -> addAll(Comparator.CASH.queryConditions)
QueryCondition.TOURNAMENT -> addAll(Comparator.TOURNAMENT.queryConditions) QueryCondition.IsTournament -> addAll(Comparator.TOURNAMENT.queryConditions)
} }
} }

@ -164,21 +164,21 @@ class CalendarFragment : SessionObserverFragment(), CoroutineScope, StaticRowRep
} }
filterSessionCash.setOnCheckedChangeListener { _, isChecked -> filterSessionCash.setOnCheckedChangeListener { _, isChecked ->
if (isChecked) { if (isChecked) {
sessionTypeCondition = QueryCondition.CASH sessionTypeCondition = QueryCondition.IsCash
filterSessionAll.isChecked = false filterSessionAll.isChecked = false
filterSessionTournament.isChecked = false filterSessionTournament.isChecked = false
launchStatComputation() launchStatComputation()
} else if (sessionTypeCondition == QueryCondition.CASH) { } else if (sessionTypeCondition == QueryCondition.IsCash) {
filterSessionCash.isChecked = true filterSessionCash.isChecked = true
} }
} }
filterSessionTournament.setOnCheckedChangeListener { _, isChecked -> filterSessionTournament.setOnCheckedChangeListener { _, isChecked ->
if (isChecked) { if (isChecked) {
sessionTypeCondition = QueryCondition.TOURNAMENT sessionTypeCondition = QueryCondition.IsTournament
filterSessionAll.isChecked = false filterSessionAll.isChecked = false
filterSessionCash.isChecked = false filterSessionCash.isChecked = false
launchStatComputation() launchStatComputation()
} else if (sessionTypeCondition == QueryCondition.TOURNAMENT) { } else if (sessionTypeCondition == QueryCondition.IsTournament) {
filterSessionTournament.isChecked = true filterSessionTournament.isChecked = true
} }
} }
@ -238,13 +238,13 @@ class CalendarFragment : SessionObserverFragment(), CoroutineScope, StaticRowRep
val requiredStats: List<Stat> = listOf(Stat.LOCATIONS_PLAYED, Stat.LONGEST_STREAKS, Stat.DAYS_PLAYED, Stat.STANDARD_DEVIATION_HOURLY ) val requiredStats: List<Stat> = listOf(Stat.LOCATIONS_PLAYED, Stat.LONGEST_STREAKS, Stat.DAYS_PLAYED, Stat.STANDARD_DEVIATION_HOURLY )
val options = Calculator.Options(evolutionValues = Calculator.Options.EvolutionValues.STANDARD, stats = requiredStats) val options = Calculator.Options(evolutionValues = Calculator.Options.EvolutionValues.STANDARD, stats = requiredStats)
// Compute data per YEAR and MONTH // Compute data per AnyYear and AnyMonthOfYear
println(">>>> ${Comparator.MONTH_OF_YEAR.queryConditions.map { it.id }}") println(">>>> ${Comparator.MONTH_OF_YEAR.queryConditions.map { it.id }}")
val monthConditions = when (sessionTypeCondition) { val monthConditions = when (sessionTypeCondition) {
QueryCondition.CASH -> listOf(Comparator.YEAR, Comparator.MONTH_OF_YEAR, Comparator.CASH).combined() QueryCondition.IsCash -> listOf(Comparator.YEAR, Comparator.MONTH_OF_YEAR, Comparator.CASH).combined()
QueryCondition.TOURNAMENT -> listOf(Comparator.YEAR, Comparator.MONTH_OF_YEAR, Comparator.TOURNAMENT).combined() QueryCondition.IsTournament -> listOf(Comparator.YEAR, Comparator.MONTH_OF_YEAR, Comparator.TOURNAMENT).combined()
else -> listOf(Comparator.YEAR, Comparator.MONTH_OF_YEAR).combined() else -> listOf(Comparator.YEAR, Comparator.MONTH_OF_YEAR).combined()
} }
@ -256,8 +256,8 @@ class CalendarFragment : SessionObserverFragment(), CoroutineScope, StaticRowRep
// Set date data // Set date data
conditions.forEach { condition -> conditions.forEach { condition ->
when (condition) { when (condition) {
is QueryCondition.YEAR -> calendar.set(Calendar.YEAR, condition.listOfValues.first()) is QueryCondition.AnyYear -> calendar.set(Calendar.YEAR, condition.listOfValues.first())
is QueryCondition.MONTH -> calendar.set(Calendar.MONTH, condition.listOfValues.first()) is QueryCondition.AnyMonthOfYear -> calendar.set(Calendar.MONTH, condition.listOfValues.first())
} }
} }
@ -268,10 +268,10 @@ class CalendarFragment : SessionObserverFragment(), CoroutineScope, StaticRowRep
calendar.time = Date().startOfYear() calendar.time = Date().startOfYear()
// Compute data per YEAR // Compute data per AnyYear
val yearConditions = when (sessionTypeCondition) { val yearConditions = when (sessionTypeCondition) {
QueryCondition.CASH -> listOf(Comparator.YEAR, Comparator.CASH).combined() QueryCondition.IsCash -> listOf(Comparator.YEAR, Comparator.CASH).combined()
QueryCondition.TOURNAMENT -> listOf(Comparator.YEAR, Comparator.TOURNAMENT).combined() QueryCondition.IsTournament -> listOf(Comparator.YEAR, Comparator.TOURNAMENT).combined()
else -> listOf(Comparator.YEAR).combined() else -> listOf(Comparator.YEAR).combined()
} }
@ -282,7 +282,7 @@ class CalendarFragment : SessionObserverFragment(), CoroutineScope, StaticRowRep
// Set date data // Set date data
conditions.forEach { condition -> conditions.forEach { condition ->
when (condition) { when (condition) {
is QueryCondition.YEAR -> calendar.set(Calendar.YEAR, condition.listOfValues.first()) is QueryCondition.AnyYear -> calendar.set(Calendar.YEAR, condition.listOfValues.first())
} }
} }
yearlyReports[calendar.time] = computedResults yearlyReports[calendar.time] = computedResults
@ -297,7 +297,7 @@ class CalendarFragment : SessionObserverFragment(), CoroutineScope, StaticRowRep
// Logs // Logs
/* /*
Timber.d("========== YEAR x MONTH") Timber.d("========== AnyYear x AnyMonthOfYear")
sortedMonthlyReports.keys.forEach { sortedMonthlyReports.keys.forEach {
Timber.d("$it => ${sortedMonthlyReports[it]?.computedStat(Stat.NET_RESULT)?.value}") Timber.d("$it => ${sortedMonthlyReports[it]?.computedStat(Stat.NET_RESULT)?.value}")
} }

@ -132,10 +132,10 @@ class StatisticsFragment : TableReportFragment() {
Stat.NUMBER_OF_GAMES, Stat.NUMBER_OF_GAMES,
Stat.AVERAGE_BUYIN Stat.AVERAGE_BUYIN
) )
val cgSessionGroup = ComputableGroup(stringCashGame, listOf(QueryCondition.CASH), cgStats) val cgSessionGroup = ComputableGroup(stringCashGame, listOf(QueryCondition.IsCash), cgStats)
val tStats: List<Stat> = val tStats: List<Stat> =
listOf(Stat.NET_RESULT, Stat.HOURLY_RATE, Stat.ROI, Stat.WIN_RATIO, Stat.NUMBER_OF_GAMES, Stat.AVERAGE_BUYIN) listOf(Stat.NET_RESULT, Stat.HOURLY_RATE, Stat.ROI, Stat.WIN_RATIO, Stat.NUMBER_OF_GAMES, Stat.AVERAGE_BUYIN)
val tSessionGroup = ComputableGroup(stringTournament, listOf(QueryCondition.TOURNAMENT), tStats) val tSessionGroup = ComputableGroup(stringTournament, listOf(QueryCondition.IsTournament), tStats)
Timber.d(">>>>> Start computations...") Timber.d(">>>>> Start computations...")

@ -13,25 +13,25 @@ interface FilterElementRow : RowRepresentable {
override val resId: Int? override val resId: Int?
get() { get() {
return when (this) { return when (this) {
is QueryCondition.CASH -> R.string.cash_game is QueryCondition.IsCash -> R.string.cash_game
is QueryCondition.TOURNAMENT -> R.string.tournament is QueryCondition.IsTournament -> R.string.tournament
is QueryCondition.TODAY -> R.string.today is QueryCondition.IsToday -> R.string.today
is QueryCondition.YESTERDAY -> R.string.yesterday is QueryCondition.WasYesterday -> R.string.yesterday
is QueryCondition.TODAY_AND_YESTERDAY -> R.string.yesterday_and_today is QueryCondition.WasTodayAndYesterday -> R.string.yesterday_and_today
is QueryCondition.THIS_WEEK -> R.string.current_week is QueryCondition.DuringThisWeek -> R.string.current_week
is QueryCondition.THIS_MONTH -> R.string.current_month is QueryCondition.DuringThisMonth -> R.string.current_month
is QueryCondition.THIS_YEAR -> R.string.current_year is QueryCondition.DuringThisYear -> R.string.current_year
is QueryCondition.STARTED_FROM_TIME, is QueryCondition.STARTED_FROM_DATE -> R.string.from is QueryCondition.StartedFromTime, is QueryCondition.StartedFromDate -> R.string.from
is QueryCondition.ENDED_TO_DATE, is QueryCondition.ENDED_TO_TIME-> R.string.to is QueryCondition.EndedToDate, is QueryCondition.EndedToTime-> R.string.to
is QueryCondition.LIVE -> R.string.live is QueryCondition.IsLive -> R.string.live
is QueryCondition.ONLINE -> R.string.online is QueryCondition.IsOnline -> R.string.online
is QueryCondition.WEEK_DAY -> R.string.week_days is QueryCondition.IsWeekDay -> R.string.week_days
is QueryCondition.WEEK_END -> R.string.weekend is QueryCondition.IsWeekEnd -> R.string.weekend
is QueryCondition.PAST_DAYS -> R.string.period_in_days is QueryCondition.PastDay -> R.string.period_in_days
is QueryCondition.LAST_GAMES -> R.string.last_records is QueryCondition.LastGame -> R.string.last_records
is QueryCondition.LAST_SESSIONS -> R.string.last_sessions is QueryCondition.LastSession -> R.string.last_sessions
is QueryCondition.MIN_RE_BUY -> R.string.minimum is QueryCondition.MoreRebuy -> R.string.minimum
is QueryCondition.MAX_RE_BUY -> R.string.maximum is QueryCondition.LessRebuy -> R.string.maximum
is QueryCondition.More -> R.string.more_than is QueryCondition.More -> R.string.more_than
is QueryCondition.Less -> R.string.less_than is QueryCondition.Less -> R.string.less_than
else -> null else -> null
@ -41,8 +41,8 @@ interface FilterElementRow : RowRepresentable {
override val viewType: Int override val viewType: Int
get() { get() {
return when (this) { return when (this) {
is QueryCondition.PAST_DAYS, is QueryCondition.STARTED_FROM_DATE, is QueryCondition.ENDED_TO_DATE, is QueryCondition.STARTED_FROM_TIME, is QueryCondition.ENDED_TO_TIME, is QueryCondition.LAST_GAMES, is QueryCondition.LAST_SESSIONS, is QueryCondition.MAX_RE_BUY, is QueryCondition.MIN_RE_BUY, is QueryCondition.PastDay, is QueryCondition.StartedFromDate, is QueryCondition.EndedToDate, is QueryCondition.StartedFromTime, is QueryCondition.EndedToTime, is QueryCondition.LastGame, is QueryCondition.LastSession, is QueryCondition.LessRebuy, is QueryCondition.MoreRebuy,
is QueryCondition.MORE_THAN_DURATION, is QueryCondition.LESS_THAN_DURATION-> RowViewType.TITLE_VALUE_CHECK.ordinal is QueryCondition.MoreDuration, is QueryCondition.LessDuration-> RowViewType.TITLE_VALUE_CHECK.ordinal
else -> RowViewType.TITLE_CHECK.ordinal else -> RowViewType.TITLE_CHECK.ordinal
} }
} }
@ -50,8 +50,8 @@ interface FilterElementRow : RowRepresentable {
override val bottomSheetType: BottomSheetType override val bottomSheetType: BottomSheetType
get() { get() {
return when (this) { return when (this) {
is QueryCondition.PAST_DAYS, is QueryCondition.LAST_GAMES, is QueryCondition.LAST_SESSIONS, is QueryCondition.MAX_RE_BUY, is QueryCondition.MIN_RE_BUY-> BottomSheetType.EDIT_TEXT is QueryCondition.PastDay, is QueryCondition.LastGame, is QueryCondition.LastSession, is QueryCondition.LessRebuy, is QueryCondition.MoreRebuy-> BottomSheetType.EDIT_TEXT
is QueryCondition.MORE_THAN_DURATION, is QueryCondition.LESS_THAN_DURATION-> BottomSheetType.DOUBLE_EDIT_TEXT is QueryCondition.MoreDuration, is QueryCondition.LessDuration-> BottomSheetType.DOUBLE_EDIT_TEXT
else -> BottomSheetType.NONE else -> BottomSheetType.NONE
} }
} }

@ -1,20 +1,10 @@
package net.pokeranalytics.android.ui.view.rowrepresentable package net.pokeranalytics.android.ui.view.rowrepresentable
import io.realm.Realm
import io.realm.Sort
import io.realm.kotlin.where
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.Criteria import net.pokeranalytics.android.model.Criteria
import net.pokeranalytics.android.model.LiveData
import net.pokeranalytics.android.model.filter.QueryCondition import net.pokeranalytics.android.model.filter.QueryCondition
import net.pokeranalytics.android.model.realm.Session
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.FilterElementRow.*
import net.pokeranalytics.android.util.extensions.endOfDay
import net.pokeranalytics.android.util.extensions.startOfDay
import java.text.DateFormatSymbols
import java.util.*
enum class FilterSectionRow(override val resId: Int?) : RowRepresentable { enum class FilterSectionRow(override val resId: Int?) : RowRepresentable {
CASH_TOURNAMENT(net.pokeranalytics.android.R.string.cash_or_tournament), CASH_TOURNAMENT(net.pokeranalytics.android.R.string.cash_or_tournament),
@ -68,29 +58,29 @@ enum class FilterSectionRow(override val resId: Int?) : RowRepresentable {
when (this@FilterSectionRow) { when (this@FilterSectionRow) {
// General // General
CASH_TOURNAMENT -> Criteria.SessionType.queryConditions CASH_TOURNAMENT -> Criteria.SessionTypes.queryConditions
LIVE_ONLINE -> Criteria.BankrollType.queryConditions LIVE_ONLINE -> Criteria.BankrollTypes.queryConditions
GAME -> Criteria.Games.queryConditions GAME -> Criteria.Games.queryConditions
LIMIT_TYPE -> Criteria.Limits.queryConditions LIMIT_TYPE -> Criteria.Limits.queryConditions
TABLE_SIZE -> Criteria.TableSizes.queryConditions TABLE_SIZE -> Criteria.TableSizes.queryConditions
// Date // Date
DYNAMIC_DATE -> arrayListOf( DYNAMIC_DATE -> arrayListOf(
QueryCondition.TODAY, QueryCondition.IsToday,
QueryCondition.YESTERDAY, QueryCondition.WasYesterday,
QueryCondition.TODAY_AND_YESTERDAY, QueryCondition.WasTodayAndYesterday,
QueryCondition.THIS_WEEK, QueryCondition.DuringThisWeek,
QueryCondition.THIS_MONTH, QueryCondition.DuringThisMonth,
QueryCondition.THIS_YEAR QueryCondition.DuringThisYear
) )
FIXED_DATE -> arrayListOf(QueryCondition.STARTED_FROM_DATE(), QueryCondition.ENDED_TO_DATE()) FIXED_DATE -> arrayListOf(QueryCondition.StartedFromDate(), QueryCondition.EndedToDate())
DURATION -> arrayListOf(QueryCondition.PAST_DAYS()) DURATION -> arrayListOf(QueryCondition.PastDay())
WEEKDAYS_OR_WEEKEND -> arrayListOf(QueryCondition.WEEK_DAY, QueryCondition.WEEK_END) WEEKDAYS_OR_WEEKEND -> arrayListOf(QueryCondition.IsWeekDay, QueryCondition.IsWeekEnd)
YEAR -> Criteria.Year.queryConditions YEAR -> Criteria.Years.queryConditions
DAY_OF_WEEK -> Criteria.dayOfWeek.queryConditions DAY_OF_WEEK -> Criteria.DaysOfWeek.queryConditions
MONTH_OF_YEAR -> Criteria.monthOfYear.queryConditions MONTH_OF_YEAR -> Criteria.MonthsOfYear.queryConditions
// Duration // Duration
SESSION_DURATION -> arrayListOf(QueryCondition.MORE_THAN_DURATION(), QueryCondition.LESS_THAN_DURATION() as QueryCondition) SESSION_DURATION -> arrayListOf(QueryCondition.MoreDuration(), QueryCondition.LessDuration() as QueryCondition)
/* /*
RANGE -> { RANGE -> {
val fromTime = FromTime val fromTime = FromTime
@ -101,13 +91,13 @@ enum class FilterSectionRow(override val resId: Int?) : RowRepresentable {
}*/ }*/
// Sessions // Sessions
SESSIONS -> arrayListOf(QueryCondition.LAST_GAMES(), QueryCondition.LAST_SESSIONS()) SESSIONS -> arrayListOf(QueryCondition.LastGame(), QueryCondition.LastSession())
// Cash // Cash
BLIND -> Criteria.Blinds.queryConditions BLIND -> Criteria.Blinds.queryConditions
CASH_RE_BUY_COUNT -> arrayListOf( CASH_RE_BUY_COUNT -> arrayListOf(
QueryCondition.MAX_RE_BUY(), QueryCondition.LessRebuy(),
QueryCondition.MIN_RE_BUY() as QueryCondition QueryCondition.MoreRebuy() as QueryCondition
) )
// Tournament // Tournament

Loading…
Cancel
Save