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/07/01 15:20:18 UTC

[isis] branch master updated: ISIS-1720: supposed fix for CssClassFaFacetOnMemberFromConfiguredRegex static naming optimization

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 4777baa  ISIS-1720: supposed fix for CssClassFaFacetOnMemberFromConfiguredRegex static naming optimization
4777baa is described below

commit 4777baa8658f2daa523c472653aa3fd79d1692e9
Author: andi-huber <ah...@apache.org>
AuthorDate: Thu Jul 1 17:20:01 2021 +0200

    ISIS-1720: supposed fix for CssClassFaFacetOnMemberFromConfiguredRegex
    static naming optimization
    
    (removes the invalid class cast)
---
 ...CssClassFaFacetOnMemberFromConfiguredRegex.java | 45 +++++++++++++++-------
 1 file changed, 31 insertions(+), 14 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 6450732..8980c7d 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
@@ -52,6 +52,11 @@ extends CssClassFaImperativeFacetAbstract {
     private final @NonNull Map<Pattern, String> faIconByPattern;
     private final @NonNull MemberNamedFacet memberNamedFacet;
 
+    /**
+     * if the memberNamedFacet provides static names, we can also provide a static CssClassFaFactory
+     */
+    private final @NonNull Optional<CssClassFaFactory> staticCssClassFaFactory;
+
     public static Optional<CssClassFaFacet> create(final ObjectAction objectAction) {
         return objectAction.lookupFacet(MemberNamedFacet.class)
         .map(memberNamedFacet->new CssClassFaFacetOnMemberFromConfiguredRegex(memberNamedFacet, objectAction));
@@ -63,28 +68,32 @@ extends CssClassFaImperativeFacetAbstract {
         super(holder);
         this.faIconByPattern = getConfiguration().getApplib().getAnnotation().getActionLayout().getCssClassFa().getPatterns();
         this.memberNamedFacet = memberNamedFacet;
+
+        // an optimization, not strictly required
+        this.staticCssClassFaFactory = memberNamedFacet
+                .getSpecialization()
+                .left()
+                .map(hasStaticName->hasStaticName.translated())
+                .flatMap(this::cssClassFaFactoryForMemberFriendlyName);
     }
 
     @Override
     public CssClassFaFactory getCssClassFaFactory(final Supplier<ManagedObject> domainObjectProvider) {
 
-        return memberNamedFacet
-        .getSpecialization()
-        .left() // if the memberNamedFacet provides static names, just reuse its specialization as CssClassFaFactory
-        .map(CssClassFaFactory.class::cast)
+        return staticCssClassFaFactory
         .orElseGet(()->new CssClassFaFactory() {
 
             @Override
             public CssClassFaPosition getPosition() {
-                return createFromConfiguredRegexIfPossible(domainObjectProvider)
-                        .map(CssClassFaStaticFacetAbstract::getPosition)
+                return cssClassFaFactoryForConfiguredRegexIfPossible(domainObjectProvider)
+                        .map(CssClassFaFactory::getPosition)
                         .orElse(CssClassFaPosition.LEFT);
             }
 
             @Override
             public Stream<String> streamCssClasses() {
-                return createFromConfiguredRegexIfPossible(domainObjectProvider)
-                        .map(CssClassFaStaticFacetAbstract::streamCssClasses)
+                return cssClassFaFactoryForConfiguredRegexIfPossible(domainObjectProvider)
+                        .map(CssClassFaFactory::streamCssClasses)
                         .orElseGet(Stream::empty);
             }
 
@@ -105,19 +114,26 @@ extends CssClassFaImperativeFacetAbstract {
         return Optional.empty();
     }
 
-    /**
-     * @implNote because {@link CssClassFaStaticFacetAbstract} has all the fa-icon logic,
-     * we simply reuse it here by creating an anonymous instance
-     */
-    private Optional<CssClassFaStaticFacetAbstract> createFromConfiguredRegexIfPossible(
+    private Optional<CssClassFaFactory> cssClassFaFactoryForConfiguredRegexIfPossible(
             final Supplier<ManagedObject> domainObjectProvider) {
 
         final String memberFriendlyName = memberNamedFacet
         .getSpecialization()
         .fold(
-                hasStaticName->hasStaticName.translated(),
+                hasStaticName->hasStaticName.translated(), // unexpected code reach, due to optimization above
                 hasImperativeName->hasImperativeName.textElseNull(domainObjectProvider.get()));
 
+        return cssClassFaFactoryForMemberFriendlyName(memberFriendlyName);
+
+    }
+
+    /**
+     * @implNote because {@link CssClassFaStaticFacetAbstract} has all the fa-icon logic,
+     * we simply reuse it here by creating an anonymous instance
+     */
+    private Optional<CssClassFaFactory> cssClassFaFactoryForMemberFriendlyName(
+            final String memberFriendlyName) {
+
         return _Strings.nonEmpty(memberFriendlyName)
         .flatMap(this::faIconIfAnyFor)
         .map(_faIcon->{
@@ -137,4 +153,5 @@ extends CssClassFaImperativeFacetAbstract {
         });
 
     }
+
 }