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/11/17 19:44:42 UTC

[isis] branch master updated: ISIS-2901: fixes facet CssClassFaFacetOnMemberFromConfiguredRegex

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 f3c7d08  ISIS-2901: fixes facet CssClassFaFacetOnMemberFromConfiguredRegex
f3c7d08 is described below

commit f3c7d0874e1fec2608de4490dd0d31ec5ba62407
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Nov 17 20:44:31 2021 +0100

    ISIS-2901: fixes facet CssClassFaFacetOnMemberFromConfiguredRegex
    
    - in case of an imperatively named mixed-in action we actually do need a
    mixin instance to query the friendly-name
---
 ...CssClassFaFacetOnMemberFromConfiguredRegex.java | 28 +++++++++++++++++++---
 .../CssClassFaFacetOnMemberPostProcessor.java      | 14 +++++------
 2 files changed, 32 insertions(+), 10 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/annotprop/CssClassFaFacetOnMemberFromConfiguredRegex.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/annotprop/CssClassFaFacetOnMemberFromConfiguredRegex.java
index a7f9bc7..4aad7b1 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/annotprop/CssClassFaFacetOnMemberFromConfiguredRegex.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/annotprop/CssClassFaFacetOnMemberFromConfiguredRegex.java
@@ -35,9 +35,12 @@ import org.apache.isis.core.metamodel.facets.members.cssclassfa.CssClassFaFactor
 import org.apache.isis.core.metamodel.facets.members.cssclassfa.CssClassFaImperativeFacetAbstract;
 import org.apache.isis.core.metamodel.facets.members.cssclassfa.CssClassFaStaticFacetAbstract;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
+import org.apache.isis.core.metamodel.spec.ManagedObjects;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 
 import lombok.NonNull;
+import lombok.val;
 
 /**
  * Installed by {@link CssClassFaFacetOnMemberPostProcessor},
@@ -56,16 +59,21 @@ extends CssClassFaImperativeFacetAbstract {
      * if the memberNamedFacet provides static names, we can also provide a static CssClassFaFactory
      */
     private final @NonNull Optional<CssClassFaFactory> staticCssClassFaFactory;
+    private ObjectSpecification objectSpecification;
 
-    public static Optional<CssClassFaFacet> create(final ObjectAction objectAction) {
+    public static Optional<CssClassFaFacet> create(
+            final ObjectSpecification objectSpecification,
+            final ObjectAction objectAction) {
         return objectAction.lookupFacet(MemberNamedFacet.class)
-        .map(memberNamedFacet->new CssClassFaFacetOnMemberFromConfiguredRegex(memberNamedFacet, objectAction));
+        .map(memberNamedFacet->new CssClassFaFacetOnMemberFromConfiguredRegex(objectSpecification, memberNamedFacet, objectAction));
     }
 
     private CssClassFaFacetOnMemberFromConfiguredRegex(
+            final ObjectSpecification objectSpecification,
             final MemberNamedFacet memberNamedFacet,
             final FacetHolder holder) {
         super(holder);
+        this.objectSpecification = objectSpecification;
         this.faIconByPattern = getConfiguration().getApplib().getAnnotation().getActionLayout().getCssClassFa().getPatternsAsMap();
         this.memberNamedFacet = memberNamedFacet;
 
@@ -121,12 +129,26 @@ extends CssClassFaImperativeFacetAbstract {
         .getSpecialization()
         .fold(
                 hasStaticName->hasStaticName.translated(), // unexpected code reach, due to optimization above
-                hasImperativeName->hasImperativeName.textElseNull(domainObjectProvider.get()));
+                hasImperativeName->hasImperativeName.textElseNull(targetFor(domainObjectProvider)));
 
         return cssClassFaFactoryForMemberFriendlyName(memberFriendlyName);
 
     }
 
+    private ManagedObject targetFor(final Supplier<ManagedObject> domainObjectProvider) {
+        val ownerAdapter = domainObjectProvider.get();
+        if(ManagedObjects.isNullOrUnspecifiedOrEmpty(ownerAdapter)) {
+            return ManagedObject.empty(objectSpecification);
+        }
+        return objectSpecification.isMixin()
+                ? ManagedObject.of(
+                        objectSpecification,
+                        objectSpecification
+                            .getFactoryService()
+                            .mixin(objectSpecification.getCorrespondingClass(), ownerAdapter.getPojo()))
+                : ownerAdapter;
+    }
+
     /**
      * @implNote because {@link CssClassFaStaticFacetAbstract} has all the fa-icon logic,
      * we simply reuse it here by creating an anonymous instance
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/annotprop/CssClassFaFacetOnMemberPostProcessor.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/annotprop/CssClassFaFacetOnMemberPostProcessor.java
index 13b784f..35fc786 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/annotprop/CssClassFaFacetOnMemberPostProcessor.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/annotprop/CssClassFaFacetOnMemberPostProcessor.java
@@ -41,11 +41,11 @@ extends ObjectSpecificationPostProcessorAbstract {
     }
 
     @Override
-    protected void doPostProcess(ObjectSpecification objectSpecification) {
+    protected void doPostProcess(final ObjectSpecification objectSpecification) {
     }
 
     @Override
-    protected void doPostProcess(ObjectSpecification objectSpecification, ObjectAction objectAction) {
+    protected void doPostProcess(final ObjectSpecification objectSpecification, final ObjectAction objectAction) {
 
         val hasExplicitFaIcon = objectAction
                 .lookupNonFallbackFacet(CssClassFaFacet.class)
@@ -54,21 +54,21 @@ extends ObjectSpecificationPostProcessorAbstract {
         if(!hasExplicitFaIcon) {
             FacetUtil.addFacetIfPresent(
                     CssClassFaFacetOnMemberFromConfiguredRegex
-                    .create(objectAction));
+                    .create(objectSpecification, objectAction));
         }
     }
 
     @Override
-    protected void doPostProcess(ObjectSpecification objectSpecification, ObjectAction objectAction,
-            ObjectActionParameter param) {
+    protected void doPostProcess(final ObjectSpecification objectSpecification, final ObjectAction objectAction,
+            final ObjectActionParameter param) {
     }
 
     @Override
-    protected void doPostProcess(ObjectSpecification objectSpecification, OneToOneAssociation prop) {
+    protected void doPostProcess(final ObjectSpecification objectSpecification, final OneToOneAssociation prop) {
     }
 
     @Override
-    protected void doPostProcess(ObjectSpecification objectSpecification, OneToManyAssociation coll) {
+    protected void doPostProcess(final ObjectSpecification objectSpecification, final OneToManyAssociation coll) {
     }
 
 }