Fixing import issues

csv
Laurent 7 years ago
parent 9af997c6a0
commit 136d1a55a7
  1. 14
      app/src/main/AndroidManifest.xml
  2. 13
      app/src/main/java/net/pokeranalytics/android/model/interfaces/Manageable.kt
  3. 7
      app/src/main/java/net/pokeranalytics/android/model/interfaces/Timed.kt
  4. 5
      app/src/main/java/net/pokeranalytics/android/model/realm/Bankroll.kt
  5. 4
      app/src/main/java/net/pokeranalytics/android/model/realm/CustomField.kt
  6. 4
      app/src/main/java/net/pokeranalytics/android/model/realm/CustomFieldEntry.kt
  7. 9
      app/src/main/java/net/pokeranalytics/android/model/realm/Filter.kt
  8. 5
      app/src/main/java/net/pokeranalytics/android/model/realm/Game.kt
  9. 5
      app/src/main/java/net/pokeranalytics/android/model/realm/Location.kt
  10. 4
      app/src/main/java/net/pokeranalytics/android/model/realm/ReportSetup.kt
  11. 11
      app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt
  12. 11
      app/src/main/java/net/pokeranalytics/android/model/realm/SessionSet.kt
  13. 5
      app/src/main/java/net/pokeranalytics/android/model/realm/TournamentFeature.kt
  14. 5
      app/src/main/java/net/pokeranalytics/android/model/realm/TournamentName.kt
  15. 5
      app/src/main/java/net/pokeranalytics/android/model/realm/Transaction.kt
  16. 5
      app/src/main/java/net/pokeranalytics/android/model/realm/TransactionType.kt
  17. 26
      app/src/main/java/net/pokeranalytics/android/ui/activity/HomeActivity.kt
  18. 71
      app/src/main/java/net/pokeranalytics/android/ui/activity/ImportActivity.kt
  19. 14
      app/src/main/java/net/pokeranalytics/android/ui/fragment/GraphFragment.kt
  20. 6
      app/src/main/java/net/pokeranalytics/android/ui/graph/GraphUnderlyingEntry.kt
  21. 5
      app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/CustomizableRowRepresentable.kt
  22. 29
      app/src/main/java/net/pokeranalytics/android/util/csv/CSVDescriptor.kt
  23. 22
      app/src/main/java/net/pokeranalytics/android/util/csv/CSVImporter.kt
  24. 6
      app/src/main/java/net/pokeranalytics/android/util/csv/SessionCSVDescriptor.kt

@ -32,6 +32,13 @@
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="net.pokeranalytics.android.ui.activity.ImportActivity"
android:screenOrientation="portrait"
android:launchMode="singleTop">
<intent-filter tools:ignore="AppLinkUrlError">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
@ -45,13 +52,6 @@
</activity>
<activity
android:name="net.pokeranalytics.android.ui.activity.ImportActivity"
android:screenOrientation="portrait"
android:launchMode="singleTop">
</activity>
<activity
android:name="net.pokeranalytics.android.ui.activity.SessionActivity"
android:launchMode="singleTop"

