Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/master' into v3
Browse files Browse the repository at this point in the history
  • Loading branch information
andi-huber committed May 14, 2024
2 parents c649d57 + 1a6bed9 commit 508fa2c
Show file tree
Hide file tree
Showing 43 changed files with 69 additions and 52 deletions.
Empty file modified build-core.sh
100644 → 100755
Empty file.
Empty file modified build-demo-app.sh
100644 → 100755
Empty file.
Empty file modified build-site.sh
100644 → 100755
Empty file.
Empty file modified build-smoketests.sh
100644 → 100755
Empty file.
Empty file modified build-tooling.sh
100644 → 100755
Empty file.
Empty file modified build.sh
100644 → 100755
Empty file.
Empty file modified changed.sh
100644 → 100755
Empty file.
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 @@ -102,7 +102,7 @@ public static ExecutionPublishingFacet create(
}
} else {
// we are dealing with an action
val actionPublishingPolicy = ActionConfigOptions.actionCommandPublishingPolicy(configuration);
val actionPublishingPolicy = ActionConfigOptions.actionExecutionPublishingPolicy(configuration);
switch (actionPublishingPolicy) {
case NONE:
return new ExecutionPublishingFacetForActionFromConfiguration.None(holder);
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 @@ -89,7 +89,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 @@ -101,7 +101,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,11 +85,23 @@ public static boolean hidesAction(
vc.getWhere())) != null)
.orElse(false);
}

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

/**
* @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(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
Loading

0 comments on commit 508fa2c

Please sign in to comment.