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/09 19:17:25 UTC
[isis] branch master updated: ISIS-2774: fail early if conflicting
title strategies
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 960d53a ISIS-2774: fail early if conflicting title strategies
960d53a is described below
commit 960d53a62d1752b6cdebd32add7a29baca74df26
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Sep 9 21:17:09 2021 +0200
ISIS-2774: fail early if conflicting title strategies
---
.../config/progmodel/ProgrammingModelConstants.java | 19 +++++++++++++++++++
.../annotation/TitleFacetViaTitleAnnotation.java | 16 ++++++++++++++++
2 files changed, 35 insertions(+)
diff --git a/core/config/src/main/java/org/apache/isis/core/config/progmodel/ProgrammingModelConstants.java b/core/config/src/main/java/org/apache/isis/core/config/progmodel/ProgrammingModelConstants.java
index ac4e821..8c6e677 100644
--- a/core/config/src/main/java/org/apache/isis/core/config/progmodel/ProgrammingModelConstants.java
+++ b/core/config/src/main/java/org/apache/isis/core/config/progmodel/ProgrammingModelConstants.java
@@ -34,6 +34,7 @@ import javax.enterprise.inject.Vetoed;
import org.springframework.lang.Nullable;
import org.springframework.util.ClassUtils;
+import org.apache.isis.applib.Identifier;
import org.apache.isis.applib.annotation.Domain;
import org.apache.isis.applib.annotation.MemberSupport;
import org.apache.isis.applib.annotation.ObjectLifecycle;
@@ -309,6 +310,18 @@ public final class ProgrammingModelConstants {
}
}
+ //FIXME[ISIS-2774] consolidate all MM validation raisers here, if we can find a common method signature for that
+ @RequiredArgsConstructor
+ public static enum Validation {
+ CONFLICTING_TITLE_STRATEGIES(
+ "${type} has title() method with @Title annotation, which is not allowed; "
+ + "consider either removing the @Title annotation or renaming the method");
+ private final String template;
+ public String getMessage(final Identifier identifier) {
+ return processMessageTemplate(template, identifier);
+ }
+ }
+
// -- HELPER
private static String getCapitalizedMemberName(final Member member) {
@@ -328,5 +341,11 @@ public final class ProgrammingModelConstants {
return _Strings.capitalize(member.getName());
}
+ private static String processMessageTemplate(
+ final String template,
+ final Identifier identifier) {
+ return template.replace("${type}", identifier.getLogicalType().getClassName());
+ }
+
}
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 4e3c29f..1ac0cb1 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
@@ -36,6 +36,8 @@ import org.apache.isis.commons.internal.functions._Predicates;
import org.apache.isis.commons.internal.reflection._Annotations;
import org.apache.isis.commons.internal.reflection._Reflect.InterfacePolicy;
import org.apache.isis.commons.internal.reflection._Reflect.TypeHierarchyPolicy;
+import org.apache.isis.core.config.progmodel.ProgrammingModelConstants.ObjectSupportMethod;
+import org.apache.isis.core.config.progmodel.ProgrammingModelConstants.Validation;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.Evaluators;
import org.apache.isis.core.metamodel.facets.Evaluators.MethodEvaluator;
@@ -43,6 +45,7 @@ import org.apache.isis.core.metamodel.facets.ImperativeFacet;
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 org.apache.isis.core.metamodel.specloader.validator.ValidationFailure;
import lombok.AccessLevel;
import lombok.Getter;
@@ -67,6 +70,7 @@ implements ImperativeFacet {
annotatedElement->isTitleComponent(annotatedElement, titleRef::set),
TypeHierarchyPolicy.EXCLUDE,
InterfacePolicy.INCLUDE)
+ .filter(evaluator->!isATitleProvidingObjectSupportMethod(evaluator, holder))
.map(evaluator->TitleComponent.of(evaluator, titleRef.getValueElseFail()))
.sorted()
.collect(Can.toCan());
@@ -190,6 +194,18 @@ implements ImperativeFacet {
.orElse(false);
}
+ private static boolean isATitleProvidingObjectSupportMethod(
+ final Evaluators.Evaluator evaluator,
+ final FacetHolder facetHolder) {
+ if(ObjectSupportMethod.TITLE.getMethodNames().contains(evaluator.name())) {
+ ValidationFailure.raise(facetHolder,
+ Validation.CONFLICTING_TITLE_STRATEGIES
+ .getMessage(facetHolder.getFeatureIdentifier()));
+ return true;
+ }
+ return false;
+ }
+
@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
public static class TitleComponent
implements Comparable<TitleComponent> {