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/12/15 16:52:38 UTC

[isis] branch master updated (0434fc7 -> 64fdb5b)

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 0434fc7  ISIS-2921: fixes ManagedObject check for proper packing
     new 991ce0b  ISIS-2913 update documentation
     new acbfaca  ISIS-2913 refactor SessionManager
     new 64fdb5b  Merge remote-tracking branch 'origin/master'

The 3 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:
 .../kroviz/partials/design/uml-aggregator.adoc     | 105 ++++++++++++++++-----
 .../org/apache/isis/client/kroviz/core/Session.kt  |   8 +-
 .../kroviz/core/aggregator/ActionDispatcher.kt     |   1 +
 .../isis/client/kroviz/core/event/EventStore.kt    |  17 +++-
 .../isis/client/kroviz/core/event/LogEntry.kt      |   1 -
 .../client/kroviz/core/event/ReplayController.kt   |   2 +-
 .../client/kroviz/core/event/RoXmlHttpRequest.kt   |   2 +-
 .../apache/isis/client/kroviz/ui/core/RoMenuBar.kt |  56 +++++++----
 .../isis/client/kroviz/ui/core/SessionManager.kt   |  36 +++----
 .../apache/isis/client/kroviz/ui/core/UiManager.kt |  22 +++--
 .../isis/client/kroviz/ui/dialog/LoginPrompt.kt    |   2 +-
 .../apache/isis/client/kroviz/utils/IconManager.kt |   2 +-
 .../apache/isis/client/kroviz/IntegrationTest.kt   |   2 +-
 .../isis/client/kroviz/util/StringUtilsTest.kt     |   2 +-
 14 files changed, 170 insertions(+), 88 deletions(-)

[isis] 02/03: ISIS-2913 refactor SessionManager

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 acbfaca8480848631617f87984f58a0eb6685c60
Author: Jörg Rade <jo...@kuehne-nagel.com>
AuthorDate: Wed Dec 15 17:52:07 2021 +0100

    ISIS-2913 refactor SessionManager
---
 .../org/apache/isis/client/kroviz/core/Session.kt  |  8 ++--
 .../kroviz/core/aggregator/ActionDispatcher.kt     |  1 +
 .../isis/client/kroviz/core/event/EventStore.kt    | 17 +++++--
 .../isis/client/kroviz/core/event/LogEntry.kt      |  1 -
 .../client/kroviz/core/event/ReplayController.kt   |  2 +-
 .../client/kroviz/core/event/RoXmlHttpRequest.kt   |  2 +-
 .../apache/isis/client/kroviz/ui/core/RoMenuBar.kt | 56 ++++++++++++++--------
 .../isis/client/kroviz/ui/core/SessionManager.kt   | 36 +++++++-------
 .../apache/isis/client/kroviz/ui/core/UiManager.kt | 22 ++++++---
 .../isis/client/kroviz/ui/dialog/LoginPrompt.kt    |  2 +-
 .../apache/isis/client/kroviz/utils/IconManager.kt |  2 +-
 .../apache/isis/client/kroviz/IntegrationTest.kt   |  2 +-
 .../isis/client/kroviz/util/StringUtilsTest.kt     |  2 +-
 13 files changed, 91 insertions(+), 62 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 02862c8..bbd954f 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
@@ -19,7 +19,6 @@
 package org.apache.isis.client.kroviz.core
 
 import io.kvision.core.ResString
-import org.apache.isis.client.kroviz.core.event.EventStore
 import org.apache.isis.client.kroviz.ui.core.Constants
 import org.apache.isis.client.kroviz.utils.StringUtils
 
