You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@causeway.apache.org by jo...@apache.org on 2023/02/23 20:09:04 UTC

[causeway] 04/10: ISIS-3171 table is shown, hidden/disabled/name not correctly set yet

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/causeway.git

commit cd7d1eb6b7b82fe0551a2392eb4654a952b67e95
Author: Jörg Rade <jo...@kuehne-nagel.com>
AuthorDate: Tue Feb 14 17:32:40 2023 +0100

    ISIS-3171 table is shown, hidden/disabled/name not correctly set yet
---
 .../kroviz/core/aggregator/AggregatorWithLayout.kt | 17 +++++----
 .../kroviz/core/aggregator/ObjectAggregator.kt     | 13 +++++++
 .../client/kroviz/core/model/CollectionDM.kt       | 17 +++++++++
 .../client/kroviz/core/model/CollectionLayout.kt   | 22 +++++++-----
 .../causeway/client/kroviz/core/model/ObjectDM.kt  | 13 ++++---
 .../kroviz/core/model/PropertySpecification.kt     | 15 +++++++-
 .../apache/causeway/client/kroviz/to/Property.kt   | 41 +++++++---------------
 .../client/kroviz/ui/builder/ColBuilder.kt         |  6 ++--
 .../client/kroviz/ui/core/ColumnFactory.kt         |  3 +-
 .../causeway/client/kroviz/ui/core/ViewManager.kt  | 10 ++----
 10 files changed, 94 insertions(+), 63 deletions(-)

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 deac941a31..54eb826efe 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
@@ -19,6 +19,7 @@
 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.BaseLayout
 import org.apache.causeway.client.kroviz.to.*
 import org.apache.causeway.client.kroviz.ui.core.Constants
@@ -50,18 +51,20 @@ abstract class AggregatorWithLayout : BaseAggregator() {
         invoke(l, aggregator, referrer = referrer)
     }
 