@ -45,8 +45,7 @@ interface NameManageable : Manageable {
}
}
class Identificator(var id: String, var clazz: Class<out Identifiable>)
class ObjectIdentifier(var id: String, var clazz: Class<out Identifiable>)
/**
* An interface associate a unique uniqueIdentifier to an object
@ -58,11 +57,15 @@ interface Identifiable : RealmModel {
*/
var id: String
val identificator: Identificator
/**
* required because "this.class" returns the proxy class, making where<class> queries crash
*/
val realmObjectClass: Class<out Identifiable>
val objectIdentifier: ObjectIdentifier
get() {
return Identificator(this.id, this::class.java)
return ObjectIdentifier(this.id, this.realmObjectClass)
}
}
/**

@ -1,14 +1,9 @@
package net.pokeranalytics.android.model.interfaces
import net.pokeranalytics.android.ui.graph.GraphUnderlyingEntry
import net.pokeranalytics.android.ui.graph.ObjectIdentifier
import java.util.*
interface GraphIdentifiableEntry : GraphUnderlyingEntry, Identifiable {
val objectIdentifier : ObjectIdentifier
}
interface GraphIdentifiableEntry : GraphUnderlyingEntry, Identifiable
interface Timed : GraphIdentifiableEntry {

@ -4,11 +4,13 @@ import android.content.Context
import io.realm.Realm
import io.realm.RealmObject
import io.realm.RealmResults
import io.realm.annotations.Ignore
import io.realm.annotations.LinkingObjects
import io.realm.annotations.PrimaryKey
import io.realm.kotlin.where
import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.interfaces.DeleteValidityStatus
import net.pokeranalytics.android.model.interfaces.Identifiable
import net.pokeranalytics.android.model.interfaces.NameManageable
import net.pokeranalytics.android.model.interfaces.SaveValidityStatus
import net.pokeranalytics.android.ui.view.RowRepresentable
@ -127,4 +129,7 @@ open class Bankroll : RealmObject(), NameManageable, RowRepresentable {
return UserDefaults.currency
}
@Ignore
override val realmObjectClass: Class<out Identifiable> = Bankroll::class.java
}

@ -11,6 +11,7 @@ import io.realm.kotlin.where
import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.Criteria
import net.pokeranalytics.android.model.interfaces.DeleteValidityStatus
import net.pokeranalytics.android.model.interfaces.Identifiable
import net.pokeranalytics.android.model.interfaces.NameManageable
import net.pokeranalytics.android.model.interfaces.SaveValidityStatus
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
@ -28,6 +29,9 @@ import kotlin.collections.ArrayList
open class CustomField : RealmObject(), NameManageable, StaticRowRepresentableDataSource, RowRepresentable {
@Ignore
override val realmObjectClass: Class<out Identifiable> = CustomField::class.java
/**
* The custom field type: a list of items, a number or an amont
*/

