Skip to content

Commit

Permalink
Estup2-649: post merge refactoring and test fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
andi-huber committed May 14, 2024
1 parent 61e02c8 commit 1a6bed9
Show file tree
Hide file tree
Showing 26 changed files with 79 additions and 61 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -407,7 +407,10 @@ public static Can<String> namesFor(final MethodFacade member, final String prefi

//maybe gradually consolidate all MM validation raisers here
@RequiredArgsConstructor
public static enum Violation {
public static enum MessageTemplate {
NOT_AUTHORIZED_TO_EDIT_OR_USE("Not authorized to edit or use."),
NOT_AUTHORIZED_TO_EDIT_OR_USE_MEMBER("Not authorized to edit or use ${member}."),
NOT_AUTHORIZED_TO_EDIT_OR_USE_FEATURE("Not authorized to edit or use feature ${type}#${member}."),
CONFLICTING_TITLE_STRATEGIES(
"${type} has title() method with @Title annotation, which is not allowed; "
+ "consider either removing the @Title annotation or renaming the method"),
Expand Down Expand Up @@ -511,7 +514,7 @@ public ViolationBuilder builder() {
}
@RequiredArgsConstructor
public static class ViolationBuilder {
private final Violation violaton;
private final MessageTemplate violaton;
private final Map<String, String> vars = new HashMap<>();
public ViolationBuilder addVariable(final String name, final String value) {
vars.put(name, value);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ public void validateObjectEnter(final ObjectSpecification spec) {

ValidationFailure.raiseFormatted(
spec,
ProgrammingModelConstants.Violation.UNKNONW_SORT_WITH_ACTION
ProgrammingModelConstants.MessageTemplate.UNKNONW_SORT_WITH_ACTION
.builder()
.addVariable("type", spec.getCorrespondingClass().getName())
.addVariable("actions", actionIds)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ public void validateObjectEnter(final @NonNull ObjectSpecification spec) {

ValidationFailure.raiseFormatted(
spec,
ProgrammingModelConstants.Violation.ACTION_METHOD_OVERLOADING_NOT_ALLOWED
ProgrammingModelConstants.MessageTemplate.ACTION_METHOD_OVERLOADING_NOT_ALLOWED
.builder()
.addVariable("type", spec.getCorrespondingClass().getName())
.addVariable("overloadedNames", overloadedNames.toString())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -600,7 +600,7 @@ public void validateExit() {

proxies.forEach(spec->{
ValidationFailure.raiseFormatted(spec,
ProgrammingModelConstants.Violation.PROXIED_SERVICE_BEAN_NOT_ALLOWED_TO_CONTRIBUTE
ProgrammingModelConstants.MessageTemplate.PROXIED_SERVICE_BEAN_NOT_ALLOWED_TO_CONTRIBUTE
.builder()
.addVariable("logicalTypeName", spec.getLogicalTypeName())
.addVariable("csv", asCsv(proxies.toList()))
Expand All @@ -613,7 +613,7 @@ public void validateExit() {
.filter(this::logicalTypeNameIsNotIncludedInAliased)
.forEach(spec->{
ValidationFailure.raiseFormatted(spec,
ProgrammingModelConstants.Violation.NON_UNIQUE_LOGICAL_TYPE_NAME_OR_ALIAS
ProgrammingModelConstants.MessageTemplate.NON_UNIQUE_LOGICAL_TYPE_NAME_OR_ALIAS
.builder()
.addVariable("logicalTypeName", spec.getLogicalTypeName())
.addVariable("csv", asCsv(collidingSpecs))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,8 @@ public void validateObjectEnter(final ObjectSpecification spec) {
.anyMatch(String::isEmpty)) {

val validationResponse = spec.isInjectable()
? ProgrammingModelConstants.Violation.DOMAIN_SERVICE_MISSING_A_NAMESPACE
: ProgrammingModelConstants.Violation.DOMAIN_OBJECT_MISSING_A_NAMESPACE;
? ProgrammingModelConstants.MessageTemplate.DOMAIN_SERVICE_MISSING_A_NAMESPACE
: ProgrammingModelConstants.MessageTemplate.DOMAIN_OBJECT_MISSING_A_NAMESPACE;

ValidationFailure.raiseFormatted(spec,
validationResponse.builder()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ public static Optional<NavigableParentFacet> create(
// failure
deficiency->{
ValidationFailure.raiseFormatted(facetHolder,
ProgrammingModelConstants.Violation.DOMAIN_OBJECT_INVALID_NAVIGABLE_PARENT
ProgrammingModelConstants.MessageTemplate.DOMAIN_OBJECT_INVALID_NAVIGABLE_PARENT
.builder()
.addVariable("type", processedClass.getName())
.addVariable("parentType", method.returnType().getName())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
import org.apache.causeway.commons.internal.reflection._Reflect.InterfacePolicy;
import org.apache.causeway.commons.internal.reflection._Reflect.TypeHierarchyPolicy;
import org.apache.causeway.core.config.progmodel.ProgrammingModelConstants.ObjectSupportMethod;
import org.apache.causeway.core.config.progmodel.ProgrammingModelConstants.Violation;
import org.apache.causeway.core.config.progmodel.ProgrammingModelConstants.MessageTemplate;
import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
import org.apache.causeway.core.metamodel.facets.Evaluators;
import org.apache.causeway.core.metamodel.facets.Evaluators.MethodEvaluator;
Expand Down Expand Up @@ -201,7 +201,7 @@ private static boolean isATitleProvidingObjectSupportMethod(
final Runnable onTrue) {
if(ObjectSupportMethod.TITLE.getMethodNames().contains(evaluator.name())) {
ValidationFailure.raise(facetHolder,
Violation.CONFLICTING_TITLE_STRATEGIES
MessageTemplate.CONFLICTING_TITLE_STRATEGIES
.builder()
.addVariablesFor(facetHolder.getFeatureIdentifier())
.buildMessage());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ public void refineProgrammingModel(final ProgrammingModel programmingModel) {
&& objectSpec.getBeanSort().isViewModel()
&& !objectSpec.viewmodelFacet().isPresent()) {
ValidationFailure.raiseFormatted(objectSpec,
ProgrammingModelConstants.Violation.VIEWMODEL_MISSING_SERIALIZATION_STRATEGY
ProgrammingModelConstants.MessageTemplate.VIEWMODEL_MISSING_SERIALIZATION_STRATEGY
.builder()
.addVariable("type", objectSpec.getCorrespondingClass().getName())
.buildMessage());
Expand All @@ -98,7 +98,7 @@ public void refineProgrammingModel(final ProgrammingModel programmingModel) {
facetRanking
.visitTopRankPairsSemanticDiffering(ViewModelFacet.class, (a, b)->{
ValidationFailure.raiseFormatted(objectSpec,
ProgrammingModelConstants.Violation.VIEWMODEL_CONFLICTING_SERIALIZATION_STRATEGIES
ProgrammingModelConstants.MessageTemplate.VIEWMODEL_CONFLICTING_SERIALIZATION_STRATEGIES
.builder()
.addVariable("type", objectSpec.getFullIdentifier())
.addVariable("facetA", a.getClass().getSimpleName())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,11 +72,11 @@ public static <T> Optional<ViewModelFacet> create(


val violation = explicitInjectConstructors.getCardinality().isMultiple()
? ProgrammingModelConstants.Violation.VIEWMODEL_MULTIPLE_CONSTRUCTORS_WITH_INJECT_SEMANTICS
? ProgrammingModelConstants.MessageTemplate.VIEWMODEL_MULTIPLE_CONSTRUCTORS_WITH_INJECT_SEMANTICS
: explicitInjectConstructors.getCardinality().isZero()
&& !publicConstructors.getCardinality().isOne()
// in absence of a constructor with inject semantics there must be exactly one public to pick instead
? ProgrammingModelConstants.Violation.VIEWMODEL_MISSING_OR_MULTIPLE_PUBLIC_CONSTRUCTORS
? ProgrammingModelConstants.MessageTemplate.VIEWMODEL_MISSING_OR_MULTIPLE_PUBLIC_CONSTRUCTORS
: null;

if(violation!=null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ private static void raiseIfConflictingOptionality(
val holder = mandatoryFacet.getFacetHolder();

ValidationFailure.raiseFormatted(holder,
ProgrammingModelConstants.Violation.CONFLICTING_OPTIONALITY.builder()
ProgrammingModelConstants.MessageTemplate.CONFLICTING_OPTIONALITY.builder()
.addVariable("member", holder.getFeatureIdentifier().getFullIdentityString())
.addVariable("conflictingFacets", conflictingFacets.stream()
.map(MandatoryFacet::summarize)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ public static InteractionResultSet isValidResultSet(
private static String guardAgainstEmptyReasonString(
final @Nullable String reason, final @NonNull Identifier identifier) {
if("".equals(reason)) {
val msg = ProgrammingModelConstants.Violation.INVALID_USE_OF_VALIDATION_SUPPORT_METHOD.builder()
val msg = ProgrammingModelConstants.MessageTemplate.INVALID_USE_OF_VALIDATION_SUPPORT_METHOD.builder()
.addVariable("className", identifier.getClassName())
.addVariable("memberName", identifier.getMemberLogicalName())
.buildMessage();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
import org.apache.causeway.commons.internal.reflection._GenericResolver.ResolvedMethod;
import org.apache.causeway.commons.internal.reflection._MethodFacades.MethodFacade;
import org.apache.causeway.commons.internal.reflection._Reflect;
import org.apache.causeway.core.config.progmodel.ProgrammingModelConstants.Violation;
import org.apache.causeway.core.config.progmodel.ProgrammingModelConstants.MessageTemplate;
import org.apache.causeway.core.metamodel.commons.MethodUtil;
import org.apache.causeway.core.metamodel.context.MetaModelContext;
import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
Expand Down Expand Up @@ -139,7 +139,7 @@ public void validateObjectEnter(final ObjectSpecification spec) {
.collect(Collectors.joining("; "));

ValidationFailure.raiseFormatted(spec,
Violation.UNSATISFIED_DOMAIN_INCLUDE_SEMANTICS
MessageTemplate.UNSATISFIED_DOMAIN_INCLUDE_SEMANTICS
.builder()
.addVariable("type", spec.getFeatureIdentifier().getClassName())
.addVariable("member", _Reflect.methodToShortString(notPickedUpMethod.method()))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ static void validate(

ValidationFailure.raise(
spec,
ProgrammingModelConstants.Violation.ORPHANED_METHOD
ProgrammingModelConstants.MessageTemplate.ORPHANED_METHOD
.builder()
.addVariablesFor(methodIdentifier)
.buildMessage());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ public void validateObjectEnter(final ObjectSpecification objSpec) {
if(contributing==null
|| contributing.isUnspecified()) {
ValidationFailure.raiseFormatted(objSpec,
ProgrammingModelConstants.Violation.INVALID_MIXIN_TYPE
ProgrammingModelConstants.MessageTemplate.INVALID_MIXIN_TYPE
.builder()
.addVariable("type", objSpec.getCorrespondingClass().getName())
.buildMessage());
Expand Down Expand Up @@ -104,7 +104,7 @@ private void checkMixinSort(final ObjectSpecification objSpec, final FacetedMeth

if(actualContributing!=expectedContributing) {
ValidationFailure.raiseFormatted(objSpec,
ProgrammingModelConstants.Violation.INVALID_MIXIN_SORT
ProgrammingModelConstants.MessageTemplate.INVALID_MIXIN_SORT
.builder()
.addVariable("type", objSpec.getCorrespondingClass().getName())
.addVariable("expectedContributing", expectedContributing.name())
Expand All @@ -121,7 +121,7 @@ private void checkMixinMainMethod(final ObjectSpecification objSpec, final Ident

if(!expectedMethodName.equals(actualMethodName)) {
ValidationFailure.raiseFormatted(objSpec,
ProgrammingModelConstants.Violation.INVALID_MIXIN_MAIN
ProgrammingModelConstants.MessageTemplate.INVALID_MIXIN_MAIN
.builder()
.addVariable("type", objSpec.getCorrespondingClass().getName())
.addVariable("expectedMethodName", expectedMethodName)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@
import org.springframework.lang.Nullable;

import org.apache.causeway.applib.Identifier;
import org.apache.causeway.core.config.progmodel.ProgrammingModelConstants;
import org.apache.causeway.core.metamodel.context.MetaModelContext;
import org.apache.causeway.core.metamodel.facetapi.Facet;
import org.apache.causeway.core.metamodel.interactions.ActionVisibilityContext;
import org.apache.causeway.core.metamodel.interactions.CollectionVisibilityContext;
Expand Down Expand Up @@ -83,13 +85,23 @@ public static boolean hidesAction(
vc.getWhere())) != null)
.orElse(false);
}

public static String formatNotAuthorizedToEdit(final boolean useNaturalName,
final @Nullable Identifier identifier) {
return identifier!=null
? String.format("Not authorized to edit or use feature: %s",
useNaturalName ? identifier.getMemberNaturalName() : identifier.getLogicalIdentityString("#"))
: "Not authorized to edit or use";

/**
* @param identifier - presence results in a more verbose message
* @param mmc - if present AND when PROTOTYPING, results in a more concise message,
* only including the friendly member name (omitting the type's name)
*/
public static String formatNotAuthorizedToEdit(
final @Nullable Identifier identifier,
final @Nullable MetaModelContext mmc) {
var template = identifier==null
? ProgrammingModelConstants.MessageTemplate.NOT_AUTHORIZED_TO_EDIT_OR_USE
: mmc!=null && !mmc.getSystemEnvironment().isPrototyping()
? ProgrammingModelConstants.MessageTemplate.NOT_AUTHORIZED_TO_EDIT_OR_USE_MEMBER
: ProgrammingModelConstants.MessageTemplate.NOT_AUTHORIZED_TO_EDIT_OR_USE_FEATURE;
return template.builder()
.addVariablesFor(identifier)
.buildMessage();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ public Optional<VetoReason> disables(final UsabilityContext ic) {
getInteractionService().currentInteractionContextElseFail(),
ic.getIdentifier())
? null
: AuthorizationFacet.formatNotAuthorizedToEdit(!getSystemEnvironment().isPrototyping(),ic.getIdentifier());
: AuthorizationFacet.formatNotAuthorizedToEdit(ic.getIdentifier(), getMetaModelContext());

if(disables!=null && log.isDebugEnabled()) {
log.debug("disables[{}] -> {}", ic.getIdentifier(), disables);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -245,7 +245,7 @@ private void checkParamHasChoicesOrAutoCompleteWhenRequired(final ObjectActionPa
if(!hasChoicesOrAutoComplete(param)) {

ValidationFailure.raiseFormatted(param,
ProgrammingModelConstants.Violation.PARAMETER_HAS_NO_CHOICES_NOR_AUTOCOMPLETE.builder()
ProgrammingModelConstants.MessageTemplate.PARAMETER_HAS_NO_CHOICES_NOR_AUTOCOMPLETE.builder()
.addVariable("paramId", param.getFeatureIdentifier().toString())
.buildMessage());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -607,7 +607,7 @@ private void guardAgainstMetamodelLockedAfterFullIntrospection(final Class<?> cl
if(isMetamodelFullyIntrospected()
&& causewayConfiguration.getCore().getMetaModel().getIntrospector().isLockAfterFullIntrospection()) {

val warningMessage = ProgrammingModelConstants.Violation.TYPE_NOT_EAGERLY_DISCOVERED
val warningMessage = ProgrammingModelConstants.MessageTemplate.TYPE_NOT_EAGERLY_DISCOVERED
.builder()
.addVariable("type", cls.getName())
.addVariable("beanSort", causewayBeanTypeClassifier
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
import org.apache.causeway.commons.internal.reflection._GenericResolver.ResolvedMethod;
import org.apache.causeway.commons.internal.reflection._MethodFacades;
import org.apache.causeway.commons.internal.reflection._MethodFacades.MethodFacade;
import org.apache.causeway.core.config.progmodel.ProgrammingModelConstants.Violation;
import org.apache.causeway.core.config.progmodel.ProgrammingModelConstants.MessageTemplate;
import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
import org.apache.causeway.core.metamodel.specloader.validator.ValidationFailure;

Expand All @@ -54,7 +54,7 @@ MethodFacade autodetect(final ResolvedMethod method, final FacetHolder inspected
|| method.paramCount() > 1) {
// invalid
ValidationFailure.raiseFormatted(inspectedTypeSpec,
Violation.PARAMETER_TUPLE_INVALID_USE_OF_ANNOTATION
MessageTemplate.PARAMETER_TUPLE_INVALID_USE_OF_ANNOTATION
.builder()
.addVariable("type", inspectedTypeSpec.getFeatureIdentifier().getClassName())
.addVariable("member", method.name())
Expand All @@ -66,7 +66,7 @@ MethodFacade autodetect(final ResolvedMethod method, final FacetHolder inspected
if(!patConstructors.isCardinalityOne()) {
// invalid
ValidationFailure.raiseFormatted(inspectedTypeSpec,
Violation.PARAMETER_TUPLE_TYPE_WITH_AMBIGUOUS_CONSTRUCTORS
MessageTemplate.PARAMETER_TUPLE_TYPE_WITH_AMBIGUOUS_CONSTRUCTORS
.builder()
.addVariable("type", inspectedTypeSpec.getFeatureIdentifier().getClassName())
.addVariable("member", method.name())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ public <A extends Annotation> void raiseAmbiguousMixinAnnotations(
final Class<A> annotationType) {

ValidationFailure.raiseFormatted(holder,
ProgrammingModelConstants.Violation.AMBIGUOUS_MIXIN_ANNOTATIONS
ProgrammingModelConstants.MessageTemplate.AMBIGUOUS_MIXIN_ANNOTATIONS
.builder()
.addVariable("annot", "@" + annotationType.getSimpleName())
.addVariable("mixinType", holder.getFeatureIdentifier().getFullIdentityString())
Expand All @@ -50,7 +50,7 @@ public void raiseMemberIdClash(
final ObjectMember memberB) {

ValidationFailure.raiseFormatted(memberB,
ProgrammingModelConstants.Violation.MEMBER_ID_CLASH
ProgrammingModelConstants.MessageTemplate.MEMBER_ID_CLASH
.builder()
.addVariable("type", declaringType.fqcn())
.addVariable("memberId", ""+memberB.getId())
Expand All @@ -64,7 +64,7 @@ public void raiseInvalidMemberElementType(
final ObjectSpecification declaringType,
final ObjectSpecification elementType) {
ValidationFailure.raiseFormatted(facetHolder,
ProgrammingModelConstants.Violation.INVALID_MEMBER_ELEMENT_TYPE
ProgrammingModelConstants.MessageTemplate.INVALID_MEMBER_ELEMENT_TYPE
.builder()
.addVariable("type", declaringType.fqcn())
.addVariable("elementType", ""+elementType)
Expand Down
Loading

0 comments on commit 1a6bed9

Please sign in to comment.