1
+ package org.jetbrains.research.ml.codetracker.tracking
2
+
3
+ import com.intellij.openapi.diagnostic.Logger
4
+ import kotlinx.serialization.json.Json
5
+ import kotlinx.serialization.json.JsonConfiguration
6
+ import org.jetbrains.research.ml.codetracker.Plugin.codeTrackerFolderPath
7
+ import org.jetbrains.research.ml.codetracker.models.Keyed
8
+ import org.jetbrains.research.ml.codetracker.models.StoredInfo
9
+ import java.io.File
10
+ import java.io.PrintWriter
11
+
12
+
13
+ object StoredInfoHandler{
14
+
15
+ val logger: Logger = Logger .getInstance(javaClass)
16
+
17
+ fun getIntStoredField (field : UiLoggedDataHeader , defaultValue : Int ): Int {
18
+ return run {
19
+ val storedField = StoredInfoWrapper .info.loggedUIData[field.header]?.toIntOrNull()
20
+ logger.info(" Stored field $storedField for the ${field.header} value has been received successfully" )
21
+ storedField
22
+ } ? : run {
23
+ logger.info(" Default value $defaultValue for the ${field.header} value has been received successfully" )
24
+ defaultValue
25
+ }
26
+ }
27
+
28
+ fun <T : Keyed > getIndexByStoredKey (field : UiLoggedDataHeader , list : List <T >, defaultValue : Int ): Int {
29
+ StoredInfoWrapper .info.loggedUIData[field.header]?.let { storedKey ->
30
+ val storedKeyIndex = list.indexOfFirst { it.key == storedKey }
31
+ logger.info(" Stored index $storedKeyIndex for the ${field.header} value has been received successfully" )
32
+ return storedKeyIndex
33
+ }
34
+ logger.info(" Default value $defaultValue for the ${field.header} value has been received successfully" )
35
+ return defaultValue
36
+ }
37
+ }
38
+
39
+ /*
40
+ This class provides storing survey info and activity tracker key
41
+ */
42
+ object StoredInfoWrapper {
43
+
44
+ private const val storedInfoFileName = " storedInfo.txt"
45
+ private val storedInfoFilePath = " ${codeTrackerFolderPath} /$storedInfoFileName "
46
+ private val json by lazy {
47
+ Json (JsonConfiguration .Stable )
48
+ }
49
+ private val serializer = StoredInfo .serializer()
50
+
51
+ var info: StoredInfo = readStoredInfo()
52
+
53
+ private fun readStoredInfo (): StoredInfo {
54
+ val file = File (storedInfoFilePath)
55
+ if (! file.exists()) {
56
+ return StoredInfo ()
57
+ }
58
+ return json.parse(serializer, file.readText())
59
+ }
60
+
61
+ fun updateStoredInfo (surveyInfo : Map <String , String >? = null,
62
+ activityTrackerKey : String? = null) {
63
+ surveyInfo?.let { info.loggedUIData = it }
64
+ activityTrackerKey?.let { info.activityTrackerKey = it }
65
+ writeStoredInfo()
66
+ }
67
+
68
+ private fun writeStoredInfo () {
69
+ val file = File (storedInfoFilePath)
70
+ val writer = PrintWriter (file)
71
+ writer.print (json.stringify(serializer, info))
72
+ writer.close()
73
+ }
74
+ }
0 commit comments