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/09/24 09:04:32 UTC

[isis] 01/03: ISIS-2768 Load logos

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

joergrade pushed a commit to branch ISIS-2872
in repository https://gitbox.apache.org/repos/asf/isis.git

commit c47da788dbea3abe03ad53bbbe974aebe360dde4
Author: Jörg Rade <jo...@kuehne-nagel.com>
AuthorDate: Mon Sep 13 15:37:59 2021 +0200

    ISIS-2768 Load logos
---
 .../kroviz/core/aggregator/BaseAggregator.kt       |  5 +--
 .../kroviz/core/aggregator/RestfulDispatcher.kt    |  7 ++--
 .../kroviz/core/aggregator/SystemAggregator.kt     | 17 ++++++++-
 .../kroviz/core/event/ResourceSpecification.kt     |  5 +--
 .../client/kroviz/core/event/RoXmlHttpRequest.kt   |  3 +-
 .../isis/client/kroviz/core/model/SystemDM.kt      | 15 +++++---
 .../isis/client/kroviz/handler/IconHandler.kt      | 20 +++--------
 .../isis/client/kroviz/handler/LayoutHandler.kt    |  3 +-
 .../isis/client/kroviz/handler/LayoutXmlHandler.kt |  7 ++--
 .../IconHandler.kt => utils/ImageUtils.kt}         | 23 +++---------
 .../LayoutHandler.kt => utils/UrlUtils.kt}         | 42 ++++++++++++----------
 11 files changed, 79 insertions(+), 68 deletions(-)

diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/BaseAggregator.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/BaseAggregator.kt
index edbe93b..e6e8bc4 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/BaseAggregator.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/BaseAggregator.kt
@@ -24,6 +24,7 @@ import org.apache.isis.client.kroviz.core.model.DisplayModel
 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.utils.UrlUtils
 
 /**
  * An Aggregator:
@@ -76,11 +77,11 @@ abstract class BaseAggregator {
     }
 
     private fun Link.isLayout(): Boolean {
-        return href.isNotEmpty() && href.contains("layout")
+        return href.isNotEmpty() && UrlUtils.isLayout(href)
     }
 
     private fun Link.isIcon(): Boolean {
-        return href.isNotEmpty() && href.endsWith("object-icon")
+        return href.isNotEmpty() && UrlUtils.isObjectIcon(href)
     }
 
     protected fun invoke(
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/RestfulDispatcher.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/RestfulDispatcher.kt
index 13214f0..99f5951 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/RestfulDispatcher.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/RestfulDispatcher.kt
@@ -29,11 +29,14 @@ class RestfulDispatcher() : BaseAggregator() {
         val restful = logEntry.getTransferObject() as Restful
         restful.links.forEach {
             when {
+                it.rel.endsWith(Relation.SELF.name) -> { }
                 it.rel.endsWith("/menuBars") -> invokeNavigation(it)
-                it.relation() == Relation.SELF -> {
-                }
                 it.rel.endsWith("/services") -> {
                 }
+/*                it.rel.endsWith("/brand-logo-signin") -> {
+                }
+                it.rel.endsWith("/brand-logo-header") -> {
+                }   */
                 else -> invokeSystem(it)
             }
         }
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/SystemAggregator.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/SystemAggregator.kt
index 90e370f..d6dc960 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/SystemAggregator.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/SystemAggregator.kt
@@ -23,6 +23,8 @@ import org.apache.isis.client.kroviz.core.model.SystemDM
 import org.apache.isis.client.kroviz.to.DomainTypes
 import org.apache.isis.client.kroviz.to.User
 import org.apache.isis.client.kroviz.to.Version
