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:33 UTC
[isis] 01/05: ISIS-2348 Replay User Events (1/n)
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 f53e86ad3609772cde1ea7e5a06093e0b5938976
Author: Jörg Rade <jo...@kuehne-nagel.com>
AuthorDate: Fri Oct 15 14:35:44 2021 +0200
ISIS-2348 Replay User Events (1/n)
---
.../isis/client/kroviz/core/event/EventStore.kt | 9 ----
.../isis/client/kroviz/core/event/ReplayCommand.kt | 50 ++++++++++++++++++++++
.../org/apache/isis/client/kroviz/ui/core/RoApp.kt | 21 ++++++++-
.../apache/isis/client/kroviz/ui/core/RoMenuBar.kt | 9 +++-
.../apache/isis/client/kroviz/ui/core/RoView.kt | 3 +-
.../apache/isis/client/kroviz/ui/core/UiManager.kt | 15 +++++--
.../client/kroviz/ui/kv/override/RoTabPanel.kt | 9 ++--
.../apache/isis/client/kroviz/utils/IconManager.kt | 1 +
8 files changed, 95 insertions(+), 22 deletions(-)
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 80f212f..686911c 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
@@ -190,13 +190,4 @@ object EventStore {
log.removeAll(log)
}
- fun getLinked(): List<LogEntry> {
- // we use all LE's - eventually to be refined to a single LE (chain up and down)
- val linked = mutableListOf<LogEntry>()
- log.forEach {
- if (it.obj is HasLinks) linked.add(it)
- }
- return linked
- }
-
}
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
new file mode 100644
index 0000000..4352db4
--- /dev/null
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/ReplayCommand.kt
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.isis.client.kroviz.core.event
+
+import io.kvision.utils.createInstance
+import org.apache.isis.client.kroviz.core.aggregator.BaseAggregator
+import org.apache.isis.client.kroviz.to.Link
+import org.apache.isis.client.kroviz.to.Represention
+import org.apache.isis.client.kroviz.ui.core.RoApp
+
+class ReplayCommand {
+
+ fun execute() {
+ val events = EventStore.log
+ EventStore.reset()
+ RoApp.reset()
+
+ console.log("[ReplayCommand.execute]")
+ console.log(events)
+ val userActions = events.filter {
+ it.type == Represention.HOMEPAGE.name ||
+ it.type == Represention.OBJECT_ACTION.name
+ }
+
+ userActions.forEach {
+ val link = Link(href = it.url)
+ val clazz = it.getAggregator()::class
+ val aggregator = clazz.createInstance<BaseAggregator>()
+ //eventually put a thinkTime here
+ ResourceProxy().fetch(link,aggregator, it.subType)
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoApp.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoApp.kt
index eb6bba1..e6d5ef0 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoApp.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoApp.kt
@@ -24,17 +24,36 @@ import io.kvision.panel.HPanel
import io.kvision.panel.SimplePanel
object RoApp : SimplePanel() {
+
+ private var roView: RoView? = null
+
init {
+ setup()
+ }
+
+ private fun setup() {
this.add(RoMenuBar.navbar)
+ roView = RoView()
val view = HPanel() {
width = CssSize(100, UNIT.perc)
}
view.addCssClass("main")
view.add(RoIconBar.panel)
- view.add(RoView.tabPanel)
+ view.add(roView!!.tabPanel)
this.add(view)
this.add(RoStatusBar.navbar)
}
+
+ fun reset() {
+ val kids = this.children
+ kids?.clear()
+ setup()
+ }
+
+ fun getRoView(): RoView {
+ return roView!!
+ }
+
}
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 e101836..e841014 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
@@ -30,6 +30,7 @@ import io.kvision.panel.SimplePanel
import io.kvision.panel.vPanel
import kotlinx.browser.window
import org.apache.isis.client.kroviz.core.event.EventStore
+import org.apache.isis.client.kroviz.core.event.ReplayCommand
import org.apache.isis.client.kroviz.to.mb.Menubars
import org.apache.isis.client.kroviz.ui.chart.SampleChartModel
import org.apache.isis.client.kroviz.ui.dialog.About
@@ -83,6 +84,10 @@ object RoMenuBar : SimplePanel() {
)
mainMenu.add(
+ buildMenuEntry("Replay", "Replay", { ReplayCommand().execute() })
+ )
+
+ mainMenu.add(
buildMenuEntry("History", "History", { UiManager.add("Log Entries", EventLogTable(EventStore.log)) })
)
@@ -108,12 +113,12 @@ object RoMenuBar : SimplePanel() {
val imageTitle = "Sample Image"
mainMenu.add(
- buildMenuEntry(imageTitle, "Image", { RoView.addTab(imageTitle, ImageSample()) })
+ buildMenuEntry(imageTitle, "Image", { UiManager.add(imageTitle, ImageSample) })
)
val aboutTitle = "About"
mainMenu.add(
- buildMenuEntry(aboutTitle, "Info", { RoView.addTab(aboutTitle, About().open()) })
+ buildMenuEntry(aboutTitle, "Info", { UiManager.add(aboutTitle, About().open()) })
)
console.log("[RMB.buildMainMenu]")
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoView.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoView.kt
index 6801f14..300e313 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoView.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoView.kt
@@ -30,7 +30,7 @@ import org.apache.isis.client.kroviz.utils.IconManager
* Contains:
* @Item TabPanel with Tabs
*/
-object RoView {
+class RoView() {
val tabPanel = RoTabPanel()
private var tabCount = 0
@@ -59,6 +59,7 @@ object RoView {
}
fun removeTab(tab: SimplePanel) {
+ console.log("[RoView.removeTab]")
tabCount--
UiManager.closeView(tab)
}
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/UiManager.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/UiManager.kt
index 7645936..625fd9d 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/UiManager.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/UiManager.kt
@@ -69,7 +69,7 @@ object UiManager {
}
private fun activeObject(): ObjectDM? {
- val activeTab = RoView.findActive()
+ val activeTab = RoApp.getRoView().findActive()
if (activeTab != null) {
return (activeTab as RoDisplay).displayModel
}
@@ -77,10 +77,16 @@ object UiManager {
}
fun add(title: String, panel: SimplePanel, aggregator: BaseAggregator = UndefinedDispatcher()) {
- RoView.addTab(title, panel)
+ RoApp.getRoView().addTab(title, panel)
EventStore.addView(title, aggregator, panel)
}
+ fun remove(panel: SimplePanel) {
+ console.log("[UiManager.remove]")
+ // EventStore.closeView(title)
+ RoApp.getRoView().removeTab(panel)
+ }
+
/**
* SVG code added to Tabs disappears after a refresh, therefore an SVG object (code, uuid)
* is added as attribute to the tab in order to being able to recreate it on refresh.
@@ -97,8 +103,8 @@ object UiManager {
DomUtil.appendTo(uuid, svgCode)
val panel = buildSvgPanel(uuid)
- RoView.addTab(title, panel)
- val tab = RoView.findActive()!! as RoTab
+ RoApp.getRoView().addTab(title, panel)
+ val tab = RoApp.getRoView().findActive()!! as RoTab
val svg = ScalableVectorGraphic(svgCode, uuid)
tab.svg = svg
@@ -108,6 +114,7 @@ object UiManager {
}
fun closeView(tab: SimplePanel) {
+ console.log("[UiManager.closeView]")
val tt = tab.title
if (tt != null) {
EventStore.closeView(tt)
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/override/RoTabPanel.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/override/RoTabPanel.kt
index 244a872..3f4da88 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/override/RoTabPanel.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/override/RoTabPanel.kt
@@ -26,12 +26,11 @@ package org.apache.isis.client.kroviz.ui.kv.override
import com.github.snabbdom.VNode
import io.kvision.core.*
import io.kvision.panel.SimplePanel
-import io.kvision.panel.Tab
import io.kvision.panel.VPanel
import io.kvision.routing.RoutingManager
import io.kvision.utils.auto
import io.kvision.utils.obj
-import org.apache.isis.client.kroviz.ui.core.RoView
+import org.apache.isis.client.kroviz.ui.core.UiManager
/**
* Tab position.
@@ -188,7 +187,7 @@ open class RoTabPanel(
*/
open fun removeTab(index: Int): RoTabPanel {
val tab = getTabs().get(index)
- RoView.removeTab(tab as SimplePanel)
+ UiManager.remove(tab as SimplePanel)
getTab(index)?.let {
removeTab(it)
@@ -313,8 +312,8 @@ open class RoTabPanel(
* @return current container
*/
open fun addTab(
- title: String, panel: Component, icon: String? = null,
- image: ResString? = null, closable: Boolean = false, route: String? = null
+ title: String, panel: Component, icon: String? = null,
+ image: ResString? = null, closable: Boolean = false, route: String? = null
): RoTabPanel {
addTab(RoTab(title, panel, icon, image, closable, route))
refresh()
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 e5a7c6c..5887c7e 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,6 +79,7 @@ object IconManager {
"Primitives" to "hashtag",
"Prototyping" to "object-group",
"Queen" to "chess-queen",
+ "Replay" to "share",
"Run" to "rocket",
"Save" to "file",
"Security" to "lock",