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 2021/09/03 10:41:52 UTC
[isis] branch master updated: ISIS-2774: remove duplicated
SequenceComparator
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 09429c7 ISIS-2774: remove duplicated SequenceComparator
09429c7 is described below
commit 09429c750a00240b1cdb70ea31945e21c0a5a0e6
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Sep 3 12:41:41 2021 +0200
ISIS-2774: remove duplicated SequenceComparator
---
.../annotation/TitleAnnotationFacetFactory.java | 130 ---------------------
.../annotation/TitleFacetViaTitleAnnotation.java | 35 +++---
.../TitleAnnotationFacetFactoryTest.java | 1 -
3 files changed, 22 insertions(+), 144 deletions(-)
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/annotation/TitleAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/annotation/TitleAnnotationFacetFactory.java
index 75262e2..30f22be 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/annotation/TitleAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/annotation/TitleAnnotationFacetFactory.java
@@ -19,19 +19,13 @@
package org.apache.isis.core.metamodel.facets.object.title.annotation;
-import java.util.Comparator;
-import java.util.List;
-import java.util.stream.Collectors;
-
import javax.inject.Inject;
import org.apache.isis.applib.annotation.Title;
import org.apache.isis.commons.collections.Can;
-import org.apache.isis.commons.internal.base._Strings;
import org.apache.isis.core.metamodel.context.MetaModelContext;
import org.apache.isis.core.metamodel.facetapi.FeatureType;
import org.apache.isis.core.metamodel.facetapi.MetaModelRefiner;
-import org.apache.isis.core.metamodel.facets.Evaluators;
import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
import org.apache.isis.core.metamodel.facets.fallback.FallbackFacetFactory;
import org.apache.isis.core.metamodel.facets.object.title.TitleFacet;
@@ -39,8 +33,6 @@ import org.apache.isis.core.metamodel.facets.object.title.methods.TitleFacetViaM
import org.apache.isis.core.metamodel.progmodel.ProgrammingModel;
import org.apache.isis.core.metamodel.specloader.validator.ValidationFailure;
-import lombok.AccessLevel;
-import lombok.Getter;
import lombok.val;
public class TitleAnnotationFacetFactory
@@ -64,77 +56,6 @@ implements MetaModelRefiner {
addFacetIfPresent(TitleFacetViaTitleAnnotation.create(cls, facetHolder));
}
- // static comparator memoization
- @Getter(lazy = true, value = AccessLevel.PACKAGE)
- private static final Comparator<Evaluators.Evaluator<Title>> sequenceComparator =
- new Comparator<Evaluators.Evaluator<Title>>() {
- final Comparator<String> comparator = new SequenceComparator();
-
- @Override
- public int compare(final Evaluators.Evaluator<Title> o1, final Evaluators.Evaluator<Title> o2) {
- final Title a1 = o1.getAnnotation();
- final Title a2 = o2.getAnnotation();
- return comparator.compare(a1.sequence(), a2.sequence());
- }
- };
-
-
- @Deprecated //FIXME[ISI-2774] I believe we have sequence comparators already else where (dewey order)
- static class SequenceComparator implements Comparator<String> {
-
- @Override
- public int compare(final String sequence1, final String sequence2) {
-
- final List<String> components1 = componentsFor(sequence1);
- final List<String> components2 = componentsFor(sequence2);
-
- final int size1 = components1.size();
- final int size2 = components2.size();
-
- if (size1 == 0 && size2 == 0) {
- return 0;
- }
-
- // continue to loop until we run out of components.
- int n = 0;
- while (true) {
- final int length = n + 1;
- // check if run out of components in either side
- if (size1 < length && size2 >= length) {
- return -1; // o1 before o2
- }
- if (size2 < length && size1 >= length) {
- return +1; // o2 before o1
- }
- if (size1 < length && size2 < length) {
- // run out of components
- return 0;
- }
- // we have this component on each side
- int componentCompare = 0;
- try {
- final Integer c1 = Integer.valueOf(components1.get(n));
- final Integer c2 = Integer.valueOf(components2.get(n));
- componentCompare = c1.compareTo(c2);
- } catch (final NumberFormatException nfe) {
- // not integers compare as strings
- componentCompare = components1.get(n).compareTo(components2.get(n));
- }
-
- if (componentCompare != 0) {
- return componentCompare;
- }
- // this component is the same; lets look at the next
- n++;
- }
- }
-
- private static List<String> componentsFor(final String sequence) {
- return _Strings.splitThenStream(sequence, ".").collect(Collectors.toList());
- }
- }
-
-
/**
* Violation if there is a class that has both a <tt>title()</tt> method
* and also any declared (non-inherited) method annotated with <tt>@Title</tt>.
@@ -150,10 +71,6 @@ implements MetaModelRefiner {
programmingModel.addVisitingValidatorSkipManagedBeans(objectSpec -> {
-// final var objectSpec = (ObjectSpecificationAbstract)_objectSpec;
-// final var cls = objectSpec.getCorrespondingClass();
-// final var introspectionPolicy = objectSpec.getIntrospectionPolicy();
-
final var titleFacetTopRank =
objectSpec
.getFacetRanking(TitleFacet.class)
@@ -176,56 +93,9 @@ implements MetaModelRefiner {
+ "conflicting title facets %s",
objectSpec.getFeatureIdentifier().getClassName(),
conflictingFeatures.toString());
-
}
-
-
-//
-// final var titleMethod = MethodFinderUtils.findMethod(
-// MethodFinderOptions.objectSupport(introspectionPolicy),
-// cls, TITLE_METHOD_NAME, String.class, null);
-// if (titleMethod == null) {
-// return;
-// }
-//
-// // determine if cls contains an @Title annotated method, not inherited from superclass
-// final ObjectSpecification superSpec = objectSpec.superclass();
-// if (superSpec == null) {
-// return;
-// }
-//
-// final var superIntrospectionPolicy = ((ObjectSpecificationAbstract)superSpec).getIntrospectionPolicy();
-// final var superCls = superSpec.getCorrespondingClass();
-//
-// //FIXME[ISIS-2774] also count declared fields that are @Title annotated
-// if (countMethodsWithTitleAnnotation(introspectionPolicy, cls)
-// > 1L
-// //countMethodsWithTitleAnnotation(superIntrospectionPolicy, superCls)
-// ) {
-// ValidationFailure.raiseFormatted(
-// objectSpec,
-// "%s: conflict for determining a strategy for retrieval of title for class, "
-// + "contains a method '%s' and an annotation '@%s' on a different members",
-// objectSpec.getFeatureIdentifier().getClassName(),
-// TITLE_METHOD_NAME,
-// Title.class.getName());
-// }
-
});
}
-// private static long countMethodsWithTitleAnnotation(
-// final IntrospectionPolicy introspectionPolicy,
-// final Class<?> cls) {
-// return MethodFinderUtils.streamMethodsWithAnnotation(
-// MethodFinderOptions.objectSupport(introspectionPolicy), cls, Title.class)
-// // don't count methods that identify as title() methods
-// .filter(method->
-// !
-// (method.getName().equals(MethodLiteralConstants.TITLE)
-// && method.getParameterCount() == 0))
-// .count();
-// }
-
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/annotation/TitleFacetViaTitleAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/annotation/TitleFacetViaTitleAnnotation.java
index 02a3497..6048623 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/annotation/TitleFacetViaTitleAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/annotation/TitleFacetViaTitleAnnotation.java
@@ -20,6 +20,7 @@
package org.apache.isis.core.metamodel.facets.object.title.annotation;
import java.lang.reflect.Method;
+import java.util.Comparator;
import java.util.List;
import java.util.Optional;
import java.util.function.BiConsumer;
@@ -29,6 +30,7 @@ import org.apache.isis.applib.annotation.Title;
import org.apache.isis.commons.collections.Can;
import org.apache.isis.commons.internal.base._Strings;
import org.apache.isis.commons.internal.collections._Lists;
+import org.apache.isis.commons.internal.compare._Comparators;
import org.apache.isis.commons.internal.functions._Predicates;
import org.apache.isis.commons.internal.reflection._Reflect.InterfacePolicy;
import org.apache.isis.commons.internal.reflection._Reflect.TypeHierarchyPolicy;
@@ -40,6 +42,7 @@ import org.apache.isis.core.metamodel.facets.object.title.TitleFacet;
import org.apache.isis.core.metamodel.facets.object.title.TitleFacetAbstract;
import org.apache.isis.core.metamodel.spec.ManagedObject;
+import lombok.AccessLevel;
import lombok.Getter;
import lombok.NonNull;
import lombok.val;
@@ -58,7 +61,7 @@ implements ImperativeFacet {
Title.class,
TypeHierarchyPolicy.EXCLUDE,
InterfacePolicy.INCLUDE)
- .sorted(TitleAnnotationFacetFactory.getSequenceComparator())
+ .sorted(getSequenceComparator())
.map(TitleFacetViaTitleAnnotation.TitleComponent::of)
.collect(Can.toCan());
@@ -70,7 +73,6 @@ implements ImperativeFacet {
}
@Getter private final Can<TitleComponent> components;
-
@Getter(onMethod_ = {@Override}) private final @NonNull Can<Method> methods;
protected TitleFacetViaTitleAnnotation(final Can<TitleComponent> components, final FacetHolder holder) {
@@ -103,17 +105,6 @@ implements ImperativeFacet {
return title(_Predicates.alwaysFalse(), targetAdapter);
}
- private String titleOf(final ManagedObject adapter) {
- if (adapter == null) {
- return null;
- }
- return adapter.titleString();
- }
-
- private static String abbreviated(final String str, final int maxLength) {
- return str.length() < maxLength ? str : str.substring(0, maxLength - 3) + "...";
- }
-
@Override
public String title(
final Predicate<ManagedObject> skipTitlePartEvaluator,
@@ -173,6 +164,24 @@ implements ImperativeFacet {
// -- HELPER
+ // static comparator memoization
+ @Getter(lazy = true, value = AccessLevel.PRIVATE)
+ private static final Comparator<Evaluators.Evaluator<Title>> sequenceComparator =
+ (eval1, eval2) -> _Comparators.deweyOrderCompare(
+ eval1.getAnnotation().sequence(),
+ eval2.getAnnotation().sequence());
+
+ private String titleOf(final ManagedObject adapter) {
+ if (adapter == null) {
+ return null;
+ }
+ return adapter.titleString();
+ }
+
+ private static String abbreviated(final String str, final int maxLength) {
+ return str.length() < maxLength ? str : str.substring(0, maxLength - 3) + "...";
+ }
+
public static class TitleComponent {
public static TitleComponent of(final Evaluators.Evaluator<Title> titleEvaluator) {
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ident/title/annotation/TitleAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ident/title/annotation/TitleAnnotationFacetFactoryTest.java
index 64df7e7..905dab7 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ident/title/annotation/TitleAnnotationFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ident/title/annotation/TitleAnnotationFacetFactoryTest.java
@@ -220,7 +220,6 @@ extends AbstractFacetFactoryJUnit4TestCase {
}
- //@Ignore //FIXME[ISI-2774] to re-instate
@SuppressWarnings("unchecked")
@Test
public void titleAnnotatedMethodsSomeOfWhichReturnNulls() throws Exception {