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/isis.git


The following commit(s) were added to refs/heads/master by this push:
     new 19c0cd268a ISIS-3309: pagesize facet precedence fixes
19c0cd268a is described below

commit 19c0cd268a6fadffe32f6fe643b9cbb192b8b10c
Author: Andi Huber <ahu...@apache.org>
AuthorDate: Wed Jan 11 13:37:30 2023 +0100

    ISIS-3309: pagesize facet precedence fixes
---
 .../core/metamodel/facetapi/FacetUtil.java         | 19 ++++++++
 .../PagedFacetForCollectionLayoutAnnotation.java   |  2 +-
 ...PagedFacetOverriddenByDataTablesDecoration.java |  2 +-
 .../fallback/PagedFacetFromConfiguration.java      |  4 +-
 .../PagedFacetForDomainObjectLayoutAnnotation.java |  4 +-
 ...PagedFacetOverriddenByDataTablesDecoration.java |  2 +-
 .../facets/object/paged/PagedFacetAbstract.java    |  5 --
 .../managed/nonscalar/DataTableModel.java          |  6 ++-
 .../core/metamodel/layout/LayoutFacetUtil.java     |  7 +--
 .../core/metamodel/spec/feature/ObjectMember.java  | 56 ++++++++++------------
 .../paged/DomainObjectLayoutPagedVm.java           | 23 ++++++++-
 .../wicket/model/models/EntityCollectionModel.java |  7 ++-
 .../models/EntityCollectionModelAbstract.java      |  6 ---
 .../model/models/EntityCollectionModelHidden.java  | 10 ++++
 14 files changed, 94 insertions(+), 59 deletions(-)

diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetUtil.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetUtil.java
index 95ee334dec..4913fb87aa 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetUtil.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facetapi/FacetUtil.java
@@ -27,8 +27,10 @@ import java.util.stream.Stream;
 import org.springframework.lang.Nullable;
 import org.springframework.util.ClassUtils;
 
+import org.apache.causeway.commons.internal.base._NullSafe;
 import org.apache.causeway.commons.internal.base._Strings;
 import org.apache.causeway.commons.internal.collections._Lists;
+import org.apache.causeway.core.metamodel.facetapi.Facet.Precedence;
 import org.apache.causeway.core.metamodel.util.snapshot.XmlSchema;
 
 import lombok.NonNull;
@@ -169,4 +171,21 @@ public final class FacetUtil {
                 : String.format("%s[type=%s; %s]", className, 
ClassUtils.getShortName(facet.facetType()), attributesAsString);
     }
 
+    // -- FACET LOOKUP
+
+    /** Looks up specified facetType within given {@link FacetHolder}s, 
honoring Facet {@link Precedence},
+     * while first one found wins over later found if they have the same 
precedence. */
+    public static <F extends Facet> Optional<F> lookupFacetIn(final @NonNull 
Class<F> facetType, final FacetHolder ... facetHolders) {
+        if(facetHolders==null) {
+            return Optional.empty();
+        }
+        return Stream.of(facetHolders)
+        .filter(_NullSafe::isPresent)
+        .map(facetHolder->facetHolder.getFacet(facetType))
+        .filter(_NullSafe::isPresent)
+        .reduce((a, b)->b.getPrecedence().ordinal()>a.getPrecedence().ordinal()
+                ? b
+                : a);
+    }
+
 }
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/PagedFacetForCollectionLayoutAnnotation.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/PagedFacetForCollectionLayoutAnnotation.java
index 9e4b7ad3ed..29ba2c50a0 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/PagedFacetForCollectionLayoutAnnotation.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/PagedFacetForCollectionLayoutAnnotation.java
@@ -46,7 +46,7 @@ public class PagedFacetForCollectionLayoutAnnotation extends 
PagedFacetAbstract
     }
 
     private PagedFacetForCollectionLayoutAnnotation(final int paged, final 
FacetHolder holder) {
-        super(paged, holder);
+        super(paged, holder, Precedence.DEFAULT);
     }
 
 }
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/PagedFacetOverriddenByDataTablesDecoration.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/PagedFacetOverriddenByDataTablesDecoration.java
index 643987b974..fa493ee09e 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/PagedFacetOverriddenByDataTablesDecoration.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/layout/PagedFacetOverriddenByDataTablesDecoration.java
@@ -24,7 +24,7 @@ import 
org.apache.causeway.core.metamodel.facets.object.paged.PagedFacetAbstract
 public class PagedFacetOverriddenByDataTablesDecoration extends 
