You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@causeway.apache.org by ah...@apache.org on 2023/06/21 06:24:33 UTC
[causeway] branch master updated: CAUSEWAY-3451: fix for honoring CollectionLayout#tableDecorator
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/causeway.git
The following commit(s) were added to refs/heads/master by this push:
new 9b4e02a7fa CAUSEWAY-3451: fix for honoring CollectionLayout#tableDecorator
9b4e02a7fa is described below
commit 9b4e02a7fa3b42af402dbc57d1c354683026c3f1
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Jun 21 08:24:28 2023 +0200
CAUSEWAY-3451: fix for honoring CollectionLayout#tableDecorator
---
.../tabledec/TableDecoratorFacetAbstract.java | 6 ++---
.../core/metamodel/spec/feature/ObjectMember.java | 15 +++++------
.../causeway/core/metamodel/util/Facets.java | 18 ++++++++++++++
.../entity/collection/EntityCollectionPanel.java | 29 ++++++++++++++--------
4 files changed, 44 insertions(+), 24 deletions(-)
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/tabledec/TableDecoratorFacetAbstract.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/tabledec/TableDecoratorFacetAbstract.java
index bd23aaa8fb..56314de3c5 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/tabledec/TableDecoratorFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/tabledec/TableDecoratorFacetAbstract.java
@@ -18,13 +18,13 @@
*/
package org.apache.causeway.core.metamodel.facets.object.tabledec;
+import java.util.function.BiConsumer;
+
import org.apache.causeway.applib.annotation.TableDecorator;
import org.apache.causeway.core.metamodel.facetapi.Facet;
import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
import org.apache.causeway.core.metamodel.facets.SingleValueFacetAbstract;
-import java.util.function.BiConsumer;
-
public abstract class TableDecoratorFacetAbstract
extends SingleValueFacetAbstract<Class<? extends TableDecorator>>
implements TableDecoratorFacet {
@@ -33,7 +33,6 @@ implements TableDecoratorFacet {
return TableDecoratorFacet.class;
}
-
protected TableDecoratorFacetAbstract(
final Class<? extends TableDecorator> value,
final FacetHolder holder,
@@ -50,7 +49,6 @@ implements TableDecoratorFacet {
@Override
public void visitAttributes(final BiConsumer<String, Object> visitor) {
super.visitAttributes(visitor);
- visitor.accept("value", value());
}
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/feature/ObjectMember.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/feature/ObjectMember.java
index c6b88f5aa8..e7f6cd3f19 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/feature/ObjectMember.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/feature/ObjectMember.java
@@ -40,7 +40,6 @@ import org.apache.causeway.core.metamodel.consent.Consent;
import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
import org.apache.causeway.core.metamodel.facetapi.FacetUtil;
-import org.apache.causeway.core.metamodel.facets.SingleValueFacet;
import org.apache.causeway.core.metamodel.facets.all.hide.HiddenFacet;
import org.apache.causeway.core.metamodel.facets.collections.sortedby.SortedByFacet;
import org.apache.causeway.core.metamodel.facets.members.layout.group.LayoutGroupFacet;
@@ -49,6 +48,7 @@ import org.apache.causeway.core.metamodel.facets.object.paged.PagedFacet;
import org.apache.causeway.core.metamodel.facets.object.tabledec.TableDecoratorFacet;
import org.apache.causeway.core.metamodel.object.ManagedObject;
import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
+import org.apache.causeway.core.metamodel.util.Facets;
import lombok.val;
@@ -260,15 +260,12 @@ public interface ObjectMember extends ObjectFeature {
.findFirst();
}
+ /**
+ * Looks up any {@link TableDecoratorFacet} on the member itself, then on its element-type.
+ * First found wins.
+ */
default Optional<TableDecorator> getTableDecorator() {
- return FacetUtil.lookupFacetInButExcluding(TableDecoratorFacet.class, o -> o == TableDecorator.Default.class, getElementType())
- .stream()
- .map(SingleValueFacet::value)
- .map(decoratorClass -> {
- val decorator = _InstanceUtil.createInstance(decoratorClass, decoratorClass, _Constants.emptyObjects);
- return injectServicesInto(decorator);
- })
- .findFirst();
+ return Facets.tableDecorator(this, getElementType());
}
// -- COLLECTION SORTING (COLL + NON-SCALAR ACTION RESULT)
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/util/Facets.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/util/Facets.java
index 5f4e591c9a..f3a70a2979 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/util/Facets.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/util/Facets.java
@@ -30,18 +30,22 @@ import org.apache.causeway.applib.annotation.BookmarkPolicy;
import org.apache.causeway.applib.annotation.DomainServiceLayout.MenuBar;
import org.apache.causeway.applib.annotation.LabelPosition;
import org.apache.causeway.applib.annotation.PromptStyle;
+import org.apache.causeway.applib.annotation.TableDecorator;
import org.apache.causeway.applib.annotation.Where;
import org.apache.causeway.applib.id.LogicalType;
import org.apache.causeway.applib.layout.grid.bootstrap.BSGrid;
import org.apache.causeway.applib.value.semantics.ValueSemanticsProvider;
import org.apache.causeway.commons.collections.Can;
+import org.apache.causeway.commons.internal._Constants;
import org.apache.causeway.commons.internal.base._Casts;
import org.apache.causeway.commons.internal.base._NullSafe;
import org.apache.causeway.commons.internal.exceptions._Exceptions;
+import org.apache.causeway.commons.internal.factory._InstanceUtil;
import org.apache.causeway.core.config.metamodel.facets.ParameterConfigOptions;
import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.causeway.core.metamodel.facetapi.Facet;
import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
+import org.apache.causeway.core.metamodel.facetapi.FacetUtil;
import org.apache.causeway.core.metamodel.facets.actcoll.typeof.TypeOfFacet;
import org.apache.causeway.core.metamodel.facets.all.hide.HiddenFacet;
import org.apache.causeway.core.metamodel.facets.collections.CollectionFacet;
@@ -56,6 +60,7 @@ import org.apache.causeway.core.metamodel.facets.object.icon.IconFacet;
import org.apache.causeway.core.metamodel.facets.object.mixin.MixinFacet;
import org.apache.causeway.core.metamodel.facets.object.projection.ProjectionFacet;
import org.apache.causeway.core.metamodel.facets.object.promptStyle.PromptStyleFacet;
+import org.apache.causeway.core.metamodel.facets.object.tabledec.TableDecoratorFacet;
import org.apache.causeway.core.metamodel.facets.object.value.ValueFacet;
import org.apache.causeway.core.metamodel.facets.object.value.ValueSerializer;
import org.apache.causeway.core.metamodel.facets.objectvalue.daterenderedadjust.DateRenderAdjustFacet;
@@ -353,6 +358,19 @@ public final class Facets {
.orElseGet(OptionalInt::empty);
}
+ // -- TABLES
+
+ public Optional<TableDecorator> tableDecorator(final FacetHolder ... facetHolders) {
+ return FacetUtil.lookupFacetInButExcluding(TableDecoratorFacet.class, o -> o == TableDecorator.Default.class, facetHolders)
+ .stream()
+ .map(TableDecoratorFacet::value)
+ .map(decoratorClass -> {
+ val decorator = _InstanceUtil.createInstance(decoratorClass, decoratorClass, _Constants.emptyObjects);
+ return facetHolders[0].injectServicesInto(decorator);
+ })
+ .findFirst();
+ }
+
// -- VALUE FACET
public static Predicate<ObjectSpecification> valueTypeMatches(final Predicate<Class<?>> typeMatcher) {
diff --git a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/entity/collection/EntityCollectionPanel.java b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/entity/collection/EntityCollectionPanel.java
index 9da87e9bf7..a63d1aa802 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/entity/collection/EntityCollectionPanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/entity/collection/EntityCollectionPanel.java
@@ -120,8 +120,7 @@ implements HasDynamicallyVisibleContent {
// -- HELPER
private void buildGui() {
-
- val collectionModel = EntityCollectionModelParented.forParentObjectModel(getModel(), layoutData);
+ val collectionModel = entityCollectionModelParented();
div.setMarkupId("collection-" + collectionModel.getLayoutData().getId());
val collectionMetaModel = collectionModel.getMetaModel();
@@ -138,12 +137,10 @@ implements HasDynamicallyVisibleContent {
visible = true;
Facets.cssClass(collectionMetaModel, objectAdapter)
- .ifPresent(cssClass->Wkt.cssAppend(div, cssClass));
+ .ifPresent(cssClass->Wkt.cssAppend(div, cssClass));
- this.tableDecorator = collectionMetaModel.getTableDecorator();
- tableDecorator.ifPresent(tableDecorator->{
- Wkt.cssAppend(div, tableDecorator.cssClass());
- });
+ tableDecorator().ifPresent(tableDecorator->
+ Wkt.cssAppend(div, tableDecorator.cssClass()));
val collectionPanel = new CollectionPanel(ID_COLLECTION, collectionModel);
div.addOrReplace(collectionPanel);
@@ -154,7 +151,7 @@ implements HasDynamicallyVisibleContent {
div.add(labelComponent);
collectionMetaModel.getDescription(collectionModel::getParentObject)
- .ifPresent(description->WktTooltips.addTooltip(labelComponent, description));
+ .ifPresent(description->WktTooltips.addTooltip(labelComponent, description));
final Can<LinkAndLabel> links = collectionModel.getLinks();
AdditionalLinksPanel.addAdditionalLinks(
@@ -166,14 +163,24 @@ implements HasDynamicallyVisibleContent {
}
}
+ // EntityCollectionModelParented caching
+ private transient EntityCollectionModelParented entityCollectionModelParented;
+ private EntityCollectionModelParented entityCollectionModelParented() {
+ if(entityCollectionModelParented == null) {
+ this.entityCollectionModelParented = EntityCollectionModelParented.forParentObjectModel(getModel(), layoutData);
+ }
+ return entityCollectionModelParented;
+ }
+
// TableDecorator caching
private transient Optional<TableDecorator> tableDecorator;
private Optional<TableDecorator> tableDecorator() {
if(tableDecorator == null) {
- val collectionModel = EntityCollectionModelParented.forParentObjectModel(getModel(), layoutData);
- val collectionMetaModel = collectionModel.getMetaModel();
- this.tableDecorator = collectionMetaModel.getTableDecorator();
+ this.tableDecorator = entityCollectionModelParented()
+ .getMetaModel()
+ .getTableDecorator();
}
+ System.err.printf("tableDecorator %s%n", tableDecorator);
return tableDecorator;
}