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/11/10 07:38:58 UTC

[isis] branch master updated (2d051f9 -> 87d8815)

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

joergrade pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git.


    from 2d051f9  ISIS-2883: site-map: fix collections; also show action descriptions
     new 9c180ec  ISIS-2348 cleanup imports
     new af46825  ISIS-2348 Replay Diff opens
     new df5836c  ISIS-2348 css etc. set for Dialogs, kvision version upgrade, Replay* refactored
     new dc32aa1  ISIS-2348 Icons amended
     new 52c586d  ISIS-2348 Replay against current version remote (incode/demoUrlRemote).
     new 87d8815  Merge branch 'master' of https://github.com/apache/isis

The 6 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 incubator/clients/kroviz/gradle.properties         |   2 +-
 .../org/apache/isis/client/kroviz/core/Session.kt  |   5 +-
 .../isis/client/kroviz/core/event/LogEntry.kt      |   7 +-
 .../isis/client/kroviz/core/event/ReplayCommand.kt |  37 +++--
 .../apache/isis/client/kroviz/ui/core/Constants.kt |   2 +-
 .../isis/client/kroviz/ui/core/MenuFactory.kt      |   1 -
 .../apache/isis/client/kroviz/ui/core/RoDialog.kt  |  43 +++---
 .../apache/isis/client/kroviz/ui/core/RoIconBar.kt |   1 -
 .../apache/isis/client/kroviz/ui/core/RoMenuBar.kt |   8 +-
 .../apache/isis/client/kroviz/ui/core/UiManager.kt |   6 +-
 .../client/kroviz/ui/diagram/LinkTreeDiagram.kt    |   3 +-
 .../isis/client/kroviz/ui/dialog/DiagramDialog.kt  |   1 -
 .../isis/client/kroviz/ui/dialog/ErrorDialog.kt    |  10 +-
 .../isis/client/kroviz/ui/dialog/EventDialog.kt    |  99 +++++++++++++
 .../client/kroviz/ui/dialog/EventExportDialog.kt   |   1 -
 .../{EventExportDialog.kt => EventImportDialog.kt} |   3 +-
 .../isis/client/kroviz/ui/dialog/EventLogDetail.kt |   1 -
 .../isis/client/kroviz/ui/dialog/LoginPrompt.kt    |   5 +-
 .../client/kroviz/ui/dialog/ReplayDiffDialog.kt    |  89 ++++++++++++
 .../client/kroviz/ui/panel/DynamicMenuBuilder.kt   |   1 -
 .../isis/client/kroviz/ui/panel/EventLogTable.kt   |  18 +--
 .../apache/isis/client/kroviz/utils/IconManager.kt | 157 ++++++++++++---------
 .../apache/isis/client/kroviz/utils/StringUtils.kt |  13 ++
 .../kroviz/src/main/resources/css/kroviz.css       |  21 ++-
 .../isis/client/kroviz/to/ResultValueTest.kt       |   1 -
 .../isis/client/kroviz/util/StringUtilsTest.kt     |   2 +-
 26 files changed, 391 insertions(+), 146 deletions(-)
 create mode 100644 incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/EventDialog.kt
 copy incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/{EventExportDialog.kt => EventImportDialog.kt} (98%)
 create mode 100644 incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/ReplayDiffDialog.kt

[isis] 01/06: ISIS-2348 cleanup imports

Posted by jo...@apache.org.
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 9c180ecc8696db0622ec0384239c080988468a6e
Author: Jörg Rade <jo...@kuehne-nagel.com>
AuthorDate: Sat Oct 23 11:36:24 2021 +0200

    ISIS-2348 cleanup imports
---
 .../src/main/kotlin/org/apache/isis/client/kroviz/ui/core/MenuFactory.kt | 1 -
 .../src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoIconBar.kt   | 1 -
 .../src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoMenuBar.kt   | 1 -
 .../kotlin/org/apache/isis/client/kroviz/ui/diagram/LinkTreeDiagram.kt   | 1 -
 .../main/kotlin/org/apache/isis/client/kroviz/ui/dialog/DiagramDialog.kt | 1 -
 .../kotlin/org/apache/isis/client/kroviz/ui/dialog/EventExportDialog.kt  | 1 -
 .../kotlin/org/apache/isis/client/kroviz/ui/dialog/EventLogDetail.kt     | 1 -
 .../kotlin/org/apache/isis/client/kroviz/ui/panel/DynamicMenuBuilder.kt  | 1 -
 .../src/test/kotlin/org/apache/isis/client/kroviz/to/ResultValueTest.kt  | 1 -
 9 files changed, 9 deletions(-)

diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/MenuFactory.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/MenuFactory.kt
index 3658bcf..e0dd415 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/MenuFactory.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/MenuFactory.kt
@@ -22,7 +22,6 @@ import io.kvision.core.Component
 import io.kvision.dropdown.DropDown
 import io.kvision.dropdown.separator
 import io.kvision.html.ButtonStyle
-import org.apache.isis.client.kroviz.core.event.EventStore
 import org.apache.isis.client.kroviz.core.event.ResourceProxy
 import org.apache.isis.client.kroviz.to.Link
 import org.apache.isis.client.kroviz.to.TObject
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoIconBar.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoIconBar.kt
index ddc7cff..99bd36e 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoIconBar.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoIconBar.kt
@@ -20,7 +20,6 @@ package org.apache.isis.client.kroviz.ui.core
 
 import kotlinx.browser.document
 import kotlinx.dom.removeClass
-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.to.TObject
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoMenuBar.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoMenuBar.kt
index 13f1610..3df4437 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoMenuBar.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoMenuBar.kt
@@ -28,7 +28,6 @@ import io.kvision.navbar.*
 import io.kvision.panel.SimplePanel
 import io.kvision.panel.vPanel
 import kotlinx.browser.window
-import org.apache.isis.client.kroviz.core.event.EventStore
 import org.apache.isis.client.kroviz.core.event.ReplayCommand
 import org.apache.isis.client.kroviz.to.mb.Menubars
 import org.apache.isis.client.kroviz.ui.chart.SampleChartModel
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/diagram/LinkTreeDiagram.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/diagram/LinkTreeDiagram.kt
index eae17e8..749f715 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/diagram/LinkTreeDiagram.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/diagram/LinkTreeDiagram.kt
@@ -20,7 +20,6 @@ package org.apache.isis.client.kroviz.ui.diagram
 
 import org.apache.isis.client.kroviz.core.aggregator.AggregatorWithLayout
 import org.apache.isis.client.kroviz.core.aggregator.BaseAggregator
-import org.apache.isis.client.kroviz.core.event.EventStore
 import org.apache.isis.client.kroviz.core.event.LogEntry
 import org.apache.isis.client.kroviz.core.event.ResourceSpecification
 import org.apache.isis.client.kroviz.to.HasLinks
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 c04544b..4c7bf1a 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,7 +18,6 @@
  */
 package org.apache.isis.client.kroviz.ui.dialog
 
-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
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/EventExportDialog.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/EventExportDialog.kt
index b41f475..9f56227 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/EventExportDialog.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/EventExportDialog.kt
@@ -19,7 +19,6 @@
 package org.apache.isis.client.kroviz.ui.dialog
 
 import org.apache.isis.client.kroviz.core.event.EventState
-import org.apache.isis.client.kroviz.core.event.EventStore
 import org.apache.isis.client.kroviz.core.event.LogEntry
 import org.apache.isis.client.kroviz.core.event.ReplayEvent
 import org.apache.isis.client.kroviz.to.ValueType
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/EventLogDetail.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/EventLogDetail.kt
index 8b49cc3..1c5ed95 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/EventLogDetail.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/EventLogDetail.kt
@@ -18,7 +18,6 @@
  */
 package org.apache.isis.client.kroviz.ui.dialog
 
-import org.apache.isis.client.kroviz.core.event.EventStore
 import org.apache.isis.client.kroviz.core.event.LogEntry
 import org.apache.isis.client.kroviz.core.event.ResourceSpecification
 import org.apache.isis.client.kroviz.to.ValueType
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/panel/DynamicMenuBuilder.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/panel/DynamicMenuBuilder.kt
index 6e9aba0..51d1792 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/panel/DynamicMenuBuilder.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/panel/DynamicMenuBuilder.kt
@@ -20,7 +20,6 @@
 package org.apache.isis.client.kroviz.ui.panel
 
 import io.kvision.utils.obj
-import org.apache.isis.client.kroviz.core.event.EventStore
 import org.apache.isis.client.kroviz.core.event.ResourceProxy
 import org.apache.isis.client.kroviz.to.TObject
 import org.apache.isis.client.kroviz.ui.chart.ChartFactory
diff --git a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/to/ResultValueTest.kt b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/to/ResultValueTest.kt
index 29a93ff..640ee7d 100644
--- a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/to/ResultValueTest.kt
+++ b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/to/ResultValueTest.kt
@@ -21,7 +21,6 @@ package org.apache.isis.client.kroviz.to
 import org.apache.isis.client.kroviz.IntegrationTest
 
 import org.apache.isis.client.kroviz.core.aggregator.ObjectAggregator
-import org.apache.isis.client.kroviz.core.event.EventStore
 import org.apache.isis.client.kroviz.handler.ResultValueHandler
 import org.apache.isis.client.kroviz.snapshots.simpleapp1_16_0.ACTIONS_DOWNLOAD_VALUE
 import org.apache.isis.client.kroviz.snapshots.simpleapp1_16_0.ACTIONS_OPEN_SWAGGER_UI

[isis] 03/06: ISIS-2348 css etc. set for Dialogs, kvision version upgrade, Replay* refactored

Posted by jo...@apache.org.
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 df5836ced66edbf412f91d3eca0895b768756b12
Author: Jörg Rade <jo...@kuehne-nagel.com>
AuthorDate: Tue Nov 2 18:59:35 2021 +0100

    ISIS-2348 css etc. set for Dialogs, kvision version upgrade, Replay* refactored
---
 incubator/clients/kroviz/gradle.properties         |  2 +-
 .../isis/client/kroviz/core/event/LogEntry.kt      |  3 +-
 .../isis/client/kroviz/core/event/ReplayCommand.kt |  7 +--
 .../apache/isis/client/kroviz/ui/core/RoDialog.kt  | 43 ++++++++++---------
 .../isis/client/kroviz/ui/dialog/LoginPrompt.kt    |  2 +-
 .../client/kroviz/ui/dialog/ReplayDiffDialog.kt    | 50 ++++++++++++++++++----
 .../isis/client/kroviz/ui/panel/EventLogTable.kt   | 18 ++------
 .../apache/isis/client/kroviz/utils/IconManager.kt |  3 +-
 .../apache/isis/client/kroviz/utils/StringUtils.kt | 13 ++++++
 .../kroviz/src/main/resources/css/kroviz.css       | 21 +++++++--
 10 files changed, 107 insertions(+), 55 deletions(-)