PagedFacetAbstract {
 
     PagedFacetOverriddenByDataTablesDecoration(final FacetHolder holder) {
-        super(Integer.MAX_VALUE, holder);
+        super(Integer.MAX_VALUE, holder, Precedence.HIGH);
     }
 
 }
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/fallback/PagedFacetFromConfiguration.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/fallback/PagedFacetFromConfiguration.java
index 6df8737c0c..6895ecc52e 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/fallback/PagedFacetFromConfiguration.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/fallback/PagedFacetFromConfiguration.java
@@ -23,7 +23,7 @@ import 
org.apache.causeway.core.metamodel.facets.object.paged.PagedFacetAbstract
 
 public class PagedFacetFromConfiguration extends PagedFacetAbstract {
 
-    public PagedFacetFromConfiguration(int value, FacetHolder holder) {
-        super(value, holder);
+    public PagedFacetFromConfiguration(final int value, final FacetHolder 
holder) {
+        super(value, holder, Precedence.INFERRED);
     }
 }
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/PagedFacetForDomainObjectLayoutAnnotation.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/PagedFacetForDomainObjectLayoutAnnotation.java
index f45fddd865..8e1c093186 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/PagedFacetForDomainObjectLayoutAnnotation.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/PagedFacetForDomainObjectLayoutAnnotation.java
@@ -18,7 +18,6 @@
  */
 package org.apache.causeway.core.metamodel.facets.object.domainobjectlayout;
 
-
 import java.util.Optional;
 
 import org.apache.causeway.applib.annotation.DomainObjectLayout;
@@ -29,7 +28,6 @@ import 
org.apache.causeway.core.metamodel.facets.object.paged.PagedFacetAbstract
 
 import lombok.val;
 
-
 public class PagedFacetForDomainObjectLayoutAnnotation extends 
PagedFacetAbstract {
 
     public static Optional<PagedFacet> create(
@@ -49,6 +47,6 @@ public class PagedFacetForDomainObjectLayoutAnnotation 
extends PagedFacetAbstrac
     }
 
     private PagedFacetForDomainObjectLayoutAnnotation(final int value, final 
FacetHolder holder) {
-        super(value, holder);
+        super(value, holder, Precedence.DEFAULT);
     }
 }
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/PagedFacetOverriddenByDataTablesDecoration.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/PagedFacetOverriddenByDataTablesDecoration.java
index 128ca06604..f44a85e633 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/PagedFacetOverriddenByDataTablesDecoration.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/PagedFacetOverriddenByDataTablesDecoration.java
@@ -24,7 +24,7 @@ import 
org.apache.causeway.core.metamodel.facets.object.paged.PagedFacetAbstract
 public class PagedFacetOverriddenByDataTablesDecoration extends 
PagedFacetAbstract {
 
     PagedFacetOverriddenByDataTablesDecoration(final FacetHolder holder) {
-        super(Integer.MAX_VALUE, holder);
+        super(Integer.MAX_VALUE, holder, Precedence.HIGH);
     }
 
 }
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/paged/PagedFacetAbstract.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/paged/PagedFacetAbstract.java
index faa3ee427c..32819fe872 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/paged/PagedFacetAbstract.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/paged/PagedFacetAbstract.java
@@ -38,11 +38,6 @@ implements PagedFacet {
         this.value = value;
     }
 
-    protected PagedFacetAbstract(final int value, final FacetHolder holder) {
-        super(type(), holder, Precedence.INFERRED);
-        this.value = value;
-    }
-
     @Override
     public int value() {
         return 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 7f66a63d11..6bf11177e0 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
@@ -162,13 +162,17 @@ implements MultiselectChoices {
             .map(property->new DataColumn(this, property))
             .collect(Can.toCan()));
 
-        //XXX future extension: the tile could dynamically reflect the number 
of elements selected
+        //XXX future extension: the title could dynamically reflect the number 
of elements selected
         //eg... 5 Orders selected
         title = _Observables.lazy(()->
             managedMember
             .getFriendlyName());
     }
 
+    public int getPageSize(final int pageSizeDefault) {
+        return getMetaModel().getPageSize().orElse(pageSizeDefault);
+    }
+
     /**
      * 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 9ef2914b86..92a5756797 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
@@ -39,6 +39,7 @@ import org.apache.causeway.commons.internal.base._Strings;
 import org.apache.causeway.commons.internal.functions._Functions;
 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.actions.position.ActionPositionFacet;
 import 
org.apache.causeway.core.metamodel.facets.all.described.MemberDescribedFacet;
 import 
org.apache.causeway.core.metamodel.facets.all.described.ObjectDescribedFacet;
@@ -230,9 +231,9 @@ public class LayoutFacetUtil {
 
     public void setPagedIfAny(
             final CollectionLayoutData collectionLayoutData,
-            final FacetHolder facetHolder) {
+            final FacetHolder facetHolder, final ObjectSpecification 
objectSpec) {
 
-        val pagedFacet = facetHolder.getFacet(PagedFacet.class);
+        val pagedFacet = FacetUtil.lookupFacetIn(PagedFacet.class, 
facetHolder, objectSpec).orElse(null);
         if(isDoOp(pagedFacet)) {
             final int value = pagedFacet.value();
             if(value > 0) {
@@ -367,7 +368,7 @@ public class LayoutFacetUtil {
                 setMemberDescribedIfAny(collectionLayoutData, collection);
                 setHiddenIfAny(collectionLayoutData, collection);
                 setMemberNamedIfAny(collectionLayoutData, collection);
-                setPagedIfAny(collectionLayoutData, collection);
+                setPagedIfAny(collectionLayoutData, collection, objectSpec);
                 setSortedByIfAny(collectionLayoutData, collection);
             });
         }
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 9d5f5cd579..b98f7b7224 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
@@ -288,43 +288,39 @@ public interface ObjectMember extends ObjectFeature {
         public static <T extends FacetHolder> Comparator<T> 
byMemberOrderSequence(
                 final boolean ensureInSameGroup) {
 
-            return new Comparator<T>() {
+            return (m1, m2) -> {
 
-                @Override
-                public int compare(final T m1, final T m2) {
+                val orderFacet1 = m1==null ? null : 
m1.getFacet(LayoutOrderFacet.class);
+                val orderFacet2 = m2==null ? null : 
m2.getFacet(LayoutOrderFacet.class);
 
-                    val orderFacet1 = m1==null ? null : 
m1.getFacet(LayoutOrderFacet.class);
-                    val orderFacet2 = m2==null ? null : 
m2.getFacet(LayoutOrderFacet.class);
-
-                    if (orderFacet1 == null && orderFacet2 == null) {
-                        return 0;
-                    }
-                    if (orderFacet1 == null && orderFacet2 != null) {
-                        return +1; // annotated before non-annotated
-                    }
-                    if (orderFacet1 != null && orderFacet2 == null) {
-                        return -1; // annotated before non-annotated
-                    }
+                if (orderFacet1 == null && orderFacet2 == null) {
+                    return 0;
+                }
+                if (orderFacet1 == null && orderFacet2 != null) {
+                    return +1; // annotated before non-annotated
+                }
+                if (orderFacet1 != null && orderFacet2 == null) {
+                    return -1; // annotated before non-annotated
+                }
 
-                    if (ensureInSameGroup) {
+                if (ensureInSameGroup) {
 
-                        val groupFacet1 = m1.getFacet(LayoutGroupFacet.class);
-                        val groupFacet2 = m2.getFacet(LayoutGroupFacet.class);
-                        val groupId1 = _Strings.nullToEmpty(groupFacet1==null 
? null : groupFacet1.getGroupId());
-                        val groupId2 = _Strings.nullToEmpty(groupFacet2==null 
? null : groupFacet2.getGroupId());
+                    val groupFacet1 = m1.getFacet(LayoutGroupFacet.class);
+                    val groupFacet2 = m2.getFacet(LayoutGroupFacet.class);
+                    val groupId1 = _Strings.nullToEmpty(groupFacet1==null ? 
null : groupFacet1.getGroupId());
+                    val groupId2 = _Strings.nullToEmpty(groupFacet2==null ? 
null : groupFacet2.getGroupId());
 
-                        if(!Objects.equals(groupId1, groupId2)) {
-                            throw _Exceptions.illegalArgument(
-                                    "Not in same fieldSetId1 when comparing: 
'%s', '%s'",
-                                    groupId1,
-                                    groupId2);
-                        }
+                    if(!Objects.equals(groupId1, groupId2)) {
+                        throw _Exceptions.illegalArgument(
+                                "Not in same fieldSetId1 when comparing: '%s', 
'%s'",
+                                groupId1,
+                                groupId2);
                     }
-
-                    return _Comparators.deweyOrderCompare(
-                            orderFacet1.getSequence(),
-                            orderFacet2.getSequence());
                 }
+
+                return _Comparators.deweyOrderCompare(
+                        orderFacet1.getSequence(),
+                        orderFacet2.getSequence());
             };
         }
 
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/paged/DomainObjectLayoutPagedVm.java
 
b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/paged/DomainObjectLayoutPagedVm.java
index eba6870f44..339fbe51c2 100644
--- 
a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/paged/DomainObjectLayoutPagedVm.java
+++ 
b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/paged/DomainObjectLayoutPagedVm.java
@@ -18,6 +18,9 @@
  */
 package demoapp.dom.domain.objects.DomainObjectLayout.paged;
 
+import java.util.List;
+import java.util.UUID;
+
 import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
@@ -25,7 +28,9 @@ import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlType;
 
+import org.apache.causeway.applib.annotation.Collection;
 import org.apache.causeway.applib.annotation.DomainObject;
+import org.apache.causeway.applib.annotation.DomainObjectLayout;
 import org.apache.causeway.applib.annotation.Nature;
 import org.apache.causeway.applib.annotation.ObjectSupport;
 import org.apache.causeway.applib.annotation.Optionality;
@@ -42,17 +47,31 @@ import lombok.Setter;
 @Named("demo.DomainObjectLayoutPagedVm")
 @DomainObject(
         nature=Nature.VIEW_MODEL)
+@DomainObjectLayout(
+        paged=3)
 public class DomainObjectLayoutPagedVm implements HasAsciiDocDescription {
 
     @ObjectSupport public String title() {
         return "DomainObjectLayout#paged";
     }
 
-    //TODO[ISIS-3309]
+    @Collection
+    private List<DomainObjectLayoutPagedVm> samples;
+    public List<DomainObjectLayoutPagedVm> getSamples() {
+        if(samples==null) {
+            samples = List.of(
+                    new DomainObjectLayoutPagedVm(),
+                    new DomainObjectLayoutPagedVm(),
+                    new DomainObjectLayoutPagedVm(),
+                    new DomainObjectLayoutPagedVm());
+        }
+        return samples;
+    }
+
     @Property(optionality = Optionality.OPTIONAL)
     @XmlElement(required = false)
     @Getter @Setter
-    private String dummy;
+    private String uuid = UUID.randomUUID().toString();
 
 }
 //end::class[]
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 a14f77bffb..8186189e55 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
@@ -114,10 +114,9 @@ extends
         return getDataTableModel().getTitle().getValue();
     }
 
