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/05/10 07:11:48 UTC

[isis] 11/12: SVG passed (instead of UUID), functionality moved to UiManager, diagram xTimes in RoTab

This is an automated email from the ASF dual-hosted git repository.

joergrade pushed a commit to branch ISIS-2505_Catch_Up_With_Demo_Examples
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 0ffdeb0a15cf3eff0b5558fbe53500ae6ac93005
Author: Jörg Rade <jo...@kuehne-nagel.com>
AuthorDate: Mon May 10 08:47:11 2021 +0200

    SVG passed (instead of UUID), functionality moved to UiManager, diagram xTimes in RoTab
---
 .../isis/client/kroviz/core/event/EventStore.kt    | 11 ++----
 .../isis/client/kroviz/core/event/LogEntry.kt      |  9 +++--
 .../apache/isis/client/kroviz/ui/core/RoView.kt    |  9 ++---
 .../apache/isis/client/kroviz/ui/core/UiManager.kt | 41 +++++++++++++++++-----
 .../isis/client/kroviz/ui/dialog/DiagramDialog.kt  | 31 ++++++----------
 .../isis/client/kroviz/ui/kv/override/RoTab.kt     | 24 +++----------
 .../client/kroviz/ui/kv/override/RoTabPanel.kt     |  6 ++--
 .../org/apache/isis/client/kroviz/utils/DomUtil.kt | 10 ++++--
 8 files changed, 69 insertions(+), 72 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 128d4e3..510c7a5 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
@@ -66,10 +66,9 @@ object EventStore {
         updateStatus(entry)
     }
 
-    fun addView(title: String, aggregator: BaseAggregator, panel: SimplePanel, obj: Any?) {
+    fun addView(title: String, aggregator: BaseAggregator, panel: SimplePanel) {
         val entry = LogEntry(title = title, aggregator = aggregator)
-        entry.obj = panel
- //       entry.obj = obj
+        entry.panel = panel
         log(entry)
         updateStatus(entry)
     }
@@ -137,12 +136,6 @@ object EventStore {
         }
     }
 
