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

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

commit ae4d83d6a9b92ff26851b1d90c0797cd2287acba
Author: Jörg Rade <[email protected]>
AuthorDate: Thu Dec 29 00:35:04 2022 +0100

    ISIS-3171 columns in parented collections not hidden by default
---
 .../partials/design/class-diagram_aggregator.adoc  |  10 +-
 .../partials/design/class-diagram_layout.adoc      | 101 +++++++++++++++++++++
 incubator/clients/kroviz/build.gradle.kts          |   2 +-
 .../kroviz/core/aggregator/AggregatorWithLayout.kt |  12 +--
 .../kroviz/core/aggregator/CollectionAggregator.kt |  10 +-
 .../kroviz/core/aggregator/ObjectAggregator.kt     |   9 +-
 .../causeway/client/kroviz/core/event/LogEntry.kt  |  25 +++--
 .../client/kroviz/core/model/CollectionDM.kt       |   2 +
 .../kroviz/core/model/CollectionProperties.kt      |  88 ++++++++++--------
 ...CollectionProperties.kt => ColumnProperties.kt} |  72 +++------------
 .../kroviz/core/model/DisplayModelWithLayout.kt    |  31 +++----
 .../causeway/client/kroviz/core/model/ObjectDM.kt  |   6 +-
 .../client/kroviz/handler/LayoutXmlHandler.kt      |   4 +-
 .../kroviz/to/{bs3/Action.kt => bs/ActionBs.kt}    |   8 +-
 .../client/kroviz/to/{bs3/Col.kt => bs/ColBs.kt}   |  32 +++----
 .../to/{bs3/Collection.kt => bs/CollectionBs.kt}   |   8 +-
 .../{bs3/DomainObject.kt => bs/DomainObjectBs.kt}  |   4 +-
 .../to/{bs3/FieldSet.kt => bs/FieldSetBs.kt}       |  12 +--
 .../client/kroviz/to/{bs3/Grid.kt => bs/GridBs.kt} |  12 +--
 .../client/kroviz/to/{bs3/Link.kt => bs/LinkBs.kt} |   4 +-
 .../to/{bs3/Property.kt => bs/PropertyBs.kt}       |  10 +-
 .../client/kroviz/to/{bs3/Row.kt => bs/RowBs.kt}   |  12 +--
 .../client/kroviz/to/{bs3/Tab.kt => bs/TabBs.kt}   |  12 +--
 .../to/{bs3/TabGroup.kt => bs/TabGroupBs.kt}       |  12 +--
 .../client/kroviz/to/{bs3 => bs}/XmlLayout.kt      |   2 +-
 .../client/kroviz/ui/builder/ColBuilder.kt         |   8 +-
 .../client/kroviz/ui/builder/FieldSetBuilder.kt    |  23 ++---
 .../client/kroviz/ui/builder/LayoutBuilder.kt      |   4 +-
 .../client/kroviz/ui/builder/RowBuilder.kt         |  17 ++--
 .../client/kroviz/ui/builder/TabBuilder.kt         |   6 +-
 .../client/kroviz/ui/builder/TabGroupBuilder.kt    |   6 +-
 .../client/kroviz/ui/core/ColumnFactory.kt         |   2 +-
 .../client/kroviz/ui/diagram/LayoutDiagram.kt      |  12 +--
 .../client/kroviz/ui/dialog/EventLogDetail.kt      |   9 +-
 .../core/aggregator/CollectionAggregatorTest.kt    |   4 +-
 .../client/kroviz/core/model/CollectionDMTest.kt   |   6 +-
 .../client/kroviz/to/{bs3 => bs}/LayoutXmlTest.kt  |   8 +-
 37 files changed, 339 insertions(+), 266 deletions(-)

diff --git 
a/incubator/clients/kroviz/adoc/modules/kroviz/partials/design/class-diagram_aggregator.adoc
 
