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 <[email protected]>
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;
+ }
+
}