@ -12,6 +12,7 @@ import io.realm.kotlin.where
import net.pokeranalytics.android.R
import net.pokeranalytics.android.exceptions.ModelException
import net.pokeranalytics.android.model.interfaces.DeleteValidityStatus
import net.pokeranalytics.android.model.interfaces.Identifiable
import net.pokeranalytics.android.model.interfaces.NameManageable
import net.pokeranalytics.android.model.interfaces.SaveValidityStatus
import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetType
@ -27,6 +28,9 @@ import java.util.Currency
open class CustomFieldEntry : RealmObject(), NameManageable, RowRepresentable {
@Ignore
override val realmObjectClass: Class<out Identifiable> = CustomFieldEntry::class.java
@PrimaryKey
override var id = UUID.randomUUID().toString()

@ -5,16 +5,14 @@ import io.realm.Realm
import io.realm.RealmList
import io.realm.RealmObject
import io.realm.RealmResults
import io.realm.annotations.Ignore
import io.realm.annotations.PrimaryKey
import io.realm.kotlin.where
import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.filter.Filterable
import net.pokeranalytics.android.model.filter.Query
import net.pokeranalytics.android.model.filter.QueryCondition
import net.pokeranalytics.android.model.interfaces.CountableUsage
import net.pokeranalytics.android.model.interfaces.Deletable
import net.pokeranalytics.android.model.interfaces.DeleteValidityStatus
import net.pokeranalytics.android.model.interfaces.Editable
import net.pokeranalytics.android.model.interfaces.*
import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetType
import net.pokeranalytics.android.ui.interfaces.FilterableType
import net.pokeranalytics.android.ui.view.ImageDecorator
@ -32,6 +30,9 @@ import java.util.*
*/
open class Filter : RealmObject(), RowRepresentable, Editable, Deletable, CountableUsage, ImageDecorator {
@Ignore
override val realmObjectClass: Class<out Identifiable> = Filter::class.java
companion object {
// Create a new instance

@ -3,10 +3,12 @@ package net.pokeranalytics.android.model.realm
import android.content.Context
import io.realm.Realm
import io.realm.RealmObject
import io.realm.annotations.Ignore
import io.realm.annotations.PrimaryKey
import io.realm.kotlin.where
import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.interfaces.CountableUsage
import net.pokeranalytics.android.model.interfaces.Identifiable
import net.pokeranalytics.android.model.interfaces.NameManageable
import net.pokeranalytics.android.model.interfaces.SaveValidityStatus
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
@ -20,6 +22,9 @@ import kotlin.collections.ArrayList
open class Game : RealmObject(), NameManageable, StaticRowRepresentableDataSource, RowRepresentable, CountableUsage {
@Ignore
override val realmObjectClass: Class<out Identifiable> = Game::class.java
companion object {
val rowRepresentation : List<RowRepresentable> by lazy {
val rows = ArrayList<RowRepresentable>()

@ -4,9 +4,11 @@ import android.content.Context
import com.google.android.libraries.places.api.model.Place
import io.realm.Realm
import io.realm.RealmObject
import io.realm.annotations.Ignore
import io.realm.annotations.PrimaryKey
import io.realm.kotlin.where
import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.interfaces.Identifiable
import net.pokeranalytics.android.model.interfaces.NameManageable
import net.pokeranalytics.android.model.interfaces.SaveValidityStatus
import net.pokeranalytics.android.ui.view.RowRepresentable
@ -16,6 +18,9 @@ import java.util.*
open class Location : RealmObject(), NameManageable, RowRepresentable {
@Ignore
override val realmObjectClass: Class<out Identifiable> = Location::class.java
@PrimaryKey
override var id = UUID.randomUUID().toString()

@ -11,6 +11,7 @@ import net.pokeranalytics.android.calculus.Stat
import net.pokeranalytics.android.model.Criteria
import net.pokeranalytics.android.model.interfaces.Deletable
import net.pokeranalytics.android.model.interfaces.DeleteValidityStatus
import net.pokeranalytics.android.model.interfaces.Identifiable
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowViewType
import net.pokeranalytics.android.util.extensions.findById
@ -19,6 +20,9 @@ import java.util.*
open class ReportSetup : RealmObject(), RowRepresentable, Deletable {
@Ignore
override val realmObjectClass: Class<out Identifiable> = ReportSetup::class.java
@PrimaryKey
override var id = UUID.randomUUID().toString()

@ -16,6 +16,7 @@ import net.pokeranalytics.android.calculus.ComputedStat
import net.pokeranalytics.android.calculus.Stat
import net.pokeranalytics.android.calculus.StatFormattingException
import net.pokeranalytics.android.exceptions.ModelException
import net.pokeranalytics.android.exceptions.PAIllegalStateException
import net.pokeranalytics.android.model.Limit
import net.pokeranalytics.android.model.TableSize
import net.pokeranalytics.android.model.TournamentType
@ -29,7 +30,6 @@ import net.pokeranalytics.android.model.utils.SessionSetManager
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
import net.pokeranalytics.android.ui.adapter.UnmanagedRowRepresentableException
import net.pokeranalytics.android.ui.fragment.GraphFragment
import net.pokeranalytics.android.ui.graph.ObjectIdentifier
import net.pokeranalytics.android.ui.view.*
import net.pokeranalytics.android.ui.view.rowrepresentable.CustomizableRowRepresentable
import net.pokeranalytics.android.ui.view.rowrepresentable.SeparatorRow
@ -422,7 +422,7 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat
this.computableResults?.forEachIndexed { index, computableResult ->
computableResult.updateWith(this)
if (index > 0) {
throw IllegalStateException("Session cannot have more than one computable result")
throw PAIllegalStateException("Session cannot have more than one computable result")
}
}
this.sessionSet?.computeStats()
@ -1149,10 +1149,7 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat
}
// Timed
override val objectIdentifier: ObjectIdentifier
get() = ObjectIdentifier(this.id, Session::class.java)
@Ignore
override val realmObjectClass: Class<out Identifiable> = Session::class.java
}

@ -4,16 +4,17 @@ import android.content.Context
import io.realm.Realm
import io.realm.RealmObject
import io.realm.RealmResults
import io.realm.annotations.Ignore
import io.realm.annotations.LinkingObjects
import io.realm.annotations.PrimaryKey
import net.pokeranalytics.android.calculus.Stat
import net.pokeranalytics.android.calculus.StatFormattingException
import net.pokeranalytics.android.util.TextFormat
import net.pokeranalytics.android.model.filter.Filterable
import net.pokeranalytics.android.model.filter.QueryCondition
import net.pokeranalytics.android.model.interfaces.Identifiable
import net.pokeranalytics.android.model.interfaces.Timed
import net.pokeranalytics.android.ui.graph.ObjectIdentifier
import net.pokeranalytics.android.util.NULL_TEXT
import net.pokeranalytics.android.util.TextFormat
import java.text.DateFormat
import java.util.*
@ -138,10 +139,8 @@ open class SessionSet() : RealmObject(), Timed, Filterable {
}
}
// Timed
override val objectIdentifier: ObjectIdentifier
get() = ObjectIdentifier(this.id, SessionSet::class.java)
@Ignore
override val realmObjectClass: Class<out Identifiable> = SessionSet::class.java
}

@ -3,10 +3,12 @@ package net.pokeranalytics.android.model.realm
import android.content.Context
import io.realm.Realm
import io.realm.RealmObject
import io.realm.annotations.Ignore
import io.realm.annotations.PrimaryKey
import io.realm.kotlin.where
import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.interfaces.CountableUsage
import net.pokeranalytics.android.model.interfaces.Identifiable
import net.pokeranalytics.android.model.interfaces.NameManageable
import net.pokeranalytics.android.model.interfaces.SaveValidityStatus
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
@ -30,6 +32,9 @@ open class TournamentFeature : RealmObject(), NameManageable, StaticRowRepresent
}
}
@Ignore
override val realmObjectClass: Class<out Identifiable> = TournamentFeature::class.java
@PrimaryKey
override var id = UUID.randomUUID().toString()

@ -3,9 +3,11 @@ package net.pokeranalytics.android.model.realm
import android.content.Context
import io.realm.Realm
import io.realm.RealmObject
import io.realm.annotations.Ignore
import io.realm.annotations.PrimaryKey
import io.realm.kotlin.where
import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.interfaces.Identifiable
import net.pokeranalytics.android.model.interfaces.NameManageable
import net.pokeranalytics.android.model.interfaces.SaveValidityStatus
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
@ -28,6 +30,9 @@ open class TournamentName : RealmObject(), NameManageable, StaticRowRepresentabl
}
}
@Ignore
override val realmObjectClass: Class<out Identifiable> = TournamentName::class.java
@PrimaryKey
override var id = UUID.randomUUID().toString()