diff --git a/incubator/clients/kroviz/gradle.properties b/incubator/clients/kroviz/gradle.properties
index 716e43f..c035209 100644
--- a/incubator/clients/kroviz/gradle.properties
+++ b/incubator/clients/kroviz/gradle.properties
@@ -21,7 +21,7 @@ javaVersion=1.8
 systemProp.kotlinVersion=1.5.31
 serializationVersion=1.3.0
 #Dependencies
-systemProp.kvisionVersion=5.4.0
+systemProp.kvisionVersion=5.4.3
 coroutinesVersion=1.5.2
 
 kotlin.mpp.stability.nowarn=true
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 0aca7f4..ed2350d 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
@@ -46,7 +46,8 @@ enum class EventState(val id: String, val iconName: String, val style: ButtonSty
     DUPLICATE("DUPLICATE", "fas fa-copy", ButtonStyle.OUTLINESUCCESS),
     CLOSED("CLOSED", "fas fa-eye-slash", ButtonStyle.OUTLINEINFO),
     RELOAD("RELOAD", "fas fa-retweet", ButtonStyle.OUTLINEWARNING),
-    MISSING("MISSING", "fas fa-bug", ButtonStyle.OUTLINEDANGER)
+    MISSING("MISSING", "fas fa-bug", ButtonStyle.OUTLINEDANGER),
+    DIFF("DIFF", "fas fa-bell", ButtonStyle.DANGER),
     // IMPROVE multiple aspects intermangled: req/resp, view, as well as cache
     // encapsulate access with managers?
 }
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/ReplayCommand.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/ReplayCommand.kt
index bad2953..c6d3297 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/ReplayCommand.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/ReplayCommand.kt
@@ -29,7 +29,6 @@ import org.apache.isis.client.kroviz.to.Represention
 import org.apache.isis.client.kroviz.to.TObject
 import org.apache.isis.client.kroviz.ui.core.UiManager
 import org.apache.isis.client.kroviz.ui.dialog.ReplayDiffDialog
-import org.apache.isis.client.kroviz.ui.panel.EventLogTable
 
 val AppScope = CoroutineScope(window.asCoroutineDispatcher())
 
@@ -45,11 +44,7 @@ class ReplayCommand {
         replay(uiEvents)
         val actualEvents: MutableList<LogEntry> = eventStore.log
 
-        val expectedTable = EventLogTable(expectedEvents)
-        val actualTable = EventLogTable(actualEvents)
-        val rdd = ReplayDiffDialog()
-        rdd.expectedPanel.add(expectedTable)
-        rdd.actualPanel.add(actualTable)
+        val rdd = ReplayDiffDialog(expectedEvents, actualEvents)
         rdd.dialog.open()
     }
 
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoDialog.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoDialog.kt
index ec579c1..6286239 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoDialog.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoDialog.kt
@@ -18,16 +18,12 @@
  */
 package org.apache.isis.client.kroviz.ui.core
 
-import io.kvision.core.CssSize
-import io.kvision.core.JustifyContent
-import io.kvision.core.UNIT
-import io.kvision.core.Widget
+import io.kvision.core.*
 import io.kvision.form.FormPanel
 import io.kvision.html.Button
 import io.kvision.html.ButtonStyle
 import io.kvision.panel.HPanel
 import io.kvision.panel.vPanel
-import io.kvision.utils.perc
 import org.apache.isis.client.kroviz.to.ValueType
 import org.apache.isis.client.kroviz.ui.dialog.Command
 import org.apache.isis.client.kroviz.ui.dialog.DiagramDialog