-    fun findByView(uuid: UUID): LogEntry? {
-        return log.firstOrNull() {
-            (it.obj is ScalableVectorGraphic) && ((it.obj as ScalableVectorGraphic).uuid == uuid)
-        }
-    }
-
     fun findMenuBars(): LogEntry? {
         return log.firstOrNull() {
             it.obj is Menubars
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 6b51b47..3db0788 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
@@ -19,15 +19,14 @@
 package org.apache.isis.client.kroviz.core.event
 
 import io.kvision.html.ButtonStyle
+import io.kvision.panel.SimplePanel
 import kotlinx.serialization.Contextual
 import kotlinx.serialization.Serializable
 import org.apache.isis.client.kroviz.core.aggregator.BaseAggregator
 import org.apache.isis.client.kroviz.to.TransferObject
 import org.apache.isis.client.kroviz.ui.core.Constants
 import org.apache.isis.client.kroviz.ui.core.UiManager
-import org.apache.isis.client.kroviz.utils.UUID
 import org.apache.isis.client.kroviz.utils.Utils.removeHexCode
-import org.apache.isis.client.kroviz.utils.XmlHelper
 import kotlin.js.Date
 
 // use color codes from css instead?
@@ -63,7 +62,8 @@ data class LogEntry(
     init {
         state = EventState.RUNNING
         title = url // stripHostPort(url)
-        requestLength = request?.length ?: 0 // if this is simplyfied to request.length, Tabulator.js goes in ERROR and EventLogTable shows no entries
+        requestLength = request?.length
+                ?: 0 // if this is simplyfied to request.length, Tabulator.js goes in ERROR and EventLogTable shows no entries
     }
 
     @Contextual
@@ -85,6 +85,9 @@ data class LogEntry(
     @Contextual
     var obj: Any? = null
 
+    @Contextual
+    var panel: SimplePanel? = null
+
     // alternative constructor for UI events (eg. from user interaction)
     @JsName("secondaryConstructor")
     constructor(title: String, aggregator: BaseAggregator) : this("", "", "") {
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 fc21346..a95cd4e 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
@@ -18,13 +18,12 @@
  */
 package org.apache.isis.client.kroviz.ui.core
 
-import org.apache.isis.client.kroviz.utils.IconManager
 import io.kvision.core.BsBorder
 import io.kvision.core.Component
 import io.kvision.core.addBsBorder
 import io.kvision.panel.SimplePanel
 import org.apache.isis.client.kroviz.ui.kv.override.RoTabPanel
-import org.apache.isis.client.kroviz.utils.UUID
+import org.apache.isis.client.kroviz.utils.IconManager
 
 /**
  * Area between menu bar at the top and the status bar at the bottom.
@@ -37,8 +36,7 @@ object RoView {
 
     fun addTab(
             title: String,
-            panel: Component,
-            uuid: UUID?) {
+            panel: Component) {
         panel.addBsBorder(BsBorder.BORDER)
         val index = tabPanel.findTab(title)
         if (index != null) {
@@ -55,8 +53,7 @@ object RoView {
                 panel,
                 icon,
                 image = null,
-                closable = true,
-                uuid = uuid)
+                closable = true)
         tabPanel.activeIndex = tabCount
         tabCount += 1
     }
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 6ca4ec1..4585a77 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
@@ -34,7 +34,10 @@ import org.apache.isis.client.kroviz.core.model.ListDM
 import org.apache.isis.client.kroviz.core.model.ObjectDM
 import org.apache.isis.client.kroviz.to.Relation
 import org.apache.isis.client.kroviz.to.TObject
+import org.apache.isis.client.kroviz.to.ValueType
 import org.apache.isis.client.kroviz.to.mb.Menubars
+import org.apache.isis.client.kroviz.ui.kv.override.RoTab
+import org.apache.isis.client.kroviz.utils.DomUtil
 import org.apache.isis.client.kroviz.utils.ScalableVectorGraphic
 import org.apache.isis.client.kroviz.utils.UUID
 import org.apache.isis.client.kroviz.utils.Utils
@@ -78,13 +81,35 @@ object UiManager {
         return null
     }
 
-    fun add(title: String, panel: SimplePanel, obj: Any? = null, aggregator: BaseAggregator = UndefinedDispatcher()) {
-        var uuid: UUID? = null
-        if (obj is ScalableVectorGraphic) {
-            uuid = obj.uuid
-        }
-        RoView.addTab(title, panel, uuid)
-        EventStore.addView(title, aggregator, panel, obj)
+    fun add(title: String, panel: SimplePanel, aggregator: BaseAggregator = UndefinedDispatcher()) {
+        RoView.addTab(title, panel)
+        EventStore.addView(title, aggregator, 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.
+     */
+    fun addSvg(title: String, svgCode: String) {
+        val uuid = UUID()
+        DomUtil.appendTo(uuid, svgCode)
+
+        val panel = buildSvgPanel(uuid)
+        RoView.addTab(title, panel)
+        val tab = RoView.findActive()!! as RoTab
+
+        val svg = ScalableVectorGraphic(svgCode, uuid)
+        tab.svg = svg
+
+        val aggregator: BaseAggregator = UndefinedDispatcher()
+        EventStore.addView(title, aggregator, panel)
+    }
+
+    private fun buildSvgPanel(uuid: UUID): FormPanelFactory {
+        val formItems = mutableListOf<FormItem>()
+        val newFi = FormItem("svg", ValueType.SVG_INLINE, callBack = uuid)
+        formItems.add(newFi)
+        return FormPanelFactory(formItems)
     }
 
     fun closeView(tab: SimplePanel) {
@@ -112,7 +137,7 @@ object UiManager {
         val displayable = aggregator.dpm
         val title: String = Utils.extractTitle(displayable.title)
         val panel = RoTable(displayable as ListDM)
-        add(title, panel, null, aggregator)
+        add(title, panel, aggregator)
         displayable.isRendered = true
     }
 
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/DiagramDialog.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/DiagramDialog.kt
index 64514bd..810affd 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/DiagramDialog.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/DiagramDialog.kt
@@ -18,10 +18,12 @@
  */
 package org.apache.isis.client.kroviz.ui.dialog
 
-import io.kvision.panel.VPanel
 import org.apache.isis.client.kroviz.core.event.EventStore
 import org.apache.isis.client.kroviz.to.ValueType
-import org.apache.isis.client.kroviz.ui.core.*
+import org.apache.isis.client.kroviz.ui.core.FormItem
+import org.apache.isis.client.kroviz.ui.core.MenuFactory
+import org.apache.isis.client.kroviz.ui.core.RoDialog
+import org.apache.isis.client.kroviz.ui.core.UiManager
 import org.apache.isis.client.kroviz.utils.*
 import io.kvision.html.Link as KvisionHtmlLink
 
@@ -58,33 +60,20 @@ class DiagramDialog(
     }
 
     private fun pin() {
-        val newUuid = UUID()
-        val newSvg= getDiagram(newUuid)
-        val panel = buildNewPanel(newUuid)
-        console.log("[DD.pin]")
-        console.log(panel)
-        console.log(panel.panel!!.getChildren().first())
-        UiManager.add("Diagram", panel, newSvg)
-        DomUtil.replaceWith(newUuid, newSvg)
+        val svgCode = getDiagramCode()
+        UiManager.addSvg("Diagram", svgCode)
         dialog.close()
     }
 
-    private fun getDiagram(newUuid:UUID?): ScalableVectorGraphic {
+    private fun getDiagramCode(): String {
         val logEntry = EventStore.findByDispatcher(callBack as UUID)
-        val svgStr = logEntry.getResponse()
-        return ScalableVectorGraphic(svgStr, newUuid)
-    }
-
-    private fun buildNewPanel(newUuid: UUID): FormPanelFactory {
-        val formItems = mutableListOf<FormItem>()
-        val newFi = FormItem("svg", ValueType.SVG_INLINE, callBack = newUuid)
-        formItems.add(newFi)
-        return FormPanelFactory(formItems)
+        return logEntry.getResponse()
     }
 
     @Deprecated("use leaflet/svg")
     fun scale(direction: Direction) {
-        val svg = getDiagram(null)
+        val svgCode = getDiagramCode()
+        val svg = ScalableVectorGraphic(svgCode)
         when (direction) {
             Direction.UP -> svg.scaleUp()
             Direction.DOWN -> svg.scaleDown()
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/override/RoTab.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/override/RoTab.kt
index d3d1fd7..4b017d2 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/override/RoTab.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/override/RoTab.kt
@@ -36,10 +36,8 @@ import io.kvision.routing.RoutingManager
 import io.kvision.state.ObservableState
 import io.kvision.state.bind
 import io.kvision.utils.obj
-import org.apache.isis.client.kroviz.core.event.EventStore
 import org.apache.isis.client.kroviz.utils.DomUtil
 import org.apache.isis.client.kroviz.utils.ScalableVectorGraphic
-import org.apache.isis.client.kroviz.utils.UUID
 
 /**
  * The single Tab component inside the TabPanel container.
@@ -58,7 +56,6 @@ open class RoTab(
         image: ResString? = null,
         closable: Boolean = false,
         val route: String? = null,
-        val uuid: UUID? = null,
         init: (RoTab.() -> Unit)? = null
 ) : Tag(TAG.LI, classes = setOf("nav-item")) {
 
@@ -69,27 +66,16 @@ open class RoTab(
             image: ResString? = null,
             closable: Boolean = false,
             route: String? = null,
-            uuid: UUID? = null,
             init: (RoTab.() -> Unit)? = null
-    ) : this(label, icon, image, closable, route, uuid, init) {
+    ) : this(label, icon, image, closable, route, init) {
         @Suppress("LeakingThis")
         add(child)
     }
 
+    var svg: ScalableVectorGraphic? = null
+
     override fun render(): VNode {
-        if (uuid != null) {
-            console.log("[RT.render]")
-            console.log(uuid)
-            val logEntry = EventStore.findByView(uuid)
-            if (logEntry != null) {
-                val svgStr = logEntry.getResponse()
-                console.log(svgStr)
-                val newImage = ScalableVectorGraphic(svgStr)
-                val uuid = UUID(this.id!!)
-                console.log(uuid)
-                DomUtil.replaceWith(uuid, newImage)
-            }
-        }
+        if (svg != null) DomUtil.appendTo(svg!!)
         return super.render()
     }
 
@@ -205,7 +191,7 @@ fun RoTabPanel.tab(
         image: ResString? = null, closable: Boolean = false, route: String? = null,
         init: (RoTab.() -> Unit)? = null
 ): RoTab {
-    val tab = RoTab(label, icon, image, closable, route, null, init)
+    val tab = RoTab(label, icon, image, closable, route, init)
     this.add(tab)
     return tab
 }
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 2611087..7a44259 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
@@ -35,7 +35,6 @@ import io.kvision.utils.obj
 import io.kvision.utils.perc
 import io.kvision.utils.set
 import org.apache.isis.client.kroviz.ui.core.RoView
-import org.apache.isis.client.kroviz.utils.UUID
 
 /**
  * Tab position.
@@ -321,10 +320,9 @@ open class RoTabPanel(
      */
     open fun addTab(
             title: String, panel: Component, icon: String? = null,
-            image: ResString? = null, closable: Boolean = false, route: String? = null,
-            uuid: UUID? = null
+            image: ResString? = null, closable: Boolean = false, route: String? = null
     ): RoTabPanel {
-        addTab(RoTab(title, panel, icon, image, closable, route, uuid))
+        addTab(RoTab(title, panel, icon, image, closable, route))
         refresh()
         return this
     }
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/DomUtil.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/DomUtil.kt
index 2d000c9..6506d9c 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/DomUtil.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/DomUtil.kt
@@ -29,8 +29,14 @@ external fun encodeURIComponent(encodedURI: String): String
  */
 object DomUtil {
 
-    fun appendTo(uuid: UUID, response: String) {
-        val svgDoc = ScalableVectorGraphic(response).document
+    fun appendTo(svg: ScalableVectorGraphic) {
+        val uuid = svg.uuid!!
+        val svgCode = svg.data
+        appendTo(uuid, svgCode)
+    }
+
+    fun appendTo(uuid: UUID, svgCode: String) {
+        val svgDoc = ScalableVectorGraphic(svgCode).document
         append(uuid, svgDoc, false)
     }