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/06/18 10:35:43 UTC

[isis] 02/03: ISIS-2350 RoTable, EventLogTable icons draggable to RoToolPanel

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 dc4bc560cb2aeb2d8b6bf537d5df177eec20fea2
Author: Jörg Rade <jo...@kuehne-nagel.com>
AuthorDate: Thu Jun 11 18:13:55 2020 +0200

    ISIS-2350 RoTable, EventLogTable icons draggable to RoToolPanel
---
 .../isis/client/kroviz/core/event/EventStore.kt    |  4 +--
 .../isis/client/kroviz/core/model/Exposer.kt       |  6 +---
 .../isis/client/kroviz/ui/kv/ColumnFactory.kt      |  6 ++--
 .../isis/client/kroviz/ui/kv/EventLogTable.kt      |  7 +++--
 .../apache/isis/client/kroviz/ui/kv/RoToolPanel.kt | 33 +++++++++++-----------
 5 files changed, 29 insertions(+), 27 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 269bc98..eb7cfef 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
@@ -11,8 +11,8 @@ import pl.treksoft.kvision.state.observableListOf
  * Subsequent invocations are served from this cache.
  * UI events (Dialogs, Windows, etc.) are logged here as well.
  *
- * @see https://en.wikipedia.org/wiki/Proxy_pattern
- * @see https://martinfowler.com/eaaDev/EventSourcing.html
+ * @see "https://en.wikipedia.org/wiki/Proxy_pattern"
+ * @see "https://martinfowler.com/eaaDev/EventSourcing.html"
  */
 object EventStore {
     var log = observableListOf<LogEntry>()
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/Exposer.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/Exposer.kt
index 8942b77..bd93797 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/Exposer.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/Exposer.kt
@@ -40,11 +40,7 @@ class Exposer(val delegate: TObject) {
 
     // eg. for dataNucleusId
     fun get(propertyName: String): Any? {
-        val delegatedProperty = delegate.getProperty(propertyName)
-        if (delegatedProperty != null) {
-            return delegatedProperty.value
-        }
-        return null
+        return this.delegate.getProperty(propertyName)?.value
     }
 
 }
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/ColumnFactory.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/ColumnFactory.kt
index 95772be..a7cec95 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/ColumnFactory.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/ColumnFactory.kt
@@ -1,5 +1,6 @@
 package org.apache.isis.client.kroviz.ui.kv
 
+import org.apache.isis.client.kroviz.core.event.EventStore
 import org.apache.isis.client.kroviz.core.model.Exposer
 import org.apache.isis.client.kroviz.core.model.ListDM
 import pl.treksoft.kvision.html.Button
@@ -77,11 +78,12 @@ class ColumnFactory {
     }
 
     private fun buildButton(data: Exposer, iconName: String?): Button {
+        val tObject = data.delegate
         val b = Button(text = "", icon = iconName, style = ButtonStyle.LINK).onClick {
-            val tObject = (data as Exposer).delegate
             UiManager.displayModel(tObject)
         }
-        b.setDragDropData(RoToolPanel.format, "element")
+        val logEntry = EventStore.find(tObject)!!
+        b.setDragDropData(RoToolPanel.format, logEntry.url)
         return b
     }
 
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/EventLogTable.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/EventLogTable.kt
index 8047106..06f94f2 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/EventLogTable.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/EventLogTable.kt
@@ -61,10 +61,13 @@ class EventLogTable(val model: List<LogEntry>) : VPanel() {
     )
 
     private fun buildButton(data: LogEntry): Button {
-        val b = Button(data.title, icon = data.state.iconName, style = ButtonStyle.LINK).onClick {
+        val b = Button(
+                data.title,
+                icon = data.state.iconName,
+                style = ButtonStyle.LINK).onClick {
             console.log(data)
         }
-        b.setDragDropData(RoToolPanel.format, "element")
+        b.setDragDropData(RoToolPanel.format, data.url)
         return b
     }
 
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/RoToolPanel.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/RoToolPanel.kt
index 3059460..ba2b587 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/RoToolPanel.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/RoToolPanel.kt
@@ -1,8 +1,9 @@
 package org.apache.isis.client.kroviz.ui.kv
 
 import kotlinx.serialization.UnstableDefault
+import org.apache.isis.client.kroviz.core.event.EventStore
+import org.apache.isis.client.kroviz.core.event.ResourceSpecification
 import org.apache.isis.client.kroviz.core.model.Exposer
-import org.apache.isis.client.kroviz.handler.TObjectHandler
 import org.apache.isis.client.kroviz.to.TObject
 import org.apache.isis.client.kroviz.ui.BrowserWindow
 import org.apache.isis.client.kroviz.utils.IconManager
@@ -15,7 +16,7 @@ import pl.treksoft.kvision.panel.VPanel
 @OptIn(UnstableDefault::class)
 object RoToolPanel : SimplePanel() {
 
-    const val format = "object/model"
+    const val format = "text/plain"
     val panel = VPanel()
     private val buttons = mutableListOf<Button>()
 
@@ -24,14 +25,14 @@ object RoToolPanel : SimplePanel() {
         panel.width = CssSize(40, UNIT.px)
         panel.height = CssSize(100, UNIT.perc)
         panel.background = Background(color = Color.name(Col.GHOSTWHITE))
-        panel.setDropTarget(format) { data ->
-            console.log("[RoToolPanel] panel")
-            console.log(data)
-            //TODO extract Exposer/TO from data
-            val jsonStr = CFG.str
-            val to = TObjectHandler().parse(jsonStr) as TObject
-            val exp= Exposer(to)
-            addButton(exp)
+        panel.setDropTargetData(format) { url ->
+            val reSpec = ResourceSpecification(url!!)
+            val logEntry = EventStore.find(reSpec)!!
+            val obj = logEntry.obj!!
+            if (obj is TObject) {
+                val exp = Exposer(obj)
+                addButton(exp)
+            }
         }
 
         initButtons()
@@ -40,10 +41,8 @@ object RoToolPanel : SimplePanel() {
 
     private fun initButtons() {
         val drop: Button = buildButton("Toolbox", "Sample drop target")
-        drop.setDropTarget(format) { data ->
-            console.log("[RoToolPanel]")
-            console.log(data)
-            val obj = data.dataTransfer?.getData(format)!!
+        drop.setDropTarget(format) {
+            //IMPROVE use string for wikipedia search
             BrowserWindow("http://isis.apache.org").open()
         }
         buttons.add(drop)
@@ -65,12 +64,14 @@ object RoToolPanel : SimplePanel() {
 
     override fun show(): Widget {
         panel.width = CssSize(40, UNIT.px)
-        buttons.forEach { it -> panel.add(it) }
+        buttons.forEach { panel.add(it) }
         return super.show()
     }
 
     private fun addButton(exp: Exposer) {
-        val b = buildButton(exp.iconName, "dynamic sample")
+        val b = buildButton(exp.iconName, "dynamic sample").onClick {
+
+        }
         buttons.add(b)
         panel.add(b)
     }