This is an automated email from the ASF dual-hosted git repository. danhaywood pushed a commit to branch CAUSEWAY-3414 in repository https://gitbox.apache.org/repos/asf/causeway.git
commit 12bd241a25431bad1e4c742ba4143155dbf0b25f Author: danhaywood <[email protected]> AuthorDate: Thu Apr 6 08:56:38 2023 +0200 CAUSEWAY-3414 : refactors tableDecorator facet to work similarly to pagedFacet --- .../layout/component/DomainObjectLayoutData.java | 25 +++++++++++ .../CollectionLayoutTableDecoratorFacet.java | 5 ++- ...ollectionLayoutTableDecoratorFacetAbstract.java | 14 +++---- ...tTableDecoratorFacetForCollectionLayoutXml.java | 7 +--- .../DomainObjectLayoutTableDecoratorFacet.java | 3 +- ...ainObjectLayoutTableDecoratorFacetAbstract.java | 12 +++--- ...ableDecoratorFacetForDomainObjectLayoutXml.java | 8 ++-- .../tabledec/TableDecoratorFacet.java} | 29 ++++--------- .../TableDecoratorFacetAbstract.java} | 26 ++++++++---- .../managed/nonscalar/DataTableModel.java | 5 +++ .../core/metamodel/layout/LayoutFacetUtil.java | 49 ++++++++++++++++++++-- .../core/metamodel/spec/feature/ObjectMember.java | 15 +++++++ .../causeway/core/metamodel/util/Facets.java | 21 ---------- .../wicket/model/models/EntityCollectionModel.java | 5 +++ .../entity/collection/EntityCollectionPanel.java | 6 +-- .../StandaloneCollectionPanel.java | 9 ++-- 16 files changed, 149 insertions(+), 90 deletions(-) diff --git a/api/applib/src/main/java/org/apache/causeway/applib/layout/component/DomainObjectLayoutData.java b/api/applib/src/main/java/org/apache/causeway/applib/layout/component/DomainObjectLayoutData.java index 06b9c5dfe7..e8909c04f6 100644 --- a/api/applib/src/main/java/org/apache/causeway/applib/layout/component/DomainObjectLayoutData.java +++ b/api/applib/src/main/java/org/apache/causeway/applib/layout/component/DomainObjectLayoutData.java @@ -47,6 +47,7 @@ import org.apache.causeway.applib.layout.links.Link; , "cssClass" , "cssClassFa" , "cssClassFaPosition" + , "paged" , "tableDecorator" , "metadataError" , "link" @@ -150,19 +151,43 @@ HasBookmarking, HasCssClass, HasCssClassFa, HasDescribedAs, HasNamed { + /** + * @deprecated - unused, to remove. + */ + @Deprecated private String plural; + /** + * @deprecated - unused, to remove. + */ + @Deprecated @XmlElement(required = false) public String getPlural() { return plural; } + /** + * @deprecated - unused, to remove. + */ + @Deprecated public void setPlural(final String plural) { this.plural = plural; } + private Integer paged; + + @XmlElement(required = false) + public Integer getPaged() { + return paged; + } + + public void setPaged(Integer paged) { + this.paged = paged; + } + + private Class<? extends TableDecorator> tableDecorator; @XmlElement(required = false) diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/tabledec/CollectionLayoutTableDecoratorFacet.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/tabledec/CollectionLayoutTableDecoratorFacet.java index 7bbf8ecf51..c7259f8858 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/tabledec/CollectionLayoutTableDecoratorFacet.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/tabledec/CollectionLayoutTableDecoratorFacet.java @@ -27,6 +27,7 @@ import org.apache.causeway.applib.annotation.TableDecorator; import org.apache.causeway.commons.internal.base._Optionals; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.facets.SingleValueFacet; +import org.apache.causeway.core.metamodel.facets.object.tabledec.TableDecoratorFacet; /** * Determines how dependent parameter values should be updated, @@ -37,9 +38,9 @@ import org.apache.causeway.core.metamodel.facets.SingleValueFacet; * @since 2.0 */ public interface CollectionLayoutTableDecoratorFacet -extends SingleValueFacet<Class<? extends TableDecorator>> { +extends TableDecoratorFacet { - static Optional<CollectionLayoutTableDecoratorFacet> create( + static Optional<TableDecoratorFacet> create( final Optional<CollectionLayout> collectionLayoutIfAny, final FacetHolder holder) { diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/tabledec/CollectionLayoutTableDecoratorFacetAbstract.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/tabledec/CollectionLayoutTableDecoratorFacetAbstract.java index dfb9cc3e78..2e4b0ced20 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/tabledec/CollectionLayoutTableDecoratorFacetAbstract.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/tabledec/CollectionLayoutTableDecoratorFacetAbstract.java @@ -23,23 +23,21 @@ 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 org.apache.causeway.core.metamodel.facets.object.tabledec.TableDecoratorFacetAbstract; abstract class CollectionLayoutTableDecoratorFacetAbstract -extends SingleValueFacetAbstract<Class<? extends TableDecorator>> +extends TableDecoratorFacetAbstract implements CollectionLayoutTableDecoratorFacet { - private static final Class<? extends Facet> type() { - return CollectionLayoutTableDecoratorFacet.class; - } - protected CollectionLayoutTableDecoratorFacetAbstract( - final Class<? extends TableDecorator> value, final FacetHolder holder, + final Class<? extends TableDecorator> value, + final FacetHolder holder, final Precedence precedence) { - super(type(), value, holder, precedence); + super(value, holder, precedence); } protected CollectionLayoutTableDecoratorFacetAbstract( final Class<? extends TableDecorator> value, final FacetHolder holder) { - super(type(), value, holder); + super(value, holder); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/tabledec/CollectionLayoutTableDecoratorFacetForCollectionLayoutXml.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/tabledec/CollectionLayoutTableDecoratorFacetForCollectionLayoutXml.java index cfa4cac438..3df87b1159 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/tabledec/CollectionLayoutTableDecoratorFacetForCollectionLayoutXml.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/tabledec/CollectionLayoutTableDecoratorFacetForCollectionLayoutXml.java @@ -23,15 +23,12 @@ import java.util.Optional; import org.apache.causeway.applib.annotation.TableDecorator; import org.apache.causeway.applib.layout.component.CollectionLayoutData; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; +import org.apache.causeway.core.metamodel.facets.object.tabledec.TableDecoratorFacet; public class CollectionLayoutTableDecoratorFacetForCollectionLayoutXml extends CollectionLayoutTableDecoratorFacetAbstract { - public static final Class<CollectionLayoutTableDecoratorFacet> type() { - return CollectionLayoutTableDecoratorFacet.class; - } - - public static Optional<CollectionLayoutTableDecoratorFacet> create( + public static Optional<TableDecoratorFacet> create( final CollectionLayoutData collectionLayout, final FacetHolder holder, final Precedence precedence) { diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/tabledec/DomainObjectLayoutTableDecoratorFacet.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/tabledec/DomainObjectLayoutTableDecoratorFacet.java index 5f27f8de7a..765f22c213 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/tabledec/DomainObjectLayoutTableDecoratorFacet.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/tabledec/DomainObjectLayoutTableDecoratorFacet.java @@ -27,6 +27,7 @@ import org.apache.causeway.applib.annotation.TableDecorator; import org.apache.causeway.commons.internal.base._Optionals; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.facets.SingleValueFacet; +import org.apache.causeway.core.metamodel.facets.object.tabledec.TableDecoratorFacet; /** * Determines how dependent parameter values should be updated, @@ -37,7 +38,7 @@ import org.apache.causeway.core.metamodel.facets.SingleValueFacet; * @since 2.0 */ public interface DomainObjectLayoutTableDecoratorFacet -extends SingleValueFacet<Class<? extends TableDecorator>> { +extends TableDecoratorFacet { static Optional<DomainObjectLayoutTableDecoratorFacet> create( final Optional<DomainObjectLayout> domainObjectLayoutIfAny, diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/tabledec/DomainObjectLayoutTableDecoratorFacetAbstract.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/tabledec/DomainObjectLayoutTableDecoratorFacetAbstract.java index bc9da0dce5..79d88fdbd6 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/tabledec/DomainObjectLayoutTableDecoratorFacetAbstract.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/tabledec/DomainObjectLayoutTableDecoratorFacetAbstract.java @@ -23,25 +23,23 @@ 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 org.apache.causeway.core.metamodel.facets.object.tabledec.TableDecoratorFacet; +import org.apache.causeway.core.metamodel.facets.object.tabledec.TableDecoratorFacetAbstract; abstract class DomainObjectLayoutTableDecoratorFacetAbstract -extends SingleValueFacetAbstract<Class<? extends TableDecorator>> +extends TableDecoratorFacetAbstract implements DomainObjectLayoutTableDecoratorFacet { - private static final Class<? extends Facet> type() { - return DomainObjectLayoutTableDecoratorFacet.class; - } - protected DomainObjectLayoutTableDecoratorFacetAbstract( final Class<? extends TableDecorator> value, final FacetHolder holder, final Facet.Precedence precedence) { - super(type(), value, holder, precedence); + super(value, holder, precedence); } protected DomainObjectLayoutTableDecoratorFacetAbstract( final Class<? extends TableDecorator> value, final FacetHolder holder) { - super(type(), value, holder); + super(value, holder); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/tabledec/DomainObjectLayoutTableDecoratorFacetForDomainObjectLayoutXml.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/tabledec/DomainObjectLayoutTableDecoratorFacetForDomainObjectLayoutXml.java index 4685f960dd..84956ceede 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/tabledec/DomainObjectLayoutTableDecoratorFacetForDomainObjectLayoutXml.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/tabledec/DomainObjectLayoutTableDecoratorFacetForDomainObjectLayoutXml.java @@ -24,15 +24,13 @@ import org.apache.causeway.applib.annotation.TableDecorator; import org.apache.causeway.applib.layout.component.DomainObjectLayoutData; import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; +import org.apache.causeway.core.metamodel.facets.object.tabledec.TableDecoratorFacet; +import org.apache.causeway.core.metamodel.facets.object.tabledec.TableDecoratorFacetAbstract; public class DomainObjectLayoutTableDecoratorFacetForDomainObjectLayoutXml extends DomainObjectLayoutTableDecoratorFacetAbstract { - public static final Class<DomainObjectLayoutTableDecoratorFacet> type() { - return DomainObjectLayoutTableDecoratorFacet.class; - } - - public static Optional<DomainObjectLayoutTableDecoratorFacet> create( + public static Optional<TableDecoratorFacet> create( final DomainObjectLayoutData domainObjectLayout, final FacetHolder holder, final Facet.Precedence precedence) { diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/tabledec/CollectionLayoutTableDecoratorFacetAbstract.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/tabledec/TableDecoratorFacet.java similarity index 50% copy from core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/tabledec/CollectionLayoutTableDecoratorFacetAbstract.java copy to core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/tabledec/TableDecoratorFacet.java index dfb9cc3e78..b6b4b1e573 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/tabledec/CollectionLayoutTableDecoratorFacetAbstract.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/tabledec/TableDecoratorFacet.java @@ -15,31 +15,16 @@ * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. - * */ -package org.apache.causeway.core.metamodel.facets.collections.layout.tabledec; +package org.apache.causeway.core.metamodel.facets.object.tabledec; 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; - -abstract class CollectionLayoutTableDecoratorFacetAbstract -extends SingleValueFacetAbstract<Class<? extends TableDecorator>> -implements CollectionLayoutTableDecoratorFacet { +import org.apache.causeway.core.metamodel.facets.SingleValueFacet; - private static final Class<? extends Facet> type() { - return CollectionLayoutTableDecoratorFacet.class; - } - - protected CollectionLayoutTableDecoratorFacetAbstract( - final Class<? extends TableDecorator> value, final FacetHolder holder, - final Precedence precedence) { - super(type(), value, holder, precedence); - } +/** + * Mechanism for obtaining the page sizes for tables showing instances of a class. + */ +public interface TableDecoratorFacet + extends SingleValueFacet<Class<? extends TableDecorator>> { - protected CollectionLayoutTableDecoratorFacetAbstract( - final Class<? extends TableDecorator> value, final FacetHolder holder) { - super(type(), value, holder); - } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/tabledec/DomainObjectLayoutTableDecoratorFacetAbstract.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/tabledec/TableDecoratorFacetAbstract.java similarity index 64% copy from core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/tabledec/DomainObjectLayoutTableDecoratorFacetAbstract.java copy to core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/tabledec/TableDecoratorFacetAbstract.java index bc9da0dce5..bce8ca5ce4 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/tabledec/DomainObjectLayoutTableDecoratorFacetAbstract.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/tabledec/TableDecoratorFacetAbstract.java @@ -15,33 +15,43 @@ * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. - * */ -package org.apache.causeway.core.metamodel.facets.object.domainobjectlayout.tabledec; +package org.apache.causeway.core.metamodel.facets.object.tabledec; import org.apache.causeway.applib.annotation.TableDecorator; import org.apache.causeway.core.metamodel.facetapi.Facet; +import org.apache.causeway.core.metamodel.facetapi.FacetAbstract; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.facets.SingleValueFacetAbstract; +import org.apache.causeway.core.metamodel.facets.object.domainobjectlayout.tabledec.DomainObjectLayoutTableDecoratorFacet; +import org.apache.causeway.core.metamodel.facets.object.paged.PagedFacet; + +import java.util.function.BiConsumer; -abstract class DomainObjectLayoutTableDecoratorFacetAbstract +public abstract class TableDecoratorFacetAbstract extends SingleValueFacetAbstract<Class<? extends TableDecorator>> -implements DomainObjectLayoutTableDecoratorFacet { +implements TableDecoratorFacet { - private static final Class<? extends Facet> type() { - return DomainObjectLayoutTableDecoratorFacet.class; + public static final Class<TableDecoratorFacet> type() { + return TableDecoratorFacet.class; } - protected DomainObjectLayoutTableDecoratorFacetAbstract( + protected TableDecoratorFacetAbstract( final Class<? extends TableDecorator> value, final FacetHolder holder, final Facet.Precedence precedence) { super(type(), value, holder, precedence); } - protected DomainObjectLayoutTableDecoratorFacetAbstract( + protected TableDecoratorFacetAbstract( final Class<? extends TableDecorator> value, final FacetHolder holder) { super(type(), value, holder); } + + @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/interactions/managed/nonscalar/DataTableModel.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/managed/nonscalar/DataTableModel.java index 6bf11177e0..2c3ff3050d 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/managed/nonscalar/DataTableModel.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/managed/nonscalar/DataTableModel.java @@ -25,6 +25,7 @@ import java.util.UUID; import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.Supplier; +import org.apache.causeway.applib.annotation.TableDecorator; import org.springframework.lang.Nullable; import org.apache.causeway.applib.Identifier; @@ -173,6 +174,10 @@ implements MultiselectChoices { return getMetaModel().getPageSize().orElse(pageSizeDefault); } + public Optional<TableDecorator> getTableDecoratorIfAny() { + return getMetaModel().getTableDecorator(); + } + /** * Count filtered data rows. */ diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/layout/LayoutFacetUtil.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/layout/LayoutFacetUtil.java index 41ea95425f..72f8a8bd26 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/layout/LayoutFacetUtil.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/layout/LayoutFacetUtil.java @@ -20,10 +20,7 @@ package org.apache.causeway.core.metamodel.layout; import java.util.Comparator; -import org.apache.causeway.applib.annotation.ActionLayout; -import org.apache.causeway.applib.annotation.BookmarkPolicy; -import org.apache.causeway.applib.annotation.LabelPosition; -import org.apache.causeway.applib.annotation.Where; +import org.apache.causeway.applib.annotation.*; import org.apache.causeway.applib.layout.component.ActionLayoutData; import org.apache.causeway.applib.layout.component.CollectionLayoutData; import org.apache.causeway.applib.layout.component.DomainObjectLayoutData; @@ -53,6 +50,7 @@ import org.apache.causeway.core.metamodel.facets.members.cssclass.CssClassFacet; import org.apache.causeway.core.metamodel.facets.members.cssclassfa.CssClassFaFacet; import org.apache.causeway.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacet; 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.facets.objectvalue.daterenderedadjust.DateRenderAdjustFacet; import org.apache.causeway.core.metamodel.facets.objectvalue.labelat.LabelAtFacet; import org.apache.causeway.core.metamodel.facets.objectvalue.multiline.MultiLineFacet; @@ -144,6 +142,7 @@ public class LayoutFacetUtil { .ifPresent(hasNamed::setNamed); } + private void setObjectDescribedIfAny( final HasDescribedAs hasDescribedAs, final FacetHolder facetHolder) { @@ -154,6 +153,33 @@ public class LayoutFacetUtil { .ifPresent(hasDescribedAs::setDescribedAs); } + public void setPagedIfAny( + final DomainObjectLayoutData domainObjectLayoutData, + final FacetHolder facetHolder) { + + val pagedFacet = FacetUtil.lookupFacetIn(PagedFacet.class, facetHolder).orElse(null); + if(isDoOp(pagedFacet)) { + final int value = pagedFacet.value(); + if(value > 0) { + domainObjectLayoutData.setPaged(value); + } + } + } + + public void setTableDecoratorIfAny( + final DomainObjectLayoutData domainObjectLayoutData, + final FacetHolder facetHolder) { + + val tableDecoratorFacet = FacetUtil.lookupFacetIn(TableDecoratorFacet.class, facetHolder).orElse(null); + if(isDoOp(tableDecoratorFacet)) { + final Class<? extends TableDecorator> value = tableDecoratorFacet.value(); + if(value != TableDecorator.Default.class) { + domainObjectLayoutData.setTableDecorator(value); + } + } + } + + private void setMemberNamedIfAny( final HasNamed hasNamed, final FacetHolder facetHolder) { @@ -242,6 +268,19 @@ public class LayoutFacetUtil { } } + public void setTableDecoratorIfAny( + final CollectionLayoutData collectionLayoutData, + final FacetHolder facetHolder, final ObjectSpecification objectSpec) { + + val tableDecoratorFacet = FacetUtil.lookupFacetIn(TableDecoratorFacet.class, facetHolder, objectSpec).orElse(null); + if(isDoOp(tableDecoratorFacet)) { + final Class<? extends TableDecorator> value = tableDecoratorFacet.value(); + if(value != TableDecorator.Default.class) { + collectionLayoutData.setTableDecorator(value); + } + } + } + public void setActionPositionIfAny( final ActionLayoutData actionLayoutData, final FacetHolder facetHolder) { @@ -357,6 +396,7 @@ public class LayoutFacetUtil { setHiddenIfAny(collectionLayoutData, collection); setMemberNamedIfAny(collectionLayoutData, collection); setPagedIfAny(collectionLayoutData, collection, objectSpec); + setTableDecoratorIfAny(collectionLayoutData, collection, objectSpec); setSortedByIfAny(collectionLayoutData, collection); }); } @@ -383,6 +423,7 @@ public class LayoutFacetUtil { setCssClassFaIfAny(domainObjectLayoutData, objectSpec); setObjectDescribedIfAny(domainObjectLayoutData, objectSpec); setObjectNamedIfAny(domainObjectLayoutData, objectSpec); + setPagedIfAny(domainObjectLayoutData, objectSpec); } } 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 cd35e242a6..ecafa00340 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 @@ -26,6 +26,7 @@ import java.util.OptionalInt; import java.util.stream.Stream; import org.apache.causeway.applib.annotation.CollectionLayout; +import org.apache.causeway.applib.annotation.TableDecorator; import org.apache.causeway.applib.annotation.Where; import org.apache.causeway.commons.internal._Constants; import org.apache.causeway.commons.internal.base._Casts; @@ -39,11 +40,13 @@ 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; import org.apache.causeway.core.metamodel.facets.members.layout.order.LayoutOrderFacet; 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; @@ -255,6 +258,18 @@ public interface ObjectMember extends ObjectFeature { .findFirst(); } + default Optional<TableDecorator> getTableDecorator() { + return FacetUtil.lookupFacetIn(TableDecoratorFacet.class, this, getElementType()) + .stream() + .map(SingleValueFacet::value) + .filter(x -> x != TableDecorator.Default.class) + .map(decoratorClass -> { + val decorator = _InstanceUtil.createInstance(decoratorClass, decoratorClass, _Constants.emptyObjects); + return injectServicesInto(decorator); + }) + .findFirst(); + } + // -- 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 87452e2584..11bebae81f 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 @@ -331,27 +331,6 @@ public final class Facets { .orElse(fallback); } - public Optional<TableDecorator> tableDecorator( - final FacetHolder facetHolder) { - return parentedTableDecorator(facetHolder) - .or(()->standaloneTableDecorator(facetHolder)) - .map(decoratorClass-> - facetHolder.injectServicesInto( - _InstanceUtil.createInstance(decoratorClass, decoratorClass, _Constants.emptyObjects))); - } - private Optional<Class<? extends TableDecorator>> parentedTableDecorator( - final FacetHolder facetHolder) { - return (Optional) facetHolder.lookupFacet(CollectionLayoutTableDecoratorFacet.class) - .map(CollectionLayoutTableDecoratorFacet::value) - .filter(x -> x != TableDecorator.Default.class); - } - private Optional<Class<? extends TableDecorator>> standaloneTableDecorator( - final FacetHolder facetHolder) { - return (Optional)facetHolder.lookupFacet(DomainObjectLayoutTableDecoratorFacet.class) - .map(DomainObjectLayoutTableDecoratorFacet::value) - .filter(x -> x != TableDecorator.Default.class); - } - public Optional<ObjectSpecification> elementSpec(final FacetHolder facetHolder) { return facetHolder.lookupFacet(TypeOfFacet.class) .map(TypeOfFacet::elementSpec); diff --git a/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/EntityCollectionModel.java b/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/EntityCollectionModel.java index 8186189e55..5bf61ee0ef 100644 --- a/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/EntityCollectionModel.java +++ b/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/EntityCollectionModel.java @@ -20,6 +20,7 @@ package org.apache.causeway.viewer.wicket.model.models; import java.util.Optional; +import org.apache.causeway.applib.annotation.TableDecorator; import org.apache.wicket.model.IModel; import org.apache.causeway.applib.Identifier; @@ -118,6 +119,10 @@ extends return getDataTableModel().getPageSize(getVariant().getPageSizeDefault()); } + default Optional<TableDecorator> getTableDecoratorIfAny() { + return getDataTableModel().getTableDecoratorIfAny(); + } + // -- PARENTED SPECIFICS @Deprecated // there is no reason to distinguish parented and standalone, I think 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 2c0c96ba27..9da87e9bf7 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 @@ -140,7 +140,7 @@ implements HasDynamicallyVisibleContent { Facets.cssClass(collectionMetaModel, objectAdapter) .ifPresent(cssClass->Wkt.cssAppend(div, cssClass)); - this.tableDecorator = Facets.tableDecorator(collectionMetaModel); + this.tableDecorator = collectionMetaModel.getTableDecorator(); tableDecorator.ifPresent(tableDecorator->{ Wkt.cssAppend(div, tableDecorator.cssClass()); }); @@ -169,10 +169,10 @@ implements HasDynamicallyVisibleContent { // TableDecorator caching private transient Optional<TableDecorator> tableDecorator; private Optional<TableDecorator> tableDecorator() { - if(tableDecorator==null) { + if(tableDecorator == null) { val collectionModel = EntityCollectionModelParented.forParentObjectModel(getModel(), layoutData); val collectionMetaModel = collectionModel.getMetaModel(); - this.tableDecorator = Facets.tableDecorator(collectionMetaModel); + this.tableDecorator = collectionMetaModel.getTableDecorator(); } return tableDecorator; } diff --git a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/standalonecollection/StandaloneCollectionPanel.java b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/standalonecollection/StandaloneCollectionPanel.java index 46c7da4667..e6591b21a1 100644 --- a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/standalonecollection/StandaloneCollectionPanel.java +++ b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/standalonecollection/StandaloneCollectionPanel.java @@ -76,7 +76,8 @@ implements CollectionCountProvider, CollectionPresentationSelectorProvider { Wkt.cssAppend(outerDiv, featureId); Wkt.cssAppend(outerDiv, collectionModel.getElementType().getFeatureIdentifier()); - this.tableDecorator = Facets.tableDecorator(collectionModel.getElementType()); + + this.tableDecorator = collectionModel.getTableDecoratorIfAny(); tableDecorator.ifPresent(tableDecorator->{ Wkt.cssAppend(outerDiv, tableDecorator.cssClass()); }); @@ -136,10 +137,10 @@ implements CollectionCountProvider, CollectionPresentationSelectorProvider { // TableDecorator caching private transient Optional<TableDecorator> tableDecorator; private Optional<TableDecorator> tableDecorator() { - if(tableDecorator==null) { + //noinspection OptionalAssignedToNull + if(tableDecorator==null) { // this is NOT a bug; we are caching an Optional val collectionModel = getModel(); - val collectionMetaModel = collectionModel.getElementType(); - this.tableDecorator = Facets.tableDecorator(collectionMetaModel); + this.tableDecorator = collectionModel.getTableDecoratorIfAny(); } return tableDecorator; }