@@ -31,16 +30,15 @@ class Session {
     private var pw: String = ""
     var baseUrl: String = ""
     var resString: ResString? = null
-    val eventStore = EventStore()
 
     fun login(url: String, user: String, pw: String) {
         this.user = user
         this.pw = pw
         this.baseUrl = url
-        if (url.contains("localhost")) {
-            this.resString = Constants.demoImage
+        if (url.contains("8080")) {
+            this.resString = Constants.demoImage as ResString
         } else {
-            this.resString = Constants.demoRemoteImage
+            this.resString = Constants.demoRemoteImage as ResString
         }
     }
 
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/ActionDispatcher.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/ActionDispatcher.kt
index 68603d9..4ed1d7c 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/ActionDispatcher.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/ActionDispatcher.kt
@@ -48,6 +48,7 @@ class ActionDispatcher(private val at: Point = Point(100, 100)) : BaseAggregator
                 logEntry.aggregators.add(oa)
                 oa.update(logEntry, Constants.subTypeJson)
             }
+            to is Restful -> {}
             else -> {
                 console.log(to)
                 throw Throwable("[ActionDispatcher.update] ${to!!::class.simpleName}")
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/EventStore.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/EventStore.kt
index eb8eab8..c982ecb 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/EventStore.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/EventStore.kt
@@ -22,7 +22,6 @@ import io.kvision.panel.SimplePanel
 import io.kvision.state.observableListOf
 import org.apache.isis.client.kroviz.core.aggregator.BaseAggregator
 import org.apache.isis.client.kroviz.core.aggregator.SvgDispatcher
-import org.apache.isis.client.kroviz.to.HasLinks
 import org.apache.isis.client.kroviz.to.TObject
 import org.apache.isis.client.kroviz.to.mb.Menubars
 import org.apache.isis.client.kroviz.ui.core.UiManager
@@ -49,10 +48,12 @@ class EventStore {
         }
     }
 
-    fun start(rs: ResourceSpecification,
-              method: String,
-              body: String = "",
-              aggregator: BaseAggregator? = null): LogEntry {
+    fun start(
+        rs: ResourceSpecification,
+        method: String,
+        body: String = "",
+        aggregator: BaseAggregator? = null
+    ): LogEntry {
         val entry = LogEntry(rs = rs, method = method, request = body)
         if (aggregator != null) {
             entry.addAggregator(aggregator)
@@ -177,6 +178,12 @@ class EventStore {
         }
     }
 
+    fun findMenuBarsBy(baseUrl: String): LogEntry? {
+        return log.firstOrNull() {
+            it.obj is Menubars && it.url.startsWith(baseUrl)
+        }
+    }
+
     //public for test
     fun findExact(reSpec: ResourceSpecification): LogEntry? {
         return log.firstOrNull {
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 e83d0e9..4023336 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
@@ -60,7 +60,6 @@ data class LogEntry(
 ) {
     val url: String = rs.url
 
-    //    val referrer = rs.referrerUrl
     val subType = rs.subType
     var state = EventState.INITIAL
     var title: String = ""
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/ReplayController.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/ReplayController.kt
index 830ce85..1000ddc 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/ReplayController.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/ReplayController.kt
@@ -38,7 +38,7 @@ val AppScope = CoroutineScope(window.asCoroutineDispatcher())
 
 class ReplayController : Controller() {
     private val eventStore = SessionManager.getEventStore()
-    private val oldBaseUrl = SessionManager.getBaseUrl()
+    private val oldBaseUrl = SessionManager.getBaseUrl()!!
     private var urlUnderTest: String = Constants.demoUrlRemote
     private var userUnderTest: String = Constants.demoUser
     private var passUnderTest: String = Constants.demoPass
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/RoXmlHttpRequest.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/RoXmlHttpRequest.kt
index a56d2d6..4200466 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/RoXmlHttpRequest.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/RoXmlHttpRequest.kt
@@ -50,7 +50,7 @@ class RoXmlHttpRequest(val aggregator: BaseAggregator?) {
         if (method != Method.POST.operation) {
             url += StringUtils.argumentsAsUrlParameter(link)
         }
-        val credentials: String = SessionManager.getCredentials()
+        val credentials: String = SessionManager.getCredentials()!!
 
         xhr.open(method, url, true)
         xhr.setRequestHeader("Authorization", "Basic $credentials")
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 21aaa62..fd05e9c 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
@@ -31,10 +31,12 @@ import io.kvision.panel.SimplePanel
 import io.kvision.panel.vPanel
 import io.kvision.utils.px
 import org.apache.isis.client.kroviz.core.Session
-import org.apache.isis.client.kroviz.core.event.EventStore
 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.*
+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.EventChart
 import org.apache.isis.client.kroviz.ui.panel.GeoMap
 import org.apache.isis.client.kroviz.ui.panel.ImageSample
@@ -50,7 +52,7 @@ class RoMenuBar : SimplePanel() {
 
     init {
         vPanel {
-            val label = "" //IMPROVE use for branding
+            val label = "" //eventually use for branding
             navbar = navbar(label = label, type = NavbarType.FIXEDTOP) {
                 marginLeft = CssSize(-32, UNIT.px)
                 height = CssSize(40, UNIT.px)
@@ -61,24 +63,25 @@ class RoMenuBar : SimplePanel() {
         }
     }
 
-    private fun testFirstSession() {
-        mainEntry.separator()
-        val session = SessionManager.getSession()
-        insertSession(session)
-    }
-
-    private fun insertSession(session:Session) {
+    fun add(session: Session) {
         val menuEntry = buildMenuEntryWithImage(
             session.baseUrl,
             image = session.resString,
-            { this.switch(session) })
+            { switch(session) })
         mainEntry.add(menuEntry)
+        switch(session)
     }
 
-    private fun switch(session: Session) {
+    fun switch(session: Session) {
         mainEntry.image = session.resString
         mainEntry.icon = null
         mainEntry.image.apply { systemIconStyle }
+        val logEntry = SessionManager.getEventStore().findMenuBarsBy(session.baseUrl)
+        if (logEntry != null) {
+            val menuBars = logEntry.obj as Menubars
+            amendMenu(menuBars)
+        }
+        UiManager.setNormalCursor()
     }
 
     private fun buildMenuEntryWithImage(label: String, image: ResString?, action: dynamic): Link {
@@ -91,12 +94,13 @@ class RoMenuBar : SimplePanel() {
         return link
     }
 
-    val systemIconStyle = style(".dropdown-toggle") {
+    private val systemIconStyle = style(".dropdown-toggle") {
         style("img") {
             height = 20.px
         }
     }
-    val appIconStyle = style(".dropdown-item") {
+
+    private val appIconStyle = style(".dropdown-item") {
         style("img") {
             height = 20.px
         }
@@ -158,13 +162,14 @@ class RoMenuBar : SimplePanel() {
 
         val aboutTitle = "About"
         mainMenu.add(
-            buildMenuEntry(aboutTitle, "Info", { UiManager.add(aboutTitle, About().dialog) })
+            buildMenuEntry(aboutTitle, "About", { UiManager.add(aboutTitle, About().dialog) })
         )
 
-        val testTitle = "Test"
-        mainMenu.add(
-            buildMenuEntry(testTitle, "Test", { this.testFirstSession() })
-        )
+        /*
+             val testTitle = "Test"
+               mainMenu.add(
+                   buildMenuEntry(testTitle, "Test", { this.testFirstSession() })
+               )
 
         mainMenu.add(
             buildMenuEntry("Browser in IFrame", "Wikipedia", { BrowserWindow("https://isis.apache.org/").open() })
@@ -172,12 +177,17 @@ class RoMenuBar : SimplePanel() {
 
         mainMenu.add(
             buildMenuEntry("SSH", "Terminal", { ShellWindow("localhost:8080").open() })
-        )
+        )*/
 
         return mainMenu
     }
 
+    fun addSeparatorToMainMenu() {
+        mainMenu.separator()
+    }
+
     fun amendMenu(menuBars: Menubars) {
+        resetMenuBar()
         menuBars.primary.menu.forEach { m ->
             val dd = MenuFactory.buildForMenu(m)
             if (dd.getChildren().isNotEmpty()) nav.add(dd)
@@ -186,4 +196,10 @@ class RoMenuBar : SimplePanel() {
         nav.add(MenuFactory.buildForMenu(menuBars.tertiary.menu.first()))
     }
 
+    // this empties out any existing menuItems (non-system)
+    private fun resetMenuBar() {
+        nav.removeAll()
+        nav.add(mainMenu)
+    }
+
 }
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/SessionManager.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/SessionManager.kt
index fdfd729..39e0c6a 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/SessionManager.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/SessionManager.kt
@@ -22,38 +22,38 @@ import org.apache.isis.client.kroviz.core.Session
 import org.apache.isis.client.kroviz.core.event.EventStore
 
 /**
- * Single point of contact for view components consisting of:
- * @item Session
+ * Handle multiple Sessions
  */
 object SessionManager {
 
-    private val sessions = mutableListOf<Session>()
+    private val sessions = mutableSetOf<Session>()
+    private val eventStore = EventStore()
+    private var activeSession: Session? = null
 
-    fun getSession(): Session {
-        return sessions.first()
-    }
-
-    fun getBaseUrl(): String {
-        val s = getSession()
-        return when (s) {
-            null -> ""
-            else -> s.baseUrl
-        }
+    fun getBaseUrl(): String? {
+        return activeSession?.baseUrl
     }
 
     fun getEventStore(): EventStore {
-        return getSession().eventStore
+        return eventStore
     }
 
     fun login(url: String, username: String, password: String) {
         val s = Session()
         s.login(url, username, password)
-        sessions.add(0, s)
-        UiManager.updateUser(username)
+        val isFirstSession = sessions.size == 0
+        if (sessions.contains(s)) {
+            UiManager.switchSession(s)
+        } else {
+            sessions.add(s)
+            UiManager.updateSession(username, s, isFirstSession)
+        }
+        activeSession = s
+
     }
 
-    fun getCredentials(): String {
-        return getSession().getCredentials()
+    fun getCredentials(): String? {
+        return activeSession?.getCredentials()
     }
 
 }
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 d107020..34af6f6 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
@@ -27,6 +27,7 @@ import io.kvision.utils.ESC_KEY
 import kotlinx.browser.document
 import kotlinx.browser.window
 import org.apache.isis.client.kroviz.App
+import org.apache.isis.client.kroviz.core.Session
 import org.apache.isis.client.kroviz.core.aggregator.BaseAggregator
 import org.apache.isis.client.kroviz.core.aggregator.ObjectAggregator
 import org.apache.isis.client.kroviz.core.aggregator.UndefinedDispatcher
@@ -107,7 +108,7 @@ object UiManager {
 
     /**
      * SVG code added to Tabs disappears after a refresh, therefore an SVG object (code, uuid)
-     * is added as attribute to the tab in order to being able to recreate it on refresh.
+     * is added as attribute to the tab in order to be able to recreate it on refresh.
      */
     fun addSvg(title: String, svgCode: String) {
         fun buildSvgPanel(uuid: UUID): FormPanelFactory {
@@ -147,8 +148,15 @@ object UiManager {
         getRoStatusBar().update(entry)
     }
 
-    fun updateUser(user: String) {
+    fun updateSession(user: String, session: Session, isFirstSession: Boolean) {
         getRoStatusBar().updateUser(user)
+        val menubar = getRoApp().roMenuBar
+        if (isFirstSession) menubar.addSeparatorToMainMenu()
+        menubar.add(session)
+    }
+
+    fun switchSession(session: Session) {
+        getRoApp().roMenuBar.switch(session)
     }
 
     fun setBusyCursor() {
@@ -181,7 +189,7 @@ object UiManager {
     }
 
     fun openDialog(panel: RoDialog, at: Point = Point(100, 100)) {
-        val offset = UiManager.getNumberOfPopups() * 4
+        val offset = getNumberOfPopups() * 4
         panel.left = CssSize(at.x + offset, UNIT.px)
         panel.top = CssSize(at.y + offset, UNIT.px)
         getRoApp().add(panel)
@@ -193,7 +201,7 @@ object UiManager {
         pop()
     }
 
-     fun loadDomainTypes(): Boolean {
+    fun loadDomainTypes(): Boolean {
         val k = "loadDomainTypes"
         return when {
             settings.containsKey(k) -> settings.getValue(k) as Boolean
@@ -201,7 +209,7 @@ object UiManager {
         }
     }
 
-     private fun push(widget: Widget) {
+    private fun push(widget: Widget) {
         popups.add(widget)
     }
 
@@ -219,7 +227,7 @@ object UiManager {
         }
     }
 
-    fun getNumberOfPopups(): Int {
+    private fun getNumberOfPopups(): Int {
         return popups.size
     }
 
@@ -229,7 +237,7 @@ object UiManager {
         setNormalCursor()
     }
 
-    private fun getEventStore() : EventStore {
+    private fun getEventStore(): EventStore {
         return SessionManager.getEventStore()
     }
 
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 2d157ae..7bf206d 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
@@ -62,7 +62,7 @@ class LoginPrompt(val nextController: Controller? = null) : Controller() {
     }
 
     private fun extractUserInput() {
-        //TODO function has a side effect, ie. changes variable values
+        //function has a side effect, ie. changes variable values
         var key: String?
         val formPanel = dialog.formPanel
         val kids = formPanel!!.getChildren()
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 95b281c..b48b67e 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,7 +30,7 @@ object IconManager {
 
     /* Merge with configuration values*/
     private val word2Icon = mapOf(
-        "About" to "lightbulb-o",
+        "About" to "info-circle",
         "Actions" to "ellipsis-v",
         "All" to "asterisk",
         "Basic" to "minus-circle",
diff --git a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/IntegrationTest.kt b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/IntegrationTest.kt
index 63db8ea..311c5be 100644
--- a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/IntegrationTest.kt
+++ b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/IntegrationTest.kt
@@ -43,7 +43,7 @@ open class IntegrationTest {
         val pw = "pass"
         val url = "http://${user}:${pw}@localhost:8080/restful/"
         SessionManager.login(url, user, pw)
-        val credentials: String = SessionManager.getCredentials()
+        val credentials: String = SessionManager.getCredentials()!!
         val xhr = XMLHttpRequest()
         xhr.open("GET", url, false, user, pw)
         xhr.setRequestHeader("Authorization", "Basic $credentials")
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 7c25785..e3307d5 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
@@ -16,7 +16,7 @@ class StringUtilsTest {
         val url = "http://localhost:8080/restful/domain-types/demo.JavaLangStrings/collections/entities"
 
         // when
-        val protocolHostPort = SessionManager.getBaseUrl()
+        val protocolHostPort = SessionManager.getBaseUrl()!!
         // then
         assertTrue(protocolHostPort.startsWith("http://"))
 

[isis] 01/03: ISIS-2913 update documentation

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 991ce0b1e4ad0de74dded5238f4dea75ac20ef6a
Author: Jörg Rade <jo...@kuehne-nagel.com>
AuthorDate: Wed Dec 15 17:48:36 2021 +0100

    ISIS-2913 update documentation
---
 .../kroviz/partials/design/uml-aggregator.adoc     | 105 ++++++++++++++++-----
 1 file changed, 79 insertions(+), 26 deletions(-)

diff --git a/incubator/clients/kroviz/adoc/modules/kroviz/partials/design/uml-aggregator.adoc b/incubator/clients/kroviz/adoc/modules/kroviz/partials/design/uml-aggregator.adoc
index bc4091f..c45cdee 100644
--- a/incubator/clients/kroviz/adoc/modules/kroviz/partials/design/uml-aggregator.adoc
+++ b/incubator/clients/kroviz/adoc/modules/kroviz/partials/design/uml-aggregator.adoc
@@ -12,12 +12,11 @@ class LogEntry {
     updatedAt:Date
     request:String
     response:String
+    blob: Blob
     object:TransferObject
-    aggregator:Aggregator
+    aggregators:List<BaseAggregator>
     cacheHits:int
 }
-LogEntry --> TransferObject
-LogEntry "n" --> "1" BaseAggregator
 
 class ResponseHandler<<Facade,ChainOfResponsibility>>{
     handle(LogEntry)
@@ -25,41 +24,95 @@ class ResponseHandler<<Facade,ChainOfResponsibility>>{
     doHandle()
     parse(json)
 }
-ResponseHandler .> TransferObject : converts JSON \n into TO (1)
-ResponseHandler .> IAggregator : create aggregator (2)
-ResponseHandler .> LogEntry  : assign aggregator (3)
 
-interface TransferObject
+package "to" {
+    interface TransferObject {}
+    TransferObject <|-- Layout
+    TransferObject <|-- TObject
+    TransferObject <|-- Icon
 
-interface IAggregator {
-    update(logEntry)
+    package "bs3" {
+        class Grid{}
+    }
+    TransferObject <|- Grid
 }
 
-abstract class BaseAggregator {
-    data:BaseDisplayable
-}
+package "aggregator" {
+    abstract class BaseAggregator {
+        {abstract} dpm:DisplayModel
+        {abstract} update()
+    }
+
+    abstract class AggregatorWithLayout {
+        parentUrl: String
+    }
+    BaseAggregator <|-- AggregatorWithLayout
 
-IAggregator <|.. BaseAggregator
-BaseAggregator <|-- CollectionAggregator
-BaseAggregator <|-- ObjectAggregator
-BaseAggregator --> BaseDisplayable : data
+    class CollectionAggregator{
+        parent: ObjectAggregator
+    }
 
+    class ObjectAggregator {
+        collectionMap: Map<String, CollectionAggregator>
+    }
+    ObjectAggregator o-- CollectionAggregator
 
-abstract class BaseDisplayable {
-    isRendered:Boolean
-    +canBeDisplayed():Boolean
-    +title()
+    AggregatorWithLayout <|-- CollectionAggregator
+    AggregatorWithLayout <|-- ObjectAggregator
 }
 
-class CollectionDM {
-    list:List<Exposer>
+package "model" {
+    class Exposer {
+        delegate: TObject
+        iconName: String
+        + dynamise()
+        + setIcon(icon: Icon)
+    }
+
+    abstract class DisplayModel {
+        isRendered:Boolean
+        title:String
+        {abstract} canBeDisplayed():Boolean
+    }
+
+    abstract class DisplayModelWithLayout {
+        layout: Layout
+        grid: Grid
+        properties: CollectionProperties
+        icon: Icon
+        + canBeDisplayed()
+    }
+
+    class ObjectDM {
+        + data:Exposer
+        + collections:Map<String,CollectionDM>
+        - dirty:Boolean
+        + canBeDisplayed()
+    }
+
+    class CollectionDM {
+        data:List<Exposer>
+        - rawData:List<TransferObject>
+    }
+
+    DisplayModel <|-- DisplayModelWithLayout
+    DisplayModelWithLayout <|-- CollectionDM
+    DisplayModelWithLayout <|-- ObjectDM
+    ObjectDM o-- CollectionDM
 }
 
-BaseDisplayable -> Layout
-BaseDisplayable <|-- CollectionDM
-BaseDisplayable <|-- ObjectDM
+ResponseHandler .> TransferObject : (1) \n converts \n response(JSON), \n blob(Image) \n into
+ResponseHandler .> BaseAggregator : (2) \n create
+ResponseHandler .> LogEntry  : (3) \n assign \n aggregator
+
+BaseAggregator -> DisplayModel
+CollectionAggregator .> CollectionDM : uses
+ObjectAggregator .> ObjectDM : uses
+ObjectAggregator .> CollectionDM : uses
 
-ObjectDM o-- CollectionDM
+LogEntry -->   TransferObject : object
+LogEntry "m" --> "n" BaseAggregator
+Exposer  -> TObject : delegate
 
 @enduml
 ----

[isis] 03/03: Merge remote-tracking branch 'origin/master'

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 64fdb5b349184c2fd15acb2b721ddf145f41016e
Merge: acbfaca 0434fc7
Author: Jörg Rade <jo...@kuehne-nagel.com>
AuthorDate: Wed Dec 15 17:52:23 2021 +0100

    Merge remote-tracking branch 'origin/master'

 .../org/apache/isis/applib/locale/UserLocale.java  |  67 +++++
 .../{LocaleProvider.java => LanguageProvider.java} |  21 +-
 .../services/iactnlayer/InteractionContext.java    |  30 +--
 .../services/locale/LocaleChoiceProvider.java      |  22 +-
 .../applib/services/message/MessageService.java    |   6 +-
 .../isis/applib/services/user/UserMemento.java     |  48 +++-
 .../value/semantics/ValueSemanticsAbstract.java    |  24 +-
 .../core/metamodel/IsisModuleCoreMetamodel.java    |   2 +
 .../isis/core/metamodel/spec/ManagedObjects.java   |   2 +-
 .../valuesemantics/BigDecimalValueSemantics.java   |   6 +
 .../valuesemantics/BigIntegerValueSemantics.java   |   6 +
 .../valuesemantics/BlobValueSemantics.java         |   9 +
 .../valuesemantics/BookmarkValueSemantics.java     |   8 +
 .../valuesemantics/BooleanValueSemantics.java      |   6 +
 .../BufferedImageValueSemantics.java               |   9 +-
 .../valuesemantics/ByteValueSemantics.java         |   8 +
 .../valuesemantics/ChangesDtoValueSemantics.java   |   6 +
 .../valuesemantics/CharacterValueSemantics.java    |   5 +
 .../valuesemantics/ClobValueSemantics.java         |   9 +
 .../valuesemantics/CommandDtoValueSemantics.java   |   6 +
 .../valuesemantics/DoubleValueSemantics.java       |   6 +
 .../valuesemantics/EnumValueSemanticsAbstract.java |   8 +
 .../valuesemantics/FloatValueSemantics.java        |   6 +
 .../valuesemantics/IntValueSemantics.java          |   6 +
 .../InteractionDtoValueSemantics.java              |   6 +
 .../LocalResourcePathValueSemantics.java           |   8 +
 ...lueSemantics.java => LocaleValueSemantics.java} |  72 ++++--
 .../valuesemantics/LongValueSemantics.java         |   6 +
 .../valuesemantics/MarkupValueSemantics.java       |   8 +
 .../valuesemantics/OidDtoValueSemantics.java       |   8 +
 .../valuesemantics/PasswordValueSemantics.java     |   6 +
 .../valuesemantics/ShortValueSemantics.java        |   8 +
 .../valuesemantics/StringValueSemantics.java       |   6 +
 .../valuesemantics/TreeNodeValueSemantics.java     |  24 ++
 .../valuesemantics/URLValueSemantics.java          |  11 +
 .../valuesemantics/UUIDValueSemantics.java         |   8 +
 .../temporal/LocalDateTimeValueSemantics.java      |   8 +
 .../temporal/LocalDateValueSemantics.java          |   8 +
 .../temporal/LocalTimeValueSemantics.java          |   8 +
 .../temporal/OffsetDateTimeValueSemantics.java     |   8 +
 .../temporal/OffsetTimeValueSemantics.java         |   7 +
 .../temporal/ZonedDateTimeValueSemantics.java      |   8 +
 .../temporal/legacy/JavaSqlDateValueSemantics.java |   7 +
 .../legacy/JavaSqlTimeStampValueSemantics.java     |   8 +
 .../temporal/legacy/JavaSqlTimeValueSemantics.java |   8 +
 .../legacy/JavaUtilDateValueSemantics.java         |   8 +
 .../JavaUtilDateValueSemanticsProviderTest.java    |   5 +-
 core/pom.xml                                       |   2 +-
 .../IsisModuleCoreRuntimeServices.java             |   4 +
 .../core/runtimeservices/i18n/po/PoReader.java     |  18 +-
 .../i18n/po/TranslationServicePo.java              |  17 +-
 .../i18n/po/TranslationServicePoMenu.java          |   6 +-
 .../locale/LanguageProviderDefault.java            |  38 +++
 .../locale/LocaleChoiceProviderDefault.java        |  77 ++++++
 .../wrapper/WrapperFactoryDefault.java             |   3 +-
 .../core/runtimeservices/i18n/po/PoReaderTest.java |  31 +--
 .../manager/AuthenticationManager.java             |  36 +--
 .../authentication/manager/UserMementoRefiner.java |  42 ++-
 .../secman/applib/IsisModuleExtSecmanApplib.java   |   2 +
 .../secman/applib/user/dom/ApplicationUser.java    |  31 +++
 .../user/dom/ApplicationUser.layout.fallback.xml   |   7 +
 .../dom/mixins/ApplicationUser_updateLocale.java   | 112 ++++++++
 .../UserMementoRefinerFromApplicationUser.java     |  14 +-
 .../secman/jdo/user/dom/ApplicationUser.java       |  42 ++-
 .../secman/jpa/user/dom/ApplicationUser.java       |  20 ++
 extensions/vw/fullcalendar/applib/pom.xml          |   5 +
 .../value/CalendarEventSemanticsProvider.java      |  12 +-
 isis-parent/pom.xml                                |   2 +-
 .../isis/testdomain/value/ValueSemanticsTest.java  |  11 +-
 .../model/valuetypes/ValueTypeExample.java         |  12 +
 .../model/valuetypes/ValueTypeExampleService.java  |  10 +-
 .../semantics/AsciiDocValueSemantics.java          |   8 +
 valuetypes/asciidoc/ui/pom.xml                     |   2 +-
 .../valuesemantics/JodaDateTimeValueSemantics.java |   8 +
 .../JodaLocalDateTimeValueSemantics.java           |   9 +
 .../JodaLocalDateValueSemantics.java               |   9 +
 .../JodaLocalTimeValueSemantics.java               |   9 +
 .../semantics/MarkdownValueSemantics.java          |   8 +
 .../isis/viewer/wicket/ui/ComponentFactory.java    |   3 +
 .../viewer/wicket/ui/ComponentFactoryAbstract.java |  14 +-
 .../ui/app/registry/ComponentFactoryRegistrar.java |  16 +-
 .../scalars/ScalarPanelTextFieldAbstract.java      |   5 +-
 ...arPanelTextFieldWithValueSemanticsAbstract.java |   3 +-
 .../components/scalars/bookmark/BookmarkPanel.java |  37 ---
 .../scalars/bookmark/BookmarkPanelFactory.java     |  39 ---
 .../ui/components/scalars/oiddto/OidDtoPanel.java  |  37 ---
 .../scalars/oiddto/OidDtoPanelFactory.java         |  39 ---
 .../scalars/primitive/CharacterPanel.java          |  36 ---
 .../scalars/primitive/CharacterPanelFactory.java   |  43 ----
 .../ui/components/scalars/uuid/UuidPanel.java      |  41 ---
 .../components/scalars/uuid/UuidPanelFactory.java  |  45 ----
 .../unknown/UnknownModelPanelFactory.java          |   9 +-
 .../wicket/ui/pages/login/IsisSignInPanel.html     |  16 +-
 .../wicket/ui/pages/login/IsisSignInPanel.java     |  18 +-
 .../wicket/ui/pages/login/SignInPanelAbstract.java | 281 +++++++++++++++++++++
 .../wicket/ui/pages/login/WicketSignInPage.java    |  31 ++-
 .../ui/pages/login/WicketSignInPage.properties     |   1 +
 .../pages/login/js/client-side-timezone-select.js  |  33 +--
 .../isis/viewer/wicket/ui/panels/PanelBase.java    |   8 +-
 .../ui/components/scalars/ConverterTester.java     |  15 +-
 .../viewer/IsisModuleViewerWicketViewer.java       |   2 -
 .../ComponentFactoryRegistrarDefault.java          |  75 +++++-
 .../viewer/services/LocaleProviderWicket.java      |  59 -----
 103 files changed, 1421 insertions(+), 672 deletions(-)