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? {