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 62481d9858 ISIS-3167: minor refactoring
62481d9858 is described below
commit 62481d98588dbaa6befe563be98a8147500e8373
Author: Andi Huber <[email protected]>
AuthorDate: Wed Aug 24 09:09:56 2022 +0200
ISIS-3167: minor refactoring
---
.../apache/isis/applib/annotation/CollectionLayout.java | 2 +-
.../SortedByFacetForCollectionLayoutAnnotation.java | 3 ++-
.../collections/sortedby/SortedByFacetAbstract.java | 6 ++++--
.../interactions/managed/nonscalar/DataTableModel.java | 3 ++-
.../isis/core/metamodel/spec/feature/ObjectMember.java | 16 +++++++++++-----
5 files changed, 20 insertions(+), 10 deletions(-)
diff --git
a/api/applib/src/main/java/org/apache/isis/applib/annotation/CollectionLayout.java
b/api/applib/src/main/java/org/apache/isis/applib/annotation/CollectionLayout.java
index bfb42ff124..f02ced6c30 100644
---
a/api/applib/src/main/java/org/apache/isis/applib/annotation/CollectionLayout.java
+++
b/api/applib/src/main/java/org/apache/isis/applib/annotation/CollectionLayout.java
@@ -164,7 +164,7 @@ public @interface CollectionLayout {
* may be sorted in an order more suitable to the context.
*/
@SuppressWarnings("rawtypes")
- Class sortedBy()
+ Class<? extends Comparator> sortedBy()
default Comparator.class;
}
diff --git
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/SortedByFacetForCollectionLayoutAnnotation.java
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/SortedByFacetForCollectionLayoutAnnotation.java
index 1c7d178c20..addfd474f1 100644
---
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/SortedByFacetForCollectionLayoutAnnotation.java
+++
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/SortedByFacetForCollectionLayoutAnnotation.java
@@ -27,7 +27,8 @@ import
org.apache.isis.core.metamodel.facets.collections.sortedby.SortedByFacetA
import static org.apache.isis.commons.internal.base._Casts.uncheckedCast;
-public class SortedByFacetForCollectionLayoutAnnotation extends
SortedByFacetAbstract {
+public class SortedByFacetForCollectionLayoutAnnotation
+extends SortedByFacetAbstract {
public static Optional<SortedByFacetForCollectionLayoutAnnotation> create(
final Optional<CollectionLayout> collectionLayoutIfAny,
diff --git
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/sortedby/SortedByFacetAbstract.java
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/sortedby/SortedByFacetAbstract.java
index c75c985141..8c49599215 100644
---
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/sortedby/SortedByFacetAbstract.java
+++
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/sortedby/SortedByFacetAbstract.java
@@ -23,13 +23,15 @@ import java.util.Comparator;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.SingleValueFacetAbstract;
-public abstract class SortedByFacetAbstract extends
SingleValueFacetAbstract<Class<? extends Comparator<?>>> implements
SortedByFacet {
+public abstract class SortedByFacetAbstract
+extends SingleValueFacetAbstract<Class<? extends Comparator<?>>>
+implements SortedByFacet {
public static final Class<SortedByFacet> type() {
return SortedByFacet.class;
}
- public SortedByFacetAbstract(Class<? extends Comparator<?>> value, final
FacetHolder holder) {
+ public SortedByFacetAbstract(final Class<? extends Comparator<?>> value,
final FacetHolder holder) {
super(type(), value, holder);
}
diff --git
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/nonscalar/DataTableModel.java
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/nonscalar/DataTableModel.java
index 23c7296801..fcc12236e1 100644
---
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/nonscalar/DataTableModel.java
+++
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/nonscalar/DataTableModel.java
@@ -126,7 +126,8 @@ implements MultiselectChoices {
dataElements.getValue().stream()
//XXX future extension: filter by searchArgument
.filter(this::ignoreHidden)
- .sorted(managedMember.getMetaModel().getElementComparator())
+ .sorted(managedMember.getMetaModel().getElementComparator()
+ .orElseGet(()->(a, b)->0)) // else don't sort (no-op
comparator for streams)
.map(domainObject->new DataRow(this, domainObject))
.collect(Can.toCan()));
diff --git
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectMember.java
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectMember.java
index 4d839d7a5f..f1509495ca 100644
---
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectMember.java
+++
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectMember.java
@@ -21,9 +21,11 @@ package org.apache.isis.core.metamodel.spec.feature;
import java.util.Comparator;
import java.util.Map;
import java.util.Objects;
+import java.util.Optional;
import java.util.OptionalInt;
import java.util.stream.Stream;
+import org.apache.isis.applib.annotation.CollectionLayout;
import org.apache.isis.applib.annotation.Where;
import org.apache.isis.commons.internal.base._Casts;
import org.apache.isis.commons.internal.base._NullSafe;
@@ -251,11 +253,15 @@ public interface ObjectMember extends ObjectFeature {
// -- COLLECTION SORTING (COLL + NON-SCALAR ACTION RESULT)
/**
- * An element comparator corresponding to associated {@link SortedByFacet}.
+ * Optionally the element comparator corresponding to associated {@link
SortedByFacet},
+ * based on whether such a facet is present.
+ * <p>
+ * Usually corresponds to {@link CollectionLayout#sortedBy()}.
+ * <p>
* The comparator operates on elements of type {@link ManagedObject}.
- * @return non-null
+ * @apiNote in case of entity comparison, the caller needs to take care of
passing in attached entities
*/
- default Comparator<ManagedObject> getElementComparator(){
+ default Optional<Comparator<ManagedObject>> getElementComparator(){
var sortedBy = Stream.of(this, getElementType())
.map(facetHolder->facetHolder.getFacet(SortedByFacet.class))
@@ -265,14 +271,14 @@ public interface ObjectMember extends ObjectFeature {
.orElse(null);
if(sortedBy == null) {
- return (a, b) -> 0; // no-op comparator, works with Stream#sort
+ return Optional.empty();
}
val pojoComparator = _Casts.<Comparator<Object>>uncheckedCast(
_InstanceUtil.createInstance(sortedBy));
getMetaModelContext().getServiceInjector().injectServicesInto(pojoComparator);
- return (a, b) -> pojoComparator.compare(a.getPojo(), b.getPojo());
+ return Optional.of((a, b) -> pojoComparator.compare(a.getPojo(),
b.getPojo()));
}
// -- COMPARATORS