b/incubator/clients/kroviz/adoc/modules/kroviz/partials/design/class-diagram_aggregator.adoc
index 0b4462c025..a410388c44 100644
--- 
a/incubator/clients/kroviz/adoc/modules/kroviz/partials/design/class-diagram_aggregator.adoc
+++ 
b/incubator/clients/kroviz/adoc/modules/kroviz/partials/design/class-diagram_aggregator.adoc
@@ -31,10 +31,10 @@ package "to" {
     TransferObject <|-- TObject
     TransferObject <|-- Icon
 
-    package "bs3" {
-        class Grid{}
+    package "bs" {
+        class GridBs{}
     }
-    TransferObject <|- Grid
+    TransferObject <|- GridBs
 }
 
 package "aggregator" {
@@ -98,8 +98,8 @@ package "model" {
 
     abstract class DisplayModelWithLayout {
         layout: Layout
-        grid: Grid
-        properties: CollectionProperties
+        grid: GridBs
+        collectionProperties: CollectionProperties
         icon: Icon
         + canBeDisplayed()
     }
diff --git 
a/incubator/clients/kroviz/adoc/modules/kroviz/partials/design/class-diagram_layout.adoc
 
b/incubator/clients/kroviz/adoc/modules/kroviz/partials/design/class-diagram_layout.adoc
new file mode 100644
index 0000000000..b1cc26b987
--- /dev/null
+++ 
b/incubator/clients/kroviz/adoc/modules/kroviz/partials/design/class-diagram_layout.adoc
@@ -0,0 +1,101 @@
+:Notice: 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 ag [...]
+
+.Layout Diagram
+[plantuml,file="class-diagram_layout.png"]
+----
+@startuml
+
+class Property{
+}
+class PropertyLt{
+}
+class PropertyBs{
+}
+
+class ColumnProperties{
+    property: Property
+    friendlyName: String
+    layout: PropertyLt
+    grid: PropertyBs
+    hidden: Boolean
+}
+ColumnProperties o-- Property
+ColumnProperties o-- PropertyLt
+ColumnProperties o-- PropertyBs
+class CollectionProperties {
+    list : List<ColumnProperties>
+    propertyDescriptionList : List<Property>
+    propertyLayoutList : List<PropertyLt>
+    propertyGridList : List<PropertyBs>
+    propertyList : List<Property>
+    descriptionsComplete:Boolean
+}
+CollectionProperties o-- Property
+CollectionProperties o-- PropertyLt
+CollectionProperties o-- PropertyBs
+CollectionProperties o-- ColumnProperties
+
+class Exposer {
+    delegate: TObject
+    iconName: String
+    + dynamise()
+    + get(propertyName: String)
+    + setIcon(icon: Icon)
+}
+note as ExposerNote
+dynamise() and get()
+use <b>Kotlin/JS</b> function
+<b>asDynamic()</b>
+end note
+Exposer..ExposerNote
+
+abstract class BaseDisplayModel {
+    isRendered:Boolean
+    title:String
+    {abstract} canBeDisplayed():Boolean
+}
+
+abstract class DisplayModelWithLayout {
+    layout: Layout
+    grid: Grid
+    collectionProperties: CollectionProperties
+    icon: Icon
+    + canBeDisplayed()
+}
+
+DisplayModelWithLayout --> CollectionProperties
+
+class ObjectDM {
+    + data:Exposer
+    + collections:Map<String,CollectionDM>
+    - dirty:Boolean
+    + canBeDisplayed()
+}
+note left of ObjectDM::dirty
+Used in
+UI editing
+to signal
+object
+change.
+end note
+
+class CollectionDM {
+    data:List<Exposer>
+    - rawData:List<TransferObject>
+}
+
+ObjectDM --> Exposer
+CollectionDM o-- Exposer
+
+BaseDisplayModel <|-- DisplayModelWithLayout
+DisplayModelWithLayout <|-- CollectionDM
+DisplayModelWithLayout <|-- ObjectDM
+ObjectDM o-- CollectionDM
+note left on link
+An <b>ObjectDM</b>
+can have zero or more
+<b><i>parented collections</i></b>.
+end note
+
+@enduml
+----
diff --git a/incubator/clients/kroviz/build.gradle.kts 
b/incubator/clients/kroviz/build.gradle.kts
index 0b4c1b2210..8101aa2faa 100644
--- a/incubator/clients/kroviz/build.gradle.kts
+++ b/incubator/clients/kroviz/build.gradle.kts
@@ -108,7 +108,7 @@ kotlin {
         implementation(npm("xterm", "4.15.0", false))
         implementation(npm("pdfjs", "2.4.7", false))
         implementation(npm("vega", "5.22.1", false))
-        implementation(npm("vega-lite", "5.4.0", true))
+//        implementation(npm("vega-lite", "5.6.0", true))
         implementation(npm("element-resize-event", "3.0.6", false))
     }
     sourceSets["test"].dependencies {
diff --git 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/core/aggregator/AggregatorWithLayout.kt
 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/core/aggregator/AggregatorWithLayout.kt
index 5fc5c9eb77..36abb3376e 100644
--- 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/core/aggregator/AggregatorWithLayout.kt
+++ 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/core/aggregator/AggregatorWithLayout.kt
@@ -21,10 +21,9 @@ package org.apache.causeway.client.kroviz.core.aggregator
 import org.apache.causeway.client.kroviz.core.event.LogEntry
 import org.apache.causeway.client.kroviz.core.event.ResourceProxy
 import org.apache.causeway.client.kroviz.core.model.DisplayModelWithLayout
-import org.apache.causeway.client.kroviz.core.model.ObjectDM
 import org.apache.causeway.client.kroviz.layout.Layout
 import org.apache.causeway.client.kroviz.to.*
-import org.apache.causeway.client.kroviz.to.bs3.Grid
+import org.apache.causeway.client.kroviz.to.bs.GridBs
 import org.apache.causeway.client.kroviz.ui.core.Constants
 import org.apache.causeway.client.kroviz.ui.diagram.Tree
 
@@ -43,7 +42,7 @@ abstract class AggregatorWithLayout : BaseAggregator() {
         console.log(layout)
         if (dm.layout == null) {
             dm.addLayout(layout)
-            dm.properties.propertyLayoutList.forEach { p ->
+            dm.collectionProperties.propertyLayoutList.forEach { p ->
                 val l = p.link
                 if (l == null) {
                     console.log(p.id + " link empty")  // ISIS-2846
@@ -59,8 +58,7 @@ abstract class AggregatorWithLayout : BaseAggregator() {
         }
     }
 
-    protected fun handleGrid(grid: Grid, dm: DisplayModelWithLayout, referrer: 
String) {
-        (dpm as ObjectDM).grid = grid
+    protected fun handleGrid(grid: GridBs, dm: DisplayModelWithLayout, 
referrer: String) {
         grid.getPropertyList().forEach {
             val link = it.link!!
             ResourceProxy().fetch(link, this, subType = Constants.subTypeJson, 
referrer = referrer)
@@ -68,7 +66,7 @@ abstract class AggregatorWithLayout : BaseAggregator() {
         //FIXME
         if (dm.grid == null) {
             dm.addGrid(grid)
-            dm.properties.propertyLayoutList.forEach { p ->
+            dm.collectionProperties.propertyLayoutList.forEach { p ->
                 val l = p.link
                 if (l == null) {
                     console.log(p.id + " link empty")  // ISIS-2846
@@ -99,7 +97,7 @@ abstract class AggregatorWithLayout : BaseAggregator() {
     }
 
     protected fun Property.getDescriptionLink(): Link? {
-        return this.links.firstOrNull() {
+        return this.links.firstOrNull {
             it.rel == Relation.DESCRIBED_BY.type
         }
     }
diff --git 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/core/aggregator/CollectionAggregator.kt
 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/core/aggregator/CollectionAggregator.kt
index b1f6f75118..095482251d 100644
--- 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/core/aggregator/CollectionAggregator.kt
+++ 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/core/aggregator/CollectionAggregator.kt
@@ -23,9 +23,10 @@ import org.apache.causeway.client.kroviz.core.event.LogEntry
 import org.apache.causeway.client.kroviz.core.event.ResourceProxy
 import org.apache.causeway.client.kroviz.core.event.ResourceSpecification
 import org.apache.causeway.client.kroviz.core.model.CollectionDM
+import org.apache.causeway.client.kroviz.core.model.DisplayModelWithLayout
 import org.apache.causeway.client.kroviz.layout.Layout
 import org.apache.causeway.client.kroviz.to.*
-import org.apache.causeway.client.kroviz.to.bs3.Grid
+import org.apache.causeway.client.kroviz.to.bs.GridBs
 import org.apache.causeway.client.kroviz.ui.core.ViewManager
 
 /** sequence of operations:
@@ -54,7 +55,7 @@ class CollectionAggregator(actionTitle: String, val parent: 
ObjectAggregator? =
                 is TObject -> handleObject(obj, referrer)
                 is DomainType -> handleDomainType(obj, referrer)
                 is Layout -> handleLayout(obj, dpm as CollectionDM, referrer)
-                is Grid -> handleGrid(obj, dpm as CollectionDM, referrer)
+                is GridBs -> handleGrid(obj, dpm as DisplayModelWithLayout, 
referrer)
                 is Property -> handleProperty(obj, referrer)
                 is Collection -> handleCollection(obj, referrer)
                 is Icon -> handleIcon(obj)
@@ -107,15 +108,12 @@ class CollectionAggregator(actionTitle: String, val 
parent: ObjectAggregator? =
     }
 
     private fun handleProperty(p: Property, referrer: String) {
-        console.log("[CA.handleProperty]")
         val dm = dpm as CollectionDM
         if (p.isPropertyDescription()) {
             dm.addPropertyDescription(p)
         } else {
             dm.addProperty(p)
-            val pdl = p.getDescriptionLink()
-            console.log(pdl)
-            if (pdl == null) return
+            val pdl = p.getDescriptionLink() ?: return
             invoke(pdl, this, referrer = referrer)
         }
     }
diff --git 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/core/aggregator/ObjectAggregator.kt
 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/core/aggregator/ObjectAggregator.kt
index 398bf5072f..285952e6dd 100644
--- 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/core/aggregator/ObjectAggregator.kt
+++ 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/core/aggregator/ObjectAggregator.kt
@@ -21,10 +21,11 @@ package org.apache.causeway.client.kroviz.core.aggregator
 import org.apache.causeway.client.kroviz.core.event.LogEntry
 import org.apache.causeway.client.kroviz.core.event.ResourceProxy
 import org.apache.causeway.client.kroviz.core.model.CollectionDM
+import org.apache.causeway.client.kroviz.core.model.DisplayModelWithLayout
 import org.apache.causeway.client.kroviz.core.model.ObjectDM
 import org.apache.causeway.client.kroviz.layout.Layout
 import org.apache.causeway.client.kroviz.to.*
-import org.apache.causeway.client.kroviz.to.bs3.Grid
+import org.apache.causeway.client.kroviz.to.bs.GridBs
 import org.apache.causeway.client.kroviz.ui.core.ViewManager
 import org.apache.causeway.client.kroviz.ui.dialog.ErrorDialog
 
@@ -52,7 +53,7 @@ class ObjectAggregator(val actionTitle: String) : 
AggregatorWithLayout() {
                 is ResultValue -> handleResultValue(obj)
                 is Property -> handleProperty(obj, referrer)
                 is Layout -> handleLayout(obj, dpm as ObjectDM, referrer)
-                is Grid -> handleGrid(obj, dpm as ObjectDM, referrer)
+                is GridBs -> handleGrid(obj, dpm as DisplayModelWithLayout, 
referrer)
                 is HttpError -> ErrorDialog(logEntry).open()
                 else -> log(logEntry)
             }
@@ -62,6 +63,10 @@ class ObjectAggregator(val actionTitle: String) : 
AggregatorWithLayout() {
             collectionMap.forEach {
                 (dpm as ObjectDM).addCollection(it.key, it.value.dpm as 
CollectionDM)
             }
+            console.log("[OA.canBeDisplayed]")
+            console.log(this)
+            console.log((dpm as 
DisplayModelWithLayout).collectionProperties.debug())
+
             ViewManager.openObjectView(this)
         }
     }
diff --git 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/core/event/LogEntry.kt
 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/core/event/LogEntry.kt
index 88f872b926..1c78cfad99 100644
--- 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/core/event/LogEntry.kt
+++ 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/core/event/LogEntry.kt
@@ -25,7 +25,7 @@ import kotlinx.serialization.Serializable
 import org.apache.causeway.client.kroviz.core.aggregator.ActionDispatcher
 import org.apache.causeway.client.kroviz.core.aggregator.BaseAggregator
 import org.apache.causeway.client.kroviz.to.*
-import org.apache.causeway.client.kroviz.to.bs3.Grid
+import org.apache.causeway.client.kroviz.to.bs.GridBs
 import org.apache.causeway.client.kroviz.to.mb.Menubars
 import org.apache.causeway.client.kroviz.ui.core.Constants
 import org.apache.causeway.client.kroviz.ui.core.ViewManager
@@ -107,7 +107,7 @@ data class LogEntry(
     var runningAtStart = 0
     var runningAtEnd = 0
 
-    // alternative constructor for UI events (eg. from user interaction)
+    // alternative constructor for UI events (e.g. from user interaction)
     @JsName("secondaryConstructor")
     constructor(title: String, aggregator: BaseAggregator) : 
this(ResourceSpecification(""), "", "") {
         this.title = title
@@ -163,6 +163,7 @@ data class LogEntry(
             hasResponse()
                     && this.method == method
                     && subType == rs.subType -> true
+
             isView() -> true
             else -> false
         }
@@ -180,33 +181,39 @@ data class LogEntry(
     }
 
     fun setTransferObject(to: TransferObject) {
-        console.log("[LE.setTransferObject]")
         this.obj = to
         when (to) {
             is WithLinks -> {
                 this.type = extractType(to)
             }
-            is Grid -> {
+
+            is GridBs -> {
                 this.type = Relation.LAYOUT.type
             }
+
             is Icon -> {
                 this.type = Relation.OBJECT_ICON.type
             }
+
             is Blob -> {
                 this.type = Represention.IMAGE_PNG.type
             }
+
             is Menubars -> {
                 this.type = Represention.LAYOUT_MENUBARS.type
             }
+
             is HttpError -> {
                 this.type = Represention.ERROR.type
             }
+
             is TObject -> {
                 this.state = EventState.MISSING
                 this.type = Represention.ERROR.type
                 console.log("to == null for response:")
                 console.log(response)
             }
+
             else -> {
                 console.log(to)
             }
@@ -217,7 +224,7 @@ data class LogEntry(
     private fun extractType(wl: WithLinks): String {
         val firstLink = wl.getLinks().firstOrNull()!!
         val result = firstLink.simpleType()
-        if (result.trim().length == 0) {
+        if (result.isEmpty()) {
             console.log("[LE.extractType]")
             console.log(obj)
             console.log(result)
@@ -278,14 +285,14 @@ data class LogEntry(
     }
 
     fun getAggregator(): BaseAggregator? {
-        //TODO the last aggt is not always the right one
+        //TODO the last aggregator is not always the right one
         // callers need to filter  !!!
-        if (aggregators.size == 0) {
+        return if (aggregators.size == 0) {
             console.log("[LE.getAggregator] no Aggregator(s) yet")
             console.log(this)
-            return null
+            null
         } else {
-            return aggregators.last()
+            aggregators.last()
         }
     }
 
diff --git 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/core/model/CollectionDM.kt
 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/core/model/CollectionDM.kt
index 92fd462f8b..fd009de601 100644
--- 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/core/model/CollectionDM.kt
+++ 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/core/model/CollectionDM.kt
@@ -27,6 +27,8 @@ class CollectionDM(override val title: String) : 
DisplayModelWithLayout() {
     private var rawData = observableListOf<TransferObject>()
 
     override fun addData(obj: TransferObject) {
+ //       console.log("[CDM.addData]")
+ //       console.log(obj)
         if (!rawData.contains(obj)) {
             rawData.add(obj)
             val exo = Exposer(obj as TObject)
diff --git 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/core/model/CollectionProperties.kt
 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/core/model/CollectionProperties.kt
index c074ac87f3..9a1a3f3f6b 100644
--- 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/core/model/CollectionProperties.kt
+++ 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/core/model/CollectionProperties.kt
@@ -19,25 +19,57 @@
 package org.apache.causeway.client.kroviz.core.model
 
 import org.apache.causeway.client.kroviz.layout.PropertyLt
-import org.apache.causeway.client.kroviz.to.Property
 import org.apache.causeway.client.kroviz.to.Extensions
+import org.apache.causeway.client.kroviz.to.Property
+import org.apache.causeway.client.kroviz.to.bs.PropertyBs
 
 class CollectionProperties() {
     val list = mutableListOf<ColumnProperties>()
     var propertyDescriptionList = mutableListOf<Property>()
     var propertyLayoutList = mutableListOf<PropertyLt>()
+    var propertyGridList = mutableListOf<PropertyBs>()
     var propertyList = mutableListOf<Property>()
+    var descriptionsComplete = false
+
+    fun debug(): String {
+        var answer = "descriptionsComplete: $descriptionsComplete"
+
+        answer = answer + "\nlist: ${list.size}"
+        console.log("[CP.debug] List of ColumnProperties")
+        console.log(list)
+
+        answer = answer + "\npropertyDescriptionList: 
${propertyDescriptionList.size}"
+        console.log("[CP.debug] List of Property (Description)")
+        console.log(propertyDescriptionList)
+
+        answer = answer + "\npropertyLayoutList: ${propertyLayoutList.size}"
+        console.log("[CP.debug] List of PropertyLt")
+        console.log(propertyLayoutList)
+
+        answer = answer + "\npropertyGridList: ${propertyGridList.size}"
+        console.log("[CP.debug] List of PropertyBs")
+        console.log(propertyGridList)
+
+        answer = answer + "\npropertyList: ${propertyList.size}"
+        console.log("[CP.debug] List of Property")
+        console.log(propertyList)
+
+        return answer
+    }
 
     fun readyForDisplay(): Boolean {
         val ps = propertyList.size
         val pls = propertyLayoutList.size
         val pds = propertyDescriptionList.size
-        val descriptionsComplete = (pds >= pls) && (ps >= pls)
+        descriptionsComplete = (pds >= pls) && (ps >= pls)
         return descriptionsComplete
     }
 
     fun addProperty(property: Property) {
+        console.log("[CollectionProperties.addProperty]")
+        console.log(property)
         propertyList.add(property)
+        console.log(propertyList)
         val id = property.id
         val cp = findOrCreate(id)
         cp.property = property
@@ -53,6 +85,19 @@ class CollectionProperties() {
         layoutList.forEach { addPropertyLayout(it) }
     }
 
+    fun addAllPropertyGrid(gridList: List<PropertyBs>) {
+//        console.log("[DMWL.addAllPropertyGrid]")
+        propertyGridList.addAll(gridList)
+        fun addPropertyGrid(grid: PropertyBs) {
+//            console.log("[DMWL.addPropertyGrid] -> grid")
+//            console.log(grid)
+            val id = grid.id
+            val cp = findOrCreate(id)
+            cp.initGrid(grid)
+        }
+        gridList.forEach { addPropertyGrid(it) }
+    }
+
     fun addPropertyDescription(description: Property) {
         propertyDescriptionList.add(description)
         val id = description.id
@@ -74,41 +119,4 @@ class CollectionProperties() {
         return list.find { it.key == id }
     }
 
-}
-
-/**
- * Properties have three aspects:
- *
- * - Member of a DomainObject
- * - Description (friendlyName, etc.)
- * - Layout (hidden, labelPosition, etc.)
- *
- * All three are required in order to display correctly in a table.
- */
-class ColumnProperties(val key: String) {
-    var property: Property? = null
-    var friendlyName: String = ""
-    var layout: PropertyLt? = null
-    var hidden: Boolean = true
-
-    fun initLayout(layout: PropertyLt) {
-        this.layout = layout
-        hidden = (layout.hidden != null)
-        // properties without labelPosition will be hidden - is that correct?
-        // example: Demo -> Strings -> Description
-        if (!hidden && layout.labelPosition == null) {
-            hidden = true
-        }
-    }
-
-    fun initGrid(property: Property) {
-        //  this.layout = layout
-//FIXME        hidden = (property.hidden != null)
-        // properties without labelPosition will be hidden - is that correct?
-        // example: Demo -> Strings -> Description
-        //  if (!hidden && property.labelPosition == null) {
-        //     hidden = true
-        // }
-    }
-
-}
+}
\ No newline at end of file
diff --git 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/core/model/CollectionProperties.kt
 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/core/model/ColumnProperties.kt
similarity index 53%
copy from 
incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/core/model/CollectionProperties.kt
copy to 
incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/core/model/ColumnProperties.kt
index c074ac87f3..173985456a 100644
--- 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/core/model/CollectionProperties.kt
+++ 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/core/model/ColumnProperties.kt
@@ -20,61 +20,7 @@ package org.apache.causeway.client.kroviz.core.model
 
 import org.apache.causeway.client.kroviz.layout.PropertyLt
 import org.apache.causeway.client.kroviz.to.Property
-import org.apache.causeway.client.kroviz.to.Extensions
-
-class CollectionProperties() {
-    val list = mutableListOf<ColumnProperties>()
-    var propertyDescriptionList = mutableListOf<Property>()
-    var propertyLayoutList = mutableListOf<PropertyLt>()
-    var propertyList = mutableListOf<Property>()
-
-    fun readyForDisplay(): Boolean {
-        val ps = propertyList.size
-        val pls = propertyLayoutList.size
-        val pds = propertyDescriptionList.size
-        val descriptionsComplete = (pds >= pls) && (ps >= pls)
-        return descriptionsComplete
-    }
-
-    fun addProperty(property: Property) {
-        propertyList.add(property)
-        val id = property.id
-        val cp = findOrCreate(id)
-        cp.property = property
-    }
-
-    fun addAllPropertyLayout(layoutList: List<PropertyLt>) {
-        propertyLayoutList.addAll(layoutList)
-        fun addPropertyLayout(layout: PropertyLt) {
-            val id = layout.id!!
-            val cp = findOrCreate(id)
-            cp.initLayout(layout)
-        }
-        layoutList.forEach { addPropertyLayout(it) }
-    }
-
-    fun addPropertyDescription(description: Property) {
-        propertyDescriptionList.add(description)
-        val id = description.id
-        val cp = findOrCreate(id)
-        val e: Extensions = description.extensions!!
-        cp.friendlyName = e.getFriendlyName()
-    }
-
-    private fun findOrCreate(id: String): ColumnProperties {
-        var cp = find(id)
-        if (cp == null) {
-            cp = ColumnProperties(id)
-            list.add(cp)
-        }
-        return cp
-    }
-
-    fun find(id: String): ColumnProperties? {
-        return list.find { it.key == id }
-    }
-
-}
+import org.apache.causeway.client.kroviz.to.bs.PropertyBs
 
 /**
  * Properties have three aspects:
@@ -89,10 +35,17 @@ class ColumnProperties(val key: String) {
     var property: Property? = null
     var friendlyName: String = ""
     var layout: PropertyLt? = null
-    var hidden: Boolean = true
+    var grid: PropertyBs? = null
+    var hidden: Boolean = false
+
+    fun debug(): String {
+        return "property: " + property?.id
+    }
 
     fun initLayout(layout: PropertyLt) {
         this.layout = layout
+        console.log("[CP.initLayout]")
+
         hidden = (layout.hidden != null)
         // properties without labelPosition will be hidden - is that correct?
         // example: Demo -> Strings -> Description
@@ -101,8 +54,9 @@ class ColumnProperties(val key: String) {
         }
     }
 
-    fun initGrid(property: Property) {
-        //  this.layout = layout
+    fun initGrid(grid: PropertyBs) {
+        this.grid = grid
+        console.log("[CP.initGrid]")
 //FIXME        hidden = (property.hidden != null)
         // properties without labelPosition will be hidden - is that correct?
         // example: Demo -> Strings -> Description
@@ -111,4 +65,4 @@ class ColumnProperties(val key: String) {
         // }
     }
 
-}
+}
\ No newline at end of file
diff --git 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/core/model/DisplayModelWithLayout.kt
 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/core/model/DisplayModelWithLayout.kt
index 5c065e95ab..5bc2f1c137 100644
--- 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/core/model/DisplayModelWithLayout.kt
+++ 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/core/model/DisplayModelWithLayout.kt
@@ -23,24 +23,21 @@ import org.apache.causeway.client.kroviz.layout.RowLt
 import org.apache.causeway.client.kroviz.to.Icon
 import org.apache.causeway.client.kroviz.to.Property
 import org.apache.causeway.client.kroviz.to.TransferObject
-import org.apache.causeway.client.kroviz.to.bs3.Grid
-import org.apache.causeway.client.kroviz.to.bs3.Row
+import org.apache.causeway.client.kroviz.to.bs.GridBs
+import org.apache.causeway.client.kroviz.to.bs.RowBs
 
 abstract class DisplayModelWithLayout : BaseDisplayModel() {
 
     var layout: Layout? = null
-    var grid: Grid? = null
-    val properties = CollectionProperties()
+    var grid: GridBs? = null
+    val collectionProperties = CollectionProperties()
     var icon: Icon? = null
 
     override fun canBeDisplayed(): Boolean {
-//        console.log("[DMWL.canBeDisplayed]")
-//        console.log(this)
         return when {
             isRendered -> false
-            layout != null -> true
-            grid != null -> true
-            else -> properties.readyForDisplay()
+            layout == null && grid == null -> false
+            else -> collectionProperties.readyForDisplay()
         }
     }
 
@@ -49,9 +46,7 @@ abstract class DisplayModelWithLayout : BaseDisplayModel() {
         initPropertyLayoutList(layout)
     }
 
-    fun addGrid(grid: Grid) {
-        console.log("[DMWL.initGrid]")
-        console.log(grid)
+    fun addGrid(grid: GridBs) {
         this.grid = grid
         initPropertyGridList(grid)
     }
@@ -66,7 +61,7 @@ abstract class DisplayModelWithLayout : BaseDisplayModel() {
         }
     }
 
-    private fun initPropertyGridList(grid: Grid) {
+    private fun initPropertyGridList(grid: GridBs) {
         grid.rows.forEach { r ->
             initGrid4Row(r)
         }
@@ -76,7 +71,7 @@ abstract class DisplayModelWithLayout : BaseDisplayModel() {
         r.cols.forEach { cs ->
             val c = cs.getCol()
             c.fieldSet.forEach { fs ->
-                properties.addAllPropertyLayout(fs.property)
+                collectionProperties.addAllPropertyLayout(fs.property)
             }
             c.tabGroup.forEach { tg ->
                 tg.tab.forEach { t ->
@@ -88,10 +83,10 @@ abstract class DisplayModelWithLayout : BaseDisplayModel() {
         }
     }
 
-    private fun initGrid4Row(r: Row) {
+    private fun initGrid4Row(r: RowBs) {
         r.colList.forEach { c ->
             c.fieldSetList.forEach { fs ->
-                //FIXME         
properties.addAllPropertiesFromGrid(fs.propertyList)
+                collectionProperties.addAllPropertyGrid(fs.propertyList)
             }
             c.tabGroupList.forEach { tg ->
                 tg.tabList.forEach { t ->
@@ -104,11 +99,11 @@ abstract class DisplayModelWithLayout : BaseDisplayModel() 
{
     }
 
     fun addPropertyDescription(p: Property) {
-        properties.addPropertyDescription(p)
+        collectionProperties.addPropertyDescription(p)
     }
 
     fun addProperty(property: Property) {
-        properties.addProperty(property)
+        collectionProperties.addProperty(property)
     }
 
 }
diff --git 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/core/model/ObjectDM.kt
 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/core/model/ObjectDM.kt
index 29f9f79fe1..d33ef1fc8c 100644
--- 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/core/model/ObjectDM.kt
+++ 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/core/model/ObjectDM.kt
@@ -25,7 +25,7 @@ import 
org.apache.causeway.client.kroviz.ui.core.SessionManager
 
 class ObjectDM(override val title: String) : DisplayModelWithLayout() {
     var data: Exposer? = null
-    val collections = mutableMapOf<String, CollectionDM>()
+    val collectionMap = mutableMapOf<String, CollectionDM>()
     private var dirty: Boolean = false
 
     fun setDirty(value: Boolean) {
@@ -33,12 +33,10 @@ class ObjectDM(override val title: String) : 
DisplayModelWithLayout() {
     }
 
     fun addCollection(key: String, value: CollectionDM) {
-        collections[key] = value
+        collectionMap[key] = value
     }
 
     override fun addData(obj: TransferObject) {
-        console.log("[ODM.addData]")
-//        console.log(obj)
         (obj as TObject)
         val exo = Exposer(obj)
         data = exo.dynamise() as? Exposer
diff --git 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/handler/LayoutXmlHandler.kt
 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/handler/LayoutXmlHandler.kt
index cb2c60d36a..9af422be39 100644
--- 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/handler/LayoutXmlHandler.kt
+++ 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/handler/LayoutXmlHandler.kt
@@ -19,7 +19,7 @@
 package org.apache.causeway.client.kroviz.handler
 
 import org.apache.causeway.client.kroviz.to.TransferObject
-import org.apache.causeway.client.kroviz.to.bs3.Grid
+import org.apache.causeway.client.kroviz.to.bs.GridBs
 import org.apache.causeway.client.kroviz.utils.UrlUtils
 import org.apache.causeway.client.kroviz.utils.XmlHelper
 
@@ -36,7 +36,7 @@ class LayoutXmlHandler : BaseHandler() {
 
     override fun parse(response: String): TransferObject {
         val doc = XmlHelper.parseXml(response)
-        return Grid(doc)
+        return GridBs(doc)
     }
 
 }
diff --git 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs3/Action.kt
 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs/ActionBs.kt
similarity index 93%
rename from 
incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs3/Action.kt
rename to 
incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs/ActionBs.kt
index 756b75f684..2507df32e9 100644
--- 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs3/Action.kt
+++ 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs/ActionBs.kt
@@ -16,12 +16,12 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.client.kroviz.to.bs3
+package org.apache.causeway.client.kroviz.to.bs
 
 import org.w3c.dom.Node
 import org.w3c.dom.asList
 
-class Action(node: Node) : XmlLayout() {
+class ActionBs(node: Node) : XmlLayout() {
     var bookmarking: String //BookmarkPolicy? = null use ENUM
     var cssClass: String
     var cssClassFa: String
@@ -31,7 +31,7 @@ class Action(node: Node) : XmlLayout() {
     var position: String //USE ENUM Position? = null
     var named = ""
     var describedAs = ""
-    var linkList = mutableListOf<Link>()
+    var linkList = mutableListOf<LinkBs>()
 
     init {
         val dyNode = node.asDynamic()
@@ -58,7 +58,7 @@ class Action(node: Node) : XmlLayout() {
         }
         val lList = nodeList.filter { it.nodeName == "$nsCpt:link" }
         for (n: Node in lList) {
-            val link = Link(n)
+            val link = LinkBs(n)
             linkList.add(link)
         }
     }
diff --git 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs3/Col.kt
 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs/ColBs.kt
similarity index 79%
rename from 
incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs3/Col.kt
rename to 
incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs/ColBs.kt
index 2abe89c71c..aeba048fdc 100644
--- 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs3/Col.kt
+++ 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs/ColBs.kt
@@ -16,18 +16,18 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.client.kroviz.to.bs3
+package org.apache.causeway.client.kroviz.to.bs
 
 import org.w3c.dom.Node
 import org.w3c.dom.asList
 
-class Col(node: Node) : XmlLayout() {
-    val rowList = mutableListOf<Row>()
-    var domainObject: DomainObject? = null
-    var actionList = mutableListOf<Action>()
-    val tabGroupList = mutableListOf<TabGroup>()
-    var fieldSetList = mutableListOf<FieldSet>()
-    var collectionList = mutableListOf<Collection>()
+class ColBs(node: Node) : XmlLayout() {
+    val rowList = mutableListOf<RowBs>()
+    var domainObject: DomainObjectBs? = null
+    var actionList = mutableListOf<ActionBs>()
+    val tabGroupList = mutableListOf<TabGroupBs>()
+    var fieldSetList = mutableListOf<FieldSetBs>()
+    var collectionList = mutableListOf<CollectionBs>()
     var span: Int = 0
 
     init {
@@ -38,42 +38,42 @@ class Col(node: Node) : XmlLayout() {
 
         val rl = nl.filter { it.nodeName == "$nsBs:row" }
         for (n: Node in rl) {
-            val row = Row(n)
+            val row = RowBs(n)
             rowList.add(row)
         }
 
         val doNodes = nl.filter { it.nodeName == "$nsCpt:domainObject" }
         if (doNodes.isNotEmpty()) {
-            domainObject = DomainObject(doNodes.first())
+            domainObject = DomainObjectBs(doNodes.first())
         }
 
         val actNodes = nl.filter { it.nodeName == "$nsCpt:action" }
         for (n: Node in actNodes) {
-            val act = Action(n)
+            val act = ActionBs(n)
             actionList.add(act)
         }
 
         val tgNodes = nl.filter { it.nodeName == "$nsBs:tabGroup" }
         for (n: Node in tgNodes) {
-            val tg = TabGroup(n)
+            val tg = TabGroupBs(n)
             tabGroupList.add(tg)
         }
 
         val fsNodes = nl.filter { it.nodeName == "$nsCpt:fieldSet" }
         for (n: Node in fsNodes) {
-            val fs = FieldSet(n)
+            val fs = FieldSetBs(n)
             fieldSetList.add(fs)
         }
 
         val collNodes = nl.filter { it.nodeName == "$nsCpt:collection" }
         for (n: Node in collNodes) {
-            val c = Collection(n)
+            val c = CollectionBs(n)
             collectionList.add(c)
         }
     }
 
-    fun getPropertyList(): List<Property> {
-        val list = mutableListOf<Property>()
+    fun getPropertyList(): List<PropertyBs> {
+        val list = mutableListOf<PropertyBs>()
         rowList.forEach { r ->
             list.addAll(r.getPropertyList())
         }
diff --git 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs3/Collection.kt
 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs/CollectionBs.kt
similarity index 94%
rename from 
incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs3/Collection.kt
rename to 
incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs/CollectionBs.kt
index be271ac927..34480717f6 100644
--- 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs3/Collection.kt
+++ 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs/CollectionBs.kt
@@ -16,12 +16,12 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.client.kroviz.to.bs3
+package org.apache.causeway.client.kroviz.to.bs
 
 import org.w3c.dom.Node
 import org.w3c.dom.asList
 
-class Collection(node: Node) : XmlLayout() {
+class CollectionBs(node: Node) : XmlLayout() {
     var bookmarking: String //BookmarkPolicy? = null use ENUM
     var cssClass: String
     var cssClassFa: String
@@ -31,7 +31,7 @@ class Collection(node: Node) : XmlLayout() {
     var position: String //USE ENUM Position? = null
     var named = ""
     var describedAs = ""
-    var linkList = mutableListOf<Link>()
+    var linkList = mutableListOf<LinkBs>()
 
     init {
         val dyNode = node.asDynamic()
@@ -59,7 +59,7 @@ class Collection(node: Node) : XmlLayout() {
         }
         val lList = nodeList.filter { it.nodeName == "$nsCpt:link" }
         for (n: Node in lList) {
-            val link = Link(n)
+            val link = LinkBs(n)
             linkList.add(link)
         }
     }
diff --git 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs3/DomainObject.kt
 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs/DomainObjectBs.kt
similarity index 94%
rename from 
incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs3/DomainObject.kt
rename to 
incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs/DomainObjectBs.kt
index 52e4155268..e5a8e90d5a 100644
--- 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs3/DomainObject.kt
+++ 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs/DomainObjectBs.kt
@@ -16,12 +16,12 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.client.kroviz.to.bs3
+package org.apache.causeway.client.kroviz.to.bs
 
 import org.apache.causeway.client.kroviz.utils.XmlHelper
 import org.w3c.dom.Node
 
-class DomainObject(node: Node) {
+class DomainObjectBs(node: Node) {
     var named = ""
     var plural = ""
     lateinit var describedAs: String
diff --git 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs3/FieldSet.kt
 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs/FieldSetBs.kt
similarity index 86%
rename from 
incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs3/FieldSet.kt
rename to 
incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs/FieldSetBs.kt
index 5374f5bcdc..9753c552b0 100644
--- 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs3/FieldSet.kt
+++ 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs/FieldSetBs.kt
@@ -16,14 +16,14 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.client.kroviz.to.bs3
+package org.apache.causeway.client.kroviz.to.bs
 
 import org.w3c.dom.Node
 import org.w3c.dom.asList
 
-class FieldSet(node: Node) : XmlLayout() {
-    var actionList = mutableListOf<Action>()
-    var propertyList = mutableListOf<Property>()
+class FieldSetBs(node: Node) : XmlLayout() {
+    var actionList = mutableListOf<ActionBs>()
+    var propertyList = mutableListOf<PropertyBs>()
     var name: String = ""
     var id: String = ""
 
@@ -38,13 +38,13 @@ class FieldSet(node: Node) : XmlLayout() {
         val nl = node.childNodes.asList()
         val actList = nl.filter { it.nodeName == "$nsCpt:action" }
         for (n: Node in actList) {
-            val act = Action(n)
+            val act = ActionBs(n)
             actionList.add(act)
         }
 
         val pNl = nl.filter { it.nodeName == "$nsCpt:property" }
         for (n: Node in pNl) {
-            val p = Property(n)
+            val p = PropertyBs(n)
             if (p.hidden != "") {
                 propertyList.add(p)
             }
diff --git 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs3/Grid.kt
 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs/GridBs.kt
similarity index 85%
rename from 
incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs3/Grid.kt
rename to 
incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs/GridBs.kt
index 20ea99a2ad..ed2fc3caf7 100644
--- 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs3/Grid.kt
+++ 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs/GridBs.kt
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.client.kroviz.to.bs3
+package org.apache.causeway.client.kroviz.to.bs
 
 import org.apache.causeway.client.kroviz.to.TransferObject
 import org.w3c.dom.Document
@@ -30,8 +30,8 @@ import org.w3c.dom.asList
  * * there may be N other rows as well
  * Please note, that rows may be children of Tab as well (recursive)
  */
-class Grid(document: Document) : XmlLayout(), TransferObject {
-    var rows = ArrayList<Row>()
+class GridBs(document: Document) : XmlLayout(), TransferObject {
+    var rows = ArrayList<RowBs>()
 
     init {
         val root = document.firstChild!!
@@ -39,13 +39,13 @@ class Grid(document: Document) : XmlLayout(), 
TransferObject {
         val rowNodes = kids.asList()
         val rowList = rowNodes.filter { it.nodeName == "$nsBs:row" }
         for (n: Node in rowList) {
-            val row = Row(n)
+            val row = RowBs(n)
             rows.add(row)
         }
     }
 
-    fun getPropertyList(): List<Property> {
-        val list = mutableListOf<Property>()
+    fun getPropertyList(): List<PropertyBs> {
+        val list = mutableListOf<PropertyBs>()
         rows.forEach { r ->
             list.addAll(r.getPropertyList())
         }
diff --git 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs3/Link.kt
 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs/LinkBs.kt
similarity index 96%
rename from 
incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs3/Link.kt
rename to 
incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs/LinkBs.kt
index 593b301834..24aa0a34a2 100644
--- 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs3/Link.kt
+++ 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs/LinkBs.kt
@@ -16,12 +16,12 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.client.kroviz.to.bs3
+package org.apache.causeway.client.kroviz.to.bs
 
 import org.w3c.dom.Node
 import org.w3c.dom.asList
 
-class Link(node: Node) : XmlLayout() {
+class LinkBs(node: Node) : XmlLayout() {
     lateinit var rel: String
     lateinit var method: String
     lateinit var href: String
diff --git 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs3/Property.kt
 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs/PropertyBs.kt
similarity index 91%
rename from 
incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs3/Property.kt
rename to 
incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs/PropertyBs.kt
index 12ff3a0b12..7e76306754 100644
--- 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs3/Property.kt
+++ 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs/PropertyBs.kt
@@ -16,14 +16,14 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.client.kroviz.to.bs3
+package org.apache.causeway.client.kroviz.to.bs
 
 import org.apache.causeway.client.kroviz.to.Link
 import org.w3c.dom.Node
 import org.w3c.dom.asList
 
 //IMPROVE class differs in many aspects from org.ro.to.Property - to be 
refactored?
-class Property(node: Node) : XmlLayout() {
+class PropertyBs(node: Node) : XmlLayout() {
     var id: String
     var named = ""
     var link: Link? = null
@@ -31,7 +31,7 @@ class Property(node: Node) : XmlLayout() {
     var typicalLength: Int = 0
     var multiLine: Int = 1
     var describedAs: String? = null
-    lateinit var action: Action
+    lateinit var action: ActionBs
 
     init {
         val dn = node.asDynamic()
@@ -51,13 +51,13 @@ class Property(node: Node) : XmlLayout() {
         val actList = nodeList.filter { it.nodeName == "$nsCpt:action" }
         if (actList.isNotEmpty()) {
             val n = actList.first()
-            action = Action(n)
+            action = ActionBs(n)
         }
 
         val linkList = nodeList.filter { it.nodeName == "$nsCpt:link" }
         if (linkList.isNotEmpty()) {
             val n = linkList.first()
-            val bs3l = Link(n)
+            val bs3l = LinkBs(n)
             link = Link(bs3l.rel, bs3l.method, bs3l.href, bs3l.type)
         }
     }
diff --git 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs3/Row.kt
 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs/RowBs.kt
similarity index 84%
rename from 
incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs3/Row.kt
rename to 
incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs/RowBs.kt
index 39d129b6db..b4d7c1002d 100644
--- 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs3/Row.kt
+++ 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs/RowBs.kt
@@ -16,13 +16,13 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.client.kroviz.to.bs3
+package org.apache.causeway.client.kroviz.to.bs
 
 import org.apache.causeway.client.kroviz.utils.XmlHelper
 import org.w3c.dom.Node
 
-class Row(node: Node) : XmlLayout() {
-    val colList = mutableListOf<Col>()
+class RowBs(node: Node) : XmlLayout() {
+    val colList = mutableListOf<ColBs>()
     var id: String = ""
 
     init {
@@ -34,13 +34,13 @@ class Row(node: Node) : XmlLayout() {
         val nodeList = XmlHelper.nonTextChildren(node)
         val cl = nodeList.filter { it.nodeName == "$nsBs:col" }
         for (n: Node in cl) {
-            val col = Col(n)
+            val col = ColBs(n)
             colList.add(col)
         }
     }
 
-    fun getPropertyList(): List<Property> {
-        val list = mutableListOf<Property>()
+    fun getPropertyList(): List<PropertyBs> {
+        val list = mutableListOf<PropertyBs>()
         colList.forEach { c ->
             list.addAll(c.getPropertyList())
         }
diff --git 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs3/Tab.kt
 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs/TabBs.kt
similarity index 83%
rename from 
incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs3/Tab.kt
rename to 
incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs/TabBs.kt
index 2044ed7567..cc8ba6eb82 100644
--- 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs3/Tab.kt
+++ 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs/TabBs.kt
@@ -16,13 +16,13 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.client.kroviz.to.bs3
+package org.apache.causeway.client.kroviz.to.bs
 
 import org.w3c.dom.Node
 import org.w3c.dom.asList
 
-class Tab(node: Node) : XmlLayout() {
-    val rowList = mutableListOf<Row>()
+class TabBs(node: Node) : XmlLayout() {
+    val rowList = mutableListOf<RowBs>()
     var name: String
 
     init {
@@ -33,13 +33,13 @@ class Tab(node: Node) : XmlLayout() {
 
         val rNodes = nl.filter { it.nodeName == "$nsBs:row" }
         for (n: Node in rNodes) {
-            val row = Row(n)
+            val row = RowBs(n)
             rowList.add(row)
         }
     }
 
-    fun getPropertyList(): List<Property> {
-        val list = mutableListOf<Property>()
+    fun getPropertyList(): List<PropertyBs> {
+        val list = mutableListOf<PropertyBs>()
         rowList.forEach { r ->
             list.addAll(r.getPropertyList())
         }
diff --git 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs3/TabGroup.kt
 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs/TabGroupBs.kt
similarity index 83%
rename from 
incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs3/TabGroup.kt
rename to 
incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs/TabGroupBs.kt
index 74f7344b8a..c607af61a5 100644
--- 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs3/TabGroup.kt
+++ 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs/TabGroupBs.kt
@@ -16,13 +16,13 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.client.kroviz.to.bs3
+package org.apache.causeway.client.kroviz.to.bs
 
 import org.w3c.dom.Node
 import org.w3c.dom.asList
 
-class TabGroup(node: Node) : XmlLayout() {
-    var tabList = mutableListOf<Tab>()
+class TabGroupBs(node: Node) : XmlLayout() {
+    var tabList = mutableListOf<TabBs>()
     lateinit var metadataError: String
     lateinit var cssClass: String
 
@@ -31,13 +31,13 @@ class TabGroup(node: Node) : XmlLayout() {
 
         val tnList = nodeList.filter { it.nodeName == "$nsBs:tab" }
         for (n: Node in tnList) {
-            val tab = Tab(n)
+            val tab = TabBs(n)
             tabList.add(tab)
         }
     }
 
-    fun getPropertyList(): List<Property> {
-        val list = mutableListOf<Property>()
+    fun getPropertyList(): List<PropertyBs> {
+        val list = mutableListOf<PropertyBs>()
         tabList.forEach { t ->
             list.addAll(t.getPropertyList())
         }
diff --git 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs3/XmlLayout.kt
 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs/XmlLayout.kt
similarity index 94%
rename from 
incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs3/XmlLayout.kt
rename to 
incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs/XmlLayout.kt
index ed6937fd6b..2c049e6fd5 100644
--- 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs3/XmlLayout.kt
+++ 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/bs/XmlLayout.kt
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.client.kroviz.to.bs3
+package org.apache.causeway.client.kroviz.to.bs
 
 abstract class XmlLayout {
     // nameSpaces
diff --git 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/builder/ColBuilder.kt
 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/builder/ColBuilder.kt
index 0edfb20b4d..6ee6430970 100644
--- 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/builder/ColBuilder.kt
+++ 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/builder/ColBuilder.kt
@@ -24,7 +24,7 @@ import io.kvision.panel.FlexPanel
 import io.kvision.panel.HPanel
 import io.kvision.panel.SimplePanel
 import org.apache.causeway.client.kroviz.to.TObject
-import org.apache.causeway.client.kroviz.to.bs3.Col
+import org.apache.causeway.client.kroviz.to.bs.ColBs
 import org.apache.causeway.client.kroviz.ui.core.Constants
 import org.apache.causeway.client.kroviz.ui.core.RoTable
 import org.apache.causeway.client.kroviz.ui.menu.DropDownMenuBuilder
@@ -33,7 +33,7 @@ import kotlin.math.round
 
 class ColBuilder : UiBuilder() {
 
-    fun create(col: Col, tObject: TObject, dsp: RoDisplay): FlexPanel {
+    fun create(col: ColBs, tObject: TObject, dsp: RoDisplay): FlexPanel {
         val panel = buildPanel()
 
         if ((col.actionList.size > 0) && (col.domainObject != null)) {
@@ -68,7 +68,7 @@ class ColBuilder : UiBuilder() {
         for (c in col.collectionList) {
             val key = c.id  // entities
             val objectDM = dsp.displayModel
-            val collectionDM = objectDM.collections[key]
+            val collectionDM = objectDM.collectionMap[key]
             if (collectionDM != null) {
                 val tblCpt = RoTable(collectionDM)
                 val fsPanel = FieldsetPanel(legend = 
StringUtils.capitalize(key)).add(tblCpt)
@@ -101,7 +101,7 @@ class ColBuilder : UiBuilder() {
         return panel
     }
 
-    private fun assignWidth(panel: SimplePanel, col: Col) {
+    private fun assignWidth(panel: SimplePanel, col: ColBs) {
         val proportion = col.span.toDouble().div(12)
         val percent = proportion * 100
         val rounded = round(percent)
diff --git 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/builder/FieldSetBuilder.kt
 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/builder/FieldSetBuilder.kt
index dd9e24f1e6..d5ec3d245e 100644
--- 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/builder/FieldSetBuilder.kt
+++ 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/builder/FieldSetBuilder.kt
@@ -21,16 +21,16 @@ package org.apache.causeway.client.kroviz.ui.builder
 import io.kvision.form.FormPanel
 import org.apache.causeway.client.kroviz.to.TObject
 import org.apache.causeway.client.kroviz.to.TypeMapper
-import org.apache.causeway.client.kroviz.to.bs3.FieldSet
+import org.apache.causeway.client.kroviz.to.bs.FieldSetBs
 import org.apache.causeway.client.kroviz.ui.core.FormItem
 import org.apache.causeway.client.kroviz.ui.core.FormPanelFactory
 
 class FieldSetBuilder {
 
     fun create(
-            fieldSetLayout: FieldSet,
-            tObject: TObject,
-            tab: RoDisplay
+        fieldSetLayout: FieldSetBs,
+        tObject: TObject,
+        tab: RoDisplay
     ): FormPanel<String>? {
 
         val members = tObject.getProperties()
@@ -43,13 +43,14 @@ class FieldSetBuilder {
                 val memberType = TypeMapper().forType(member.type!!)
                 val size = maxOf(1, p.multiLine)
                 val fi = FormItem(
-                        label = p.named,
-                        type = memberType,
-                        content = member.value?.content,
-                        size = size,
-                        description = p.describedAs,
-                        member = member,
-                        dspl = tab)
+                    label = p.named,
+                    type = memberType,
+                    content = member.value?.content,
+                    size = size,
+                    description = p.describedAs,
+                    member = member,
+                    dspl = tab
+                )
                 items.add(fi)
             }
         }
diff --git 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/builder/LayoutBuilder.kt
 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/builder/LayoutBuilder.kt
index dd251be136..c3e62aeb93 100644
--- 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/builder/LayoutBuilder.kt
+++ 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/builder/LayoutBuilder.kt
@@ -20,11 +20,11 @@ package org.apache.causeway.client.kroviz.ui.builder
 
 import io.kvision.panel.VPanel
 import org.apache.causeway.client.kroviz.to.TObject
-import org.apache.causeway.client.kroviz.to.bs3.Grid
+import org.apache.causeway.client.kroviz.to.bs.GridBs
 
 class LayoutBuilder {
 
-    fun create(grid: Grid, tObject: TObject, dsp: RoDisplay): VPanel {
+    fun create(grid: GridBs, tObject: TObject, dsp: RoDisplay): VPanel {
         val panel = VPanel()
         for (rl in grid.rows) {
             val cpt = RowBuilder().create(rl, tObject, dsp)
diff --git 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/builder/RowBuilder.kt
 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/builder/RowBuilder.kt
index 30d38f2a51..99287a47fb 100644
--- 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/builder/RowBuilder.kt
+++ 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/builder/RowBuilder.kt
@@ -22,12 +22,12 @@ import io.kvision.core.*
 import io.kvision.panel.FlexPanel
 import io.kvision.panel.SimplePanel
 import org.apache.causeway.client.kroviz.to.TObject
-import org.apache.causeway.client.kroviz.to.bs3.Row
+import org.apache.causeway.client.kroviz.to.bs.RowBs
 import org.apache.causeway.client.kroviz.ui.core.Constants
 
 class RowBuilder : UiBuilder() {
 
-    fun create(row: Row, tObject: TObject, dsp: RoDisplay): SimplePanel {
+    fun create(row: RowBs, tObject: TObject, dsp: RoDisplay): SimplePanel {
         val panel = buildPanel()
         panel.justifyContent = JustifyContent.SPACEBETWEEN
 
@@ -40,12 +40,13 @@ class RowBuilder : UiBuilder() {
 
     private fun buildPanel(): FlexPanel {
         return FlexPanel(
-                FlexDirection.ROW,
-                FlexWrap.NOWRAP,
-                JustifyContent.FLEXSTART,
-                AlignItems.FLEXSTART,
-                AlignContent.STRETCH,
-                spacing = Constants.spacing)
+            FlexDirection.ROW,
+            FlexWrap.NOWRAP,
+            JustifyContent.FLEXSTART,
+            AlignItems.FLEXSTART,
+            AlignContent.STRETCH,
+            spacing = Constants.spacing
+        )
     }
 
 }
diff --git 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/builder/TabBuilder.kt
 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/builder/TabBuilder.kt
index 87a4888cfd..c65db7b75e 100644
--- 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/builder/TabBuilder.kt
+++ 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/builder/TabBuilder.kt
@@ -18,14 +18,14 @@
  */
 package org.apache.causeway.client.kroviz.ui.builder
 
-import org.apache.causeway.client.kroviz.to.TObject
-import org.apache.causeway.client.kroviz.to.bs3.Tab
 import io.kvision.core.Component
 import io.kvision.panel.SimplePanel
+import org.apache.causeway.client.kroviz.to.TObject
+import org.apache.causeway.client.kroviz.to.bs.TabBs
 
 class TabBuilder : UiBuilder() {
 
-    fun create(tabLayout: Tab, tObject: TObject, tab: RoDisplay): Component {
+    fun create(tabLayout: TabBs, tObject: TObject, tab: RoDisplay): Component {
         val panel = SimplePanel()
         style(panel)
 
diff --git 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/builder/TabGroupBuilder.kt
 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/builder/TabGroupBuilder.kt
index 05741ce311..ccd0aa7036 100644
--- 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/builder/TabGroupBuilder.kt
+++ 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/builder/TabGroupBuilder.kt
@@ -18,14 +18,14 @@
  */
 package org.apache.causeway.client.kroviz.ui.builder
 
-import org.apache.causeway.client.kroviz.to.TObject
-import org.apache.causeway.client.kroviz.to.bs3.TabGroup
 import io.kvision.core.Component
 import io.kvision.panel.TabPanel
+import org.apache.causeway.client.kroviz.to.TObject
+import org.apache.causeway.client.kroviz.to.bs.TabGroupBs
 
 class TabGroupBuilder : UiBuilder() {
 
-    fun create(tabGroupLayout: TabGroup, tObject: TObject, dsp: RoDisplay): 
Component {
+    fun create(tabGroupLayout: TabGroupBs, tObject: TObject, dsp: RoDisplay): 
Component {
         val panel = TabPanel()
         style(panel)
 
diff --git 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/core/ColumnFactory.kt
 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/core/ColumnFactory.kt
index d219dd8569..c27c0c3957 100644
--- 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/core/ColumnFactory.kt
+++ 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/core/ColumnFactory.kt
@@ -103,7 +103,7 @@ class ColumnFactory {
         displayCollection: CollectionDM,
         columns: MutableList<ColumnDefinition<Exposer>>,
     ) {
-        val propertyLabels = displayCollection.properties.list
+        val propertyLabels = displayCollection.collectionProperties.list
         for (pl in propertyLabels) {
             if (!pl.hidden) {
                 val id = pl.key
diff --git 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/diagram/LayoutDiagram.kt
 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/diagram/LayoutDiagram.kt
index 3e3cbde71d..8bc4ca6a1a 100644
--- 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/diagram/LayoutDiagram.kt
+++ 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/diagram/LayoutDiagram.kt
@@ -18,13 +18,13 @@
  */
 package org.apache.causeway.client.kroviz.ui.diagram
 
-import org.apache.causeway.client.kroviz.to.bs3.Col
-import org.apache.causeway.client.kroviz.to.bs3.Grid
-import org.apache.causeway.client.kroviz.to.bs3.Row
+import org.apache.causeway.client.kroviz.to.bs.ColBs
+import org.apache.causeway.client.kroviz.to.bs.GridBs
+import org.apache.causeway.client.kroviz.to.bs.RowBs
 
 object LayoutDiagram {
 
-    fun build(grid: Grid): String {
+    fun build(grid: GridBs): String {
         var pumlCode = "@startsalt\n{#\n"
         grid.rows.forEachIndexed() { index, it ->
             val rLabel = "r" + index.toString()
@@ -35,7 +35,7 @@ object LayoutDiagram {
 
     private val blue = "<color:Blue>"
     private val red = "<color:Red>"
-    private fun buildRow(row: Row, rLabel: String): String {
+    private fun buildRow(row: RowBs, rLabel: String): String {
         var s = ""
         row.colList.forEachIndexed() { index, it ->
             val cLabel = rLabel + ".c" + index.toString()
@@ -49,7 +49,7 @@ object LayoutDiagram {
         return s + "\n"
     }
 
-    private fun buildCol(col: Col, colorCode: String, label: String): String {
+    private fun buildCol(col: ColBs, colorCode: String, label: String): String 
{
         var s = ""
         val span: Int = col.span
         repeat(span) {
diff --git 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/dialog/EventLogDetail.kt
 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/dialog/EventLogDetail.kt
index 5c1ef147c2..e7827810db 100644
--- 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/dialog/EventLogDetail.kt
+++ 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/dialog/EventLogDetail.kt
@@ -21,7 +21,7 @@ package org.apache.causeway.client.kroviz.ui.dialog
 import org.apache.causeway.client.kroviz.core.event.LogEntry
 import org.apache.causeway.client.kroviz.core.event.ResourceSpecification
 import org.apache.causeway.client.kroviz.to.ValueType
-import org.apache.causeway.client.kroviz.to.bs3.Grid
+import org.apache.causeway.client.kroviz.to.bs.GridBs
 import org.apache.causeway.client.kroviz.ui.core.Constants
 import org.apache.causeway.client.kroviz.ui.core.FormItem
 import org.apache.causeway.client.kroviz.ui.core.RoDialog
@@ -93,12 +93,15 @@ class EventLogDetail(logEntryFromTabulator: LogEntry) : 
Controller() {
             action == LOG -> {
                 console.log(logEntry)
             }
+
             action == LNK -> {
                 linkTreeDiagram()
             }
+
             action == DPM -> {
                 displayModelDiagram()
             }
+
             else -> {
                 console.log(logEntry)
                 console.log("Action not defined yet: $action")
@@ -131,14 +134,16 @@ class EventLogDetail(logEntryFromTabulator: LogEntry) : 
Controller() {
         var label = "Diagram"
         val pumlCode = when {
             str.startsWith("<") -> {
-                val grid = logEntry.obj as Grid
+                val grid = logEntry.obj as GridBs
                 label = "Layout Diagram"
                 LayoutDiagram.build(grid)
             }
+
             str.startsWith("{") -> {
                 label = "JSON / XML Diagram"
                 JsonDiagram.build(str)
             }
+
             else -> "{}"
         }
         DiagramDialog(label, pumlCode).open()
diff --git 
a/incubator/clients/kroviz/src/test/kotlin/org/apache/causeway/client/kroviz/core/aggregator/CollectionAggregatorTest.kt
 
b/incubator/clients/kroviz/src/test/kotlin/org/apache/causeway/client/kroviz/core/aggregator/CollectionAggregatorTest.kt
index e3b57102e8..b6cc33e488 100644
--- 
a/incubator/clients/kroviz/src/test/kotlin/org/apache/causeway/client/kroviz/core/aggregator/CollectionAggregatorTest.kt
+++ 
b/incubator/clients/kroviz/src/test/kotlin/org/apache/causeway/client/kroviz/core/aggregator/CollectionAggregatorTest.kt
@@ -67,10 +67,10 @@ class CollectionAggregatorTest : IntegrationTest() {
 
             // then
             val dl = obs.dpm as CollectionDM
-            val propertyLabels = dl.properties.propertyDescriptionList
+            val propertyLabels = 
dl.collectionProperties.propertyDescriptionList
             val property = pdLe.getTransferObject() as Property
             assertTrue(propertyLabels.size > 0)  // 5
-            val lbl = dl.properties.find(property.id)!!.friendlyName
+            val lbl = dl.collectionProperties.find(property.id)!!.friendlyName
             val expected = "ResultListResult class"
             assertEquals(expected, lbl)  // 6
         }
diff --git 
a/incubator/clients/kroviz/src/test/kotlin/org/apache/causeway/client/kroviz/core/model/CollectionDMTest.kt
 
b/incubator/clients/kroviz/src/test/kotlin/org/apache/causeway/client/kroviz/core/model/CollectionDMTest.kt
index 3006d212bb..a17656f69f 100644
--- 
a/incubator/clients/kroviz/src/test/kotlin/org/apache/causeway/client/kroviz/core/model/CollectionDMTest.kt
+++ 
b/incubator/clients/kroviz/src/test/kotlin/org/apache/causeway/client/kroviz/core/model/CollectionDMTest.kt
@@ -43,7 +43,7 @@ class CollectionDMTest {
 
         assertEquals(2, dl.data.size) //1
 
-        val properties = dl.properties.propertyLayoutList
+        val properties = dl.collectionProperties.propertyLayoutList
         assertEquals(5, properties.size) //2    // includes datanucleus 
IdLong, VersionLong, VersionTimestamp
         assertEquals("name", properties[0].id) //3
         assertEquals("notes", properties[1].id)  //4
@@ -61,7 +61,7 @@ class CollectionDMTest {
         dl.addLayout(lt)
         assertEquals(1, dl.data.size) //1
 
-        val properties = dl.properties.propertyLayoutList
+        val properties = dl.collectionProperties.propertyLayoutList
         assertEquals("key", properties[0].id) // 2
         assertEquals("value", properties[1].id)   // 3
     }
@@ -78,7 +78,7 @@ class CollectionDMTest {
         assertEquals(1, dl.data.size)
 
         assertNotNull(dl.layout)
-        val properties = dl.properties.propertyList
+        val properties = dl.collectionProperties.propertyList
         assertNotNull(properties)
         //Sequence in FR_OBJECT differs from sequence in FR_OBJECT_LAYOUT
         // FR_OBJECT: fixtureScriptClassName, key, object, className
diff --git 
a/incubator/clients/kroviz/src/test/kotlin/org/apache/causeway/client/kroviz/to/bs3/LayoutXmlTest.kt
 
b/incubator/clients/kroviz/src/test/kotlin/org/apache/causeway/client/kroviz/to/bs/LayoutXmlTest.kt
similarity index 96%
rename from 
incubator/clients/kroviz/src/test/kotlin/org/apache/causeway/client/kroviz/to/bs3/LayoutXmlTest.kt
rename to 
incubator/clients/kroviz/src/test/kotlin/org/apache/causeway/client/kroviz/to/bs/LayoutXmlTest.kt
index 7a7c8d0056..ffc3208127 100644
--- 
a/incubator/clients/kroviz/src/test/kotlin/org/apache/causeway/client/kroviz/to/bs3/LayoutXmlTest.kt
+++ 
b/incubator/clients/kroviz/src/test/kotlin/org/apache/causeway/client/kroviz/to/bs/LayoutXmlTest.kt
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.client.kroviz.to.bs3
+package org.apache.causeway.client.kroviz.to.bs
 
 import org.apache.causeway.client.kroviz.handler.LayoutXmlHandler
 import org.apache.causeway.client.kroviz.snapshots.demo2_0_0.STRINGS_LAYOUT_XML
@@ -35,7 +35,7 @@ class LayoutXmlTest {
         //given
         val xmlStr = STRINGS_LAYOUT_XML.str
         //when
-        val grid = LayoutXmlHandler().parse(xmlStr) as Grid
+        val grid = LayoutXmlHandler().parse(xmlStr) as GridBs
         // then
         assertEquals(2, grid.rows.size, message = "grid.rows.size")    //1
 
@@ -101,7 +101,7 @@ class LayoutXmlTest {
         //given
         val xmlStr = TAB_LAYOUT_XML.str
         //when
-        val grid = LayoutXmlHandler().parse(xmlStr) as Grid
+        val grid = LayoutXmlHandler().parse(xmlStr) as GridBs
         // then
         console.log("[LXT.testDemoTabGrid] ${grid.toString()}")
         console.log("rows: ", grid.rows.size)
@@ -113,7 +113,7 @@ class LayoutXmlTest {
         //given
         val xmlStr = SO_LAYOUT_XML.str
         //when
-        val grid = LayoutXmlHandler().parse(xmlStr) as Grid
+        val grid = LayoutXmlHandler().parse(xmlStr) as GridBs
         // then
         assertEquals(2, grid.rows.size)    //1
 

Reply via email to