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()
}