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/11/20 07:16:58 UTC

(causeway) branch 3646-fa.layers updated: CAUSEWAY-3646: model the fa position into FontAwesomeLayers

This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch 3646-fa.layers
in repository https://gitbox.apache.org/repos/asf/causeway.git


The following commit(s) were added to refs/heads/3646-fa.layers by this push:
     new 6d79eb15e9 CAUSEWAY-3646: model the fa position into FontAwesomeLayers
6d79eb15e9 is described below

commit 6d79eb15e9001459530580a72510546712590da9
Author: Andi Huber <ah...@apache.org>
AuthorDate: Mon Nov 20 08:16:54 2023 +0100

    CAUSEWAY-3646: model the fa position into FontAwesomeLayers
---
 .../apache/causeway/applib/fa/FontAwesomeLayers.java |  7 +++++++
 .../facets/members/cssclassfa/CssClassFaFactory.java |  5 -----
 .../members/cssclassfa/CssClassFaStaticFacet.java    |  6 ++++++
 .../CssClassFaFacetOnMemberFromConfiguredRegex.java  | 20 +++-----------------
 .../FontAwesomeLayersFacetViaIconFaLayersMethod.java |  2 +-
 .../commons/model/decorators/IconDecorator.java      | 19 +++----------------
 .../ui/components/actionmenu/CssClassFaBehavior.java |  9 ++++-----
 7 files changed, 24 insertions(+), 44 deletions(-)

diff --git a/api/applib/src/main/java/org/apache/causeway/applib/fa/FontAwesomeLayers.java b/api/applib/src/main/java/org/apache/causeway/applib/fa/FontAwesomeLayers.java
index 8c3361df77..c0ca7a7b82 100644
--- a/api/applib/src/main/java/org/apache/causeway/applib/fa/FontAwesomeLayers.java
+++ b/api/applib/src/main/java/org/apache/causeway/applib/fa/FontAwesomeLayers.java
@@ -23,6 +23,7 @@ import java.util.List;
 
 import org.springframework.lang.Nullable;
 
+import org.apache.causeway.applib.layout.component.CssClassFaPosition;
 import org.apache.causeway.commons.collections.Can;
 import org.apache.causeway.commons.internal.base._NullSafe;
 import org.apache.causeway.commons.io.JsonUtils;