@@ -97,28 +93,35 @@ class RoDialog(
         contentWidth = CssSize(widthPerc, UNIT.perc)
         contentHeight = CssSize(heightPerc, UNIT.perc)
 
-        vPanel(justify = JustifyContent.SPACEBETWEEN) {
-            height = 100.perc
-            formPanel = FormPanelFactory(items).panel
+        vPanel() {
+            height = CssSize(heightPerc, UNIT.vh)
+            this.addCssClass("dialog")
 
-            add(formPanel!!, grow = 2)
+            formPanel = FormPanelFactory(items).panel
+            formPanel!!.addCssClass("dialog-content")
+            add(formPanel!!)
 
-            val buttonBar = HPanel(spacing = 10)
+            val buttonBar = buildButtonBar(customButtons)
             buttonBar.addCssClass("button-bar")
-            buttonBar.add(okButton)
-            customButtons.forEach {
-                val b = createButton(it)
-                buttonBar.add(b)
-            }
-            buttonBar.add(cancelButton)
-            if (items.isNotEmpty() && hasScalableContent()) {
-                buttonBar.add(scaleUpButton)
-                buttonBar.add(scaleDownButton)
-            }
             add(buttonBar)
         }
     }
 
+    private fun buildButtonBar(customButtons: List<FormItem>): HPanel {
+        val buttonBar = HPanel(spacing = 10)
+        buttonBar.add(okButton)
+        customButtons.forEach {
+            val b = createButton(it)
+            buttonBar.add(b)
+        }
+        buttonBar.add(cancelButton)
+        if (items.isNotEmpty() && hasScalableContent()) {
+            buttonBar.add(scaleUpButton)
+            buttonBar.add(scaleDownButton)
+        }
+        return buttonBar
+    }
+
     private fun execute() {
         command.execute()
         close()
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/LoginPrompt.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/LoginPrompt.kt
index a20e8b6..e11e5a7 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/LoginPrompt.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/LoginPrompt.kt
@@ -44,7 +44,7 @@ class LoginPrompt : Command() {
         formItems.add(FormItem("Url", ValueType.TEXT, url))
         formItems.add(FormItem("User", ValueType.TEXT, username))
         formItems.add(FormItem("Password", ValueType.PASSWORD, password))
-        form = RoDialog(caption = "Connect", items = formItems, command = this)
+        form = RoDialog(caption = "Connect", items = formItems, command = this, heightPerc = 27)
         val at = UiManager.position!!
         form.open(at)
     }
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/ReplayDiffDialog.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/ReplayDiffDialog.kt
index ce9e7bc..9f04df5 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/ReplayDiffDialog.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/ReplayDiffDialog.kt
@@ -20,36 +20,70 @@
 package org.apache.isis.client.kroviz.ui.dialog
 
 import io.kvision.core.CssSize
+import io.kvision.core.FlexDirection
 import io.kvision.core.UNIT
 import io.kvision.panel.Direction
 import io.kvision.panel.SplitPanel
 import io.kvision.panel.VPanel
-import org.apache.isis.client.kroviz.ui.core.FormItem
+import org.apache.isis.client.kroviz.core.event.EventState
+import org.apache.isis.client.kroviz.core.event.LogEntry
+import org.apache.isis.client.kroviz.core.event.ResourceSpecification
 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.EventLogTable
 
-class ReplayDiffDialog : Command() {
+class ReplayDiffDialog(
+    private val expectedEvents: List<LogEntry>,
+    actualEvents: List<LogEntry>
+) : Command() {
     var dialog: RoDialog
 
-    val expectedPanel = VPanel(spacing = 3) {
+    private val expectedPanel = VPanel(spacing = 3) {
         width = CssSize(20, UNIT.perc)
     }
-    val actualPanel = VPanel(spacing = 3) {
+    private val actualPanel = VPanel(spacing = 3) {
         width = CssSize(80, UNIT.perc)
     }
 
     init {
         dialog = RoDialog(
-            caption = "Replay Diff",
-            items = mutableListOf<FormItem>(),
+            caption = "Replay Events: Expected vs. Actual",
+            items = mutableListOf(),
             command = this,
-            defaultAction = "",
+            defaultAction = "Compare",
             widthPerc = 60,
-            customButtons = mutableListOf<FormItem>()
+            heightPerc = 70,
+            customButtons = mutableListOf()
         )
+        val expectedTable = EventLogTable(expectedEvents)
+        expectedTable.tabulator.addCssClass("tabulator-in-dialog")
+        val actualTable = EventLogTable(actualEvents)
+        actualTable.tabulator.addCssClass("tabulator-in-dialog")
+        expectedPanel.add(expectedTable)
+        actualPanel.add(actualTable)
+
         val splitPanel = SplitPanel(direction = Direction.VERTICAL)
+        splitPanel.addCssClass("dialog-content")
+        splitPanel.flexDirection = FlexDirection.ROW
         splitPanel.add(expectedPanel)
         splitPanel.add(actualPanel)
         dialog.formPanel!!.add(splitPanel)
     }
 
+    override fun execute(action: String?) {
+        // iterate over expected and set each status to DIFF, where responses don't match
+        expectedEvents.forEach { xp ->
+            val rs = ResourceSpecification(xp.url, xp.subType)
+            val actual = UiManager.getEventStore().findBy(rs)
+            if (actual != null) {
+                val isSame = actual.response == xp.response
+                if (!isSame) {
+                    xp.state = EventState.DIFF
+                }
+            } else {
+                xp.state = EventState.DIFF
+            }
+        }
+    }
+
 }
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/panel/EventLogTable.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/panel/EventLogTable.kt
index 7ad8cbf..d5ce222 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/panel/EventLogTable.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/panel/EventLogTable.kt
@@ -24,6 +24,7 @@ import io.kvision.html.ButtonStyle
 import io.kvision.panel.VPanel
 import io.kvision.panel.hPanel
 import io.kvision.tabulator.*
+import io.kvision.utils.auto
 import io.kvision.utils.obj
 import io.kvision.utils.px
 import org.apache.isis.client.kroviz.core.event.LogEntry
@@ -101,30 +102,19 @@ class EventLogTable(val model: List<LogEntry>) : VPanel() {
 
     private fun buildObjectButton(data: LogEntry): Button {
         val b = Button(
-                text = shorten(data.title),
+                text = StringUtils.shorten(data.title),
                 icon = data.state.iconName,
                 style = ButtonStyle.LINK)
         b.onClick {
             kotlinx.browser.window.open(data.title) //IMPROVE should be URL
         }
         val tto = TooltipOptions(title = data.title)
-        b.enableTooltip(tto)
+        // tabulator tooltip is buggy: often the tooltip doesn't go away and the color is not settable
+        //b.enableTooltip(tto)
         if (data.obj is TObject) b.setDragDropData(Constants.stdMimeType, data.url)
         return b
     }
 
-    private fun shorten(url: String): String {
-        var result = url
-        val signature = Constants.restInfix
-        if (url.contains(signature)) {
-            // strip off protocol, host, port
-            val protocolHostPort = UiManager.getUrl()
-            result = result.replace(protocolHostPort + signature, "")
-            result = StringUtils.removeHexCode(result)
-        }
-        return result
-    }
-
     private fun buildActionButton(data: LogEntry): Button {
         val b = Button(
                 text = "",
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/IconManager.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/IconManager.kt
index 6058f67..af0b929 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/IconManager.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/IconManager.kt
@@ -37,6 +37,7 @@ object IconManager {
             "Burger" to "bars",
             "Chart" to "magic",
             "Close" to "times",
+            "Compare" to "balance-scale",
             "Configuration" to "wrench",
             "Connect" to "plug",
             "Console" to "terminal",
@@ -52,7 +53,7 @@ object IconManager {
             "Edit" to "pencil",
             "Error Handling" to "bug",
             "Error" to "bug",
-            "Event" to "road",
+            "Event" to "history",
             "Experimental" to "flask",
             "Export" to "file-export",
             "Facet" to "gem",
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/StringUtils.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/StringUtils.kt
index 99e63a7..b52d456 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/StringUtils.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/StringUtils.kt
@@ -22,6 +22,7 @@ import org.apache.isis.client.kroviz.to.Argument
 import org.apache.isis.client.kroviz.to.Link
 import org.apache.isis.client.kroviz.to.TObject
 import org.apache.isis.client.kroviz.ui.core.Constants
+import org.apache.isis.client.kroviz.ui.core.UiManager
 
 object StringUtils {
 
@@ -221,4 +222,16 @@ object StringUtils {
                 .toString() + pad
     }
 
+    fun shorten(url: String): String {
+        var result = url
+        val signature = Constants.restInfix
+        if (url.contains(signature)) {
+            // strip off protocol, host, port
+            val protocolHostPort = UiManager.getUrl()
+            result = result.replace(protocolHostPort + signature, "")
+            result = StringUtils.removeHexCode(result)
+        }
+        return result
+    }
+
 }
diff --git a/incubator/clients/kroviz/src/main/resources/css/kroviz.css b/incubator/clients/kroviz/src/main/resources/css/kroviz.css
index 7f6c23e..ee20ceb 100644
--- a/incubator/clients/kroviz/src/main/resources/css/kroviz.css
+++ b/incubator/clients/kroviz/src/main/resources/css/kroviz.css
@@ -121,11 +121,26 @@ textarea {
 }
 
 .button-bar {
-    display: flex;
-    align-self: baseline !important;
     margin-top: 10px;
     margin-left: 10px;
-    margin-bottom: 12px;
+    margin-bottom: 10px;
+    position:absolute;
+    bottom:0;
+}
+
+.tabulator-in-dialog {
+    max-height: calc(70vh - 60px);
+}
+
+.dialog-content {
+    display: flex;
+    flex-direction: column;
+    overflow-y: auto;
+}
+
+.dialog {
+    display: flex;
+    height: 100vh;
 }
 
 @font-face {

[isis] 06/06: Merge branch 'master' of https://github.com/apache/isis

Posted by jo...@apache.org.
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 87d88150a7c6419dbfe8c154f6609988e85b73f7
Merge: 52c586d 2d051f9
Author: Jörg Rade <jo...@kuehne-nagel.com>
AuthorDate: Wed Nov 10 08:38:39 2021 +0100

    Merge branch 'master' of https://github.com/apache/isis

 .../ci-build-artifacts-no-push-gradle.yml          |   2 +-
 .../workflows/ci-build-artifacts-no-push-maven.yml |   2 +-
 .github/workflows/ci-build-site-no-push.yml        |   2 +-
 .../java/org/apache/isis/applib/Identifier.java    |  27 +-
 .../org/apache/isis/applib/IsisModuleApplib.java   |   2 +
 .../org/apache/isis/applib/adapters/Renderer.java  |  10 +-
 .../applib/adapters/ValueSemanticsAbstract.java    |  38 +-
 .../applib/adapters/ValueSemanticsProvider.java    |   2 +-
 .../isis/applib/annotation/EqualByContent.java     |  68 ---
 .../apache/isis/applib/annotation/MinLength.java   |   2 +-
 .../apache/isis/applib/annotation/Property.java    |  18 -
 .../apache/isis/applib/annotation/SemanticsOf.java |   4 +
 .../isis/applib/annotation/ValueSemantics.java     |  92 ++++
 .../isis/applib/services/iactn/Execution.java      |   4 +-
 .../applib/services/sitemap/SitemapService.java    |  15 +-
 .../services/sitemap/SitemapServiceMenu.java       |  89 ++++
 .../commons/internal/functions/_Functions.java     |  10 +-
 ...dapter.java => _Functions_IndexedZeroBase.java} |   8 +-
 .../_testing/MetaModelContext_forTesting.java      |  21 +-
 .../facets/actcoll/typeof/TypeOfFacet.java         |   4 +-
 ...redFromArray.java => TypeOfFacetFromArray.java} |   5 +-
 ...mGenerics.java => TypeOfFacetFromGenerics.java} |   5 +-
 ...=> ContributingFacetFromMixinFacetFactory.java} |   4 +-
 ...tInServiceMenuFacetFromDomainServiceFacet.java} |   4 +-
 ...iceMenuFacetFromDomainServiceFacetFactory.java} |   6 +-
 ....java => DescribedAsFacetOnMemberFromType.java} |   6 +-
 .../DomainObjectAnnotationFacetFactory.java        |   4 +-
 ....java => HiddenTypeFacetFromAuthorization.java} |   4 +-
 ...> HiddenTypeFacetFromAuthorizationFactory.java} |   8 +-
 ...ame.java => LogicalTypeFacetFromClassName.java} |   6 +-
 ...a => LogicalTypeFacetFromClassNameFactory.java} |  14 +-
 ... => LogicalTypeFacetFromIoCNamingStrategy.java} |   4 +-
 .../metamodel/facets/object/mixin/MixinFacet.java  |   1 -
 .../facets/object/mixin/MixinFacetAbstract.java    |   8 +-
 .../mixin/MixinFacetForDomainObjectAnnotation.java |   8 +-
 ....java => CssClassFacetFromProjectionFacet.java} |   4 +-
 ...acet.java => IconFacetFromProjectionFacet.java} |   8 +-
 ...cet.java => TitleFacetFromProjectionFacet.java} |   4 +-
 .../object/support/ObjectSupportFacetFactory.java  |   4 +-
 ...thod.java => TitleFacetFromToStringMethod.java} |   6 +-
 .../title/parser/TitleFacetUsingValueFacet.java    |   9 +-
 .../metamodel/facets/object/value/ValueFacet.java  |   4 +-
 .../facets/object/value/ValueFacetAbstract.java    |  10 +-
 .../MaxFractionalDigitsFacet.java                  |  10 +-
 .../MaxFractionalDigitsFacetAbstract.java          |  31 +-
 .../{maxlen => digits}/MaxTotalDigitsFacet.java    |  12 +-
 .../MaxTotalDigitsFacetAbstract.java               |  26 +-
 .../MinFractionalDigitsFacet.java}                 |  15 +-
 .../MinFractionalDigitsFacetAbstract.java}         |  35 +-
 .../MinIntegerDigitsFacet.java}                    |  19 +-
 .../MinIntegerDigitsFacetAbstract.java}            |  35 +-
 ...et.java => LabelAtFacetFromMultiLineFacet.java} |   5 +-
 ...ameterFromJavaxValidationAnnotationFactory.java |  58 ---
 ...ameterChoicesFacetFromChoicesFacetFactory.java} |   4 +-
 ...va => DescribedAsFacetOnParameterFromType.java} |   6 +-
 ... => TypicalLengthFacetOnParameterFromType.java} |   8 +-
 ...FromJavaxValidationDigitsAnnotationFactory.java |  58 ---
 ...ropertyFromJavaxValidationDigitsAnnotation.java |  48 --
 ...a => PropertyChoicesFacetFromChoicesFacet.java} |   5 +-
 ...opertyChoicesFacetFromChoicesFacetFactory.java} |   6 +-
 ...=> PropertyDefaultFacetFromDefaultedFacet.java} |   8 +-
 ...va => PropertyDefaultFacetFromTypeFactory.java} |   6 +-
 ...a => DisabledFacetOnPropertyFromImmutable.java} |   8 +-
 ...sabledFacetOnPropertyFromImmutableFactory.java} |   6 +-
 ... DisabledFacetOnPropertyFromMissingSetter.java} |   4 +-
 .../DisabledFacetOnPropertyInferredFactory.java    |   2 +-
 .../property/PropertyAnnotationFacetFactory.java   |  11 -
 ...a => TypicalLengthFacetOnPropertyFromType.java} |   8 +-
 ...sFacetFromJavaxValidationDigitsAnnotation.java} |  12 +-
 ...alDigitsFacetFromValueSemanticsAnnotation.java} |  27 +-
 ...sFacetFromJavaxValidationDigitsAnnotation.java} |  12 +-
 ...alDigitsFacetFromValueSemanticsAnnotation.java} |  19 +-
 ...alDigitsFacetFromValueSemanticsAnnotation.java} |  28 +-
 ...erDigitsFacetFromValueSemanticsAnnotation.java} |  28 +-
 .../ValueSemanticsAnnotationFacetFactory.java      | 127 +++++
 ...ValueSemanticsSelectingFacetForAnnotation.java} |  16 +-
 .../interactions/managed/ManagedAction.java        |  50 +-
 .../interactions/managed/ManagedFeature.java       |   5 +
 .../interactions/managed/ManagedMember.java        |   5 +
 .../managed/ParameterNegotiationModel.java         |   6 +
 .../interactions/managed/nonscalar/DataColumn.java |   4 +-
 .../identify/ObjectBookmarker_builtinHandlers.java |  32 +-
 .../DeriveDescribedAsFromTypePostProcessor.java    |  10 +-
 .../authorization/AuthorizationFacetAbstract.java  |  12 +-
 ...ectionParamDefaultsAndChoicesPostProcessor.java |   2 +-
 ...NavigationFacetFromHiddenTypePostProcessor.java |   4 +-
 ...ype.java => NavigationFacetFromHiddenType.java} |   4 +-
 .../DeriveProjectionFacetsPostProcessor.java       |  10 +-
 .../DeriveDisabledFromImmutablePostProcessor.java  |   8 +-
 ...iveChoicesFromExistingChoicesPostProcessor.java |  12 +-
 .../DeriveDefaultFromTypePostProcessor.java        |   8 +-
 .../DeriveTypicalLengthFromTypePostProcessor.java  |   8 +-
 .../dflt/ProgrammingModelFacetsJava11.java         |  24 +-
 .../core/metamodel/spec/feature/ObjectAction.java  |  60 +--
 .../spec/feature/ObjectActionParameter.java        |   2 +-
 .../core/metamodel/spec/feature/ObjectFeature.java |  19 +-
 .../feature/memento/ActionParameterMemento.java    |   2 +-
 .../metamodel/specloader/SpecificationLoader.java  |  46 +-
 .../specloader/SpecificationLoaderDefault.java     |  16 +-
 .../specloader/specimpl/ObjectActionDefault.java   |   4 +
 .../specloader/specimpl/ObjectActionMixedIn.java   |   4 +-
 .../specimpl/ObjectActionParameterAbstract.java    |  52 +--
 .../specloader/specimpl/ObjectMemberAbstract.java  |  13 +-
 .../specimpl/ObjectSpecificationAbstract.java      |  22 +-
 .../valuesemantics/BigDecimalValueSemantics.java   |  34 +-
 .../valuesemantics/BigIntegerValueSemantics.java   |   2 +-
 .../valuesemantics/BlobValueSemantics.java         |   2 +-
 .../valuesemantics/BooleanValueSemantics.java      |   2 +-
 .../valuesemantics/ByteValueSemantics.java         |   2 +-
 .../valuesemantics/ChangesDtoValueSemantics.java   |   2 +-
 .../valuesemantics/CharacterValueSemantics.java    |   2 +-
 .../valuesemantics/ClobValueSemantics.java         |   2 +-
 .../valuesemantics/CommandDtoValueSemantics.java   |   2 +-
 .../valuesemantics/DoubleValueSemantics.java       |   2 +-
 .../valuesemantics/EnumValueSemanticsAbstract.java |   2 +-
 .../valuesemantics/FloatValueSemantics.java        |   2 +-
 .../valuesemantics/IntValueSemantics.java          |   2 +-
 .../InteractionDtoValueSemantics.java              |   2 +-
 .../LocalResourcePathValueSemantics.java           |   2 +-
 .../valuesemantics/LongValueSemantics.java         |   2 +-
 .../valuesemantics/MarkupValueSemantics.java       |   2 +-
 .../valuesemantics/PasswordValueSemantics.java     |   2 +-
 .../valuesemantics/ShortValueSemantics.java        |   2 +-
 .../valuesemantics/StringValueSemantics.java       |   2 +-
 .../valuesemantics/TreeNodeValueSemantics.java     |   2 +-
 .../valuesemantics/URLValueSemantics.java          |   2 +-
 .../valuesemantics/UUIDValueSemantics.java         |   2 +-
 .../temporal/TemporalValueSemanticsProvider.java   |   2 +-
 .../LegacyTemporalValueSemanticsAbstract.java      |   2 +-
 .../joda/JodaLocalDateTimeValueSemantics.java      |   2 +-
 .../legacy/joda/JodaLocalDateValueSemantics.java   |   2 +-
 .../metamodel/facets/AbstractFacetFactoryTest.java |  52 ++-
 .../ActionAnnotationFacetFactoryTest_TypeOf.java   |   8 +-
 ...enuFacetFromDomainServiceFacetFactoryTest.java} |   6 +-
 .../CollectionAnnotationFacetFactoryTest.java      |   8 +-
 ...ollectionAnnotationFacetFactoryTest_typeOf.java |  16 +-
 .../title/TitleFacetViaMethodsFactoryTest.java     |   8 +-
 ... LogicalTypeFacetFromClassNameFactoryTest.java} |  14 +-
 .../facets/param/name/ParameterNameFacetTest.java  |   2 +-
 ...ValidationDigitsAnnotationFacetFactoryTest.java | 103 -----
 .../BigDecimalValueSemanticsProviderTest.java      |   2 +-
 .../value/BigIntValueSemanticsProviderTest.java    |   8 +-
 .../value/BlobValueSemanticsProviderTest.java      |   2 +-
 .../value/BooleanValueSemanticsProviderTest.java   |   4 +-
 .../value/ByteValueSemanticsProviderTest.java      |   8 +-
 .../value/CharacterValueSemanticsProviderTest.java |   2 +-
 .../value/ClobValueSemanticsProviderTest.java      |   2 +-
 .../value/DoubleValueSemanticsProviderTest.java    |   4 +-
 .../value/FloatValueSemanticsProviderTest.java     |   2 +-
 .../value/IntValueSemanticsProviderTest.java       |   8 +-
 .../JavaSqlDateValueSemanticsProviderTest.java     |   2 +-
 .../JavaUtilDateValueSemanticsProviderTest.java    |   2 +-
 .../value/LongValueSemanticsProviderTest.java      |   8 +-
 .../value/ShortValueSemanticsProviderTest.java     |  10 +-
 .../value/StringValueSemanticsProviderTest.java    |   6 +-
 .../ValueSemanticsProviderAbstractTestCase.java    |   4 +-
 .../ValueSemanticsAnnotationFacetFactoryTest.java  | 292 ++++++++++++
 .../dom/CustomerAsProxiedByDataNucleus.java        |   4 +-
 core/pom.xml                                       |  38 +-
 .../IsisModuleCoreRuntimeServices.java             |   2 +
 .../sitemap/SitemapServiceDefault.java             | 210 +++++++++
 .../_testing/InteractionService_forTesting.java    |  83 ++--
 .../HasAsciiDocDescription_description.java        |   5 +-
 .../AsciiDocValueSemanticsWithPreprocessing.java   |   4 +-
 .../jdo/ComplexNumberJdoValueSemantics.java        |   2 +-
 .../jpa/ComplexNumberJpaValueSemantics.java        |   2 +-
 .../customui/geocoding/GeoapifyClient.java         |   7 +-
 .../src/main/java/demoapp/dom/menubars.layout.xml  |   4 +
 .../cal/jpa/IsisCalendarEventJpa_update.java       |  92 ++++
 .../bigdecimals/jdo/JavaMathBigDecimalJdo.java     |   7 +-
 .../bigdecimals/jpa/JavaMathBigDecimalJpa.java     |   7 +-
 examples/demo/vaadin/pom.xml                       |   6 +-
 .../webapp/wicket/jpa/DemoAppWicketJpa.java        |   3 +-
 extensions/vw/exceldownload/ui/pom.xml             |  50 +-
 .../value/CalendarEventSemanticsProvider.java      | 137 +++++-
 .../ui/components/ScalarPanelAbstractLegacy.java   |  58 +--
 .../javafx/model/action/ActionUiModelFx.java       |  19 +-
 .../ui/components/markup/MarkupFieldFactory.java   |   2 +-
 .../vaadin/model/action/ActionUiModelVaa.java      |  10 +-
 isis-parent/pom.xml                                |   4 +-
 .../jdo/datanucleus/config/DnSettings.java         |   3 +-
 .../jdo/datanucleus/dialect/DnJdoDialect.java      |   8 +-
 .../jdo/metamodel/JdoProgrammingModel.java         |   8 +-
 .../JdoDiscriminatorAnnotationFacetFactory.java    |   6 +-
 ...eFacetFromJdoDiscriminatorValueAnnotation.java} |   4 +-
 ...eFacetFromJdoPersistenceCapableAnnotation.java} |   6 +-
 .../JdoPersistenceCapableFacetFactory.java         |   4 +-
 ...ecimalFromJdoColumnAnnotationFacetFactory.java} |  12 +-
 ...toryFacetFromAbsenceOfJdoColumnAnnotation.java} |   4 +-
 ...ndatoryFromJdoColumnAnnotationFacetFactory.java |   6 +-
 ...xFractionDigitsFacetInferredFromJdoColumn.java} |  10 +-
 ... => MaxLengthFacetFromJdoColumnAnnotation.java} |   6 +-
 ...LengthFromJdoColumnAnnotationFacetFactory.java} |   6 +-
 ...axTotalDigitsFacetFromJdoColumnAnnotation.java} |  10 +-
 ... DisabledFacetFromJdoPrimaryKeyAnnotation.java} |   4 +-
 .../JdoPrimaryKeyAnnotationFacetFactory.java       |   4 +-
 ... OptionalFacetFromJdoPrimaryKeyAnnotation.java} |   4 +-
 ...JdoDiscriminatorAnnotationFacetFactoryTest.java |   2 +-
 ...alFromJdoColumnAnnotationFacetFactoryTest.java} |  18 +-
 ...ryFromJdoColumnAnnotationFacetFactoryTest.java} |   6 +-
 ...venJdoPrimaryKeyAnnotationFacetFactoryTest.java |   4 +-
 .../jpa/metamodel/JpaProgrammingModel.java         |   4 +-
 ...ecimalFromJpaColumnAnnotationFacetFactory.java} |   8 +-
 ... => MandatoryFacetFromJpaColumnAnnotation.java} |   5 +-
 ...ndatoryFromJpaColumnAnnotationFacetFactory.java |   2 +-
 ...ractionDigitsFacetFromJpaColumnAnnotation.java} |  10 +-
 ...axTotalDigitsFacetFromJpaColumnAnnotation.java} |  10 +-
 .../DomainModelTest_usingGoodDomain.java           |   2 +-
 .../persistence/jdo/_JdoExceptionTranslator.java   |   8 +-
 .../interaction/DomainObjectTesterFactory.java     |  16 +-
 starters/pom.xml                                   |  12 +-
 subdomains/excel/applib/pom.xml                    |  20 +-
 subdomains/excel/testing/pom.xml                   |   5 +
 subdomains/{excel/testing => poi}/pom.xml          |  54 +--
 subdomains/pom.xml                                 |   9 +-
 subdomains/xdocreport/applib/pom.xml               |  74 ++-
 .../applib/service/XDocReportService.java          |   6 +-
 .../applib/service/example/Generate2Pdf.java       |   6 +-
 tooling/pom.xml                                    |   2 +-
 .../semantics/AsciiDocValueSemantics.java          |   2 +-
 .../semantics/XmlValueSemanticsAbstract.java       |   7 +-
 valuetypes/asciidoc/ui/pom.xml                     |   4 +-
 .../semantics/MarkdownValueSemantics.java          |   2 +-
 viewers/common/pom.xml                             |   2 +-
 .../isis/viewer/common/model/HasParentUiModel.java |   6 +-
 .../viewer/common/model/UiComponentHolder.java     |   2 +
 .../FormUiModel.java => ActionFormUiModel.java}    |  55 +--
 .../common/model/action/ActionUiMetaModel.java     | 147 ------
 .../viewer/common/model/action/ActionUiModel.java  |   8 +-
 ...ctionUiModel.java => HasActionInteraction.java} |  18 +-
 .../common/model/action/HasManagedAction.java      | 120 +++++
 .../action/{form => }/PendingParameterManager.java |   3 +-
 .../model/action/decorator/ActionUiDecorator.java  |   4 +-
 .../model/components/UiComponentFactory.java       |   1 -
 .../model/decorator/disable/DisablingUiModel.java  |  23 +-
 .../common/model/decorator/icon/IconDecorator.java |   2 +-
 .../decorator/prototyping/PrototypingUiModel.java  |   5 -
 .../model/decorator/tooltip/TooltipDecorator.java  |   4 -
 .../common/model/feature/ParameterUiModel.java     |   4 +-
 .../viewer/common/model/feature/ScalarUiModel.java |  21 +-
 .../viewer/common/model/header/HeaderUiModel.java  |   2 +-
 .../isis/viewer/common/model/menu/MenuItemDto.java |   9 +-
 .../viewer/common/model/{ => mixin}/HasTitle.java  |   3 +-
 .../common/model/{ => mixin}/HasUiComponent.java   |   3 +-
 .../common/model/{ => mixin}/HasUiMenuItem.java    |   2 +-
 .../domainobjects/ObjectActionReprRenderer.java    |   2 +-
 .../domainobjects/ObjectPropertyReprRenderer.java  |   8 +-
 .../AbstractTypeFeatureReprRenderer.java           |  25 +-
 .../ActionParameterDescriptionReprRenderer.java    |   2 +-
 .../links/ActionLinkUiComponentFactoryWkt.java     |   6 +-
 ...entFactoryWkt.java => ActionModelProvider.java} |   9 +-
 .../viewer/wicket/model/links/LinkAndLabel.java    | 122 ++---
 .../wicket/model/links/LinkAndLabelAbstract.java   | 110 -----
 .../wicket/model/links/ListOfLinksModel.java       |  53 +--
 .../viewer/wicket/model/models/ActionModel.java    | 342 +-------------
 .../wicket/model/models/ActionModelImpl.java       | 201 ++++++++
 .../viewer/wicket/model/models/ActionPrompt.java   |   7 +-
 .../wicket/model/models/ActionPromptProvider.java  |  14 +-
 .../model/models/ActionPromptWithExtraContent.java |   6 +-
 .../wicket/model/models/BookmarkTreeNode.java      |   6 +-
 .../wicket/model/models/BookmarkableModel.java     |   2 +-
 .../models/EntityCollectionModelStandalone.java    |   6 +-
 .../viewer/wicket/model/models/FormExecutor.java   |  22 +-
 .../wicket/model/models/FormExecutorContext.java   |   8 +-
 .../viewer/wicket/model/models/ScalarModel.java    |  41 +-
 .../wicket/model/models/ScalarParameterModel.java  |  17 +-
 .../viewer/wicket/model/models/ValueModel.java     |   7 +-
 .../isis/viewer/wicket/model/models/VoidModel.java |   8 +-
 .../interaction/act/ActionInteractionWkt.java      |  81 +++-
 .../wicket/model/util/PageParameterUtils.java      |  20 +-
 .../actionresponse/ActionResultResponseType.java   |  79 ++--
 .../wicket/ui/actionresponse/_DownloadHandler.java | 113 +++++
 .../wicket/ui/actionresponse/_RedirectHandler.java |  52 +++
 .../viewer/wicket/ui/components/LabelBase.java     |   4 +-
 .../ui/components/about/JarManifestListView.java   |  10 +-
 .../ui/components/actioninfo/ActionInfoPanel.java  |  12 +-
 .../entityactions/AdditionalLinksPanel.java        | 140 ++----
 .../entityactions/EntityActionLinkFactory.java     |  70 ---
 .../entityactions/LinkAndLabelFactory.java         | 153 ++++++
 .../actionmenu/entityactions/LinkAndLabelUtil.java |  76 ---
 .../actionmenu/serviceactions/CssMenuItem.java     |  53 +--
 .../serviceactions/MenuActionLinkFactory.java      |  50 --
 .../actionmenu/serviceactions/MenuActionPanel.java |  61 ++-
 .../serviceactions/ServiceActionUtil.java          | 108 ++---
 .../serviceactions/ServiceActionsPanel.java        |  69 +--
 .../actionprompt/ActionPromptHeaderPanel.java      |  20 +-
 .../actionprompt/ActionPromptModalWindow.html      |   3 +
 .../actionprompt/ActionPromptModalWindow.java      |  38 +-
 .../actionpromptsb/ActionPromptSidebar.java        |  16 +-
 .../components/actions/ActionParametersForm.java   |  51 +-
 .../actions/ActionParametersFormPanel.java         |  12 +-
 .../actions/ActionParametersFormPanelFactory.java  |   6 +-
 .../components/actions/ActionParametersPanel.java  |  11 +-
 .../bookmarkedpages/BookmarkedPagesPanel.java      | 125 ++---
 .../ui/components/collection/CollectionPanel.java  |  17 +-
 .../selector/CollectionSelectorPanel.java          | 162 +++----
 .../ajaxtable/IsisAjaxFallbackDataTable.java       |   4 +-
 .../ajaxtable/IsisAjaxHeadersToolbar.java          |  10 +-
 .../ajaxtable/IsisAjaxNavigationToolbar.java       |  42 +-
 .../ajaxtable/IsisTotalRecordsToolbar.java         |  19 +-
 .../ajaxtable/columns/GenericPropertyColumn.java   |  14 +-
 .../ajaxtable/columns/GenericTitleColumn.java      |   4 +-
 .../ajaxtable/columns/GenericToggleboxColumn.java  |   6 +-
 .../summary/CollectionContentsAsSummary.java       |   6 +-
 .../entity/collection/EntityCollectionPanel.java   |  18 +-
 .../components/entity/fieldset/PropertyGroup.java  |  55 ++-
 .../entity/header/EntityHeaderPanel.java           |  17 +-
 .../entity/icontitle/EntityIconAndTitlePanel.java  |  20 +-
 .../wicket/ui/components/footer/FooterPanel.java   |  31 +-
 .../wicket/ui/components/header/HeaderPanel.java   |  17 +-
 .../ui/components/layout/bs3/BS3GridPanel.java     |  35 +-
 .../wicket/ui/components/layout/bs3/Util.java      |  42 --
 .../components/layout/bs3/clearfix/ClearFix.java   |   7 +-
 .../wicket/ui/components/layout/bs3/col/Col.java   |  29 +-
 .../wicket/ui/components/layout/bs3/row/Row.java   |   5 +-
 .../ui/components/layout/bs3/tabs/TabPanel.java    |   8 +-
 .../ui/components/property/PropertyEditForm.java   |  51 +-
 .../ui/components/property/PropertyEditPanel.java  |  12 +-
 .../PropertyEditPromptHeaderPanel.java             |  17 +-
 .../scalars/ComponentFactoryScalarAbstract.java    |  12 +-
 .../scalars/ConverterBasedOnValueSemantics.java    | 134 ++++++
 .../components/scalars/IsisConverterLocator.java   | 125 -----
 .../ui/components/scalars/ScalarPanelAbstract.java | 268 ++++-------
 .../scalars/ScalarPanelSelectAbstract.java         |  17 +-
 .../scalars/ScalarPanelTextFieldAbstract.html      |  18 +-
 .../scalars/ScalarPanelTextFieldAbstract.java      |  30 +-
 .../ScalarPanelTextFieldDatePickerAbstract.java    |  15 +-
 .../scalars/ScalarPanelTextFieldNumeric.java       |  45 +-
 .../ScalarPanelTextFieldParseableAbstract.java     |   3 +-
 .../blobclob/IsisBlobOrClobPanelAbstract.java      |  71 ++-
 .../scalars/image/JavaAwtImagePanel.java           |   9 +-
 .../jdkmath/BigDecimalConverterForFeature.java}    |  24 +-
 .../jdkmath/BigDecimalConverterWithScale.java      | 134 ------
 .../scalars/jdkmath/BigDecimalTextField.java       |  60 ---
 .../scalars/jdkmath/JavaMathBigDecimalPanel.java   |  27 +-
 .../jdkmath/JavaMathBigDecimalPanelFactory.java    |  29 +-
 .../scalars/jdkmath/JavaMathBigIntegerPanel.java   |  25 +-
 .../components/scalars/markup/MarkupComponent.java |   2 +-
 .../scalars/markup/ParentedMarkupPanel.java        |   5 +-
 .../components/scalars/primitive/BooleanPanel.java |  12 +-
 .../ui/components/scalars/primitive/BytePanel.java |  25 +-
 .../components/scalars/primitive/DoublePanel.java  |  22 +-
 .../components/scalars/primitive/FloatPanel.java   |  21 +-
 .../components/scalars/primitive/IntegerPanel.java |  22 +-
 .../ui/components/scalars/primitive/LongPanel.java |  22 +-
 .../components/scalars/primitive/ShortPanel.java   |  22 +-
 .../scalars/reference/ReferencePanel.java          |  17 +-
 .../scalars/string/MultiLineStringPanel.java       |  48 +-
 .../compound/ValueCompoundPanel.java}              |  53 ++-
 .../ValueCompoundPanelFactory.java}                |  29 +-
 .../scalars/value/compound/ValueCompoundPanex.html |  62 +++
 .../ValueFallbackPanel.java}                       |   8 +-
 .../ValueFallbackPanelFactory.java}                |  15 +-
 .../valuechoices/ValueChoicesSelect2Panel.java     |   4 +-
 .../StandaloneCollectionPanel.java                 |  13 +-
 .../components/tree/IsisToWicketTreeAdapter.java   |   2 +-
 .../ui/components/unknown/UnknownModelPanel.java   |  10 +-
 .../ui/components/value/StandaloneValuePanel.java  |  10 +-
 .../value/StandaloneValuePanelFactory.java         |   7 +-
 .../wicket/ui/components/welcome/WelcomePanel.java |  10 +-
 .../components/widgets/bootstrap/ModalDialog.java  |  64 ++-
 .../entitysimplelink/EntityLinkSimplePanel.java    |   9 +-
 .../widgets/linkandlabel/ActionLink.java           | 237 +++++++---
 .../linkandlabel/LinkAndLabelFactoryAbstract.java  | 271 +----------
 .../ObjectAdapterMementoProviderAbstract.java      |  17 +-
 .../widgets/themepicker/ThemeChooser.java          |  51 +-
 .../widgets/zclip/ZeroClipboardPanel.java          |  71 ++-
 .../wicket/ui/errors/ExceptionStackTracePanel.java |  14 +-
 .../wicket/ui/errors/StackTraceListView.java       |  13 +-
 .../isis/viewer/wicket/ui/pages/PageAbstract.java  |  36 +-
 .../accmngt/AccountManagementPageAbstract.java     |  19 +-
 .../wicket/ui/pages/bootstrap-overrides-all-v2.css |   6 +
 .../viewer/wicket/ui/pages/entity/EntityPage.java  |  10 +-
 .../wicket/ui/pages/mmverror/MmvErrorPage.java     |  31 +-
 .../viewer/wicket/ui/pages/value/ValuePage.java    |   7 +-
 .../wicket/ui/pages/voidreturn/VoidReturnPage.java |   5 +-
 .../isis/viewer/wicket/ui/panels/FormAbstract.java |  18 +-
 .../wicket/ui/panels/FormExecutorDefault.java      |  56 ++-
 .../isis/viewer/wicket/ui/panels/OkCancelForm.java | 100 ++++
 .../wicket/ui/panels/PromptFormAbstract.java       | 346 ++++----------
 .../wicket/ui/panels/PromptFormPanelAbstract.java  |   4 +-
 .../viewer/wicket/ui/util/CssClassAppender.java    |  75 ---
 .../isis/viewer/wicket/ui/util/Decorators.java     |  74 ++-
 .../isis/viewer/wicket/ui/util/Tooltips.java       |  15 +-
 .../org/apache/isis/viewer/wicket/ui/util/Wkt.java | 515 +++++++++++++++++++++
 ...BigDecimalConverterWithScaleTest_roundtrip.java | 144 ------
 .../jdkmath/BigDecimalConverter_roundtrip.java     | 184 ++++++++
 .../viewer/wicket/ui/pages/PageAbstractTest.java   |  11 +-
 .../ComponentFactoryRegistrarDefault.java          |  36 +-
 .../IsisWicketApplication_experimental.java        |  12 +-
 390 files changed, 5742 insertions(+), 5276 deletions(-)