@ -13,7 +13,6 @@ import net.pokeranalytics.android.model.filter.QueryCondition
import net.pokeranalytics.android.model.interfaces.*
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
import net.pokeranalytics.android.ui.fragment.GraphFragment
import net.pokeranalytics.android.ui.graph.ObjectIdentifier
import net.pokeranalytics.android.ui.view.DefaultLegendValues
import net.pokeranalytics.android.ui.view.LegendContent
import net.pokeranalytics.android.ui.view.RowRepresentable
@ -136,8 +135,8 @@ open class Transaction : RealmObject(), Manageable, StaticRowRepresentableDataSo
// GraphIdentifiableEntry
override val objectIdentifier: ObjectIdentifier
get() = ObjectIdentifier(this.id, Transaction::class.java)
@Ignore
override val realmObjectClass: Class<out Identifiable> = Transaction::class.java
override fun entryTitle(context: Context): String {
return DateFormat.getDateInstance(DateFormat.SHORT).format(this.date)

@ -3,9 +3,11 @@ package net.pokeranalytics.android.model.realm
import android.content.Context
import io.realm.Realm
import io.realm.RealmObject
import io.realm.annotations.Ignore
import io.realm.annotations.PrimaryKey
import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.interfaces.DeleteValidityStatus
import net.pokeranalytics.android.model.interfaces.Identifiable
import net.pokeranalytics.android.model.interfaces.NameManageable
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
import net.pokeranalytics.android.ui.view.Localizable
@ -52,6 +54,9 @@ open class TransactionType : RealmObject(), NameManageable, StaticRowRepresentab
}
@Ignore
override val realmObjectClass: Class<out Identifiable> = TransactionType::class.java
@PrimaryKey
override var id = UUID.randomUUID().toString()

