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