[isis] 02/06: ISIS-2348 Replay Diff opens

Posted by jo...@apache.org.
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 af46825ebdc9c0ae6830581b6328b782f024b443
Author: Jörg Rade <jo...@kuehne-nagel.com>
AuthorDate: Mon Oct 25 09:39:53 2021 +0200

    ISIS-2348 Replay Diff opens
---
 .../isis/client/kroviz/core/event/ReplayCommand.kt | 21 +++++++--
 .../client/kroviz/ui/dialog/ReplayDiffDialog.kt    | 55 ++++++++++++++++++++++
 2 files changed, 71 insertions(+), 5 deletions(-)

diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/ReplayCommand.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/ReplayCommand.kt
index 5a5cb36..bad2953 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/ReplayCommand.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/ReplayCommand.kt
@@ -28,19 +28,29 @@ import org.apache.isis.client.kroviz.to.Link
 import org.apache.isis.client.kroviz.to.Represention
 import org.apache.isis.client.kroviz.to.TObject
 import org.apache.isis.client.kroviz.ui.core.UiManager
+import org.apache.isis.client.kroviz.ui.dialog.ReplayDiffDialog
+import org.apache.isis.client.kroviz.ui.panel.EventLogTable
 
 val AppScope = CoroutineScope(window.asCoroutineDispatcher())
 
 class ReplayCommand {
+    private val eventStore = UiManager.getEventStore()
 
     fun execute() {
-        val es = UiManager.getEventStore()
-        val expectedEvents = copyEvents(es.log)
-        es.reset()
+        val expectedEvents = copyEvents(eventStore.log)
+        eventStore.reset()
         main() // re-creates the UI, but keeps the UiManager(singleton/object) and the session
 
-        val replayEvents = filterReplayEvents(expectedEvents)
-        replay(replayEvents)
+        val uiEvents = filterReplayEvents(expectedEvents)
+        replay(uiEvents)
+        val actualEvents: MutableList<LogEntry> = eventStore.log
+
+        val expectedTable = EventLogTable(expectedEvents)
+        val actualTable = EventLogTable(actualEvents)
+        val rdd = ReplayDiffDialog()
+        rdd.expectedPanel.add(expectedTable)
+        rdd.actualPanel.add(actualTable)
+        rdd.dialog.open()
     }
 
     private fun replay(userActions: List<LogEntry>) {
@@ -93,6 +103,7 @@ class ReplayCommand {
         output.type = input.type
         output.obj = input.obj
         output.state = input.state
+        output.response = input.response
         return output
     }
 
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/ReplayDiffDialog.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/ReplayDiffDialog.kt
new file mode 100644
index 0000000..ce9e7bc
--- /dev/null
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/ReplayDiffDialog.kt
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.isis.client.kroviz.ui.dialog
+
+import io.kvision.core.CssSize
+import io.kvision.core.UNIT
+import io.kvision.panel.Direction
+import io.kvision.panel.SplitPanel
+import io.kvision.panel.VPanel
+import org.apache.isis.client.kroviz.ui.core.FormItem
+import org.apache.isis.client.kroviz.ui.core.RoDialog
+
+class ReplayDiffDialog : Command() {
+    var dialog: RoDialog
+
+    val expectedPanel = VPanel(spacing = 3) {
+        width = CssSize(20, UNIT.perc)
+    }
+    val actualPanel = VPanel(spacing = 3) {
+        width = CssSize(80, UNIT.perc)
+    }
+
+    init {
+        dialog = RoDialog(
+            caption = "Replay Diff",
+            items = mutableListOf<FormItem>(),
+            command = this,
+            defaultAction = "",
+            widthPerc = 60,
+            customButtons = mutableListOf<FormItem>()
+        )
+        val splitPanel = SplitPanel(direction = Direction.VERTICAL)
+        splitPanel.add(expectedPanel)
+        splitPanel.add(actualPanel)
+        dialog.formPanel!!.add(splitPanel)
+    }
+
+}

[isis] 05/06: ISIS-2348 Replay against current version remote (incode/demoUrlRemote).

Posted by jo...@apache.org.
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 52c586daa07ead9ad103a4ae5937b409749a3be2
Author: Jörg Rade <jo...@kuehne-nagel.com>
AuthorDate: Wed Nov 10 08:36:55 2021 +0100

    ISIS-2348 Replay against current version remote (incode/demoUrlRemote).
---
 .../org/apache/isis/client/kroviz/core/Session.kt  |   5 +-
 .../isis/client/kroviz/core/event/LogEntry.kt      |   4 +
 .../isis/client/kroviz/core/event/ReplayCommand.kt |  25 ++-
 .../apache/isis/client/kroviz/ui/core/Constants.kt |   2 +-
 .../apache/isis/client/kroviz/ui/core/RoMenuBar.kt |   7 +-
 .../apache/isis/client/kroviz/ui/core/UiManager.kt |   6 +-
 .../client/kroviz/ui/diagram/LinkTreeDiagram.kt    |   2 +-
 .../isis/client/kroviz/ui/dialog/ErrorDialog.kt    |  10 +-
 .../isis/client/kroviz/ui/dialog/EventDialog.kt    |  99 ++++++++++++
 .../client/kroviz/ui/dialog/EventImportDialog.kt   | 165 ++++++++++++++++++++
 .../isis/client/kroviz/ui/dialog/LoginPrompt.kt    |   3 -
 .../apache/isis/client/kroviz/utils/IconManager.kt | 173 +++++++++++----------
 .../apache/isis/client/kroviz/utils/StringUtils.kt |   2 +-
 .../isis/client/kroviz/util/StringUtilsTest.kt     |   2 +-
 14 files changed, 395 insertions(+), 110 deletions(-)

diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/Session.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/Session.kt
index feb12f0..afb43b5 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/Session.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/Session.kt
@@ -28,15 +28,14 @@ import org.apache.isis.client.kroviz.utils.StringUtils
 class Session {
     private var user: String = ""
     private var pw: String = ""
-    var url: String = ""
+    var baseUrl: String = ""
     val eventStore = EventStore()
 
     fun login(url: String, user: String, pw: String) {
         this.user = user
         this.pw = pw
-        this.url = url
+        this.baseUrl = url
         UiManager.updateUser(user)
-//        UiManager.updatePower("Powered By: Apache Isis")
     }
 
     fun getCredentials(): String {
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 ed2350d..6e6ebc1 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
@@ -231,6 +231,10 @@ data class LogEntry(
     fun getAggregator(): BaseAggregator {
         //TODO the last aggt is not always the right one
         // callers need to filter  !!!
+        if (aggregators.size == 0) {
+            console.log("[LE.getAggregator]")
+            console.log(this)
+        }
         return aggregators.last()
     }
 
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/ReplayCommand.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/ReplayCommand.kt
index c6d3297..e16da18 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/ReplayCommand.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/ReplayCommand.kt
@@ -27,6 +27,7 @@ import org.apache.isis.client.kroviz.main
 import org.apache.isis.client.kroviz.to.Link
 import org.apache.isis.client.kroviz.to.Represention
 import org.apache.isis.client.kroviz.to.TObject
+import org.apache.isis.client.kroviz.ui.core.Constants
 import org.apache.isis.client.kroviz.ui.core.UiManager
 import org.apache.isis.client.kroviz.ui.dialog.ReplayDiffDialog
 
@@ -34,21 +35,29 @@ val AppScope = CoroutineScope(window.asCoroutineDispatcher())
 
 class ReplayCommand {
     private val eventStore = UiManager.getEventStore()
+    private val oldBaseUrl = UiManager.getBaseUrl()
 
-    fun execute() {
+    fun execute(
+        urlUnderTest: String = Constants.demoUrlRemote,
+        userUnderTest: String = Constants.demoUser,
+        passUnderTest: String = Constants.demoPass
+    ) {
         val expectedEvents = copyEvents(eventStore.log)
         eventStore.reset()
         main() // re-creates the UI, but keeps the UiManager(singleton/object) and the session
+        UiManager.login(urlUnderTest, userUnderTest, passUnderTest)
+        console.log("[RC.execute]")
+        console.log(urlUnderTest)
 
         val uiEvents = filterReplayEvents(expectedEvents)
-        replay(uiEvents)
-        val actualEvents: MutableList<LogEntry> = eventStore.log
+        replay(uiEvents, urlUnderTest)
 
+        val actualEvents: MutableList<LogEntry> = eventStore.log
         val rdd = ReplayDiffDialog(expectedEvents, actualEvents)
         rdd.dialog.open()
     }
 
-    private fun replay(userActions: List<LogEntry>) {
+    private fun replay(userActions: List<LogEntry>, newBaseUrl: String) {
         var previous: LogEntry? = null
         userActions.forEach {
             if (it.isUserAction() && previous != null) {
@@ -59,7 +68,11 @@ class ReplayCommand {
                     ResourceProxy().load(obj)
                 }
             } else {
-                val link = Link(href = it.url)
+                var href = it.url
+                if (href.startsWith(oldBaseUrl)) {
+                    href = href.replace(oldBaseUrl, newBaseUrl)
+                }
+                val link = Link(href = href)
                 ResourceProxy().fetch(link, null, it.subType)
             }
             previous = it
@@ -69,7 +82,7 @@ class ReplayCommand {
     private fun calculateDelay(previous: LogEntry, current: LogEntry): Long {
         val currentMs = current.createdAt.getTime()
         val previousMs = previous.createdAt.getTime()
-        return  currentMs.minus(previousMs).toLong()
+        return currentMs.minus(previousMs).toLong()
     }
 
     private fun filterReplayEvents(events: List<LogEntry>): List<LogEntry> {
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/Constants.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/Constants.kt
index c01a0d9..076960a 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/Constants.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/Constants.kt
@@ -38,5 +38,5 @@ object Constants {
     const val demoUrl = "http://localhost:8080/"
     const val demoUser = "sven"
     const val demoPass = "pass"
-    //const val demoUrl = "https://demo-wicket.jdo.isis.incode.work/"
+    const val demoUrlRemote = "https://demo-wicket.jdo.isis.incode.work/"
 }
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoMenuBar.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoMenuBar.kt
index 3df4437..a6043b5 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoMenuBar.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoMenuBar.kt
@@ -32,6 +32,7 @@ import org.apache.isis.client.kroviz.core.event.ReplayCommand
 import org.apache.isis.client.kroviz.to.mb.Menubars
 import org.apache.isis.client.kroviz.ui.chart.SampleChartModel
 import org.apache.isis.client.kroviz.ui.dialog.About
+import org.apache.isis.client.kroviz.ui.dialog.EventDialog
 import org.apache.isis.client.kroviz.ui.dialog.LoginPrompt
 import org.apache.isis.client.kroviz.ui.dialog.SvgInline
 import org.apache.isis.client.kroviz.ui.panel.*
@@ -82,7 +83,11 @@ class RoMenuBar : SimplePanel() {
         )
 
         mainMenu.add(
-            buildMenuEntry("Replay", "Replay", { ReplayCommand().execute() })
+            buildMenuEntry("Events", "Event", { EventDialog().open() })
+        )
+
+        mainMenu.add(
+            buildMenuEntry("Replay", "Replay", {  })
         )
 
         mainMenu.add(
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 395c603..a75b415 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
@@ -194,11 +194,11 @@ object UiManager {
         return sessions.first()
     }
 
-    fun getUrl(): String {
+    fun getBaseUrl(): String {
         val s = getSession()
         return when (s) {
             null -> ""
-            else -> s.url
+            else -> s.baseUrl
         }
     }
 
@@ -217,7 +217,7 @@ object UiManager {
     fun login(url: String, username: String, password: String) {
         val s = Session()
         s.login(url, username, password)
-        sessions.add(s)
+        sessions.add(0,s)
     }
 
     fun getCredentials(): String {
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/diagram/LinkTreeDiagram.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/diagram/LinkTreeDiagram.kt
index 749f715..80b8a10 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/diagram/LinkTreeDiagram.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/diagram/LinkTreeDiagram.kt
@@ -31,7 +31,7 @@ import org.apache.isis.client.kroviz.utils.StringUtils
 
 object LinkTreeDiagram {
 
-    private val protocolHostPort = UiManager.getUrl()
+    private val protocolHostPort = UiManager.getBaseUrl()
 
     fun build(aggregator: BaseAggregator): String {
         val pc = PumlCode()
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/ErrorDialog.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/ErrorDialog.kt
index 9ced7b1..066ccc9 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/ErrorDialog.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/ErrorDialog.kt
@@ -38,10 +38,12 @@ class ErrorDialog(val logEntry: LogEntry) : Command() {
         }
         val label = "HttpError " + error.httpStatusCode.toString()
         RoDialog(
-                caption = label,
-                items = formItems,
-                command = this,
-                widthPerc = 80).open()
+            caption = label,
+            items = formItems,
+            command = this,
+            widthPerc = 80,
+            heightPerc = 70
+        ).open()
     }
 
     private fun toString(stackTrace: List<String>): String {
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/EventDialog.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/EventDialog.kt
new file mode 100644
index 0000000..712c6fc
--- /dev/null
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/EventDialog.kt
@@ -0,0 +1,99 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.isis.client.kroviz.ui.dialog
+
+import io.kvision.core.CssSize
+import io.kvision.core.FlexDirection
+import io.kvision.core.UNIT
+import io.kvision.panel.VPanel
+import org.apache.isis.client.kroviz.core.event.ReplayCommand
+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.RoDialog
+import org.apache.isis.client.kroviz.ui.core.UiManager
+import org.apache.isis.client.kroviz.ui.panel.EventLogTable
+
+class EventDialog() : Command() {
+    var dialog: RoDialog
+
+    private val eventPanel = VPanel(spacing = 3) {
+        width = CssSize(100, UNIT.perc)
+    }
+
+    // callback parameter
+    private val EXP: String = "exp"
+    private val IMP: String = "imp"
+    private val REP: String = "rep"
+
+    init {
+        //FIXME actions Pin Export Replay Close
+        val customButtons = mutableListOf<FormItem>()
+        customButtons.add(FormItem("Export", ValueType.BUTTON, null, callBack = this, callBackAction = EXP))
+        customButtons.add(FormItem("Import", ValueType.BUTTON, null, callBack = this, callBackAction = IMP))
+        customButtons.add(FormItem("Replay", ValueType.BUTTON, null, callBack = this, callBackAction = REP))
+
+        dialog = RoDialog(
+            caption = "Event History",
+            items = mutableListOf(),
+            command = this,
+            defaultAction = "Pin",
+            widthPerc = 60,
+            heightPerc = 70,
+            customButtons = customButtons
+        )
+        val eventTable = EventLogTable(UiManager.getEventStore().log)
+        eventTable.tabulator.addCssClass("tabulator-in-dialog")
+        eventPanel.add(eventTable)
+
+        val mainPanel = VPanel()
+        mainPanel.addCssClass("dialog-content")
+        mainPanel.flexDirection = FlexDirection.ROW
+        mainPanel.add(eventTable)
+        dialog.formPanel!!.add(mainPanel)
+    }
+
+    override fun execute(action: String?) {
+        when {
+            action.isNullOrEmpty() -> {
+                UiManager.add("Event Log", EventLogTable(UiManager.getEventStore().log))
+                dialog.close()
+            }
+            action == EXP -> {
+                EventExportDialog().open()
+                dialog.close()
+            }
+            action == IMP -> {
+                EventImportDialog().open()
+                dialog.close()
+            }
+            action == REP -> {
+                ReplayCommand().execute()
+                dialog.close()
+            }
+            else -> {
+            }
+        }
+    }
+
+    fun open() {
+        dialog.open()
+    }
+
+}
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/EventImportDialog.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/EventImportDialog.kt
new file mode 100644
index 0000000..52fe9a9
--- /dev/null
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/EventImportDialog.kt
@@ -0,0 +1,165 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.isis.client.kroviz.ui.dialog
+
+import org.apache.isis.client.kroviz.core.event.EventState
+import org.apache.isis.client.kroviz.core.event.LogEntry
+import org.apache.isis.client.kroviz.core.event.ReplayEvent
+import org.apache.isis.client.kroviz.to.ValueType
+import org.apache.isis.client.kroviz.ui.core.RoDialog
+import io.kvision.core.StringPair
+import io.kvision.form.select.SimpleSelect
+import org.apache.isis.client.kroviz.ui.core.FormItem
+import org.apache.isis.client.kroviz.ui.core.UiManager
+
+class EventImportDialog() : Command() {
+
+    private lateinit var form: RoDialog
+    private var output: String = ""
+    val formItems = mutableListOf<FormItem>()
+    val events = mutableListOf<ReplayEvent>()
+
+    private fun collectReplayEvents() {
+        UiManager.getEventStore().log.forEach { it ->
+            val re = buildExportEvent(it)
+            when (it.state) {
+                EventState.SUCCESS_JS -> events.add(re)
+                EventState.SUCCESS_XML -> events.add(re)
+                EventState.ERROR -> events.add(re)
+                else -> {
+                }
+            }
+        }
+    }
+
+    override fun execute(action:String?) {
+        val filter = extractUserInput("Filter")
+        var fileName = ""
+        when (filter) {
+            "NONE" -> {
+                collectAllEvents()
+                fileName += "AllEvents"
+            }
+            "REPLAY" -> {
+                collectReplayEvents()
+                fileName += "ReplayEvents"
+            }
+            "UNFINISHED" -> {
+                collectUnfinishedEvents()
+                fileName += "UnfinishedEvents"
+            }
+            else -> {
+            }
+        }
+        val format = extractUserInput("Format")
+        when (format) {
+            "CSV" -> {
+                output = asCsv(events)
+                fileName += ".csv"
+            }
+            "JSON" -> {
+                output = JSON.stringify(events)
+                fileName += ".json"
+            }
+            else -> {
+            }
+        }
+        DownloadDialog(fileName, output).open()
+    }
+
+    private fun extractUserInput(fieldName: String): String? {
+        val formPanel = form.formPanel
+        val kids = formPanel!!.getChildren()
+        //iterate over FormItems (0,1) but not Buttons(2,3)
+        for (i in kids) {
+            when (i) {
+                is SimpleSelect -> {
+                    val key = i.label!!
+                    val value = i.getValue()!!
+                    if (key == fieldName) {
+                        return value
+                    }
+                }
+            }
+        }
+        return null
+    }
+
+    private fun collectUnfinishedEvents() {
+        UiManager.getEventStore().log.forEach { it ->
+            val re = buildExportEvent(it)
+            when (it.state) {
+                EventState.RUNNING -> events.add(re)
+                EventState.ERROR -> events.add(re)
+                else -> {
+                }
+            }
+        }
+    }
+
+    private fun collectAllEvents() {
+        UiManager.getEventStore().log.forEach { it ->
+            val re = buildExportEvent(it)
+            events.add(re)
+        }
+    }
+
+    fun open() {
+        val format = mutableListOf<StringPair>()
+        format.add(StringPair("CSV", "CSV"))
+        format.add(StringPair("JSON", "JSON"))
+        formItems.add(FormItem("Format", ValueType.SIMPLE_SELECT, format))
+        val filter = mutableListOf<StringPair>()
+        filter.add(StringPair("NONE", "No Filter"))
+        filter.add(StringPair("REPLAY", "For Replay"))
+        filter.add(StringPair("UNFINISHED", "Unfinished"))
+        formItems.add(FormItem("Filter", ValueType.SIMPLE_SELECT, filter))
+
+        form = RoDialog(caption = "Export", items = formItems, command = this)
+        form.open()
+    }
+
+    private fun asCsv(events: MutableList<ReplayEvent>): String {
+        val del = ";"
+        val nl = "\n"
+        var csv = "URL$del STATE$del METHOD$del REQUEST$del START$del DURATION$nl"
+        events.forEach { e ->
+            csv += e.url + del
+            csv += e.state + del
+            csv += e.method + del
+            csv += e.request + del
+            csv += e.start + del
+            csv += e.duration.toString() + nl
+        }
+        return csv
+    }
+
+    private fun buildExportEvent(logEntry: LogEntry): ReplayEvent {
+        return ReplayEvent(
+                url = logEntry.url,
+                method = logEntry.method!!,
+                request = logEntry.request,
+                state = logEntry.state.toString(),
+                start = logEntry.createdAt.toISOString() ,
+                duration = logEntry.duration,
+                response = logEntry.response
+        )
+    }
+
+}
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/LoginPrompt.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/LoginPrompt.kt
index e11e5a7..628057b 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/LoginPrompt.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/LoginPrompt.kt
@@ -20,15 +20,12 @@ package org.apache.isis.client.kroviz.ui.dialog
 
 import io.kvision.form.text.Password
 import io.kvision.form.text.Text
-import kotlinx.browser.document
-import kotlinx.browser.window
 import org.apache.isis.client.kroviz.to.Link
 import org.apache.isis.client.kroviz.to.ValueType
 import org.apache.isis.client.kroviz.ui.core.Constants
 import org.apache.isis.client.kroviz.ui.core.FormItem
 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.Point
 
 class LoginPrompt : Command() {
 
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/IconManager.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/IconManager.kt
index 5a00a3c..b02958c 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/IconManager.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/IconManager.kt
@@ -30,92 +30,93 @@ object IconManager {
 
     /* Merge with configuration values*/
     private val word2Icon = mapOf(
-            "About" to "lightbulb-o",
-            "Actions" to "ellipsis-v",
-            "All" to "asterisk",
-            "Basic" to "minus-circle",
-            "Blobs" to "cloud",
-            "Burger" to "bars",
-            "Chart" to "magic",
-            "Close" to "times",
-            "Collections" to "list",
-            "Compare" to "balance-scale",
-            "Configuration" to "wrench",
-            "Connect" to "plug",
-            "Console" to "terminal",
-            "Create" to "plus",
-            "Css" to "css3",
-            "Dates" to "calendar",
-            "Debug" to "bug",
-            "Delete" to "trash",
-            "Demo" to "eye",
-            "Details" to "info-circle",
-            "Described" to "tag",
-            "Diagram" to "project-diagram",
-            "Download" to "download",
-            "Factory" to "industry",
-            "Featured" to "keyboard",
-            "Featured Types" to "keyboard",
-            "Edit" to "pencil",
-            "Error Handling" to "bug",
-            "Error" to "bug",
-            "Event" to "bolt",
-            "Experimental" to "flask",
-            "Export" to "file-export",
-            "Facet" to "gem",
-            "Find" to "search",
-            "Hidden" to "ban",
-            "Hierarchy" to "sitemap",
-            "History" to "history",
-            "Hsql" to "database",
-            "Isis" to "ankh",
-            "JEE/CDI" to "jedi",
-            "List" to "list",
-            "Location" to "map-marker",
-            "Log" to "history",
-            "Logout" to "user-times",
-            "Manager" to "manager",
-            "Map" to "map",
-            "Me" to "user",
-            "Message" to "envelope",
-            "More" to "plus-circle",
-            "Named" to "book",
-            "Notification" to "bell",
-            "Notifications" to "bell",
-            "Object" to "cube",
-            "Objects" to "cubes",
-            "OK" to "check",
-            "Open" to "book",
-            "Other" to "asterisk",
-            "Pin" to "map-pin",
-            "Primitives" to "hashtag",
-            "Properties" to "indent",
-            "Prototyping" to "object-group",
-            "Queen" to "chess-queen",
-            "Replay" to "fast-forward",
-            "Run" to "rocket",
-            "Save" to "file",
-            "Security" to "lock",
-            "Simple" to "cubes",
-            "Strings" to "font",
-            "Switch" to "power-off",
-            "Target" to "bullseye",
-            "Tab" to "folder",
-            "Text" to "font",
-            "Times" to "clock",
-            "Toast" to "bread-slice", //comment-alt-plus/minus/exclamation
-            "Toolbar" to "step-backward",
-            "Tooltips" to "comment-alt",
-            "Temporal" to "clock",
-            "Tenancy" to "lock",
-            "Trees" to "tree",
-            "Types" to "typewriter",
-            "Undo" to "undo",
-            "Unknown" to "question",
-            "Visualize" to "eye",
-            "Wikipedia" to "wikipedia-w",
-            "World" to "plane",
-            "Xml" to "code"
+        "About" to "lightbulb-o",
+        "Actions" to "ellipsis-v",
+        "All" to "asterisk",
+        "Basic" to "minus-circle",
+        "Blobs" to "cloud",
+        "Burger" to "bars",
+        "Chart" to "magic",
+        "Close" to "times",
+        "Collections" to "list",
+        "Compare" to "balance-scale",
+        "Configuration" to "wrench",
+        "Connect" to "plug",
+        "Console" to "terminal",
+        "Create" to "plus",
+        "Css" to "css3",
+        "Dates" to "calendar",
+        "Debug" to "bug",
+        "Delete" to "trash",
+        "Demo" to "eye",
+        "Details" to "info-circle",
+        "Described" to "tag",
+        "Diagram" to "project-diagram",
+        "Download" to "download",
+        "Factory" to "industry",
+        "Featured" to "keyboard",
+        "Featured Types" to "keyboard",
+        "Edit" to "pencil",
+        "Error Handling" to "bug",
+        "Error" to "bug",
+        "Event" to "bolt",
+        "Experimental" to "flask",
+        "Export" to "file-export",
+        "Facet" to "gem",
+        "Find" to "search",
+        "Hidden" to "ban",
+        "Hierarchy" to "sitemap",
+        "History" to "history",
+        "Hsql" to "database",
+        "Import" to "file-import",
+        "Isis" to "ankh",
+        "JEE/CDI" to "jedi",
+        "List" to "list",
+        "Location" to "map-marker",
+        "Log" to "history",
+        "Logout" to "user-times",
+        "Manager" to "manager",
+        "Map" to "map",
+        "Me" to "user",
+        "Message" to "envelope",
+        "More" to "plus-circle",
+        "Named" to "book",
+        "Notification" to "bell",
+        "Notifications" to "bell",
+        "Object" to "cube",
+        "Objects" to "cubes",
+        "OK" to "check",
+        "Open" to "book",
+        "Other" to "asterisk",
+        "Pin" to "map-pin",
+        "Primitives" to "hashtag",
+        "Properties" to "indent",
+        "Prototyping" to "object-group",
+        "Queen" to "chess-queen",
+        "Replay" to "fast-forward",
+        "Run" to "rocket",
+        "Save" to "file",
+        "Security" to "lock",
+        "Simple" to "cubes",
+        "Strings" to "font",
+        "Switch" to "power-off",
+        "Target" to "bullseye",
+        "Tab" to "folder",
+        "Text" to "font",
+        "Times" to "clock",
+        "Toast" to "bread-slice", //comment-alt-plus/minus/exclamation
+        "Toolbar" to "step-backward",
+        "Tooltips" to "comment-alt",
+        "Temporal" to "clock",
+        "Tenancy" to "lock",
+        "Trees" to "tree",
+        "Types" to "typewriter",
+        "Undo" to "undo",
+        "Unknown" to "question",
+        "Visualize" to "eye",
+        "Wikipedia" to "wikipedia-w",
+        "World" to "plane",
+        "Xml" to "code"
     )
 
     @OptIn(ExperimentalStdlibApi::class)
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/StringUtils.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/StringUtils.kt
index b52d456..e2e77e8 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/StringUtils.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/StringUtils.kt
@@ -227,7 +227,7 @@ object StringUtils {
         val signature = Constants.restInfix
         if (url.contains(signature)) {
             // strip off protocol, host, port
-            val protocolHostPort = UiManager.getUrl()
+            val protocolHostPort = UiManager.getBaseUrl()
             result = result.replace(protocolHostPort + signature, "")
             result = StringUtils.removeHexCode(result)
         }
diff --git a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/util/StringUtilsTest.kt b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/util/StringUtilsTest.kt
index dd37408..9536a9d 100644
--- a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/util/StringUtilsTest.kt
+++ b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/util/StringUtilsTest.kt
@@ -15,7 +15,7 @@ class StringUtilsTest {
         val url = "http://localhost:8080/restful/domain-types/demo.JavaLangStrings/collections/entities"
 
         // when
-        val protocolHostPort = UiManager.getUrl()
+        val protocolHostPort = UiManager.getBaseUrl()
         // then
         assertTrue(protocolHostPort.startsWith("http://"))
 

[isis] 04/06: ISIS-2348 Icons amended

Posted by jo...@apache.org.
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 dc32aa1298e4cc00255b0d0604b4c36aa2b72a1b
Author: Jörg Rade <jo...@kuehne-nagel.com>
AuthorDate: Thu Nov 4 10:11:45 2021 +0100

    ISIS-2348 Icons amended
---
 .../apache/isis/client/kroviz/utils/IconManager.kt | 27 ++++++++++++++++++----
 1 file changed, 22 insertions(+), 5 deletions(-)

diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/IconManager.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/IconManager.kt
index af0b929..5a00a3c 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/IconManager.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/IconManager.kt
@@ -20,7 +20,7 @@ package org.apache.isis.client.kroviz.utils
 
 object IconManager {
     private const val PREFIX = "fas fa-"   //TODO far fa- ???
-    const val DEFAULT_ICON = PREFIX + "bolt"
+    const val DEFAULT_ICON = PREFIX + "play"
 
     const val DANGER = "text-danger"
     const val DISABLED = "text-disabled"
@@ -30,21 +30,27 @@ object IconManager {
 
     /* Merge with configuration values*/
     private val word2Icon = mapOf(
-            "About" to "info",
+            "About" to "lightbulb-o",
             "Actions" to "ellipsis-v",
             "All" to "asterisk",
+            "Basic" to "minus-circle",
             "Blobs" to "cloud",
             "Burger" to "bars",
             "Chart" to "magic",
             "Close" to "times",
+            "Collections" to "list",
             "Compare" to "balance-scale",
             "Configuration" to "wrench",
             "Connect" to "plug",
             "Console" to "terminal",
             "Create" to "plus",
+            "Css" to "css3",
+            "Dates" to "calendar",
             "Debug" to "bug",
             "Delete" to "trash",
+            "Demo" to "eye",
             "Details" to "info-circle",
+            "Described" to "tag",
             "Diagram" to "project-diagram",
             "Download" to "download",
             "Factory" to "industry",
@@ -53,11 +59,12 @@ object IconManager {
             "Edit" to "pencil",
             "Error Handling" to "bug",
             "Error" to "bug",
-            "Event" to "history",
+            "Event" to "bolt",
             "Experimental" to "flask",
             "Export" to "file-export",
             "Facet" to "gem",
             "Find" to "search",
+            "Hidden" to "ban",
             "Hierarchy" to "sitemap",
             "History" to "history",
             "Hsql" to "database",
@@ -66,9 +73,13 @@ object IconManager {
             "List" to "list",
             "Location" to "map-marker",
             "Log" to "history",
+            "Logout" to "user-times",
             "Manager" to "manager",
             "Map" to "map",
             "Me" to "user",
+            "Message" to "envelope",
+            "More" to "plus-circle",
+            "Named" to "book",
             "Notification" to "bell",
             "Notifications" to "bell",
             "Object" to "cube",
@@ -78,6 +89,7 @@ object IconManager {
             "Other" to "asterisk",
             "Pin" to "map-pin",
             "Primitives" to "hashtag",
+            "Properties" to "indent",
             "Prototyping" to "object-group",
             "Queen" to "chess-queen",
             "Replay" to "fast-forward",
@@ -88,17 +100,22 @@ object IconManager {
             "Strings" to "font",
             "Switch" to "power-off",
             "Target" to "bullseye",
+            "Tab" to "folder",
             "Text" to "font",
+            "Times" to "clock",
             "Toast" to "bread-slice", //comment-alt-plus/minus/exclamation
             "Toolbar" to "step-backward",
             "Tooltips" to "comment-alt",
-            "Temporals" to "clock",
+            "Temporal" to "clock",
+            "Tenancy" to "lock",
             "Trees" to "tree",
             "Types" to "typewriter",
             "Undo" to "undo",
             "Unknown" to "question",
             "Visualize" to "eye",
-            "Wikipedia" to "wikipedia-w"
+            "Wikipedia" to "wikipedia-w",
+            "World" to "plane",
+            "Xml" to "code"
     )
 
     @OptIn(ExperimentalStdlibApi::class)