-    // -- DEPRECATIONS(?)
-
-    @Deprecated // move to DataTableModel
-    int getPageSize();
+    default int getPageSize() {
+        return 
getDataTableModel().getPageSize(getVariant().getPageSizeDefault());
+    }
 
     // -- PARENTED SPECIFICS
 
diff --git 
a/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/EntityCollectionModelAbstract.java
 
b/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/EntityCollectionModelAbstract.java
index a9eb474f32..c917087ff3 100644
--- 
a/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/EntityCollectionModelAbstract.java
+++ 
b/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/EntityCollectionModelAbstract.java
@@ -82,12 +82,6 @@ implements EntityCollectionModel {
                 .getMetaModel();
     }
 
-    @Override
-    public int getPageSize() {
-        return getMetaModel().getPageSize()
-                .orElse(getVariant().getPageSizeDefault());
-    }
-
     @Override
     public Identifier getIdentifier() {
         return getMetaModel().getFeatureIdentifier();
diff --git 
a/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/EntityCollectionModelHidden.java
 
b/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/EntityCollectionModelHidden.java
index 0b770dd512..3fe715ac63 100644
--- 
a/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/EntityCollectionModelHidden.java
+++ 
b/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/EntityCollectionModelHidden.java
@@ -40,4 +40,14 @@ extends EntityCollectionModelAbstract {
         return 0;
     }
 
+    @Override
+    public String getName() {
+        return "hidden";
+    }
+
+    @Override
+    public int getPageSize() {
+        return 1;
+    }
+
 }

Reply via email to