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 2020/05/07 16:46:24 UTC

[isis] 07/08: ISIS-2342 class diagram with properties, cleanup

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 f8b0286e57ac401cc74c44f499c4042f295b7765
Author: Jörg Rade <jo...@kuehne-nagel.com>
AuthorDate: Mon May 4 10:10:21 2020 +0200

    ISIS-2342 class diagram with properties, cleanup
---
 .../core/aggregator/DomainTypesAggregator.kt       |  1 +
 .../isis/client/kroviz/core/model/DiagramDM.kt     |  5 +-
 .../isis/client/kroviz/core/model/DisplayModel.kt  | 11 ++-
 .../org/apache/isis/client/kroviz/to/Link.kt       |  2 +-
 .../org/apache/isis/client/kroviz/to/bs3/Grid.kt   |  8 ---
 .../apache/isis/client/kroviz/ui/ImageDialog.kt    | 81 +++++++++++++---------
 .../apache/isis/client/kroviz/utils/DomHelper.kt   | 10 +++
 .../apache/isis/client/kroviz/utils/XmlHelper.kt   |  3 +-
 8 files changed, 70 insertions(+), 51 deletions(-)

diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/DomainTypesAggregator.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/DomainTypesAggregator.kt
index e9714a8..673bac4 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/DomainTypesAggregator.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/DomainTypesAggregator.kt
@@ -25,6 +25,7 @@ class DomainTypesAggregator(val url: String) : BaseAggregator() {
 
         if (dsp.canBeDisplayed()) {
             RoStatusBar.updateDiagram(dsp as DiagramDM)
+            dsp.isRendered = true
         }
     }
 
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/DiagramDM.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/DiagramDM.kt
index 9ffb2ec..048a3e4 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/DiagramDM.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/DiagramDM.kt
@@ -20,9 +20,10 @@ class DiagramDM(override val title: String) : DisplayModel() {
     }
 
     override fun canBeDisplayed(): Boolean {
-        return (numberOfClasses == classes.size
+        if (isRendered) return false
+        return (numberOfClasses == classes.size)
                 //TODO && numberOfProperties == properties.size
-                )
+
     }
 
     override fun addData(obj: TransferObject) {
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/DisplayModel.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/DisplayModel.kt
index 0b8911b..9738c4b 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/DisplayModel.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/DisplayModel.kt
@@ -14,7 +14,7 @@ abstract class DisplayModel {
     abstract fun addData(obj: TransferObject)
 
     open fun getObject(): TObject? {
-       // subclass responsibility
+        // subclass responsibility
         return null
     }
 
@@ -25,11 +25,10 @@ abstract class DisplayModel {
     fun extractTitle(): String {
         val strList = this.title.split("/")
         val len = strList.size
-        return if (len > 2) {
-            strList[len - 2]
-        } else {
-            ""
-        }
+        var answer = ""
+        if (len > 2) answer =
+                strList[len - 2]
+        return answer
     }
 
 }
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/Link.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/Link.kt
index b38fcce..70a7bac 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/Link.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/Link.kt
@@ -40,7 +40,7 @@ data class Link(val rel: String = "",
     }
 
     fun isProperty() : Boolean {
-        return type.endsWith("/object-property")
+        return rel.endsWith("/property")
     }
 
     fun isPropertyDescription() : Boolean {
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/bs3/Grid.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/bs3/Grid.kt
index 631c449..152bc9c 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/bs3/Grid.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/bs3/Grid.kt
@@ -26,12 +26,4 @@ class Grid(document: Document) : TransferObject {
         }
     }
 
-    fun getPropertyList(): List<Property> {
-        val list = mutableListOf<Property>()
-        rows.forEach { c ->
-            list.addAll(c.getPropertyList())
-        }
-        return list
-    }
-
 }
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/ImageDialog.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/ImageDialog.kt
index 4525b36..bd5ac96 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/ImageDialog.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/ImageDialog.kt
@@ -2,9 +2,11 @@ package org.apache.isis.client.kroviz.ui
 
 import org.apache.isis.client.kroviz.to.ValueType
 import org.apache.isis.client.kroviz.ui.kv.RoDialog
-import org.apache.isis.client.kroviz.ui.kv.UiManager
+import org.apache.isis.client.kroviz.utils.DomHelper
+import org.apache.isis.client.kroviz.utils.ScalableVectorGraphic
 import org.apache.isis.client.kroviz.utils.UmlUtils
-import org.w3c.dom.events.KeyboardEvent
+import org.w3c.dom.parsing.DOMParser
+import pl.treksoft.kvision.core.onEvent
 import kotlin.js.Date
 
 class ImageDialog(
@@ -21,50 +23,65 @@ class ImageDialog(
     }
 
     private val uuid: String = Date().toTimeString() //IMPROVE
+    private var dialog: RoDialog
 
     fun open() {
-        val formItems = mutableListOf<FormItem>()
-//        val slider = FormItem("Scale", ValueType.SLIDER.type, content = 1.0)
-//        formItems.add(slider)
+        dialog.open()
+        UmlUtils.generateDiagram(pumlCode, uuid)
+    }
 
+    init {
+        val formItems = mutableListOf<FormItem>()
         val img = FormItem("svg", ValueType.IMAGE.type, callBackId = uuid)
         formItems.add(img)
 
-        val dialog = RoDialog(
+        dialog = RoDialog(
+                widthPerc = 80,
                 caption = label,
                 items = formItems,
                 command = this,
-                widthPerc = 80,
                 heightPerc = 80)
-        dialog.open()
-//        slider.setDisplay(dialog)
-
-        UmlUtils.generateDiagram(pumlCode, uuid)
-    }
-
-    init {
-        kotlin.browser.window.addEventListener("keydown", fun(event) {
-            val dlg = UiManager.topDialog() as RoDialog
-            console.log("[ImageDialog.event] topWindow: $dlg")
-            console.log(dlg)
-            if (dlg.hasScalableContent()) {
-                val ke = event as KeyboardEvent
-                if (ke.ctrlKey && ke.keyCode == 189) { // -
-                    //adjust svg viewbox
-                    console.log("[<CTRL>-<->]")
-                    event.stopPropagation()
-                    ke.preventDefault()
-                }
-                if (ke.ctrlKey && ke.keyCode == 187) { // +
-                    //adjust svg viewbox
-                    console.log("[<CTRL>-<+>]")
-                    event.stopPropagation()
-                    ke.preventDefault()
+        console.log("[ImageDialog.init] $dialog")
+ //       if (dialog.hasScalableContent()) {
+            dialog.onEvent {
+                keypress = { e ->
+                    console.log("[ImageDialog.open] keydown")
+                    console.log(e)
+                    if (e.key === "+" && e.ctrlKey) {
+                        scale(true)
+                        console.log("[<CTRL>-<Alt>-<+>]")
+                        e.stopPropagation()
+                        e.preventDefault()
+                    }
+                    if (e.key === "-" && e.ctrlKey) {
+                        scale(false)
+                        console.log("[<CTRL>-<Alt>-<->]")
+                        e.stopPropagation()
+                        e.preventDefault()
+                    }
                 }
             }
-        })
+ //       }
     }
 
 
+    private fun scale(upOrDown: Boolean) {
+        val mimeType = "image/svg+xml"
+        val oldElement = DomHelper.getById(uuid)
+        val oldStr = oldElement.toString()
+        console.log(oldStr)
+        val p = DOMParser()
+        var svg = p.parseFromString(oldStr, mimeType)
+        val image = ScalableVectorGraphic(svg)
+        if (upOrDown) {
+            image.scaleUp()
+        } else {
+            image.scaleDown()
+        }
+        val newStr = image.serialized()
+        svg = p.parseFromString(newStr, mimeType)
+        DomHelper.replaceWith(uuid, svg.documentElement!!)
+    }
+
 }
 
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/DomHelper.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/DomHelper.kt
index e06145b..b8e8278 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/DomHelper.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/DomHelper.kt
@@ -1,5 +1,6 @@
 package org.apache.isis.client.kroviz.utils
 
+import org.w3c.dom.Element
 import org.w3c.dom.parsing.DOMParser
 import kotlin.browser.document
 
@@ -17,6 +18,15 @@ object DomHelper {
         element.asDynamic().appendChild(svg.documentElement)
     }
 
+    fun getById(elementId: String): Element {
+        return document.getElementById(elementId)!!
+    }
+
+    fun replaceWith(elementId: String, svgElement: Element) {
+        val element = getById(elementId)!!
+        element.replaceWith(svgElement)
+    }
+
     fun download(filename: String, text: String) {
         val element = document.createElement("a")
         element.setAttribute("href", "data:text/plain;charset=utf-8," + encodeURIComponent(text))
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/XmlHelper.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/XmlHelper.kt
index 5a34ab5..274e5cf 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/XmlHelper.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/XmlHelper.kt
@@ -15,8 +15,7 @@ object XmlHelper {
     fun nonTextChildren(node: Node): List<Node> {
         val match = "#text"
         val childNodes = node.childNodes.asList()
-        val list = childNodes.filter { !it.nodeName.contains(match) }
-        return list
+        return childNodes.filter { !it.nodeName.contains(match) }
     }
 
     fun firstChildMatching(node: Node, match: String): Node? {