-
     protected fun handleProperty(property: Property, referrer: String, layout: BaseLayout) {
-        console.log("[AWL_handleProperty]")
         when {
-            property.isPropertyDescription() -> {
-                val pd = PropertyDescription(property)
-                layout.addPropertyDescription(pd, this, referrer)
-            }
-
             property.isObjectProperty() -> {
+                console.log("[AWL_handleProperty] objectProperty")
                 val op = ObjectProperty(property)
                 layout.addObjectProperty(op, this, referrer)
+                val pdLink = op.getDescriptionLink()!!
+                ResourceProxy().fetch(pdLink, this, referrer = referrer)
+            }
+
+            property.isPropertyDescription() -> {
+                console.log("[AWL_handleProperty] propertyDescription")
+                val pd = PropertyDescription(property)
+                layout.addPropertyDescription(pd, this, referrer)
             }
 
             else -> {
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 351aea89cf..7f85e6f74a 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
@@ -27,6 +27,7 @@ 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.ViewManager
 import org.apache.causeway.client.kroviz.ui.dialog.ErrorDialog
+import org.apache.causeway.client.kroviz.utils.StringUtils
 
 /** sequence of operations:
  * (0) Menu Action              User clicks BasicTypes.String -> handled by ActionDispatcher
@@ -57,6 +58,8 @@ class ObjectAggregator(val actionTitle: String) : AggregatorWithLayout() {
         }
 
         if (getDisplayModel().readyToRender()) {
+            console.log("[OA_readyToRender]")
+            console.log(getDisplayModel())
             ViewManager.openObjectView(this)
         }
     }
@@ -115,6 +118,16 @@ class ObjectAggregator(val actionTitle: String) : AggregatorWithLayout() {
         }
     }
 
+    fun getTitle(): String {
+        var title: String = StringUtils.extractTitle(getDisplayModel().title)
+        if (title.isEmpty()) {
+            title = actionTitle
+        }
+        return title
+    }
+
+
+
     override fun reset(): ObjectAggregator {
         displayModel.reset()
         return this
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 a1c236b0ac..e0f387683b 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
@@ -20,8 +20,10 @@ package org.apache.causeway.client.kroviz.core.model
 
 import io.kvision.state.observableListOf
 import org.apache.causeway.client.kroviz.core.aggregator.AggregatorWithLayout
+import org.apache.causeway.client.kroviz.core.event.ResourceProxy
 import org.apache.causeway.client.kroviz.to.TObject
 import org.apache.causeway.client.kroviz.to.TransferObject
+import org.apache.causeway.client.kroviz.utils.StringUtils
 
 class CollectionDM(override val title: String) : DisplayModelWithLayout() {
     init {
@@ -36,16 +38,31 @@ class CollectionDM(override val title: String) : DisplayModelWithLayout() {
         return getLayout().readyToRender()
     }
 
+    fun getTitle(): String {
+        return StringUtils.extractTitle(title)
+    }
+
     fun getLayout(): CollectionLayout {
         return layout as CollectionLayout
     }
 
     override fun addData(obj: TransferObject, aggregator: AggregatorWithLayout?, referrer: String?) {
+        //TODO is checking rawdata really needed?
         if (!rawData.contains(obj)) {
             rawData.add(obj)
             val exo = Exposer(obj as TObject)
             data.add(exo.dynamise())  //if exposer is not dynamised, data access in Tabulator tables won't work
         }
+        // for the first element, invoke ObjectProperty & PropertyDescription links
+        if (rawData.size == 1) {
+            val tObj = obj as TObject
+            val properties = tObj.getProperties()
+            properties.forEach {
+                val opLink = it.getInvokeLink()!!
+                ResourceProxy().fetch(opLink, aggregator, referrer = referrer!!)
+                //FIXME is PropertyDescription automatically invoked?
+            }
+        }
     }
 
     override fun reset() {
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/core/model/CollectionLayout.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/core/model/CollectionLayout.kt
index dba84dd14b..5cb4d4b08b 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/core/model/CollectionLayout.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/core/model/CollectionLayout.kt
@@ -33,11 +33,20 @@ import org.apache.causeway.client.kroviz.to.TObject
  */
 class CollectionLayout : BaseLayout() {
     var id = ""
-    private var numberOfColumns = 0
     val propertySpecificationList = mutableListOf<PropertySpecification>()
 
     override fun readyToRender(): Boolean {
-        return isInitialized() && allPropertySpecificationsAreCreated()
+        console.log("[CL_readyToRender]")
+        return isInitialized() && arePropertySpecificationsReadyToRender()
+    }
+
+    private fun arePropertySpecificationsReadyToRender():Boolean {
+        propertySpecificationList.forEach {
+            if (!it.readyToRender()) {
+                return false
+            }
+        }
+        return true
     }
 
     /**
@@ -48,7 +57,6 @@ class CollectionLayout : BaseLayout() {
         if (!isInitialized()) {
             // members contain all properties, regardless if hidden, disabled, etc.
             val members = obj.getProperties()
-            numberOfColumns = members.size
             members.forEach { m ->
                 val ps = PropertySpecification(m)
                 propertySpecificationList.add(ps)
@@ -56,12 +64,8 @@ class CollectionLayout : BaseLayout() {
         }
     }
 
-    fun isInitialized(): Boolean {
-        return numberOfColumns > 0
-    }
-
-    private fun allPropertySpecificationsAreCreated(): Boolean {
-        return numberOfColumns == propertySpecificationList.size
+    private fun isInitialized(): Boolean {
+        return propertySpecificationList.isNotEmpty() && propertySpecificationList.size > 0
     }
 
     override fun addObjectProperty(
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 e8866bddad..b5242ecbcb 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
@@ -54,9 +54,6 @@ class ObjectDM(override val title: String) : DisplayModelWithLayout() {
     }
 
     fun getCollectionDisplayModelFor(id: String): CollectionDM {
-        console.log("[ODM_getCollectionDisplayModelFor]")
-        console.log(id)
-        console.log(collectionModelList)
         return collectionModelList.find { it.id == id }!!
     }
 
@@ -66,10 +63,18 @@ class ObjectDM(override val title: String) : DisplayModelWithLayout() {
             isRendered -> false
             layout == null -> false
             collectionModelList.size == 0 -> false
-            else -> layout!!.readyToRender() //collectionsReadyToRender()
+            else -> layout!!.readyToRender() && areCollectionsReadyToRender()
         }
     }
 
+    private fun areCollectionsReadyToRender(): Boolean {
+        collectionModelList.forEach {
+            if (!it.readyToRender())
+                return false
+        }
+        return true
+    }
+
     override fun addData(obj: TransferObject, aggregator: AggregatorWithLayout?, referrer: String?) {
         (obj as TObject)
         val exo = Exposer(obj)
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/core/model/PropertySpecification.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/core/model/PropertySpecification.kt
index 1ae19ea398..346fc4e236 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/core/model/PropertySpecification.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/core/model/PropertySpecification.kt
@@ -19,6 +19,7 @@
 package org.apache.causeway.client.kroviz.core.model
 
 import org.apache.causeway.client.kroviz.to.Member
+import org.apache.causeway.client.kroviz.to.ObjectProperty
 import org.apache.causeway.client.kroviz.to.PropertyDescription
 
 /**
@@ -36,6 +37,8 @@ class PropertySpecification(member: Member) {
     var name = "" // aka: columnName, named, label, title
     var hidden = false
     var disabled = false
+    var isPropertyDescriptionProcessed = false
+    var isObjectPropertyProcessed = true //FIXME
 
     init {
         id = member.id
@@ -48,14 +51,24 @@ class PropertySpecification(member: Member) {
         disabled = member.disabledReason.isNotEmpty()
     }
 
+    fun amendWith(op: ObjectProperty) {
+        console.log("[PS_amendWith] ObjectProperty")
+        //TODO
+    }
+
     fun amendWith(pd: PropertyDescription) {
-        console.log("[PS_addPropertyDescription]")
+        console.log("[PS_amendWith] PropertyDescription")
         val ex = pd.extensions!!
         val fn = ex.getFriendlyName()
         if (fn.isNotEmpty()) {
             name = fn
         }
+        isPropertyDescriptionProcessed = true
         console.log(this)
     }
 
+    fun readyToRender(): Boolean {
+        return isObjectPropertyProcessed && isPropertyDescriptionProcessed
+    }
+
 }
\ No newline at end of file
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/Property.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/Property.kt
index 718bc39fb8..cfa92fe569 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/Property.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/to/Property.kt
@@ -58,21 +58,12 @@ data class Property(
  * Wraps Property in order to distinguish from PropertyDescription
  */
 class ObjectProperty(val property: Property) {
-    val id: String
-    val memberType: String
-    val links: List<Link>
-    val value: Value?
-    val extensions: Extensions?
-    val disabledReason: String?
-
-    init {
-        id = property.id
-        memberType = property.memberType
-        links = property.links
-        value = property.value
-        extensions = property.extensions
-        disabledReason = property.disabledReason
-    }
+    val id: String = property.id
+    val memberType: String = property.memberType
+    val links: List<Link> = property.links
+    val value: Value? = property.value
+    val extensions: Extensions? = property.extensions
+    val disabledReason: String? = property.disabledReason
 
     fun getDescriptionLink(): Link? {
         return this.links.firstOrNull {
@@ -85,19 +76,11 @@ class ObjectProperty(val property: Property) {
  * Wraps Property in order to distinguish from ObjectProperty
  */
 class PropertyDescription(val property: Property) {
-    val id: String
-    val memberType: String
-    val links: List<Link>
-    val value: Value?
-    val optional: Boolean?
-    val extensions: Extensions?
+    val id: String = property.id
+    val memberType: String = property.memberType
+    val links: List<Link> = property.links
+    val value: Value? = property.value
+    val optional: Boolean? = property.optional
+    val extensions: Extensions? = property.extensions
 
-    init {
-        id = property.id
-        memberType = property.memberType
-        links = property.links
-        value = property.value
-        optional = property.optional
-        extensions = property.extensions
-    }
 }
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 95bd7caa9c..279a637fe2 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
@@ -69,10 +69,8 @@ class ColBuilder : UiBuilder() {
             val id = it.id
             val objectDM = dsp.displayModel
             val cdm = objectDM.getCollectionDisplayModelFor(id)
-            console.log("[CB_create]")
-            console.log(cdm)
-            val tblCpt = RoTable(cdm)
-            val fsPanel = FieldsetPanel(legend = StringUtils.capitalize(cdm.title)).add(tblCpt)
+            val fsPanel = FieldsetPanel(legend = cdm.getTitle())
+            fsPanel.add(RoTable(cdm))
             panel.add(fsPanel)
             cdm.isRendered = true
         }
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 c63b941b53..1a710e5b7c 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
@@ -106,14 +106,13 @@ class ColumnFactory {
         collectionModel: CollectionDM,
         columns: MutableList<ColumnDefinition<Exposer>>,
     ) {
-        console.log("[CF_addColumnsForProperties]")
         val clo = collectionModel.getLayout()
         val propSpecList = clo.propertySpecificationList
         if (propSpecList.size == 0) {
+            // without this, propSpecList is empty? problem with mutable list?
             throw IllegalStateException()
         }
         propSpecList.forEach {
-            console.log(it)
             if (!it.hidden) {
                 var colDef = ColumnDefinition<dynamic>(
                     title = it.name,
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/core/ViewManager.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/core/ViewManager.kt
index 64a74f3c52..02a7d4386b 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/core/ViewManager.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/core/ViewManager.kt
@@ -174,14 +174,10 @@ object ViewManager {
 
     fun openObjectView(aggregator: ObjectAggregator) {
         console.log("[VM_openObjectView]")
-        val dm = aggregator.displayModel as ObjectDM
-        console.log(dm)
-        var title: String = StringUtils.extractTitle(dm.title)
-        if (title.isEmpty()) {
-            title = aggregator.actionTitle
-        }
+        val dm = aggregator.getDisplayModel()
+//        console.log(dm)
         val panel = RoDisplay(dm)
-        add(title, panel, aggregator)
+        add(aggregator.getTitle(), panel, aggregator)
         dm.isRendered = true
         setNormalCursor()
     }