@ -11,6 +11,7 @@ import io.realm.RealmResults
import kotlinx.android.synthetic.main.activity_home.*
import net.pokeranalytics.android.BuildConfig
import net.pokeranalytics.android.R
import net.pokeranalytics.android.exceptions.PAIllegalStateException
import net.pokeranalytics.android.model.realm.Currency
import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
import net.pokeranalytics.android.ui.activity.components.RequestCode
@ -83,6 +84,7 @@ class HomeActivity : PokerAnalyticsActivity() {
override fun onNewIntent(intent: Intent?) {
super.onNewIntent(intent)
setIntent(intent)
intent?.let {
when (intent.action) {
@ -91,11 +93,11 @@ class HomeActivity : PokerAnalyticsActivity() {
if (data != null) {
this.requestImportConfirmation(data)
} else {
throw IllegalStateException("URI null on import")
throw PAIllegalStateException("URI null on import")
}
}
else -> {
Timber.d("Intent ${intent.action} unmanaged")
Timber.w("Intent ${intent.action} unmanaged")
}
}
}
@ -114,6 +116,16 @@ class HomeActivity : PokerAnalyticsActivity() {
}
}
// Import
private fun requestImportConfirmation(uri: Uri) {
showAlertDialog(context = this, title = R.string.import_confirmation, showCancelButton = true, positiveAction = {
ImportActivity.newInstanceForResult(this, uri)
})
}
private fun observeRealmObjects() {
val realm = getRealm()
@ -164,14 +176,4 @@ class HomeActivity : PokerAnalyticsActivity() {
viewPager.setCurrentItem(index, false)
}
// Import
private fun requestImportConfirmation(uri: Uri) {
showAlertDialog(context = this, title = R.string.import_confirmation, showCancelButton = true, positiveAction = {
ImportActivity.newInstanceForResult(this, uri)
})
}
}

@ -9,6 +9,8 @@ import io.realm.Realm
import net.pokeranalytics.android.R
import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
import net.pokeranalytics.android.ui.activity.components.RequestCode
import net.pokeranalytics.android.ui.activity.components.ResultCode
import net.pokeranalytics.android.ui.extensions.showAlertDialog
import net.pokeranalytics.android.ui.fragment.ImportFragment
import timber.log.Timber
@ -39,11 +41,15 @@ class ImportActivity : PokerAnalyticsActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
this.fileURI = intent.getParcelableExtra(ImportActivity.IntentKey.URI.keyName)
Timber.d("//////// data = ${intent?.data}")
setContentView(R.layout.activity_import)
initUI()
intent?.data?.let {
this.fileURI = it
}
setContentView(R.layout.activity_import)
// initUI()
requestImportConfirmation()
}
override fun onStop() {
@ -51,7 +57,7 @@ class ImportActivity : PokerAnalyticsActivity() {
// Updates the main thread instance with newly inserted data
val realm = Realm.getDefaultInstance()
realm.refresh()
// realm.refresh()
realm.close()
}
@ -71,16 +77,57 @@ class ImportActivity : PokerAnalyticsActivity() {
}
// private fun requestPermission() {
// if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_DENIED) {
// ActivityCompat.requestPermissions(
// this, arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE), PERMISSION_REQUEST_ACCESS_FINE_LOCATION
// )
// override fun onNewIntent(intent: Intent?) {
// super.onNewIntent(intent)
//
// Timber.d("++++++ data = ${intent?.data}")
//
// setIntent(intent)
// intent?.let {
//
// when (intent.action) {
// "android.intent.action.VIEW" -> { // import
// val data = it.data
// if (data != null) {
// this.requestImportConfirmation(data)
// } else {
// throw PAIllegalStateException("URI null on import")
// }
// }
// else -> {
// Timber.w("Intent ${intent.action} unmanaged")
// }
// }
// }
// }
//
// override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
// super.onRequestPermissionsResult(requestCode, permissions, grantResults)
// }
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
when (requestCode) {
RequestCode.IMPORT.value -> {
if (resultCode == ResultCode.IMPORT_UNRECOGNIZED_FORMAT.value) {
showAlertDialog(context = this, message = R.string.unknown_import_format_popup_message, positiveAction = {
finish()
})
}
}
}
}
// Import
private fun requestImportConfirmation() {
showAlertDialog(context = this, title = R.string.import_confirmation, showCancelButton = true, positiveAction = {
initUI()
// newInstanceForResult(this, uri)
}, negativeAction = {
finish()
})
}
}

