remove Comparator

feature/top10
Razmig Sarkissian 7 years ago
parent 44c28971c2
commit b615820315
  1. 2
      app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt
  2. 16
      app/src/main/java/net/pokeranalytics/android/calculus/Calculator.kt
  3. 11
      app/src/main/java/net/pokeranalytics/android/model/Criteria.kt
  4. 113
      app/src/main/java/net/pokeranalytics/android/model/comparison/Comparator.kt
  5. 20
      app/src/main/java/net/pokeranalytics/android/model/filter/QueryCondition.kt
  6. 2
      app/src/main/java/net/pokeranalytics/android/model/realm/ReportSetup.kt
  7. 10
      app/src/main/java/net/pokeranalytics/android/ui/fragment/CalendarDetailsFragment.kt
  8. 18
      app/src/main/java/net/pokeranalytics/android/ui/fragment/CalendarFragment.kt
  9. 8
      app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportsFragment.kt
  10. 18
      app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/ReportRow.kt
  11. 2
      app/src/main/res/values-de/strings.xml
  12. 2
      app/src/main/res/values-es/strings.xml
  13. 2
      app/src/main/res/values-fr/strings.xml
  14. 2
      app/src/main/res/values-hi/strings.xml
  15. 2
      app/src/main/res/values-it/strings.xml
  16. 2
      app/src/main/res/values-ja/strings.xml
  17. 2
      app/src/main/res/values-pt/strings.xml
  18. 2
      app/src/main/res/values-ru/strings.xml
  19. 2
      app/src/main/res/values-zh/strings.xml
  20. 2
      app/src/main/res/values/strings.xml

