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:47 UTC
[isis] 10/12: uuid passed on to 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 8077f5495c6bf73d826440074ab7469acfefabfe
Author: Jörg Rade <jo...@kuehne-nagel.com>
AuthorDate: Fri May 7 12:59:06 2021 +0200
uuid passed on to RoTab
---
.../isis/client/kroviz/core/event/EventStore.kt | 24 ++++++++++-----
.../isis/client/kroviz/core/event/LogEntry.kt | 2 ++
.../apache/isis/client/kroviz/ui/core/RoView.kt | 7 +++--
.../apache/isis/client/kroviz/ui/core/UiManager.kt | 24 +++++++++------
.../isis/client/kroviz/ui/dialog/DiagramDialog.kt | 36 ++++++++++------------
.../isis/client/kroviz/ui/kv/override/RoTab.kt | 36 +++++++++++++++++-----
.../client/kroviz/ui/kv/override/RoTabPanel.kt | 11 +++++--
.../client/kroviz/utils/ScalableVectorGraphic.kt | 2 +-
.../org/apache/isis/client/kroviz/utils/UUID.kt | 6 +++-
.../client/kroviz/core/event/EventStoreTest.kt | 4 +--
10 files changed, 101 insertions(+), 51 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 31ec377..128d4e3 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
@@ -18,13 +18,14 @@
*/
package org.apache.isis.client.kroviz.core.event
+import io.kvision.panel.SimplePanel
+import io.kvision.state.observableListOf
import org.apache.isis.client.kroviz.core.aggregator.BaseAggregator
+import org.apache.isis.client.kroviz.core.aggregator.SvgDispatcher
import org.apache.isis.client.kroviz.to.TObject
import org.apache.isis.client.kroviz.to.mb.Menubars
import org.apache.isis.client.kroviz.ui.core.UiManager
-import io.kvision.panel.SimplePanel
-import io.kvision.state.observableListOf
-import org.apache.isis.client.kroviz.core.aggregator.SvgDispatcher
+import org.apache.isis.client.kroviz.utils.ScalableVectorGraphic
import org.apache.isis.client.kroviz.utils.UUID
/**
@@ -65,9 +66,10 @@ object EventStore {
updateStatus(entry)
}
- fun addView(title: String, aggregator: BaseAggregator, panel: SimplePanel) {
+ fun addView(title: String, aggregator: BaseAggregator, panel: SimplePanel, obj: Any?) {
val entry = LogEntry(title = title, aggregator = aggregator)
entry.obj = panel
+ // entry.obj = obj
log(entry)
updateStatus(entry)
}
@@ -128,9 +130,17 @@ object EventStore {
return log.firstOrNull { it.getAggregator() == aggregator }
}
- fun findBy(uuid: UUID): LogEntry {
- return log.first { it.getAggregator() is SvgDispatcher
- && (it.getAggregator() as SvgDispatcher).callBack == uuid }
+ fun findByDispatcher(uuid: UUID): LogEntry {
+ return log.first {
+ it.getAggregator() is SvgDispatcher
+ && (it.getAggregator() as SvgDispatcher).callBack == uuid
+ }
+ }
+
+ fun findByView(uuid: UUID): LogEntry? {
+ return log.firstOrNull() {
+ (it.obj is ScalableVectorGraphic) && ((it.obj as ScalableVectorGraphic).uuid == uuid)
+ }
}
fun findMenuBars(): LogEntry? {
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 44046af..6b51b47 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
@@ -25,7 +25,9 @@ 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?
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 802d1c9..fc21346 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
@@ -24,6 +24,7 @@ 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
/**
* Area between menu bar at the top and the status bar at the bottom.
@@ -36,7 +37,8 @@ object RoView {
fun addTab(
title: String,
- panel: Component) {
+ panel: Component,
+ uuid: UUID?) {
panel.addBsBorder(BsBorder.BORDER)
val index = tabPanel.findTab(title)
if (index != null) {
@@ -53,7 +55,8 @@ object RoView {
panel,
icon,
image = null,
- closable = true)
+ closable = true,
+ uuid = uuid)
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 f9f7b81..6ca4ec1 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
@@ -18,6 +18,10 @@
*/
package org.apache.isis.client.kroviz.ui.core
+import io.kvision.core.Widget
+import io.kvision.dropdown.ContextMenu
+import io.kvision.panel.SimplePanel
+import io.kvision.utils.ESC_KEY
import kotlinx.browser.window
import org.apache.isis.client.kroviz.core.Session
import org.apache.isis.client.kroviz.core.aggregator.BaseAggregator
@@ -31,12 +35,10 @@ 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.mb.Menubars
+import org.apache.isis.client.kroviz.utils.ScalableVectorGraphic
+import org.apache.isis.client.kroviz.utils.UUID
import org.apache.isis.client.kroviz.utils.Utils
import org.w3c.dom.events.KeyboardEvent
-import io.kvision.core.Widget
-import io.kvision.dropdown.ContextMenu
-import io.kvision.panel.SimplePanel
-import io.kvision.utils.ESC_KEY
/**
* Single point of contact for view components consisting of:
@@ -49,7 +51,7 @@ object UiManager {
private var session: Session? = null
private val popups = mutableListOf<Widget>()
- private val settings = mutableMapOf<String,Any>()
+ private val settings = mutableMapOf<String, Any>()
init {
window.addEventListener("keydown", fun(event) {
@@ -76,9 +78,13 @@ object UiManager {
return null
}
- fun add(title: String, panel: SimplePanel, aggregator: BaseAggregator = UndefinedDispatcher()) {
- RoView.addTab(title, panel)
- EventStore.addView(title, aggregator, panel)
+ 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 closeView(tab: SimplePanel) {
@@ -106,7 +112,7 @@ object UiManager {
val displayable = aggregator.dpm
val title: String = Utils.extractTitle(displayable.title)
val panel = RoTable(displayable as ListDM)
- add(title, panel, aggregator)
+ add(title, panel, null, 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 e419ec9..64514bd 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,13 +18,10 @@
*/
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.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.ui.panel.FormPanelFactory
+import org.apache.isis.client.kroviz.ui.core.*
import org.apache.isis.client.kroviz.utils.*
import io.kvision.html.Link as KvisionHtmlLink
@@ -61,32 +58,33 @@ class DiagramDialog(
}
private fun pin() {
- val newImage = getDiagram()
- val newCallBack = buildNewPanel()
- DomUtil.replaceWith(newCallBack, newImage)
+ 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)
dialog.close()
}
- private fun getDiagram(): ScalableVectorGraphic {
- val logEntry = EventStore.findBy(callBack as UUID)
+ private fun getDiagram(newUuid:UUID?): ScalableVectorGraphic {
+ val logEntry = EventStore.findByDispatcher(callBack as UUID)
val svgStr = logEntry.getResponse()
- return ScalableVectorGraphic(svgStr)
+ return ScalableVectorGraphic(svgStr, newUuid)
}
- private fun buildNewPanel(): UUID {
- val newUuid = UUID()
+ private fun buildNewPanel(newUuid: UUID): FormPanelFactory {
val formItems = mutableListOf<FormItem>()
val newFi = FormItem("svg", ValueType.SVG_INLINE, callBack = newUuid)
formItems.add(newFi)
- val panel = FormPanelFactory(formItems)
- console.log(panel)
- UiManager.add("Diagram", panel)
- return newUuid
+ return FormPanelFactory(formItems)
}
@Deprecated("use leaflet/svg")
fun scale(direction: Direction) {
- val svg = getDiagram()
+ val svg = getDiagram(null)
when (direction) {
Direction.UP -> svg.scaleUp()
Direction.DOWN -> svg.scaleDown()
@@ -97,7 +95,7 @@ class DiagramDialog(
fun buildMenu(): List<KvisionHtmlLink> {
val menu = mutableListOf<KvisionHtmlLink>()
val action = MenuFactory.buildActionLink(
- label = "pin",
+ label = "Pin",
menuTitle = "pin")
action.onClick {
pin()
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 967b3a9..d3d1fd7 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,6 +36,10 @@ 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.
@@ -49,8 +53,12 @@ import io.kvision.utils.obj
* @param init an initializer extension function
*/
open class RoTab(
- label: String? = null, icon: String? = null,
- image: ResString? = null, closable: Boolean = false, val route: String? = null,
+ label: String? = null,
+ icon: String? = null,
+ 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")) {
@@ -61,16 +69,28 @@ 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, init) {
+ ) : this(label, icon, image, closable, route, uuid, init) {
@Suppress("LeakingThis")
add(child)
}
- override fun focus() {
- console.log("[RT.focus]")
- if (getElementJQuery()?.attr("tabindex") == undefined) getElementJQuery()?.attr("tabindex", "-1")
- super.focus()
+ 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)
+ }
+ }
+ return super.render()
}
/**
@@ -185,7 +205,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, init)
+ val tab = RoTab(label, icon, image, closable, route, null, 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 4183743..2611087 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,6 +35,7 @@ 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.
@@ -142,6 +143,11 @@ open class RoTabPanel(
init?.invoke(this)
}
+ override fun render(): VNode {
+ return render("div", childrenVNodes())
+ }
+
+
private fun calculateSideClasses(): Pair<String, String> {
return when (sideTabSize) {
SideTabSize.SIZE_1 -> Pair("col-sm-1", "col-sm-11")
@@ -315,9 +321,10 @@ open class RoTabPanel(
*/
open fun addTab(
title: String, panel: Component, icon: String? = null,
- image: ResString? = null, closable: Boolean = false, route: String? = null
+ image: ResString? = null, closable: Boolean = false, route: String? = null,
+ uuid: UUID? = null
): RoTabPanel {
- addTab(RoTab(title, panel, icon, image, closable, route))
+ addTab(RoTab(title, panel, icon, image, closable, route, uuid))
refresh()
return this
}
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/ScalableVectorGraphic.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/ScalableVectorGraphic.kt
index e686613..9d9d37e 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/ScalableVectorGraphic.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/ScalableVectorGraphic.kt
@@ -33,7 +33,7 @@ enum class Direction(val id: String) {
}
// see: https://vecta.io/blog/best-way-to-embed-svg
-class ScalableVectorGraphic(val data: String) {
+class ScalableVectorGraphic(val data: String, val uuid:UUID? = null) {
var document: Document = DOMParser().parseFromString(data, Constants.svgMimeType)
private var root: SVGSVGElement
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/UUID.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/UUID.kt
index 2617019..4461e3f 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/UUID.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/UUID.kt
@@ -21,7 +21,7 @@ package org.apache.isis.client.kroviz.utils
import kotlin.random.Random
class UUID() {
- val value: String
+ var value: String
// Returns a 36-character string in the form
// XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
@@ -39,6 +39,10 @@ class UUID() {
value = "$s1-$s2-$s3-$s4-$s5"
}
+ constructor(string: String) : this() {
+ value = string
+ }
+
@OptIn(kotlin.ExperimentalUnsignedTypes::class)
fun ByteArray.toHexString() = asUByteArray().joinToString("") {
it.toString(16).padStart(2, '0')
diff --git a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/core/event/EventStoreTest.kt b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/core/event/EventStoreTest.kt
index ce5c914..5544b15 100644
--- a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/core/event/EventStoreTest.kt
+++ b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/core/event/EventStoreTest.kt
@@ -116,9 +116,9 @@ class EventStoreTest : IntegrationTest() {
// construct list with urls
EventStore.add(h1Spec)
- EventStore.addView(i1, agg, VPanel())
+ EventStore.addView(i1, agg, VPanel(), null)
EventStore.add(h2Spec)
- EventStore.addView(i2, agg, VPanel())
+ EventStore.addView(i2, agg, VPanel(), null)
val le1 = EventStore.find(h1Spec)!!
assertEquals(h1, le1.url) //1