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


The following commit(s) were added to refs/heads/master by this push:
     new 352725d  ISIS-2949 catch NPE's
     new 812ede7  Merge remote-tracking branch 'origin/master'
352725d is described below

commit 352725d3ed819ce9f66986d4e99acea1a5e9822a
Author: Jörg Rade <[email protected]>
AuthorDate: Fri Feb 4 14:00:17 2022 +0100

    ISIS-2949 catch NPE's
---
 .../isis/client/kroviz/ui/builder/ColBuilder.kt    | 12 +++++---
 .../apache/isis/client/kroviz/ui/core/RoMenuBar.kt |  7 +++--
 .../apache/isis/client/kroviz/utils/StringUtils.kt | 36 +++++++++++++---------
 3 files changed, 33 insertions(+), 22 deletions(-)

diff --git 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/builder/ColBuilder.kt
 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/builder/ColBuilder.kt
index eec96ab..786921a 100644
--- 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/builder/ColBuilder.kt
+++ 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/builder/ColBuilder.kt
@@ -68,11 +68,13 @@ class ColBuilder : UiBuilder() {
         for (c in col.collectionList) {
             val key = c.id  // entities
             val objectDM = dsp.displayModel
-            val collectionDM = objectDM.collections.get(key)!!
-            val tblCpt = RoTable(collectionDM)
-            val fsPanel = FieldsetPanel(legend = 
StringUtils.capitalize(key)).add(tblCpt)
-            panel.add(fsPanel)
-            collectionDM.isRendered = true
+            val collectionDM = objectDM.collections.get(key)
+            if (collectionDM != null) {
+                val tblCpt = RoTable(collectionDM)
+                val fsPanel = FieldsetPanel(legend = 
StringUtils.capitalize(key)).add(tblCpt)
+                panel.add(fsPanel)
+                collectionDM.isRendered = true
+            }
         }
         return panel
     }
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 278f03e..299b7a7 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
@@ -90,8 +90,11 @@ class RoMenuBar : SimplePanel() {
     }
 
     fun switch(session: Session) {
-        mainEntry.image = session.resString
-        mainEntry.icon = null
+        val resString = session.resString
+        if (resString != null) {
+            mainEntry.image = session.resString
+            mainEntry.icon = null
+        }
         mainEntry.image.apply { systemIconStyle }
         val logEntry = 
SessionManager.getEventStore().findMenuBarsBy(session.baseUrl)
         if (logEntry != null) {
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 d44e3c9..0606d95 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
@@ -37,8 +37,12 @@ object StringUtils {
 
     @OptIn(ExperimentalStdlibApi::class)
     fun capitalize(input: String): String {
-        val output = input.substring(1, input.length)
-        return input.first().uppercaseChar() + output
+        return if (input != null && input.length > 0) {
+            val output = input.substring(1, input.length)
+            input.first().uppercaseChar() + output
+        } else {
+            input
+        }
     }
 
     @OptIn(ExperimentalStdlibApi::class)
@@ -126,10 +130,10 @@ object StringUtils {
     }
 
     internal fun argumentsAsString(
-            args: Map<String, Argument?>?,
-            start: String,
-            sep: String,
-            end: String
+        args: Map<String, Argument?>?,
+        start: String,
+        sep: String,
+        end: String
     ): String {
         return if (args.isNullOrEmpty()) "" else {
             var answer = start
@@ -144,10 +148,10 @@ object StringUtils {
     }
 
     internal fun argumentsAsList(
-            args: Map<String, Argument?>?,
-            start: String,
-            sep: String,
-            end: String
+        args: Map<String, Argument?>?,
+        start: String,
+        sep: String,
+        end: String
     ): String {
         return if (args.isNullOrEmpty()) "" else {
             var answer = start
@@ -214,13 +218,15 @@ object StringUtils {
                 val n: Int = (0xFF.and(raw[it].toInt()) shl 16) +
                         (0xFF.and(raw[it + 1].toInt()) shl 8) +
                         0xFF.and(raw[it + 2].toInt())
-                listOf<Int>((n shr 18) and 0x3F,
-                        (n shr 12) and 0x3F,
-                        (n shr 6) and 0x3F,
-                        n and 0x3F).forEach { append(BASE64_SET[it]) }
+                listOf<Int>(
+                    (n shr 18) and 0x3F,
+                    (n shr 12) and 0x3F,
+                    (n shr 6) and 0x3F,
+                    n and 0x3F
+                ).forEach { append(BASE64_SET[it]) }
             }
         }.dropLast(pad.length)
-                .toString() + pad
+            .toString() + pad
     }
 
     fun shorten(url: String): String {

Reply via email to