@@ -79,6 +80,11 @@ public class FontAwesomeLayers implements Serializable {
     @Nullable List<IconEntry> iconEntries;
     @Nullable List<SpanEntry> spanEntries;
 
+    /**
+     * Position of <i>Font Awesome</i> icon, relative to its accompanied title.
+     */
+    @Nullable CssClassFaPosition postition = CssClassFaPosition.LEFT;
+
     //TODO[CAUSEWAY-3646] toJson will not work with records?
     public String toJson() {
         return JsonUtils.toStringUtf8(this);
@@ -103,6 +109,7 @@ public class FontAwesomeLayers implements Serializable {
 
     // -- UTILITY
 
+    //TODO[CAUSEWAY-3646] how to determine position when empty
     public FontAwesomeLayers emptyToBlank() {
         return _NullSafe.size(this.iconEntries())>0
                 ? this
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/cssclassfa/CssClassFaFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/cssclassfa/CssClassFaFactory.java
index d859a8dfeb..cc649c0789 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/cssclassfa/CssClassFaFactory.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/cssclassfa/CssClassFaFactory.java
@@ -26,11 +26,6 @@ import org.apache.causeway.applib.layout.component.CssClassFaPosition;
  */
 public interface CssClassFaFactory {
 
-    /**
-     * Position of <i>Font Awesome</i> icon.
-     */
-    CssClassFaPosition getPosition();
-
     /**
      * Creates the model object that is used for FA icon rendering.
      */
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/cssclassfa/CssClassFaStaticFacet.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/cssclassfa/CssClassFaStaticFacet.java
index 4ee4645b9d..f8e03a4966 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/cssclassfa/CssClassFaStaticFacet.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/cssclassfa/CssClassFaStaticFacet.java
@@ -21,12 +21,18 @@ package org.apache.causeway.core.metamodel.facets.members.cssclassfa;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
+import org.apache.causeway.applib.layout.component.CssClassFaPosition;
 import org.apache.causeway.commons.internal.base._NullSafe;
 import org.apache.causeway.commons.internal.base._Strings;
 
 public interface CssClassFaStaticFacet
 extends CssClassFaFacet, CssClassFaFactory {
 
+    /**
+     * Position of <i>Font Awesome</i> icon, relative to its accompanied title.
+     */
+    CssClassFaPosition getPosition();
+
     Stream<String> streamCssClasses();
 
     /**
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 ceb688cb53..16a3e2c091 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
@@ -92,23 +92,9 @@ extends CssClassFaImperativeFacetAbstract {
     public CssClassFaFactory getCssClassFaFactory(final Supplier<ManagedObject> domainObjectProvider) {
 
         return staticCssClassFaFactory
-        .orElseGet(()->new CssClassFaFactory() {
-
-            @Override
-            public CssClassFaPosition getPosition() {
-                return cssClassFaFactoryForConfiguredRegexIfPossible(domainObjectProvider)
-                        .map(CssClassFaFactory::getPosition)
-                        .orElse(CssClassFaPosition.LEFT);
-            }
-
-            @Override
-            public FontAwesomeLayers getLayers() {
-                return cssClassFaFactoryForConfiguredRegexIfPossible(domainObjectProvider)
-                        .map(CssClassFaFactory::getLayers)
-                        .orElseGet(FontAwesomeLayers::empty);
-            }
-
-        });
+        .orElseGet(()->() -> cssClassFaFactoryForConfiguredRegexIfPossible(domainObjectProvider)
+                .map(CssClassFaFactory::getLayers)
+                .orElseGet(FontAwesomeLayers::empty));
     }
 
     // -- HELPER
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/iconfa/method/FontAwesomeLayersFacetViaIconFaLayersMethod.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/iconfa/method/FontAwesomeLayersFacetViaIconFaLayersMethod.java
index 9fdd899349..dcfc3ae353 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/iconfa/method/FontAwesomeLayersFacetViaIconFaLayersMethod.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/iconfa/method/FontAwesomeLayersFacetViaIconFaLayersMethod.java
@@ -69,7 +69,7 @@ implements HasImperativeAspect {
     @Override
     public CssClassFaFactory getCssClassFaFactory(final Supplier<ManagedObject> domainObjectProvider) {
         //TODO[CAUSEWAY-3646] implement
-        return null;
+        return () -> layers(domainObjectProvider.get());
     }
 
     @Override
diff --git a/viewers/commons/model/src/main/java/org/apache/causeway/viewer/commons/model/decorators/IconDecorator.java b/viewers/commons/model/src/main/java/org/apache/causeway/viewer/commons/model/decorators/IconDecorator.java
index b60d8650c7..19b787f016 100644
--- a/viewers/commons/model/src/main/java/org/apache/causeway/viewer/commons/model/decorators/IconDecorator.java
+++ b/viewers/commons/model/src/main/java/org/apache/causeway/viewer/commons/model/decorators/IconDecorator.java
@@ -24,8 +24,6 @@ import java.util.Optional;
 import org.springframework.lang.Nullable;
 
 import org.apache.causeway.applib.fa.FontAwesomeLayers;
-import org.apache.causeway.applib.layout.component.CssClassFaPosition;
-import org.apache.causeway.commons.internal.base._NullSafe;
 import org.apache.causeway.core.metamodel.facets.members.cssclassfa.CssClassFaFactory;
 
 import lombok.AccessLevel;
@@ -58,9 +56,6 @@ public interface IconDecorator<T, R> {
         @Getter
         private final @NonNull FontAwesomeLayers fontAwesomeLayers;
 
-        @Getter
-        private final @NonNull CssClassFaPosition position;
-
         /**
          * @param forceAlignmentOnIconAbsence enforced in drop-dows,
          *      but not in horizontal action panels,
@@ -73,17 +68,9 @@ public interface IconDecorator<T, R> {
             return Optional.ofNullable(cssClassFaFactoryIfAny)
                 .map(cssClassFaFactory->new FontAwesomeDecorationModel(
                         forceAlignmentOnIconAbsence
-                            ? emptyToBlank(cssClassFaFactory.getLayers())
-                            : cssClassFaFactory.getLayers(),
-                        Optional.ofNullable(cssClassFaFactory.getPosition())
-                            .orElse(CssClassFaPosition.LEFT)));
-
-        }
-
-        private static FontAwesomeLayers emptyToBlank(final FontAwesomeLayers faLayers) {
-            return _NullSafe.size(faLayers.iconEntries())>0
-                    ? faLayers
-                    : FontAwesomeLayers.blank();
+                            ? cssClassFaFactory.getLayers().emptyToBlank()
+                            : cssClassFaFactory.getLayers()
+                        ));
         }
 
     }
diff --git a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/actionmenu/CssClassFaBehavior.java b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/actionmenu/CssClassFaBehavior.java
index cc8e15c17c..43973096a1 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/actionmenu/CssClassFaBehavior.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/actionmenu/CssClassFaBehavior.java
@@ -26,7 +26,6 @@ import org.apache.causeway.viewer.commons.model.decorators.IconDecorator.FontAwe
 
 import lombok.NonNull;
 import lombok.RequiredArgsConstructor;
-import lombok.val;
 
 /**
  * A behavior that prepends or appends the markup needed to show a Font Awesome icon
@@ -42,16 +41,16 @@ public class CssClassFaBehavior extends Behavior {
     @Override
     public void beforeRender(final Component component) {
         super.beforeRender(component);
-        val position = fontAwesomeDecorationModel.getPosition();
-        if (position == null || CssClassFaPosition.LEFT == position) {
+        var faLayers = fontAwesomeDecorationModel.getFontAwesomeLayers();
+        if(CssClassFaPosition.isLeftOrUnspecified(faLayers.postition())) {
             component.getResponse().write(fontAwesomeDecorationModel.getFontAwesomeLayers().toHtml());
         }
     }
 
     @Override
     public void afterRender(final Component component) {
-        val position = fontAwesomeDecorationModel.getPosition();
-        if (CssClassFaPosition.RIGHT == position) {
+        var faLayers = fontAwesomeDecorationModel.getFontAwesomeLayers();
+        if(!CssClassFaPosition.isLeftOrUnspecified(faLayers.postition())) {
             component.getResponse().write(fontAwesomeDecorationModel.getFontAwesomeLayers().toHtml());
         }
         super.afterRender(component);