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;
     }

Reply via email to