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 <[email protected]> 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() }