@ -14,13 +14,14 @@ import com.github.mikephil.charting.listener.OnChartValueSelectedListener
import kotlinx.android.synthetic.main.fragment_graph.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.calculus.Stat
import net.pokeranalytics.android.model.interfaces.ObjectIdentifier
import net.pokeranalytics.android.ui.fragment.components.RealmFragment
import net.pokeranalytics.android.ui.graph.AxisFormatting
import net.pokeranalytics.android.ui.graph.GraphUnderlyingEntry
import net.pokeranalytics.android.ui.graph.ObjectIdentifier
import net.pokeranalytics.android.ui.graph.setStyle
import net.pokeranalytics.android.ui.view.LegendView
import net.pokeranalytics.android.ui.view.MultiLineLegendView
import timber.log.Timber
class GraphFragment : RealmFragment(), OnChartValueSelectedListener {
@ -183,16 +184,21 @@ class GraphFragment : RealmFragment(), OnChartValueSelectedListener {
val identifier = entry.data as ObjectIdentifier
getRealm().where(identifier.clazz).equalTo("id", identifier.id).findAll().firstOrNull()
}
is GraphUnderlyingEntry -> entry.data as GraphUnderlyingEntry?
is GraphUnderlyingEntry -> entry.data
else -> null
}
statEntry?.let {
if (statEntry is GraphUnderlyingEntry) {
val groupName = dataSet?.label ?: ""
val color = dataSet?.color
val legendValue = it.legendValues(stat, entry, this.style, groupName, requireContext())
val legendValue = statEntry.legendValues(stat, entry, this.style, groupName, requireContext())
this.legendView.setItemData(legendValue, color)
} else {
Timber.w("Data $statEntry should implement GraphUnderlyingEntry")
}
}
}

