You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by jo...@apache.org on 2021/10/20 16:09:36 UTC
[isis] 04/05: ISIS-2348 Replay User Events (3/3):
EventState.USER_ACTION added, kvision upgrade to 5.4.0,
coroutines used for replay delay
This is an automated email from the ASF dual-hosted git repository.
joergrade pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git
commit bd837ed31bcac04b9d4534f7d062dea987c0cf17
Author: Jörg Rade <jo...@kuehne-nagel.com>
AuthorDate: Wed Oct 20 18:08:48 2021 +0200
ISIS-2348 Replay User Events (3/3): EventState.USER_ACTION added, kvision upgrade to 5.4.0, coroutines used for replay delay
---
incubator/clients/kroviz/gradle.properties | 8 ++-
.../kroviz/core/aggregator/AggregatorWithLayout.kt | 2 +-
.../kroviz/core/aggregator/SystemAggregator.kt | 2 +-
.../isis/client/kroviz/core/event/EventStore.kt | 11 +++-
.../isis/client/kroviz/core/event/LogEntry.kt | 7 +--
.../isis/client/kroviz/core/event/ReplayCommand.kt | 59 +++++++++++++---------
.../apache/isis/client/kroviz/ui/core/RoMenuBar.kt | 3 --
.../apache/isis/client/kroviz/utils/IconManager.kt | 2 +-
8 files changed, 56 insertions(+), 38 deletions(-)
diff --git a/incubator/clients/kroviz/gradle.properties b/incubator/clients/kroviz/gradle.properties
index 5df73f1..716e43f 100644
--- a/incubator/clients/kroviz/gradle.properties
+++ b/incubator/clients/kroviz/gradle.properties
@@ -19,7 +19,11 @@
javaVersion=1.8
#Plugins
systemProp.kotlinVersion=1.5.31
-serializationVersion=1.2.2
+serializationVersion=1.3.0
#Dependencies
-systemProp.kvisionVersion=5.2.0
+systemProp.kvisionVersion=5.4.0
+coroutinesVersion=1.5.2
+
+kotlin.mpp.stability.nowarn=true
kotlin.js.compiler=legacy
+org.gradle.jvmargs=-Xmx2g
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/AggregatorWithLayout.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/AggregatorWithLayout.kt
index 434fa1b..31a362f 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/AggregatorWithLayout.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/AggregatorWithLayout.kt
@@ -19,7 +19,7 @@ abstract class AggregatorWithLayout : BaseAggregator() {
}
protected fun handleLayout(layout: Layout, dm: DisplayModelWithLayout, referrer: String) {
- console.log("[CA.handleLayout] ISIS-2846")
+ console.log("[CA.handleLayout] TODO ISIS-2846")
console.log(layout)
if (dm.layout == null) {
dm.addLayout(layout)
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/SystemAggregator.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/SystemAggregator.kt
index d6dc960..3314056 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/SystemAggregator.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/SystemAggregator.kt
@@ -49,7 +49,7 @@ class SystemAggregator() : BaseAggregator() {
else -> log(logEntry)
}
} else {
- console.log("[SA.update] no blob/image")
+ console.log("[SA.update] TODO ISIS-2768 no blob/image due to CORS")
}
}
}
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/EventStore.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/EventStore.kt
index e9b9f3e..75f6bec 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/EventStore.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/EventStore.kt
@@ -48,11 +48,11 @@ object EventStore {
}
}
- fun start(reSpec: ResourceSpecification,
+ fun start(rs: ResourceSpecification,
method: String,
body: String = "",
aggregator: BaseAggregator? = null): LogEntry {
- val entry = LogEntry(reSpec, method, request = body)
+ val entry = LogEntry(rs = rs, method = method, request = body)
if (aggregator != null) {
entry.addAggregator(aggregator)
}
@@ -83,6 +83,13 @@ object EventStore {
}
}
+ fun addUserAction(aggregator: BaseAggregator, obj: TObject) {
+ val entry = LogEntry(title = obj.title, aggregator = aggregator)
+ entry.obj = obj
+ entry.state = EventState.USER_ACTION
+ log(entry)
+ }
+
fun end(reSpec: ResourceSpecification, response: String): LogEntry? {
val entry: LogEntry? = findBy(reSpec)
if (entry != null) {
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/LogEntry.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/LogEntry.kt
index d922f87..e589375 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/LogEntry.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/LogEntry.kt
@@ -42,6 +42,7 @@ enum class EventState(val id: String, val iconName: String, val style: ButtonSty
SUCCESS_XML("SUCCESS_XML", "fas fa-code", ButtonStyle.SUCCESS),
SUCCESS_IMG("SUCCESS_IMG", "fas fa-image", ButtonStyle.SUCCESS),
VIEW("VIEW", "fas fa-eye", ButtonStyle.INFO),
+ USER_ACTION("ACTION", "fas fa-user-times", ButtonStyle.INFO),
DUPLICATE("DUPLICATE", "fas fa-copy", ButtonStyle.OUTLINESUCCESS),
CLOSED("CLOSED", "fas fa-eye-slash", ButtonStyle.OUTLINEINFO),
RELOAD("RELOAD", "fas fa-retweet", ButtonStyle.OUTLINEWARNING),
@@ -74,7 +75,7 @@ data class LogEntry(
state = EventState.RUNNING
title = url
requestLength = request?.length
- ?: 0 // ?. is required, otherwise Tabulator.js/EventLogTable shows no entries
+ ?: 0 // ?. is required, otherwise Tabulator.js/EventLogTable shows no entries
}
@Contextual
@@ -234,8 +235,8 @@ data class LogEntry(
fun addAggregator(aggregator: BaseAggregator) {
aggregators.add(aggregator)
if ((aggregators.size > 1) && ((aggregator is ObjectAggregator) || (aggregator is CollectionAggregator))) {
- console.log("[LE.addAggregator] last one just added")
-// console.log(aggregators)
+ console.log("[LE.addAggregator] 2nd/3rd/etc. Object/Collection")
+ console.log(aggregator)
// throw Throwable("[LE.addAggregator] not implemented yet")
}
nOfAggregators = aggregators.size
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/ReplayCommand.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/ReplayCommand.kt
index 4d09ac8..c598162 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/ReplayCommand.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/ReplayCommand.kt
@@ -18,11 +18,18 @@
*/
package org.apache.isis.client.kroviz.core.event
-import org.apache.isis.client.kroviz.core.aggregator.AggregatorWithLayout
+import kotlinx.browser.window
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.asCoroutineDispatcher
+import kotlinx.coroutines.delay
+import kotlinx.coroutines.launch
import org.apache.isis.client.kroviz.main
import org.apache.isis.client.kroviz.to.Link
-import org.apache.isis.client.kroviz.to.Relation
import org.apache.isis.client.kroviz.to.Represention
+import org.apache.isis.client.kroviz.to.TObject
+import kotlin.js.Date
+
+val AppScope = CoroutineScope(window.asCoroutineDispatcher())
class ReplayCommand {
@@ -36,53 +43,55 @@ class ReplayCommand {
}
private fun replay(userActions: List<LogEntry>) {
- console.log("[ReplayCommand.replay]")
+ var previous: Date? = null
userActions.forEach {
- val link = Link(href = it.url)
- console.log(link)
- ResourceProxy().fetch(link, null, it.subType)
+ if (it.state == EventState.USER_ACTION) {
+ var offset: Double = 0.toDouble()
+ if (previous != null) {
+ offset = it.createdAt.getTime().minus(previous!!.getTime())
+ }
+ val obj = it.obj as TObject
+ AppScope.launch {
+ delay(offset.toLong()) // non-blocking delay for 1 second (default time unit is ms)
+ ResourceProxy().load(obj)
+ }
+ } else {
+ val link = Link(href = it.url)
+ ResourceProxy().fetch(link, null, it.subType)
+ }
+ previous = it.createdAt
}
}
private fun filterUserActions(events: List<LogEntry>): List<LogEntry> {
- console.log("[ReplayCommand.filterUserActions]")
- val userActions = events.filter {
+ return events.filter {
(it.type == Represention.HOMEPAGE.type) ||
it.type == Represention.OBJECT_ACTION.type ||
- it.type == Relation.OBJECT_LAYOUT.type ||
- it.hasDisplayModel()
+ it.state == EventState.USER_ACTION
}
- console.log(userActions)
- console.log(userActions.size)
- return userActions
}
private fun copyEvents(inputList: List<LogEntry>): List<LogEntry> {
- console.log("[ReplayCommand.copyEvents]")
val outputList = mutableListOf<LogEntry>()
inputList.forEach {
outputList.add(copyEvent(it))
}
- console.log(outputList)
- console.log(outputList.size)
return outputList
}
private fun copyEvent(input: LogEntry): LogEntry {
val resourceSpecification = ResourceSpecification(input.url, input.subType)
val output = LogEntry(
- resourceSpecification,
- input.title,
- input.request,
- input.createdAt
+ rs = resourceSpecification,
+ method = input.method,
+ request = input.request,
+ createdAt = input.createdAt
)
+ output.title = input.title
output.type = input.type
+ output.obj = input.obj
+ output.state = input.state
return output
}
- private fun LogEntry.hasDisplayModel(): Boolean {
- return (this.nOfAggregators > 0) &&
- (this.getAggregator() is AggregatorWithLayout)
- }
-
}
\ No newline at end of file
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoMenuBar.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoMenuBar.kt
index b8715a5..228ad69 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoMenuBar.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoMenuBar.kt
@@ -120,9 +120,6 @@ class RoMenuBar : SimplePanel() {
buildMenuEntry(aboutTitle, "Info", { UiManager.add(aboutTitle, About().open()) })
)
- console.log("[RMB.buildMainMenu]")
- console.log(mainMenu)
- console.log(mainMenu.getChildren())
return mainMenu
}
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/IconManager.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/IconManager.kt
index 5887c7e..6058f67 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/IconManager.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/IconManager.kt
@@ -79,7 +79,7 @@ object IconManager {
"Primitives" to "hashtag",
"Prototyping" to "object-group",
"Queen" to "chess-queen",
- "Replay" to "share",
+ "Replay" to "fast-forward",
"Run" to "rocket",
"Save" to "file",
"Security" to "lock",