Calculator now wraps object in a Report, Report -> ReportSetup + file renaming

feature/top10
Laurent 7 years ago
parent 68304b806b
commit ace7d7a6b6
  1. 10
      app/src/main/java/net/pokeranalytics/android/calculus/Calculator.kt
  2. 24
      app/src/main/java/net/pokeranalytics/android/calculus/Report.kt
  3. 0
      app/src/main/java/net/pokeranalytics/android/calculus/TextFormat.kt
  4. 1
      app/src/main/java/net/pokeranalytics/android/model/migrations/PokerAnalyticsMigration.kt
  5. 2
      app/src/main/java/net/pokeranalytics/android/model/realm/ReportSetup.kt
  6. 32
      app/src/main/java/net/pokeranalytics/android/ui/fragment/StatsFragment.kt

@ -60,7 +60,7 @@ class Calculator {
companion object { companion object {
fun computeStatsWithFilters(realm: Realm, filters: List<Filter>, options: Options): List<ComputedResults> { fun computeStatsWithFilters(realm: Realm, filters: List<Filter>, options: Options): Report {
var computableGroups: MutableList<ComputableGroup> = mutableListOf() var computableGroups: MutableList<ComputableGroup> = mutableListOf()
filters.forEach { filter -> filters.forEach { filter ->
@ -75,9 +75,9 @@ class Calculator {
/** /**
* Computes all stats for list of Session sessionGroup * Computes all stats for list of Session sessionGroup
*/ */
fun computeGroups(realm: Realm, groups: List<ComputableGroup>, options: Options): List<ComputedResults> { fun computeGroups(realm: Realm, groups: List<ComputableGroup>, options: Options): Report {
val computedResults = mutableListOf<ComputedResults>() val report = Report()
groups.forEach { group -> groups.forEach { group ->
val s = Date() val s = Date()
@ -96,7 +96,7 @@ class Calculator {
} }
results.finalize(options) // later treatment, such as evolution numericValues sorting results.finalize(options) // later treatment, such as evolution numericValues sorting
computedResults.add(results) report.addResults(results)
val e = Date() val e = Date()
val duration = (e.time - s.time) / 1000.0 val duration = (e.time - s.time) / 1000.0
@ -104,7 +104,7 @@ class Calculator {
} }
return computedResults return report
} }
/** /**

@ -10,6 +10,30 @@ import net.pokeranalytics.android.model.realm.ComputableResult
import net.pokeranalytics.android.model.realm.Filter import net.pokeranalytics.android.model.realm.Filter
import net.pokeranalytics.android.model.realm.SessionSet import net.pokeranalytics.android.model.realm.SessionSet
class Report() {
private var _results: MutableList<ComputedResults> = mutableListOf()
val results: List<ComputedResults> = this._results
// private var groups: MutableList<ComputableGroup> = mutableListOf()
//
// var options: Calculator.Options = options
//
// fun addGroup(group: ComputableGroup) {
// this.groups.add(group)
// }
//
// fun addGroups(groups: Collection<ComputableGroup>) {
// this.groups.addAll(groups)
// }
fun addResults(result: ComputedResults) {
this._results.add(result)
}
}
/** /**
* A sessionGroup of computable items identified by a name * A sessionGroup of computable items identified by a name
*/ */

@ -36,6 +36,7 @@ class PokerAnalyticsMigration : RealmMigration {
if (currentVersion == 1) { if (currentVersion == 1) {
Timber.d("*** Running migration ${currentVersion + 1}") Timber.d("*** Running migration ${currentVersion + 1}")
schema.rename("Report", "ReportSetup")
schema.rename("FilterElement", "FilterCondition") schema.rename("FilterElement", "FilterCondition")
schema.get("Filter")?.let { schema.get("Filter")?.let {
it.renameField("filterElements", "filterConditions") it.renameField("filterElements", "filterConditions")

@ -11,7 +11,7 @@ enum class ReportDisplay {
MAP MAP
} }
open class Report : RealmObject() { open class ReportSetup : RealmObject() {
@PrimaryKey @PrimaryKey
var id = UUID.randomUUID().toString() var id = UUID.randomUUID().toString()

@ -37,7 +37,7 @@ class StatsFragment : SessionObserverFragment(), StaticRowRepresentableDataSourc
private var stringTournament = "" private var stringTournament = ""
private lateinit var statsAdapter: RowRepresentableAdapter private lateinit var statsAdapter: RowRepresentableAdapter
private var computedResults : List<ComputedResults>? = null private var report : Report? = null
companion object { companion object {
@ -137,31 +137,31 @@ class StatsFragment : SessionObserverFragment(), StaticRowRepresentableDataSourc
GlobalScope.launch(coroutineContext) { GlobalScope.launch(coroutineContext) {
var results = listOf<ComputedResults>() var r = Report()
val test = GlobalScope.async { val test = GlobalScope.async {
val s = Date() val s = Date()
Timber.d(">>> start...") Timber.d(">>> start...")
val realm = Realm.getDefaultInstance() val realm = Realm.getDefaultInstance()
results = createSessionGroupsAndStartCompute(realm) r = createSessionGroupsAndStartCompute(realm)
computedResults = results report = r
realm.close() realm.close()
val e = Date() val e = Date()
val duration = (e.time - s.time) / 1000.0 val duration = (e.time - s.time) / 1000.0
Timber.d(">>> ended in ${duration} seconds") Timber.d(">>> ended in $duration seconds")
} }
test.await() test.await()
if (!isDetached) { if (!isDetached) {
showResults(results) showResults(r)
} }
} }
} }
private fun createSessionGroupsAndStartCompute(realm: Realm) : List<ComputedResults> { private fun createSessionGroupsAndStartCompute(realm: Realm) : Report {
val allStats: List<Stat> = listOf(Stat.NETRESULT, Stat.HOURLY_RATE, Stat.AVERAGE, Stat.NUMBER_OF_SETS, Stat.AVERAGE_DURATION, Stat.DURATION) val allStats: List<Stat> = listOf(Stat.NETRESULT, Stat.HOURLY_RATE, Stat.AVERAGE, Stat.NUMBER_OF_SETS, Stat.AVERAGE_DURATION, Stat.DURATION)
val allSessionGroup = ComputableGroup(stringAll, listOf(), allStats) val allSessionGroup = ComputableGroup(stringAll, listOf(), allStats)
@ -176,16 +176,16 @@ class StatsFragment : SessionObserverFragment(), StaticRowRepresentableDataSourc
} }
private fun showResults(results: List<ComputedResults>) { private fun showResults(report: Report) {
this.rowRepresentables = this.convertResultsIntoRepresentables(results) this.rowRepresentables = this.convertReportIntoRepresentables(report)
statsAdapter.notifyDataSetChanged() statsAdapter.notifyDataSetChanged()
} }
private fun convertResultsIntoRepresentables(results: List<ComputedResults>) : ArrayList<RowRepresentable> { private fun convertReportIntoRepresentables(report: Report) : ArrayList<RowRepresentable> {
val rows: ArrayList<RowRepresentable> = ArrayList() val rows: ArrayList<RowRepresentable> = ArrayList()
results.forEach { result -> report.results.forEach { result ->
rows.add(CustomizableRowRepresentable(title = result.group.name)) rows.add(CustomizableRowRepresentable(title = result.group.name))
result.group.stats?.forEach { stat -> result.group.stats?.forEach { stat ->
rows.add(StatRepresentable(stat, result.computedStat(stat), result.group.name)) rows.add(StatRepresentable(stat, result.computedStat(stat), result.group.name))
@ -202,7 +202,7 @@ class StatsFragment : SessionObserverFragment(), StaticRowRepresentableDataSourc
if (row is StatRepresentable) { if (row is StatRepresentable) {
// filter groups // filter groups
val groupResults = this.computedResults?.filter { val groupResults = this.report?.results?.filter {
it.group.name == row.groupName it.group.name == row.groupName
} }
@ -217,7 +217,7 @@ class StatsFragment : SessionObserverFragment(), StaticRowRepresentableDataSourc
GlobalScope.launch(coroutineContext) { GlobalScope.launch(coroutineContext) {
var results = listOf<ComputedResults>() var report = Report()
val test = GlobalScope.async { val test = GlobalScope.async {
val s = Date() val s = Date()
Timber.d(">>> start...") Timber.d(">>> start...")
@ -225,18 +225,18 @@ class StatsFragment : SessionObserverFragment(), StaticRowRepresentableDataSourc
val realm = Realm.getDefaultInstance() val realm = Realm.getDefaultInstance()
val options = Calculator.Options() val options = Calculator.Options()
options.evolutionValues = Calculator.Options.EvolutionValues.STANDARD options.evolutionValues = Calculator.Options.EvolutionValues.STANDARD
results = Calculator.computeGroups(realm, listOf(computableGroup), options) report = Calculator.computeGroups(realm, listOf(computableGroup), options)
realm.close() realm.close()
val e = Date() val e = Date()
val duration = (e.time - s.time) / 1000.0 val duration = (e.time - s.time) / 1000.0
Timber.d(">>> ended in ${duration} seconds") Timber.d(">>> ended in $duration seconds")
} }
test.await() test.await()
if (!isDetached) { if (!isDetached) {
results.firstOrNull()?.defaultStatEntries(stat)?.let { entries -> report.results.firstOrNull()?.defaultStatEntries(stat)?.let { entries ->
GraphActivity.newInstance(requireContext(), stat, entries) GraphActivity.newInstance(requireContext(), stat, entries)
} }
} }

Loading…
Cancel
Save