@ -3,16 +3,12 @@ package net.pokeranalytics.android.ui.graph
import android.content.Context
import com.github.mikephil.charting.data.Entry
import net.pokeranalytics.android.calculus.Stat
import net.pokeranalytics.android.model.interfaces.GraphIdentifiableEntry
import net.pokeranalytics.android.model.interfaces.Identifiable
import net.pokeranalytics.android.ui.fragment.GraphFragment
import net.pokeranalytics.android.ui.view.DefaultLegendValues
import net.pokeranalytics.android.ui.view.LegendContent
import net.pokeranalytics.android.util.TextFormat
class ObjectIdentifier(var id: String, var clazz: Class<out GraphIdentifiableEntry>) {
}
interface GraphUnderlyingEntry {
fun entryTitle(context: Context): String

@ -2,7 +2,6 @@ package net.pokeranalytics.android.ui.view.rowrepresentable
import android.content.Context
import net.pokeranalytics.android.calculus.ComputedStat
import net.pokeranalytics.android.model.interfaces.Identifiable
import net.pokeranalytics.android.ui.fragment.BankrollRowRepresentable
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowViewType
@ -27,7 +26,7 @@ class CustomizableRowRepresentable(
var value: String? = null,
var computedStat: ComputedStat? = null,
var isSelectable: Boolean? = false
) : RowRepresentable, Identifiable {
) : RowRepresentable {
override fun localizedTitle(context: Context): String {
@ -42,5 +41,5 @@ class CustomizableRowRepresentable(
override val viewType: Int = customViewType?.ordinal ?: RowViewType.HEADER_TITLE.ordinal
override var id: String = ""
// override var id: String = ""
}

@ -3,7 +3,8 @@ package net.pokeranalytics.android.util.csv
import io.realm.Realm
import io.realm.kotlin.deleteFromRealm
import net.pokeranalytics.android.model.interfaces.Identifiable
import net.pokeranalytics.android.model.interfaces.Identificator
import net.pokeranalytics.android.model.interfaces.ObjectIdentifier
import net.pokeranalytics.android.model.realm.Session
import net.pokeranalytics.android.util.extensions.findById
import org.apache.commons.csv.CSVRecord
import timber.log.Timber
@ -25,7 +26,7 @@ abstract class DataCSVDescriptor<T : Identifiable>(source: DataSource, vararg el
/**
* List of Realm object identificators
*/
val realmModelIds = mutableListOf<Identificator>()
val realmModelIds = mutableListOf<ObjectIdentifier>()
abstract fun parseData(realm: Realm, record: CSVRecord): T?
@ -33,19 +34,33 @@ abstract class DataCSVDescriptor<T : Identifiable>(source: DataSource, vararg el
val data = this.parseData(realm, record)
data?.let {
this.realmModelIds.add(it.identificator)
Timber.d(">>>>>>> identifier added: ${it.id}")
this.realmModelIds.add(it.objectIdentifier)
}
return if (data != null) 1 else 0
}
override fun cancel(realm: Realm) {
Timber.d(">>>>>>> Start delete of ${realmModelIds.size}")
realm.executeTransaction {
this.realmModelIds.forEach { identificator ->
realm.findById(identificator.clazz, identificator.id)?.deleteFromRealm()
this.realmModelIds.forEach { identifier ->
val data = realm.findById(identifier.clazz, identifier.id)
if (data is Session) {
data.cleanup()
}
data?.deleteFromRealm()
}
this.realmModelIds.clear()
}
}
override fun save(realm: Realm) {
super.save(realm)
this.realmModelIds.clear()
}
}
/**
@ -84,6 +99,10 @@ abstract class CSVDescriptor(var source: DataSource, vararg elements: CSVField)
*/
abstract fun parse(realm: Realm, record: CSVRecord): Int
open fun save(realm: Realm) {
}
open fun cancel(realm: Realm) {
}

@ -186,21 +186,19 @@ open class CSVImporter(istream: InputStream) {
return null
}
// fun save(realm: Realm) {
//
// this.usedDescriptors.forEach { descriptor ->
//
// if (descriptor is DataCSVDescriptor<*>) {
// realm.executeTransaction {
// realm.copyToRealm(descriptor.realmModels)
// }
// }
// }
// }
fun save(realm: Realm) {
this.parser.close()
// realm.refresh()
this.currentDescriptor?.save(realm)
this.usedDescriptors.forEach { descriptor ->
descriptor.save(realm)
}
}
fun cancel(realm: Realm) {
this.parser.close()
realm.refresh()
// realm.refresh()
this.currentDescriptor?.cancel(realm)
this.usedDescriptors.forEach { descriptor ->

@ -115,8 +115,6 @@ class SessionCSVDescriptor(source: DataSource, private var isTournament: Boolean
val session = Session.newInstance(realm, this.isTournament)
var isLive = true
var bankrollName: String? = null
var currencyCode: String? = null
@ -209,7 +207,8 @@ class SessionCSVDescriptor(source: DataSource, private var isTournament: Boolean
}
if (startDate != null && endDate != null && net != null) { // valid session
if (DataUtils.sessionCount(realm, startDate, endDate, net) == 1) { // session already in realm, we'd love not put it in Realm before doing the check
// session already in realm, we'd love not put it in Realm before doing the check
if (DataUtils.sessionCount(realm, startDate, endDate, net) == 1) {
return session
} else {
Timber.d("Session already exists")
@ -218,6 +217,7 @@ class SessionCSVDescriptor(source: DataSource, private var isTournament: Boolean
Timber.d("Can't import session: sd=$startDate, ed=$endDate, net=$net")
}
session.cleanup()
session.deleteFromRealm()
return null
}

Loading…
Cancel
Save