You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@causeway.apache.org by ah...@apache.org on 2023/02/06 14:26:38 UTC
[causeway] branch master updated: CAUSEWAY-3351: fixes CssClassFacet for the regex case when mixed in
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/causeway.git
The following commit(s) were added to refs/heads/master by this push:
new dddd509e2a CAUSEWAY-3351: fixes CssClassFacet for the regex case when mixed in
dddd509e2a is described below
commit dddd509e2a63decf68e9e069957939e234d4759b
Author: Andi Huber <ah...@apache.org>
AuthorDate: Mon Feb 6 15:26:33 2023 +0100
CAUSEWAY-3351: fixes CssClassFacet for the regex case when mixed in
---
.../CssClassFacetOnActionFromConfiguredRegex.java | 35 ++++++++++++++++--
...assFacetOnActionFromConfiguredRegexFactory.java | 42 +++++-----------------
...CssClassFaFacetOnMemberFromConfiguredRegex.java | 2 +-
...sOnActionFromConfiguredRegexPostProcessor.java} | 23 +++++++-----
.../dflt/ProgrammingModelFacetsJava11.java | 4 +--
5 files changed, 59 insertions(+), 47 deletions(-)
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/cssclass/annotprop/CssClassFacetOnActionFromConfiguredRegex.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/cssclass/annotprop/CssClassFacetOnActionFromConfiguredRegex.java
index 7c3a262817..3eb98edc26 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/cssclass/annotprop/CssClassFacetOnActionFromConfiguredRegex.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/cssclass/annotprop/CssClassFacetOnActionFromConfiguredRegex.java
@@ -18,12 +18,43 @@
*/
package org.apache.causeway.core.metamodel.facets.members.cssclass.annotprop;
+import java.util.Map;
+import java.util.Optional;
+import java.util.regex.Pattern;
+
+import org.apache.causeway.core.config.CausewayConfiguration;
import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
import org.apache.causeway.core.metamodel.facets.members.cssclass.CssClassFacetSimple;
+import lombok.val;
+
public class CssClassFacetOnActionFromConfiguredRegex extends CssClassFacetSimple {
- public CssClassFacetOnActionFromConfiguredRegex(final String value, final FacetHolder holder) {
- super(value, holder);
+ public static Optional<CssClassFacetOnActionFromConfiguredRegex> create(
+ final String name, final FacetHolder holder) {
+ return cssIfAnyFor(name, holder.getConfiguration())
+ .map(css->new CssClassFacetOnActionFromConfiguredRegex(css, holder));
+ }
+
+ private CssClassFacetOnActionFromConfiguredRegex(final String css, final FacetHolder holder) {
+ super(css, holder, Precedence.INFERRED); // inferred from config, if not specified otherwise
+ }
+
+ // -- HELPER
+
+ private static Optional<String> cssIfAnyFor(
+ final String name, final CausewayConfiguration causewayConfiguration) {
+
+ val cssClassByPattern = causewayConfiguration.getApplib().getAnnotation().getActionLayout()
+ .getCssClass().getPatternsAsMap();
+
+ for (Map.Entry<Pattern, String> entry : cssClassByPattern.entrySet()) {
+ final Pattern pattern = entry.getKey();
+ final String cssClass = entry.getValue();
+ if(pattern.matcher(name).matches()) {
+ return Optional.ofNullable(cssClass);
+ }
+ }
+ return Optional.empty();
}
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/cssclass/annotprop/CssClassFacetOnActionFromConfiguredRegexFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/cssclass/annotprop/CssClassFacetOnActionFromConfiguredRegexFactory.java
index 0021c072e8..30b82263a9 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/cssclass/annotprop/CssClassFacetOnActionFromConfiguredRegexFactory.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/cssclass/annotprop/CssClassFacetOnActionFromConfiguredRegexFactory.java
@@ -18,14 +18,9 @@
*/
package org.apache.causeway.core.metamodel.facets.members.cssclass.annotprop;
-import java.util.Map;
-import java.util.Optional;
-import java.util.regex.Pattern;
-
import javax.inject.Inject;
import org.apache.causeway.core.metamodel.context.MetaModelContext;
-import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
import org.apache.causeway.core.metamodel.facetapi.FeatureType;
import org.apache.causeway.core.metamodel.facets.FacetFactoryAbstract;
import org.apache.causeway.core.metamodel.facets.FacetedMethod;
@@ -36,48 +31,29 @@ import lombok.val;
public class CssClassFacetOnActionFromConfiguredRegexFactory
extends FacetFactoryAbstract {
- private final Map<Pattern, String> cssClassByPattern;
-
@Inject
public CssClassFacetOnActionFromConfiguredRegexFactory(final MetaModelContext mmc) {
super(mmc, FeatureType.ACTIONS_ONLY);
- this.cssClassByPattern = getConfiguration().getApplib().getAnnotation().getActionLayout().getCssClass().getPatternsAsMap();
}
@Override
public void process(final ProcessMethodContext processMethodContext) {
+ if(processMethodContext.isMixinMain()) {
+ return; // don't match regex against 'act' say
+ }
+
final FacetedMethod facetHolder = processMethodContext.getFacetHolder();
if(facetHolder.containsNonFallbackFacet(CssClassFacet.class)) {
return;
}
- val method = processMethodContext.getMethod();
- final String name = method.getName();
-
- addFacetIfPresent(createFromConfiguredRegexIfPossible(name, facetHolder));
- }
-
- // -- cssClassFromPattern
+ // the name which we match the regex against
+ val actionName = processMethodContext.getMethod().getName();
-
- private Optional<CssClassFacet> createFromConfiguredRegexIfPossible(
- final String name,
- final FacetHolder facetHolder) {
- return cssIfAnyFor(name)
- .map(css->new CssClassFacetOnActionFromConfiguredRegex(css, facetHolder));
- }
-
- private Optional<String> cssIfAnyFor(final String name) {
-
- for (Map.Entry<Pattern, String> entry : cssClassByPattern.entrySet()) {
- final Pattern pattern = entry.getKey();
- final String cssClass = entry.getValue();
- if(pattern.matcher(name).matches()) {
- return Optional.ofNullable(cssClass);
- }
- }
- return Optional.empty();
+ addFacetIfPresent(
+ CssClassFacetOnActionFromConfiguredRegex
+ .create(actionName, facetHolder));
}
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/cssclassfa/annotprop/CssClassFaFacetOnMemberFromConfiguredRegex.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/cssclassfa/annotprop/CssClassFaFacetOnMemberFromConfiguredRegex.java
index ddfce2fab9..2ac5b2a75b 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/cssclassfa/annotprop/CssClassFaFacetOnMemberFromConfiguredRegex.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/cssclassfa/annotprop/CssClassFaFacetOnMemberFromConfiguredRegex.java
@@ -41,7 +41,7 @@ import lombok.NonNull;
import lombok.val;
/**
- * Installed by {@link CssClassFaFacetOnMemberPostProcessor},
+ * Installed by {@link CssOnActionFromConfiguredRegexPostProcessor},
* but only if no other fa-icon is declared
* already either via layout XML or {@link ActionLayout} annotation.
* <p>
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/cssclassfa/annotprop/CssClassFaFacetOnMemberPostProcessor.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/all/CssOnActionFromConfiguredRegexPostProcessor.java
similarity index 66%
rename from core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/cssclassfa/annotprop/CssClassFaFacetOnMemberPostProcessor.java
rename to core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/all/CssOnActionFromConfiguredRegexPostProcessor.java
index f1d7492a1c..afb5fde78e 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/cssclassfa/annotprop/CssClassFaFacetOnMemberPostProcessor.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/all/CssOnActionFromConfiguredRegexPostProcessor.java
@@ -16,24 +16,25 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.causeway.core.metamodel.facets.members.cssclassfa.annotprop;
+package org.apache.causeway.core.metamodel.postprocessors.all;
import javax.inject.Inject;
import org.apache.causeway.core.metamodel.context.MetaModelContext;
import org.apache.causeway.core.metamodel.facetapi.FacetUtil;
+import org.apache.causeway.core.metamodel.facets.members.cssclass.CssClassFacet;
+import org.apache.causeway.core.metamodel.facets.members.cssclass.annotprop.CssClassFacetOnActionFromConfiguredRegex;
import org.apache.causeway.core.metamodel.facets.members.cssclassfa.CssClassFaFacet;
+import org.apache.causeway.core.metamodel.facets.members.cssclassfa.annotprop.CssClassFaFacetOnMemberFromConfiguredRegex;
import org.apache.causeway.core.metamodel.postprocessors.ObjectSpecificationPostProcessorAbstract;
import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
-import lombok.val;
-
-public class CssClassFaFacetOnMemberPostProcessor
+public class CssOnActionFromConfiguredRegexPostProcessor
extends ObjectSpecificationPostProcessorAbstract {
@Inject
- public CssClassFaFacetOnMemberPostProcessor(final MetaModelContext mmc) {
+ public CssOnActionFromConfiguredRegexPostProcessor(final MetaModelContext mmc) {
super(mmc);
}
@@ -44,13 +45,17 @@ extends ObjectSpecificationPostProcessorAbstract {
return; // don't process mixin main method, instead process its peer
}
- val hasExplicitFaIcon = objectAction.containsNonFallbackFacet(CssClassFaFacet.class);
-
- if(!hasExplicitFaIcon) {
+ if(!objectAction.containsNonFallbackFacet(CssClassFaFacet.class)) {
FacetUtil.addFacetIfPresent(
- CssClassFaFacetOnMemberFromConfiguredRegex
+ CssClassFaFacetOnMemberFromConfiguredRegex
.create(objectSpecification, objectAction));
}
+
+ if(!objectAction.containsNonFallbackFacet(CssClassFacet.class)) {
+ FacetUtil.addFacetIfPresent(
+ CssClassFacetOnActionFromConfiguredRegex
+ .create(objectAction.getId(), objectAction));
+ }
}
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/progmodels/dflt/ProgrammingModelFacetsJava11.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/progmodels/dflt/ProgrammingModelFacetsJava11.java
index 6f8da5f003..9378064d42 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/progmodels/dflt/ProgrammingModelFacetsJava11.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/progmodels/dflt/ProgrammingModelFacetsJava11.java
@@ -35,7 +35,6 @@ import org.apache.causeway.core.metamodel.facets.collections.sortedby.annotation
import org.apache.causeway.core.metamodel.facets.fallback.FallbackFacetFactory;
import org.apache.causeway.core.metamodel.facets.jaxb.JaxbFacetFactory;
import org.apache.causeway.core.metamodel.facets.members.cssclass.annotprop.CssClassFacetOnActionFromConfiguredRegexFactory;
-import org.apache.causeway.core.metamodel.facets.members.cssclassfa.annotprop.CssClassFaFacetOnMemberPostProcessor;
import org.apache.causeway.core.metamodel.facets.members.described.method.DescribedAsFacetForMemberViaMethodFactory;
import org.apache.causeway.core.metamodel.facets.members.disabled.method.DisableForContextFacetViaMethodFactory;
import org.apache.causeway.core.metamodel.facets.members.hidden.method.HideForContextFacetViaMethodFactory;
@@ -83,6 +82,7 @@ import org.apache.causeway.core.metamodel.facets.properties.validating.dflt.Prop
import org.apache.causeway.core.metamodel.facets.properties.validating.method.PropertyValidateFacetViaMethodFactory;
import org.apache.causeway.core.metamodel.facets.value.semantics.ValueSemanticsAnnotationFacetFactory;
import org.apache.causeway.core.metamodel.methods.DomainIncludeAnnotationEnforcesMetamodelContributionValidator;
+import org.apache.causeway.core.metamodel.postprocessors.all.CssOnActionFromConfiguredRegexPostProcessor;
import org.apache.causeway.core.metamodel.postprocessors.all.DescribedAsFromTypePostProcessor;
import org.apache.causeway.core.metamodel.postprocessors.all.i18n.SynthesizeObjectNamingPostProcessor;
import org.apache.causeway.core.metamodel.postprocessors.all.i18n.TranslationPostProcessor;
@@ -243,7 +243,7 @@ extends ProgrammingModelAbstract {
addPostProcessor(PostProcessingOrder.A1_BUILTIN, new SynthesizeObjectNamingPostProcessor(mmc));
// requires member names to have settled
- addPostProcessor(PostProcessingOrder.A1_BUILTIN, new CssClassFaFacetOnMemberPostProcessor(mmc));
+ addPostProcessor(PostProcessingOrder.A1_BUILTIN, new CssOnActionFromConfiguredRegexPostProcessor(mmc));
addPostProcessor(PostProcessingOrder.A1_BUILTIN, new DescribedAsFromTypePostProcessor(mmc));
addPostProcessor(PostProcessingOrder.A1_BUILTIN, new TypicalLengthFromTypePostProcessor(mmc));