+import org.apache.isis.client.kroviz.utils.ImageUtils
+import org.apache.isis.client.kroviz.utils.UrlUtils
 
 class SystemAggregator() : BaseAggregator() {
 
@@ -36,7 +38,20 @@ class SystemAggregator() : BaseAggregator() {
             is User -> dpm.addData(obj)
             is Version -> dpm.addData(obj)
             is DomainTypes -> dpm.addData(obj)
-            else -> log(logEntry)
+            else -> {
+                if (logEntry.blob != null) {
+                    val icon = ImageUtils.extractIcon(logEntry)
+                    val url = logEntry.url
+                    val isApplicationIcon = UrlUtils.isApplicationIcon(url)
+                    when (isApplicationIcon) {
+                        url.contains("48") -> (dpm as SystemDM).addSmallIcon(icon)
+                        url.contains("256") -> (dpm as SystemDM).addLargeIcon(icon)
+                        else -> log(logEntry)
+                    }
+                } else {
+                    console.log("[SA.update] no blob/image")
+                }
+            }
         }
 
         if (dpm.canBeDisplayed()) {
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/ResourceSpecification.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/ResourceSpecification.kt
index ee18faf..3019d3a 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/ResourceSpecification.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/ResourceSpecification.kt
@@ -20,6 +20,7 @@ package org.apache.isis.client.kroviz.core.event
 
 import org.apache.isis.client.kroviz.ui.core.Constants
 import org.apache.isis.client.kroviz.utils.StringUtils
+import org.apache.isis.client.kroviz.utils.UrlUtils
 
 class ResourceSpecification(
         val url: String,
@@ -28,8 +29,8 @@ class ResourceSpecification(
 
     fun isRedundant(): Boolean {
         return when {
-            url.contains("object-layout") -> true
-            url.contains("/properties/") -> true
+            UrlUtils.isObjectLayout(url) -> true
+            UrlUtils.isProperties(url) -> true
             else -> false
         }
     }
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 28b9b1b..00b933f 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
@@ -27,6 +27,7 @@ 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.utils.StringUtils
+import org.apache.isis.client.kroviz.utils.UrlUtils
 import org.w3c.xhr.BLOB
 import org.w3c.xhr.XMLHttpRequest
 import org.w3c.xhr.XMLHttpRequestResponseType
@@ -53,7 +54,7 @@ class RoXmlHttpRequest(val aggregator: BaseAggregator?) {
         xhr.setRequestHeader("Authorization", "Basic $credentials")
         xhr.setRequestHeader(CONTENT_TYPE, "application/$subType;charset=UTF-8")
         xhr.setRequestHeader(ACCEPT, "application/$subType, ${Constants.pngMimeType}")
-        if (url.endsWith("object-icon")) {
+        if (UrlUtils.isIcon(url)) {
             xhr.responseType = XMLHttpRequestResponseType.BLOB
         }
 
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/SystemDM.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/SystemDM.kt
index 3e4581e..7f99f94 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/SystemDM.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/SystemDM.kt
@@ -18,15 +18,14 @@
  */
 package org.apache.isis.client.kroviz.core.model
 
-import org.apache.isis.client.kroviz.to.DomainTypes
-import org.apache.isis.client.kroviz.to.TransferObject
-import org.apache.isis.client.kroviz.to.User
-import org.apache.isis.client.kroviz.to.Version
+import org.apache.isis.client.kroviz.to.*
 
 class SystemDM(override val title: String) : DisplayModel() {
     var user: User? = null
     var version: Version? = null
     private var domainTypes: DomainTypes? = null
+    var logoSmall: Icon? = null
+    var logoLarge: Icon? = null
 
     override fun canBeDisplayed(): Boolean {
         return !isRendered
@@ -42,4 +41,12 @@ class SystemDM(override val title: String) : DisplayModel() {
         }
     }
 
+    fun addSmallIcon(icon: Icon) {
+        logoSmall = icon
+    }
+
+    fun addLargeIcon(icon: Icon) {
+        logoLarge = icon
+    }
+
 }
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/handler/IconHandler.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/handler/IconHandler.kt
index e751528..ccb676b 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/handler/IconHandler.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/handler/IconHandler.kt
@@ -18,38 +18,26 @@
  */
 package org.apache.isis.client.kroviz.handler
 
-import org.apache.isis.client.kroviz.to.Icon
 import org.apache.isis.client.kroviz.to.TransferObject
 import org.apache.isis.client.kroviz.ui.core.Constants
-import org.w3c.dom.Image
-import org.w3c.dom.url.URL
-import org.w3c.files.Blob
+import org.apache.isis.client.kroviz.utils.ImageUtils
+import org.apache.isis.client.kroviz.utils.UrlUtils
 
 class IconHandler : BaseHandler() {
 
     override fun canHandle(response: String): Boolean {
-        val isObjectIcon = logEntry.url.endsWith("object-icon")
-        if (isObjectIcon) {
+        if (UrlUtils.isIcon(logEntry.url)) {
             return super.canHandle(response)
         }
         return false
     }
 
     override fun parse(response: String): TransferObject {
-        val blob = logEntry.blob!!
-        val image = blob.toImage()
-        return Icon(image)
+        return ImageUtils.extractIcon(logEntry)
     }
 
     override fun update() {
         logEntry.getAggregator().update(logEntry, Constants.pngMimeType)
     }
 
-    fun Blob.toImage() : Image {
-        val url = URL.createObjectURL(this)
-        val image = Image()
-        image.src = url
-        return image
-    }
-
 }
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/handler/LayoutHandler.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/handler/LayoutHandler.kt
index 0d5316b..057f2ad 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/handler/LayoutHandler.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/handler/LayoutHandler.kt
@@ -21,13 +21,14 @@ package org.apache.isis.client.kroviz.handler
 import kotlinx.serialization.json.Json
 import org.apache.isis.client.kroviz.layout.Layout
 import org.apache.isis.client.kroviz.to.TransferObject
+import org.apache.isis.client.kroviz.utils.UrlUtils
 import org.apache.isis.client.kroviz.utils.XmlHelper
 
 class LayoutHandler : BaseHandler() {
 
     override fun canHandle(response: String): Boolean {
         val isJsonLayout = !XmlHelper.isXml(response)
-                && logEntry.url.endsWith("layout")
+                && UrlUtils.isLayout(logEntry.url)
         if (isJsonLayout) {
             return super.canHandle(response)
         }
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/handler/LayoutXmlHandler.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/handler/LayoutXmlHandler.kt
index 89af96d..12012f4 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/handler/LayoutXmlHandler.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/handler/LayoutXmlHandler.kt
@@ -20,14 +20,15 @@ package org.apache.isis.client.kroviz.handler
 
 import org.apache.isis.client.kroviz.to.TransferObject
 import org.apache.isis.client.kroviz.to.bs3.Grid
+import org.apache.isis.client.kroviz.utils.UrlUtils
 import org.apache.isis.client.kroviz.utils.XmlHelper
 
 class LayoutXmlHandler : BaseHandler() {
 
     override fun canHandle(response: String): Boolean {
-        val isLayoutXml = XmlHelper.isXml(response)
-                && logEntry.url.endsWith("layout")
-        if (isLayoutXml) {
+        val isXmlLayout = XmlHelper.isXml(response)
+                && UrlUtils.isLayout(logEntry.url)
+        if (isXmlLayout) {
             return super.canHandle(response)
         }
         return false
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/handler/IconHandler.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/ImageUtils.kt
similarity index 65%
copy from incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/handler/IconHandler.kt
copy to incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/ImageUtils.kt
index e751528..80436f3 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/handler/IconHandler.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/ImageUtils.kt
@@ -16,36 +16,23 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.client.kroviz.handler
+package org.apache.isis.client.kroviz.utils
 
+import org.apache.isis.client.kroviz.core.event.LogEntry
 import org.apache.isis.client.kroviz.to.Icon
-import org.apache.isis.client.kroviz.to.TransferObject
-import org.apache.isis.client.kroviz.ui.core.Constants
 import org.w3c.dom.Image
 import org.w3c.dom.url.URL
 import org.w3c.files.Blob
 
-class IconHandler : BaseHandler() {
+object ImageUtils {
 
-    override fun canHandle(response: String): Boolean {
-        val isObjectIcon = logEntry.url.endsWith("object-icon")
-        if (isObjectIcon) {
-            return super.canHandle(response)
-        }
-        return false
-    }
-
-    override fun parse(response: String): TransferObject {
+    fun extractIcon(logEntry: LogEntry): Icon {
         val blob = logEntry.blob!!
         val image = blob.toImage()
         return Icon(image)
     }
 
-    override fun update() {
-        logEntry.getAggregator().update(logEntry, Constants.pngMimeType)
-    }
-
-    fun Blob.toImage() : Image {
+    fun Blob.toImage(): Image {
         val url = URL.createObjectURL(this)
         val image = Image()
         image.src = url
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/handler/LayoutHandler.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/UrlUtils.kt
similarity index 54%
copy from incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/handler/LayoutHandler.kt
copy to incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/UrlUtils.kt
index 0d5316b..28d0560 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/handler/LayoutHandler.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/UrlUtils.kt
@@ -16,27 +16,33 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.client.kroviz.handler
-
-import kotlinx.serialization.json.Json
-import org.apache.isis.client.kroviz.layout.Layout
-import org.apache.isis.client.kroviz.to.TransferObject
-import org.apache.isis.client.kroviz.utils.XmlHelper
-
-class LayoutHandler : BaseHandler() {
-
-    override fun canHandle(response: String): Boolean {
-        val isJsonLayout = !XmlHelper.isXml(response)
-                && logEntry.url.endsWith("layout")
-        if (isJsonLayout) {
-            return super.canHandle(response)
-        }
-        return false
+package org.apache.isis.client.kroviz.utils
+
+import org.apache.isis.client.kroviz.to.Relation
+
+object UrlUtils {
+
+    fun isIcon(url: String): Boolean {
+        return isApplicationIcon(url) || isObjectIcon(url)
     }
 
+    fun isObjectIcon(url: String): Boolean {
+         return url.endsWith(Relation.OBJECT_ICON.type)
+    }
 
-    override fun parse(response: String): TransferObject {
-        return Json.decodeFromString(Layout.serializer(), response)
+    fun isApplicationIcon(url: String): Boolean {
+        return url.contains("/images/")
     }
 
+    fun isProperties(url: String): Boolean {
+        return url.contains("/properties/")
+    }
+
+    fun isLayout(url: String): Boolean {
+        return url.endsWith(Relation.LAYOUT.type)
+    }
+
+    fun isObjectLayout(url: String): Boolean {
+        return url.endsWith(Relation.OBJECT_LAYOUT.type)
+    }
 }