@ -52,7 +52,7 @@ class PokerAnalyticsApplication : Application() {
if (BuildConfig.DEBUG) {
Timber.d("UserPreferences.defaultCurrency: ${UserDefaults.currency.symbol}")
//this.createFakeSessions()
this.createFakeSessions()
}
Patcher.patchBreaks()

@ -2,8 +2,8 @@ package net.pokeranalytics.android.calculus
import io.realm.Realm
import net.pokeranalytics.android.calculus.Stat.*
import net.pokeranalytics.android.model.comparison.Comparator
import net.pokeranalytics.android.model.comparison.combined
import net.pokeranalytics.android.model.Criteria
import net.pokeranalytics.android.model.combined
import net.pokeranalytics.android.model.extensions.hourlyDuration
import net.pokeranalytics.android.model.filter.QueryCondition
import net.pokeranalytics.android.model.filter.filter
@ -116,26 +116,26 @@ class Calculator {
return when (aggregationType) {
AggregationType.SESSION, AggregationType.DURATION -> this.computeGroups(realm, listOf(group), options)
AggregationType.MONTH -> {
val comparators: List<Comparator> = listOf(Comparator.MONTH_OF_YEAR, Comparator.YEAR)
this.computeStatsWithComparators(realm, comparators, group.conditions, options)
val criteria: List<Criteria> = listOf(Criteria.MonthsOfYear, Criteria.Years)
this.computeStatsWithComparators(realm, criteria, group.conditions, options)
}
AggregationType.YEAR -> {
val comparators: List<Comparator> = listOf(Comparator.YEAR)
this.computeStatsWithComparators(realm, comparators, group.conditions, options)
val criteria: List<Criteria> = listOf(Criteria.Years)
this.computeStatsWithComparators(realm, criteria, group.conditions, options)
}
}
}
fun computeStatsWithComparators(
realm: Realm,
comparators: List<Comparator> = listOf(),
criteria: List<Criteria> = listOf(),
conditions: List<QueryCondition> = listOf(),
options: Options
): Report {
val computableGroups: MutableList<ComputableGroup> = mutableListOf()
comparators.combined().forEach { comparatorConditions ->
criteria.combined().forEach { comparatorConditions ->
val allConditions = mutableListOf<QueryCondition>()
allConditions.addAll(conditions)

@ -3,7 +3,6 @@ package net.pokeranalytics.android.model
import io.realm.Realm
import io.realm.Sort
import io.realm.kotlin.where
import net.pokeranalytics.android.calculus.Stat
import net.pokeranalytics.android.exceptions.PokerAnalyticsException
import net.pokeranalytics.android.model.filter.QueryCondition
import net.pokeranalytics.android.model.interfaces.NameManageable
@ -54,11 +53,11 @@ fun <T> getCombinations(lists: List<List<T>>): List<List<T>> {
return combinations.toList()
}
sealed class Criteria {
abstract class RealmCriteria : Criteria() {
inline fun <reified T: NameManageable> comparison(): List<QueryCondition> {
return compare < QueryCondition.QueryDataCondition<NameManageable >, T >().sorted()
return compare<QueryCondition.QueryDataCondition<NameManageable>, T>()
.sorted()
}
}
@ -104,14 +103,16 @@ sealed class Criteria {
object Years: ListCriteria()
object Blinds: ListCriteria()
object TournamentFees: ListCriteria()
object Cash: SimpleCriteria(listOf(QueryCondition.IsCash))
object Tournament: SimpleCriteria(listOf(QueryCondition.IsTournament))
val queryConditions: List<QueryCondition>
get() {
return when (this) {
is Bankrolls -> comparison<Bankroll>()
is Games -> comparison<Game>()
is TournamentFeatures-> comparison<TournamentFeature>()
is TournamentNames-> comparison<TournamentName>()
is TournamentFeatures -> comparison<TournamentFeature>()
is TournamentNames -> comparison<TournamentName>()
is Locations -> comparison<Location>()
is SimpleCriteria -> comparison()
is Limits -> comparison<QueryCondition.AnyLimit, Int>()

@ -1,113 +0,0 @@
package net.pokeranalytics.android.model.comparison
import io.realm.Realm
import io.realm.Sort
import io.realm.kotlin.where
import net.pokeranalytics.android.exceptions.PokerAnalyticsException
import net.pokeranalytics.android.model.Criteria
import net.pokeranalytics.android.model.filter.QueryCondition
import net.pokeranalytics.android.model.realm.*
import java.util.*
import kotlin.collections.ArrayList
enum class Comparator {
DAY_OF_WEEK,
MONTH_OF_YEAR,
YEAR,
BLIND,
CASH,
TOURNAMENT,
LIVE,
ONLINE,
GAME,
BANKROLL,
LOCATION,
TOURNAMENT_FEATURE,
TOURNAMENT_NAME,
DAY_PERIOD,
LIMIT_TYPE,
TABLE_SIZE,
TOURNAMENT_TYPE,
TOURNAMENT_ENTRY_FEE,
;
val queryConditions: List<QueryCondition>
get() {
return when (this) {
TOURNAMENT_ENTRY_FEE -> {
val fees = arrayListOf<QueryCondition.BetweenTournamentFee>()
val realm = Realm.getDefaultInstance()
val fieldName = Session.fieldNameForQueryType(QueryCondition.BetweenTournamentFee::class.java)!!
realm.where<Session>().distinct(fieldName).findAll().sort(fieldName, Sort.ASCENDING).map {
it.tournamentEntryFee?.let { fee ->
fees.add(QueryCondition.BetweenTournamentFee().apply { between(fee, fee) })
}
}
realm.close()
fees
}
MONTH_OF_YEAR -> Criteria.MonthsOfYear.queryConditions
DAY_OF_WEEK -> Criteria.DaysOfWeek.queryConditions
YEAR -> Criteria.Years.queryConditions
DAY_PERIOD -> Criteria.DayPeriods.queryConditions
CASH -> listOf(QueryCondition.IsCash)
TOURNAMENT -> listOf(QueryCondition.IsTournament)
LIVE -> listOf(QueryCondition.IsLive)
ONLINE -> listOf(QueryCondition.IsOnline)
BLIND -> Criteria.Blinds.queryConditions
BANKROLL -> Criteria.Bankrolls.queryConditions
GAME -> Criteria.Games.queryConditions
TOURNAMENT_NAME-> Criteria.TournamentNames.queryConditions
TOURNAMENT_FEATURE-> Criteria.TournamentFeatures.queryConditions
LOCATION-> Criteria.Locations.queryConditions
LIMIT_TYPE -> Criteria.Limits.queryConditions
TABLE_SIZE -> Criteria.TableSizes.queryConditions
TOURNAMENT_TYPE -> Criteria.TournamentTypes.queryConditions
else -> throw PokerAnalyticsException.QueryTypeUnhandled
}
}
}
fun List<Comparator>.combined(): List<List<QueryCondition>> {
val comparatorList = ArrayList<List<QueryCondition>>()
this.forEach {
comparatorList.add(it.queryConditions)
}
return getCombinations(comparatorList)
}
fun <T> getCombinations(lists: List<List<T>>): List<List<T>> {
var combinations: MutableSet<List<T>> = LinkedHashSet()
var newCombinations: MutableSet<List<T>>
var index = 0
// extract each of the integers in the first list
// and add each to ints as a new list
if (lists.isNotEmpty()) {
for (i in lists[0]) {
val newList = ArrayList<T>()
newList.add(i)
combinations.add(newList)
}
index++
}
while (index < lists.size) {
val nextList = lists[index]
newCombinations = LinkedHashSet()
for (first in combinations) {
for (second in nextList) {
val newList = ArrayList<T>()
newList.addAll(first)
newList.add(second)
newCombinations.add(newList)
}
}
combinations = newCombinations
index++
}
return combinations.toList()
}

@ -219,10 +219,22 @@ sealed class QueryCondition : FilterElementRow {
override val showTime: Boolean = true
}
object IsLive : QueryCondition()
object IsCash : QueryCondition()
object IsOnline : QueryCondition()
object IsTournament : QueryCondition()
object IsLive : QueryCondition() {
override fun getDisplayName(): String { return "Live" }
}
object IsCash : QueryCondition() {
override fun getDisplayName(): String { return "Cash" }
}
object IsOnline : QueryCondition() {
override fun getDisplayName(): String { return "Online" }
}
object IsTournament : QueryCondition() {
override fun getDisplayName(): String { return "Tournament" }
}
class AnyBankroll: QueryDataCondition<Bankroll>() { override val entity: Class<Bankroll> = Bankroll::class.java }
class AnyGame: QueryDataCondition<Game>() { override val entity: Class<Game> = Game::class.java }
class AnyTournamentName: QueryDataCondition<TournamentName>() { override val entity: Class<TournamentName> = TournamentName::class.java }

@ -24,7 +24,7 @@ open class ReportSetup : RealmObject() {
// @todo define the configuration options
// var comparators: List<Int> = listOf()
// var criteria: List<Int> = listOf()
// var stats: List<Int> = listOf()
// The filters associated with the report

@ -18,7 +18,7 @@ import net.pokeranalytics.android.R
import net.pokeranalytics.android.calculus.Calculator
import net.pokeranalytics.android.calculus.ComputedResults
import net.pokeranalytics.android.calculus.Stat
import net.pokeranalytics.android.model.comparison.Comparator
import net.pokeranalytics.android.model.Criteria
import net.pokeranalytics.android.model.filter.QueryCondition
import net.pokeranalytics.android.ui.activity.StatisticDetailsActivity
import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
@ -162,12 +162,12 @@ class CalendarDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresentable
addAll(computedResults.group.conditions)
// Remove session type conditions
removeAll(Comparator.CASH.queryConditions)
removeAll(Comparator.TOURNAMENT.queryConditions)
removeAll(Criteria.Cash.queryConditions)
removeAll(Criteria.Tournament.queryConditions)
when (sessionTypeCondition) {
QueryCondition.IsCash -> addAll(Comparator.CASH.queryConditions)
QueryCondition.IsTournament -> addAll(Comparator.TOURNAMENT.queryConditions)
QueryCondition.IsCash -> addAll(Criteria.Cash.queryConditions)
QueryCondition.IsTournament -> addAll(Criteria.Tournament.queryConditions)
}
}

@ -16,8 +16,8 @@ import kotlinx.coroutines.launch
import net.pokeranalytics.android.calculus.Calculator
import net.pokeranalytics.android.calculus.ComputedResults
import net.pokeranalytics.android.calculus.Stat
import net.pokeranalytics.android.model.comparison.Comparator
import net.pokeranalytics.android.model.comparison.combined
import net.pokeranalytics.android.model.Criteria
import net.pokeranalytics.android.model.combined
import net.pokeranalytics.android.model.filter.QueryCondition
import net.pokeranalytics.android.ui.activity.CalendarDetailsActivity
import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
@ -240,12 +240,12 @@ class CalendarFragment : SessionObserverFragment(), CoroutineScope, StaticRowRep
// Compute data per AnyYear and AnyMonthOfYear
println(">>>> ${Comparator.MONTH_OF_YEAR.queryConditions.map { it.id }}")
println(">>>> ${Criteria.MonthsOfYear.queryConditions.map { it.id }}")
val monthConditions = when (sessionTypeCondition) {
QueryCondition.IsCash -> listOf(Comparator.YEAR, Comparator.MONTH_OF_YEAR, Comparator.CASH).combined()
QueryCondition.IsTournament -> listOf(Comparator.YEAR, Comparator.MONTH_OF_YEAR, Comparator.TOURNAMENT).combined()
else -> listOf(Comparator.YEAR, Comparator.MONTH_OF_YEAR).combined()
QueryCondition.IsCash -> listOf(Criteria.Years, Criteria.MonthsOfYear, Criteria.Cash).combined()
QueryCondition.IsTournament -> listOf(Criteria.Years, Criteria.MonthsOfYear, Criteria.Tournament).combined()
else -> listOf(Criteria.Years, Criteria.MonthsOfYear).combined()
}
monthConditions.forEach { conditions ->
@ -270,9 +270,9 @@ class CalendarFragment : SessionObserverFragment(), CoroutineScope, StaticRowRep
// Compute data per AnyYear
val yearConditions = when (sessionTypeCondition) {
QueryCondition.IsCash -> listOf(Comparator.YEAR, Comparator.CASH).combined()
QueryCondition.IsTournament -> listOf(Comparator.YEAR, Comparator.TOURNAMENT).combined()
else -> listOf(Comparator.YEAR).combined()
QueryCondition.IsCash -> listOf(Criteria.Years, Criteria.Cash).combined()
QueryCondition.IsTournament -> listOf(Criteria.Years, Criteria.Tournament).combined()
else -> listOf(Criteria.Years).combined()
}
yearConditions.forEach { conditions ->

@ -13,7 +13,7 @@ import kotlinx.coroutines.launch
import net.pokeranalytics.android.R
import net.pokeranalytics.android.calculus.Calculator
import net.pokeranalytics.android.calculus.Stat
import net.pokeranalytics.android.model.comparison.Comparator
import net.pokeranalytics.android.model.Criteria
import net.pokeranalytics.android.ui.activity.ReportDetailsActivity
import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
@ -71,7 +71,7 @@ class ReportsFragment : PokerAnalyticsFragment(), StaticRowRepresentableDataSour
super.onRowSelected(position, row, fromAction)
if (row is ReportRow) {
val reportName = row.localizedTitle(requireContext())
launchComputation(row.comparators, reportName)
launchComputation(row.criteria, reportName)
}
}
@ -103,7 +103,7 @@ class ReportsFragment : PokerAnalyticsFragment(), StaticRowRepresentableDataSour
/**
* Launch computation
*/
private fun launchComputation(comparators: List<Comparator>, reportName: String) {
private fun launchComputation(criteria: List<Criteria>, reportName: String) {
showLoader()
@ -114,7 +114,7 @@ class ReportsFragment : PokerAnalyticsFragment(), StaticRowRepresentableDataSour
val requiredStats: List<Stat> = listOf(Stat.NET_RESULT)
val options = Calculator.Options(evolutionValues = Calculator.Options.EvolutionValues.STANDARD, stats = requiredStats)
val report = Calculator.computeStatsWithComparators(realm, comparators = comparators, options = options)
val report = Calculator.computeStatsWithComparators(realm, criteria = criteria, options = options)
Timber.d("launchComputation: ${System.currentTimeMillis() - startDate.time}ms")

@ -1,7 +1,7 @@
package net.pokeranalytics.android.ui.view.rowrepresentable
import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.comparison.Comparator
import net.pokeranalytics.android.model.Criteria
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowViewType
@ -47,17 +47,17 @@ enum class ReportRow : RowRepresentable {
override val viewType: Int = RowViewType.TITLE_ARROW.ordinal
val comparators: List<Comparator>
val criteria: List<Criteria>
get() {
return when (this) {
BLINDS -> listOf(Comparator.BLIND)
BUY_IN -> listOf(Comparator.TOURNAMENT_ENTRY_FEE)
DAY_OF_WEEKS -> listOf(Comparator.DAY_OF_WEEK)
GENERAL -> listOf(Comparator.CASH, Comparator.LIVE)
LOCATIONS -> listOf(Comparator.LOCATION)
BLINDS -> listOf(Criteria.Blinds)
BUY_IN -> listOf(Criteria.TournamentFees)
DAY_OF_WEEKS -> listOf(Criteria.DaysOfWeek)
GENERAL -> listOf(Criteria.SessionTypes, Criteria.BankrollTypes)
LOCATIONS -> listOf(Criteria.Locations)
NUMBER_OF_TABLES -> listOf() //TODO
TOURNAMENT_TYPES -> listOf(Comparator.TOURNAMENT_TYPE)
GAME -> listOf(Comparator.GAME)
TOURNAMENT_TYPES -> listOf(Criteria.TournamentTypes)
GAME -> listOf(Criteria.Games)
}
}

@ -95,7 +95,7 @@
<string name="clear_to_use_automatic_naming">Leeren, um einen automatisch generierten Titel zu verwenden</string>
<string name="clover_classic_green">Pik ♣ – Klassisches Grün</string>
<string name="comment">Kommentar</string>
<string name="comparators">Vergleichselemente</string>
<string name="criteria">Vergleichselemente</string>
<string name="comparison">Vergleich</string>
<string name="conditioning_report_filtering_returns_no_data">Die eingegrenzte Suche ergab keine Ergebnisse</string>
<string name="confirmation">Bestätigung</string>

@ -95,7 +95,7 @@
<string name="clear_to_use_automatic_naming">Borrar para utilizar título generado automáticamente</string>
<string name="clover_classic_green">Trébol ♣: verde clásico</string>
<string name="comment">Comentarios</string>
<string name="comparators">Comparadores</string>
<string name="criteria">Comparadores</string>
<string name="comparison">Comparación</string>
<string name="conditioning_report_filtering_returns_no_data">Los filtros aún no dieron ningún resultado.</string>
<string name="confirmation">Confirmación</string>

@ -112,7 +112,7 @@
<string name="clear_to_use_automatic_naming">Effacer pour utiliser un titre généré automatiquement</string>
<string name="clover_classic_green">Trèfle ♣ - Vert classique</string>
<string name="comment">Commentaire</string>
<string name="comparators">Comparateurs</string>
<string name="criteria">Comparateurs</string>
<string name="comparison">Comparaison</string>
<string name="conditioning_report_filtering_returns_no_data">Le filtre ne retourne aucun résultat</string>
<string name="confirmation">Confirmation</string>

@ -95,7 +95,7 @@
<string name="clear_to_use_automatic_naming">वत उतपनन शषक उपयक करनिए सफ कर</string>
<string name="clover_classic_green">वर ♣ - किक हर</string>
<string name="comment">िपण</string>
<string name="comparators">लन</string>
<string name="criteria">लन</string>
<string name="comparison">लन</string>
<string name="conditioning_report_filtering_returns_no_data">िटर सई परिम नहि</string>
<string name="confirmation">करण</string>

@ -95,7 +95,7 @@
<string name="clear_to_use_automatic_naming">Cancella per usare un titolo generato automaticamente</string>
<string name="clover_classic_green">Fiori ♣ - Verde classico</string>
<string name="comment">Commento</string>
<string name="comparators">Comparatori</string>
<string name="criteria">Comparatori</string>
<string name="comparison">Comparazione</string>
<string name="conditioning_report_filtering_returns_no_data">Il filtraggio non ha dato alcun risultato</string>
<string name="confirmation">Conferma</string>

@ -95,7 +95,7 @@
<string name="clear_to_use_automatic_naming">クリアして自動生成されたタイトルを使用</string>
<string name="clover_classic_green">クローバー ♣ - クラシック グリーン</string>
<string name="comment">コメント</string>
<string name="comparators">コンパレーター</string>
<string name="criteria">コンパレーター</string>
<string name="comparison">比較</string>
<string name="conditioning_report_filtering_returns_no_data">フィルタリングでは結果が戻されませんでした</string>
<string name="confirmation">確認</string>

@ -95,7 +95,7 @@
<string name="clear_to_use_automatic_naming">Limpe para usar o título gerado automaticamente</string>
<string name="clover_classic_green">Trevo ♣ - Verde clássico</string>
<string name="comment">Comentário</string>
<string name="comparators">Comparadores</string>
<string name="criteria">Comparadores</string>
<string name="comparison">Comparação</string>
<string name="conditioning_report_filtering_returns_no_data">O filtro não apresentou nenhum resultado</string>
<string name="confirmation">Confirmação</string>

@ -95,7 +95,7 @@
<string name="clear_to_use_automatic_naming">Очистите для автоматического именования</string>
<string name="clover_classic_green">Клевер ♣ - Классическое</string>
<string name="comment">Комментарий</string>
<string name="comparators">Разделители</string>
<string name="criteria">Разделители</string>
<string name="comparison">Разделение</string>
<string name="conditioning_report_filtering_returns_no_data">Не найдено результатов после фильтрации</string>
<string name="confirmation">Подтверждение</string>

@ -83,7 +83,7 @@
<string name="clear">清理</string>
<string name="clear_to_use_automatic_naming">清理可使用自动生成标题</string>
<string name="comment">评论</string>
<string name="comparators">比较器</string>
<string name="criteria">比较器</string>
<string name="comparison">比较</string>
<string name="confirmation">确认</string>
<string name="contact">联系我们</string>

@ -122,7 +122,7 @@
<string name="clear_to_use_automatic_naming">Clear to use automatically generated title</string>
<string name="clover_classic_green">Clover ♣ - Classic green</string>
<string name="comment">Comment</string>
<string name="comparators">Comparators</string>
<string name="criteria">Comparators</string>
<string name="comparison">Comparison</string>
<string name="conditioning_report_filtering_returns_no_data">Filtering did not yield any results</string>
<string name="confirmation">Confirmation</string>

Loading…
Cancel
Save