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)
+ }
}