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

Reply via email to