You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2020/01/30 12:00:00 UTC
[isis] 02/04: ISIS-2158: move sorting logic to ManagedObject (for
possible reuse)
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
commit 5a2f0b13724048d84ad19ceca1e727f7695daae5
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Jan 30 12:23:51 2020 +0100
ISIS-2158: move sorting logic to ManagedObject (for possible reuse)
---
.../isis/core/metamodel/spec/ManagedObject.java | 44 ++++++++++++++++++++++
.../CollectionContentsSortableDataProvider.java | 37 +-----------------
2 files changed, 45 insertions(+), 36 deletions(-)
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObject.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObject.java
index 3610570..9b9bdbf 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObject.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObject.java
@@ -22,6 +22,7 @@ package org.apache.isis.core.metamodel.spec;
import java.lang.reflect.Method;
import java.util.Collection;
import java.util.Collections;
+import java.util.Comparator;
import java.util.List;
import java.util.Set;
import java.util.function.Function;
@@ -34,6 +35,7 @@ import org.apache.isis.applib.annotation.Where;
import org.apache.isis.applib.domain.DomainObjectList;
import org.apache.isis.applib.services.repository.EntityState;
import org.apache.isis.core.commons.collections.Can;
+import org.apache.isis.core.commons.internal.base._NullSafe;
import org.apache.isis.core.commons.internal.base._Tuples.Indexed;
import org.apache.isis.core.commons.internal.collections._Arrays;
import org.apache.isis.core.commons.internal.collections._Lists;
@@ -52,6 +54,7 @@ import org.apache.isis.core.metamodel.interactions.ObjectVisibilityContext;
import org.apache.isis.core.metamodel.interactions.VisibilityContext;
import org.apache.isis.core.metamodel.objectmanager.create.ObjectCreator;
import org.apache.isis.core.metamodel.objectmanager.load.ObjectLoader;
+import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
import org.apache.isis.core.metamodel.specloader.SpecificationLoaderDefault;
@@ -356,6 +359,47 @@ public interface ManagedObject {
return adapter.getPojo()==null;
}
+ // -- COMPARE UTILITIES
+
+ @NoArgsConstructor(access = AccessLevel.PRIVATE)
+ static final class CompareUtil {
+
+ public static int compare(@Nullable ManagedObject p, @Nullable ManagedObject q) {
+ return NATURAL_NULL_FIRST.compare(p, q);
+ }
+
+ public static Comparator<ManagedObject> orderingBy(ObjectAssociation sortProperty, boolean ascending) {
+
+ final Comparator<ManagedObject> comparator = ascending
+ ? NATURAL_NULL_FIRST
+ : NATURAL_NULL_FIRST.reversed();
+
+ return (p, q) -> {
+ val pSort = sortProperty.get(p, InteractionInitiatedBy.FRAMEWORK);
+ val qSort = sortProperty.get(q, InteractionInitiatedBy.FRAMEWORK);
+ return comparator.compare(pSort, qSort);
+ };
+
+ }
+
+ // -- PREDEFINED COMPARATOR
+
+ private static final Comparator<ManagedObject> NATURAL_NULL_FIRST = new Comparator<ManagedObject>(){
+ @SuppressWarnings({ "unchecked", "rawtypes" })
+ @Override
+ public int compare(@Nullable ManagedObject p, @Nullable ManagedObject q) {
+ val pPojo = ManagedObject.unwrapSingle(p);
+ val qPojo = ManagedObject.unwrapSingle(q);
+ if(!(pPojo instanceof Comparable) || !(qPojo instanceof Comparable)) {
+ return 0;
+ }
+ return _NullSafe.compareNullsFirst((Comparable)pPojo, (Comparable)qPojo);
+ }
+
+ };
+
+ }
+
// -- VISIBILITY UTILITIES
@NoArgsConstructor(access = AccessLevel.PRIVATE)
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsSortableDataProvider.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsSortableDataProvider.java
index 5fb8758..950ad22 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsSortableDataProvider.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsSortableDataProvider.java
@@ -20,7 +20,6 @@
package org.apache.isis.viewer.wicket.ui.components.collectioncontents.ajaxtable;
import java.util.Collections;
-import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import java.util.function.Predicate;
@@ -31,7 +30,6 @@ import org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvid
import org.apache.wicket.model.IModel;
import org.apache.isis.applib.annotation.Where;
-import org.apache.isis.core.commons.internal.base._NullSafe;
import org.apache.isis.core.commons.internal.collections._Lists;
import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.isis.core.metamodel.consent.InteractionResult;
@@ -115,7 +113,7 @@ public class CollectionContentsSortableDataProvider extends SortableDataProvider
final ObjectAssociation sortProperty = lookupAssociationFor(sort);
if(sortProperty != null) {
- Collections.sort(copy, orderingBy(sortProperty, sort.isAscending()));
+ Collections.sort(copy, ManagedObject.CompareUtil.orderingBy(sortProperty, sort.isAscending()));
}
return copy;
@@ -158,38 +156,5 @@ public class CollectionContentsSortableDataProvider extends SortableDataProvider
Where.ALL_TABLES);
}
- private static Comparator<ManagedObject> orderingBy(
- ObjectAssociation sortProperty,
- boolean ascending) {
-
- return new Comparator<ManagedObject>(){
-
- @Override
- public int compare(ManagedObject p, ManagedObject q) {
- val pSort = sortProperty.get(p, InteractionInitiatedBy.FRAMEWORK);
- val qSort = sortProperty.get(q, InteractionInitiatedBy.FRAMEWORK);
-
- return (ascending ? NATURAL_NULL_FIRST : NATURAL_NULL_FIRST.reversed())
- .compare(pSort, qSort);
- }
- };
-
- }
-
- private static final Comparator<ManagedObject> NATURAL_NULL_FIRST = new Comparator<ManagedObject>(){
- @SuppressWarnings({ "unchecked", "rawtypes" })
- @Override
- public int compare(ManagedObject p, ManagedObject q) {
- val pPojo = ManagedObject.unwrapSingle(p);
- val qPojo = ManagedObject.unwrapSingle(q);
- if(!(pPojo instanceof Comparable) || !(qPojo instanceof Comparable)) {
- return 0;
- }
- return _NullSafe.compareNullsFirst((Comparable)pPojo, (Comparable)qPojo);
- }
-
- };
-
-
}
\ No newline at end of file