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:33 UTC

[isis] 02/03: ISIS-2846 Extensions attribute changes adopted, class refactored

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 cfd1da2b5aa781604e9265c213a8033c2060014a
Author: Jörg Rade <jo...@kuehne-nagel.com>
AuthorDate: Mon Sep 20 09:04:26 2021 +0200

    ISIS-2846 Extensions attribute changes adopted, class refactored
---
 .../kroviz/core/aggregator/AggregatorWithLayout.kt |  6 ++-
 .../kroviz/core/model/CollectionProperties.kt      |  4 +-
 .../org/apache/isis/client/kroviz/to/Action.kt     |  1 +
 .../org/apache/isis/client/kroviz/to/Collection.kt |  3 +-
 .../org/apache/isis/client/kroviz/to/DomainType.kt |  5 +-
 .../org/apache/isis/client/kroviz/to/Member.kt     |  1 +
 .../isis/client/kroviz/to/PlainTransferObjects.kt  | 21 +++-----
 .../org/apache/isis/client/kroviz/to/TObject.kt    |  1 +
 .../apache/isis/client/kroviz/to/mb/Extensions.kt  | 56 ++++++++++++++++++++++
 .../client/kroviz/ui/diagram/LinkTreeDiagram.kt    |  4 +-
 .../snapshots/demo2_0_0/COLLECTION_DESCRIPTION.kt  |  3 +-
 .../apache/isis/client/kroviz/to/DomainTypeTest.kt |  2 +-
 .../org/apache/isis/client/kroviz/to/MemberTest.kt |  5 +-
 .../apache/isis/client/kroviz/to/PropertyTest.kt   |  5 +-
 .../client/kroviz/ui/table/LinkTreeDiagramTest.kt  | 39 +++++++--------
 .../client/kroviz/ui/table/TableFactoryTest.kt     |  6 +--
 16 files changed, 109 insertions(+), 53 deletions(-)

diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/AggregatorWithLayout.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/AggregatorWithLayout.kt
index 32ed837..434fa1b 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/AggregatorWithLayout.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/AggregatorWithLayout.kt
@@ -19,12 +19,14 @@ abstract class AggregatorWithLayout : BaseAggregator() {
     }
 
     protected fun handleLayout(layout: Layout, dm: DisplayModelWithLayout, referrer: String) {
+        console.log("[CA.handleLayout] ISIS-2846")
+        console.log(layout)
         if (dm.layout == null) {
             dm.addLayout(layout)
             dm.properties.propertyLayoutList.forEach { p ->
                 val l = p.link
                 if (l == null) {
-                    //                   console.log(p.id + " link empty")  // ISIS-2846
+                    console.log(p.id + " link empty")  // ISIS-2846
                 } else {
                     val isDn = l.href.contains("datanucleus")
                     if (!isDn) {
@@ -36,7 +38,7 @@ abstract class AggregatorWithLayout : BaseAggregator() {
         }
     }
 
-    protected fun invokeLayoutLink(obj: TObject, aggregator: AggregatorWithLayout, referrer :String) {
+    protected fun invokeLayoutLink(obj: TObject, aggregator: AggregatorWithLayout, referrer: String) {
         val l = obj.getLayoutLink()
         if (l.representation() == Represention.OBJECT_LAYOUT_BS3) {
             invoke(l, aggregator, Constants.subTypeXml, referrer)
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/CollectionProperties.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/CollectionProperties.kt
index e48782b..e821481 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/CollectionProperties.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/CollectionProperties.kt
@@ -19,8 +19,8 @@
 package org.apache.isis.client.kroviz.core.model
 
 import org.apache.isis.client.kroviz.layout.PropertyLt
-import org.apache.isis.client.kroviz.to.Extensions
 import org.apache.isis.client.kroviz.to.Property
+import org.apache.isis.client.kroviz.to.mb.Extensions
 
 class CollectionProperties() {
     val list = mutableListOf<ColumnProperties>()
@@ -58,7 +58,7 @@ class CollectionProperties() {
         val id = description.id
         val cp = findOrCreate(id)
         val e: Extensions = description.extensions!!
-        cp.friendlyName = e.friendlyName
+        cp.friendlyName = e.getFriendlyName()
     }
 
     private fun findOrCreate(id: String): ColumnProperties {
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/Action.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/Action.kt
index f62cbfe..ee5d392 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/Action.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/Action.kt
@@ -19,6 +19,7 @@
 package org.apache.isis.client.kroviz.to
 
 import kotlinx.serialization.Serializable
+import org.apache.isis.client.kroviz.to.mb.Extensions
 
 @Serializable
 data class Action(val id: String,
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/Collection.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/Collection.kt
index 31f8848..d220e26 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/Collection.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/Collection.kt
@@ -19,6 +19,7 @@
 package org.apache.isis.client.kroviz.to
 
 import kotlinx.serialization.Serializable
+import org.apache.isis.client.kroviz.to.mb.Extensions
 
 @Serializable
 data class Collection(val id: String,
@@ -27,4 +28,4 @@ data class Collection(val id: String,
                       val extensions: Extensions,
                       val value: List<Link> = emptyList(),
                       val disabledReason: String = ""
-) : TransferObject, HasLinks {}
+) : TransferObject, HasLinks
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/DomainType.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/DomainType.kt
index 3f4c0d5..ca024dd 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/DomainType.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/DomainType.kt
@@ -20,6 +20,7 @@
 package org.apache.isis.client.kroviz.to
 
 import kotlinx.serialization.Serializable
+import org.apache.isis.client.kroviz.to.mb.Extensions
 
 @Serializable
 data class DomainType(
@@ -28,6 +29,4 @@ data class DomainType(
         val members: Map<String, Link>,
         val typeActions: Map<String, Link>,
         val extensions: Extensions
-) : TransferObject, HasLinks {
-
-}
+) : TransferObject, HasLinks
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/Member.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/Member.kt
index 82d8e07..d9401b2 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/Member.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/Member.kt
@@ -19,6 +19,7 @@
 package org.apache.isis.client.kroviz.to
 
 import kotlinx.serialization.Serializable
+import org.apache.isis.client.kroviz.to.mb.Extensions
 
 @Serializable
 data class Member(val id: String,
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/PlainTransferObjects.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/PlainTransferObjects.kt
index 24e8217..2d05e0d 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/PlainTransferObjects.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/PlainTransferObjects.kt
@@ -16,11 +16,11 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-
 package org.apache.isis.client.kroviz.to
 
 import kotlinx.serialization.SerialName
 import kotlinx.serialization.Serializable
+import org.apache.isis.client.kroviz.to.mb.Extensions
 
 enum class ActionSemantics(val type: String) {
     IDEMPOTENT("idempotent"),
@@ -35,20 +35,6 @@ data class DomainTypes(override val links: List<Link> = emptyList(),
 ) : TransferObject, HasLinks
 
 @Serializable
-data class Extensions(val oid: String = "",
-                      val isService: Boolean = false,
-                      val isPersistent: Boolean = false,
-                      val menuBar: String? = MenuBarPosition.PRIMARY.position,
-                      val actionSemantics: String? = null,
-                      val actionType: String = "",
-                      @SerialName("x-isis-format") val xIsisFormat: String? = null,
-                      val friendlyName: String = "",
-                      val collectionSemantics: String? = null,
-                      val pluralName: String = "",
-                      val description: String = ""
-) : TransferObject
-
-@Serializable
 data class HttpError(
         val httpStatusCode: Int,
         val message: String,
@@ -87,6 +73,11 @@ enum class Method(val operation: String) {
 //    DELETE("DELETE")  not used - Apache Isis defines delete operations on DomainObjects
 }
 
+enum class Position(val type: String) {
+    PANEL("PANEL"),
+    PANEL_DROPDOWN("PANEL_DROPDOWN")
+}
+
 @Serializable
 data class Property(val id: String = "",
                     val memberType: String = "",
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/TObject.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/TObject.kt
index d0ba6b4..fd1be37 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/TObject.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/TObject.kt
@@ -19,6 +19,7 @@
 package org.apache.isis.client.kroviz.to
 
 import kotlinx.serialization.Serializable
+import org.apache.isis.client.kroviz.to.mb.Extensions
 
 @Serializable
 data class TObject(override val links: List<Link> = emptyList(),
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/mb/Extensions.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/mb/Extensions.kt
new file mode 100644
index 0000000..adfd028
--- /dev/null
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/mb/Extensions.kt
@@ -0,0 +1,56 @@
+/*
+ *  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.to.mb
+
+import kotlinx.serialization.SerialName
+import kotlinx.serialization.Serializable
+import org.apache.isis.client.kroviz.to.MenuBarPosition
+import org.apache.isis.client.kroviz.to.TransferObject
+
+@Serializable
+data class Extensions(val oid: String = "",
+                      val isService: Boolean = false,
+                      val isPersistent: Boolean = false,
+                      val menuBar: String? = MenuBarPosition.PRIMARY.position,
+                      val actionSemantics: String? = null,
+                      val actionType: String = "",
+                      @SerialName("x-isis-format") val xIsisFormat: String? = null,
+                      private val friendlyName: String = "",
+                      private val friendlyNameForm: String = "",
+                      val collectionSemantics: String? = null,
+                      val pluralName: String = "",
+                      private val description: String = "",
+                      private val descriptionForm: String = ""
+) : TransferObject {
+
+    fun getFriendlyName(): String {
+        if (friendlyName.isEmpty()) {
+            console.log("[Extensions.getFriendlyName] is empty")
+        }
+        return friendlyName
+    }
+
+    fun getDescription(): String {
+        if (description.isEmpty()) {
+            console.log("[Extensions.getDescription] is empty")
+        }
+        return description
+    }
+
+}
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 e11cfc8..decb7c1 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
@@ -94,9 +94,9 @@ object LinkTreeDiagram {
         val obj = logEntry.obj
         if (obj != null) {
             val ets = (obj as Property).extensions!!
-            pc.addLine("friendlyName: " + ets.friendlyName)
+            pc.addLine("friendlyName: " + ets.getFriendlyName())
             pc.addHorizontalLine()
-            pc.add("descriptions: " + ets.description)
+            pc.add("descriptions: " + ets.getDescription())
             pc.toMindmapNode(level)
         }
         return pc.code
diff --git a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/demo2_0_0/COLLECTION_DESCRIPTION.kt b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/demo2_0_0/COLLECTION_DESCRIPTION.kt
index 5165d72..04546dd 100644
--- a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/demo2_0_0/COLLECTION_DESCRIPTION.kt
+++ b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/demo2_0_0/COLLECTION_DESCRIPTION.kt
@@ -44,7 +44,8 @@ object COLLECTION_DESCRIPTION: Response(){
     "type" : "application/json;profile=\"urn:org.restfulobjects:repr-types/domain-type\""
   } ],
   "extensions" : {
-    "friendlyName" : "Entities"
+    "friendlyName" : "Entities",
+    "friendlyNameForm" : "static"
   }
 }
     """
diff --git a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/to/DomainTypeTest.kt b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/to/DomainTypeTest.kt
index 50f7d9c..9dbde2e 100644
--- a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/to/DomainTypeTest.kt
+++ b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/to/DomainTypeTest.kt
@@ -34,7 +34,7 @@ class DomainTypeTest {
         //when
         val to = DomainTypeHandler().parse(jsonStr) as DomainType
         //then
-        assertEquals("Java Lang String Jdo", to.extensions.friendlyName)
+        assertEquals("Java Lang String Jdo", to.extensions.getFriendlyName())
     }
 
     @Test
diff --git a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/to/MemberTest.kt b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/to/MemberTest.kt
index 2511fd2..bdef37a 100644
--- a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/to/MemberTest.kt
+++ b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/to/MemberTest.kt
@@ -22,6 +22,7 @@ import kotlinx.serialization.json.Json
 import org.apache.isis.client.kroviz.handler.MemberHandler
 import org.apache.isis.client.kroviz.snapshots.demo2_0_0.COLLECTION_DESCRIPTION
 import org.apache.isis.client.kroviz.snapshots.simpleapp1_16_0.FR_PROPERTY_DESCRIPTION
+import org.apache.isis.client.kroviz.to.mb.Extensions
 import kotlin.test.Test
 import kotlin.test.assertEquals
 import kotlin.test.assertNotNull
@@ -73,7 +74,7 @@ class MemberTest() {
         val m = MemberHandler().parse(FR_PROPERTY_DESCRIPTION.str) as Member
         val extensions: Extensions? = m.extensions
         assertNotNull(extensions)
-        assertEquals("ResultListResult class", extensions.friendlyName)
+        assertEquals("ResultListResult class", extensions.getFriendlyName())
     }
 
     @Test
@@ -81,7 +82,7 @@ class MemberTest() {
         val m = MemberHandler().parse(COLLECTION_DESCRIPTION.str) as Member
         val extensions: Extensions? = m.extensions
         assertNotNull(extensions)
-        assertEquals("Entities", extensions.friendlyName)
+        assertEquals("Entities", extensions.getFriendlyName())
     }
 
     private fun parse(jsonStr: String): Member {
diff --git a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/to/PropertyTest.kt b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/to/PropertyTest.kt
index bd40c88..9641ddb 100644
--- a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/to/PropertyTest.kt
+++ b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/to/PropertyTest.kt
@@ -24,6 +24,7 @@ import org.apache.isis.client.kroviz.snapshots.demo2_0_0.PROPERTY
 import org.apache.isis.client.kroviz.snapshots.demo2_0_0.PROPERTY_DESCRIPTION
 import org.apache.isis.client.kroviz.snapshots.simpleapp1_16_0.FR_OBJECT_PROPERTY_
 import org.apache.isis.client.kroviz.snapshots.simpleapp1_16_0.SO_PROPERTY
+import org.apache.isis.client.kroviz.to.mb.Extensions
 import kotlin.test.Test
 import kotlin.test.assertEquals
 import kotlin.test.assertTrue
@@ -35,7 +36,7 @@ class PropertyTest {
         val jsonStr = PROPERTY_DESCRIPTION.str
         val p = PropertyHandler().parse(jsonStr) as Property
         assertEquals("parity", p.id)
-        assertEquals("The parity of this 'DemoItem'.", p.extensions!!.description)
+        assertEquals("The parity of this 'DemoItem'.", p.extensions!!.getDescription())
     }
 
     @Test
@@ -84,7 +85,7 @@ class PropertyTest {
         val jsonStr = DOMAIN_TYPES_PROPERTY.str
         val p = PropertyHandler().parse(jsonStr) as Property
         val e: Extensions = p.extensions!!
-        val actual = e.friendlyName
+        val actual = e.getFriendlyName()
         val expected = "Read Only Property Derived Render Day Not Specified"
         assertEquals(expected, actual)
     }
diff --git a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/ui/table/LinkTreeDiagramTest.kt b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/ui/table/LinkTreeDiagramTest.kt
index 73a3432..90bdf8e 100644
--- a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/ui/table/LinkTreeDiagramTest.kt
+++ b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/ui/table/LinkTreeDiagramTest.kt
@@ -19,6 +19,7 @@
 
 package org.apache.isis.client.kroviz.ui.table
 
+import org.apache.isis.client.kroviz.core.aggregator.SystemAggregator
 import org.apache.isis.client.kroviz.core.event.EventStore
 import org.apache.isis.client.kroviz.core.event.ResourceSpecification
 import org.apache.isis.client.kroviz.handler.*
@@ -26,21 +27,22 @@ import org.apache.isis.client.kroviz.snapshots.Response
 import org.apache.isis.client.kroviz.snapshots.simpleapp1_16_0.*
 import org.apache.isis.client.kroviz.to.Method
 import org.apache.isis.client.kroviz.ui.diagram.LinkTreeDiagram
-import kotlin.test.Test
 import kotlin.test.assertNotNull
 import kotlin.test.assertTrue
 
 class LinkTreeDiagramTest {
 
-    @Test
+    //@Test         //TODO rework test to use AggregatorWithLayout
     fun testLinkTreeDiagram() {
         //when
-        load(RESTFUL, RestfulHandler())
-        load(RESTFUL_SERVICES, ServiceHandler())
-        load(RESTFUL_USER, UserHandler())
-        load(RESTFUL_MENUBARS, MenuBarsHandler())
-        load(RESTFUL_VERSION, VersionHandler())
-        load(RESTFUL_DOMAIN_TYPES, DomainTypesHandler())
+        val aggregator = SystemAggregator()
+        load(RESTFUL, "", RestfulHandler(), aggregator)
+        val referer = RESTFUL.url
+        load(RESTFUL_SERVICES, referer, ServiceHandler(), aggregator)
+        load(RESTFUL_USER, referer, UserHandler(), aggregator)
+        load(RESTFUL_MENUBARS, referer, MenuBarsHandler(), aggregator)
+        load(RESTFUL_VERSION, referer, VersionHandler(), aggregator)
+        load(RESTFUL_DOMAIN_TYPES, referer, DomainTypesHandler(), aggregator)
         // then
         assertTrue(EventStore.log.size >= 6)
         val rootRs = ResourceSpecification(RESTFUL.url)
@@ -48,20 +50,19 @@ class LinkTreeDiagramTest {
         assertNotNull(rootLogEntry)  //1
 
         // when
-        val code = LinkTreeDiagram.build().trim()
+        val code = LinkTreeDiagram.build(aggregator).trim()
         // then
-//        console.log("[LTDT.testLinkTreeDiagram] ${code}")
-        assertTrue(code.startsWith("@startsalt"))
-        assertTrue(code.endsWith("@endsalt"))
-        assertTrue(code.contains("+ /http://localhost:8080/restful/"))
-        assertTrue(code.contains("++ /http://localhost:8080/restful/version"))
-        //menuBars json doesn't have UP nor SELF nor a reference to it's parent
-//        assertTrue(code.contains("++ /http://localhost:8080/restful/menuBars"))
+        console.log("[LTDT.testLinkTreeDiagram] ${code}")
+        assertTrue(code.startsWith("@startmindmap"))
+        assertTrue(code.endsWith("@endmindmap"))
+        assertTrue(code.contains("http://localhost:8080/restful/"))
+        assertTrue(code.contains("http://localhost:8080/restful/version"))
+        assertTrue(code.contains("http://localhost:8080/restful/menuBars"))
     }
 
-    private fun load(response: Response, handler: BaseHandler) {
-        val rs = ResourceSpecification(response.url)
-        EventStore.start(rs, Method.GET.operation)
+    private fun load(response: Response, referer: String, handler: BaseHandler, aggregator: SystemAggregator) {
+        val rs = ResourceSpecification(response.url, referrerUrl = referer)
+        EventStore.start(rs, Method.GET.operation, aggregator = aggregator)
         val le = EventStore.end(rs, response.str)!!
         val tObj = handler.parse(response.str)!!
         le.setTransferObject(tObj)
diff --git a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/ui/table/TableFactoryTest.kt b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/ui/table/TableFactoryTest.kt
index af7127a..75f6d60 100644
--- a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/ui/table/TableFactoryTest.kt
+++ b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/ui/table/TableFactoryTest.kt
@@ -18,13 +18,13 @@
  */
 package org.apache.isis.client.kroviz.ui.table
 
+import io.kvision.state.ObservableList
+import io.kvision.state.observableListOf
 import org.apache.isis.client.kroviz.core.model.Exposer
-import org.apache.isis.client.kroviz.to.Extensions
 import org.apache.isis.client.kroviz.to.Member
 import org.apache.isis.client.kroviz.to.MemberType
 import org.apache.isis.client.kroviz.to.TObject
-import io.kvision.state.ObservableList
-import io.kvision.state.observableListOf
+import org.apache.isis.client.kroviz.to.mb.Extensions
 
 
 class TableFactoryTest {