Repository: isis
Updated Branches:
  refs/heads/master 2f24674c4 -> 07b423587


ISIS-956: updates to CssClassFaFacetOnMemberFactory and to example apps (plus 
other minor tidy up in ServicesInstallerFromConfiguration which was used as 
basis/reference of implementation of parsing strings from config file.)


Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/4bd90975
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/4bd90975
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/4bd90975

Branch: refs/heads/master
Commit: 4bd90975ffa9286a8af879cb213f1157c65d591a
Parents: 2f24674
Author: Dan Haywood <[email protected]>
Authored: Thu Nov 20 12:13:06 2014 +0100
Committer: Dan Haywood <[email protected]>
Committed: Thu Nov 20 12:13:06 2014 +0100

----------------------------------------------------------------------
 .../CssClassFaFacetOnMemberFactory.java         | 94 +++++++++++++++++++-
 ...ClassFaFacetOnMemberFromConfiguredRegex.java | 30 +++++++
 .../ServicesInstallerFromConfiguration.java     | 38 +++++---
 .../services/ServicesInstallerUtils.java        | 22 ++---
 .../src/main/webapp/WEB-INF/isis.properties     | 16 ++++
 .../src/main/webapp/WEB-INF/isis.properties     | 16 ++++
 6 files changed, 185 insertions(+), 31 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/4bd90975/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/annotprop/CssClassFaFacetOnMemberFactory.java
----------------------------------------------------------------------
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/annotprop/CssClassFaFacetOnMemberFactory.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/annotprop/CssClassFaFacetOnMemberFactory.java
index 5a835a7..6e8dd1d 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/annotprop/CssClassFaFacetOnMemberFactory.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/annotprop/CssClassFaFacetOnMemberFactory.java
@@ -19,8 +19,18 @@
 
 package org.apache.isis.core.metamodel.facets.members.cssclassfa.annotprop;
 
+import java.lang.reflect.Method;
+import java.util.Map;
 import java.util.Properties;
+import java.util.StringTokenizer;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import com.google.common.base.Strings;
+import com.google.common.collect.Maps;
 import org.apache.isis.applib.annotation.CssClassFa;
+import org.apache.isis.core.commons.config.ConfigurationConstants;
+import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.core.commons.config.IsisConfigurationAware;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.FacetUtil;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
@@ -29,7 +39,9 @@ import 
org.apache.isis.core.metamodel.facets.ContributeeMemberFacetFactory;
 import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
 import 
org.apache.isis.core.metamodel.facets.members.cssclassfa.CssClassFaFacet;
 
-public class CssClassFaFacetOnMemberFactory extends FacetFactoryAbstract 
implements ContributeeMemberFacetFactory {
+public class CssClassFaFacetOnMemberFactory extends FacetFactoryAbstract 
implements ContributeeMemberFacetFactory, IsisConfigurationAware{
+
+    private IsisConfiguration configuration;
 
     public CssClassFaFacetOnMemberFactory() {
         super(FeatureType.ACTIONS_ONLY);
@@ -41,7 +53,10 @@ public class CssClassFaFacetOnMemberFactory extends 
FacetFactoryAbstract impleme
         if(cssClassFaFacet == null) {
             cssClassFaFacet = 
createFromAnnotationIfPossible(processMethodContext);
         }
-        
+        if(cssClassFaFacet == null) {
+            cssClassFaFacet = 
createFromConfiguredRegexIfPossible(processMethodContext);
+        }
+
         // no-op if null
         FacetUtil.addFacet(cssClassFaFacet);
     }
@@ -68,5 +83,80 @@ public class CssClassFaFacetOnMemberFactory extends 
FacetFactoryAbstract impleme
         return annotation != null ? new 
CssClassFaFacetOnMemberAnnotation(annotation.value(), 
processMethodContext.getFacetHolder()) : null;
     }
 
+    //region > faIconFromPattern
+
+
+    private final static Pattern FA_ICON_REGEX_PATTERN = 
Pattern.compile("([^:]+):(.+)");
+
+    private CssClassFaFacet createFromConfiguredRegexIfPossible(final 
ProcessMethodContext processMethodContext) {
+        final Method method = processMethodContext.getMethod();
+
+        String value = faIconIfAnyFor(method);
+
+        return value != null
+                ? new CssClassFaFacetOnMemberFromConfiguredRegex(value, 
processMethodContext.getFacetHolder())
+                : null;
+    }
+
+    private String faIconIfAnyFor(Method method) {
+        final String name = method.getName();
+        return faIconIfAnyFor(name);
+    }
+
+    private String faIconIfAnyFor(String name) {
+        final Map<Pattern, String> faIconByPattern = getFaIconByPattern();
+
+        for (Map.Entry<Pattern, String> entry : faIconByPattern.entrySet()) {
+            final Pattern pattern = entry.getKey();
+            final String faIcon = entry.getValue();
+            if(pattern.matcher(name).matches()) {
+                return faIcon;
+            }
+        }
+        return null;
+    }
+
+    private Map<Pattern,String> faIconByPattern;
+
+    private Map<Pattern, String> getFaIconByPattern() {
+        if (faIconByPattern == null) {
+            // build lazily
+            final String cssClassFaPatterns = 
configuration.getString("isis.reflector.facet.cssClassFa.patterns");
+            this.faIconByPattern = buildFaIconByPattern(cssClassFaPatterns);
+        }
+        return faIconByPattern;
+    }
+
+    private static Map<Pattern, String> buildFaIconByPattern(String 
cssClassFaPatterns) {
+        final Map<Pattern,String> faIconByPattern = Maps.newLinkedHashMap();
+        if(cssClassFaPatterns != null) {
+            final StringTokenizer regexToFaIcons = new 
StringTokenizer(cssClassFaPatterns, ConfigurationConstants.LIST_SEPARATOR);
+            final Map<String,String> faIconByRegex = Maps.newLinkedHashMap();
+            while (regexToFaIcons.hasMoreTokens()) {
+                String regexToFaIcon = regexToFaIcons.nextToken().trim();
+                if (Strings.isNullOrEmpty(regexToFaIcon)) {
+                    continue;
+                }
+                final Matcher matcher = 
FA_ICON_REGEX_PATTERN.matcher(regexToFaIcon);
+                if(matcher.matches()) {
+                    faIconByRegex.put(matcher.group(1), matcher.group(2));
+                }
+            }
+            for (Map.Entry<String, String> entry : faIconByRegex.entrySet()) {
+                final String regex = entry.getKey();
+                final String faIcon = entry.getValue();
+                faIconByPattern.put(Pattern.compile(regex), faIcon);
+            }
+        }
+        return faIconByPattern;
+    }
+    //endregion
+
+    //region > injected
+    @Override
+    public void setConfiguration(final IsisConfiguration configuration) {
+        this.configuration = configuration;
+    }
+    //endregion
 }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/4bd90975/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/annotprop/CssClassFaFacetOnMemberFromConfiguredRegex.java
----------------------------------------------------------------------
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
new file mode 100644
index 0000000..9be8ed8
--- /dev/null
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/annotprop/CssClassFaFacetOnMemberFromConfiguredRegex.java
@@ -0,0 +1,30 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.core.metamodel.facets.members.cssclassfa.annotprop;
+
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import 
org.apache.isis.core.metamodel.facets.members.cssclassfa.CssClassFaFacetAbstract;
+
+public class CssClassFaFacetOnMemberFromConfiguredRegex extends 
CssClassFaFacetAbstract {
+
+    public CssClassFaFacetOnMemberFromConfiguredRegex(final String value, 
final FacetHolder holder) {
+        super(value, holder);
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/4bd90975/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServicesInstallerFromConfiguration.java
----------------------------------------------------------------------
diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServicesInstallerFromConfiguration.java
 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServicesInstallerFromConfiguration.java
index a5189b3..8d3b602 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServicesInstallerFromConfiguration.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServicesInstallerFromConfiguration.java
@@ -19,9 +19,14 @@
 
 package org.apache.isis.core.runtime.services;
 
-import java.util.*;
+import java.util.List;
+import java.util.Map;
+import java.util.SortedMap;
+import java.util.SortedSet;
+import java.util.StringTokenizer;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+import com.google.common.base.Strings;
 import com.google.common.collect.Maps;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -44,7 +49,7 @@ public class ServicesInstallerFromConfiguration extends 
InstallerAbstract implem
     @Deprecated
     private static final String SERVICES_PREFIX = "services.prefix";
 
-    private final static Pattern regex = Pattern.compile("((\\d+):)(.*)");
+    private final static Pattern POSITIONED_SERVICE_REGEX = 
Pattern.compile("((\\d+):)(.*)");
 
     private final ServiceInstantiator serviceInstantiator;
 
@@ -61,6 +66,7 @@ public class ServicesInstallerFromConfiguration extends 
InstallerAbstract implem
 
     private Map<DeploymentType, List<Object>> servicesByDeploymentType = 
Maps.newHashMap();
 
+
     public void init() {
         initIfRequired();
     }
@@ -137,18 +143,33 @@ public class ServicesInstallerFromConfiguration extends 
InstallerAbstract implem
             if (serviceName.equals("")) {
                 continue;
             }
-            final Matcher matcher = regex.matcher(serviceName);
+            final Matcher matcher = 
POSITIONED_SERVICE_REGEX.matcher(serviceName);
             Integer order = Integer.MAX_VALUE;
             if(matcher.matches()) {
                 order = Integer.parseInt(matcher.group(2));
                 serviceName = matcher.group(3);
             }
 
-            final String service = 
ServicesInstallerUtils.fullyQualifiedServiceName(servicePrefix, serviceName);
+            final String service = fullyQualifiedServiceName(servicePrefix, 
serviceName);
             ServicesInstallerUtils.appendInPosition(positionedServices, "" + 
order, service);
         }
     }
 
+    static String fullyQualifiedServiceName(String servicePrefix, String 
serviceName) {
+        final StringBuilder buf = new StringBuilder();
+
+        if(!Strings.isNullOrEmpty(servicePrefix)) {
+            buf.append(servicePrefix);
+            if(!servicePrefix.endsWith(".")) {
+                buf.append(".");
+            }
+        }
+
+        buf.append(serviceName);
+        return buf.toString();
+    }
+
+
     private void appendObjectFixtureService(DeploymentType deploymentType, 
final SortedMap<String, SortedSet<String>> positionedServices) {
 
         final String group = deploymentType != null? deploymentType.name(): 
null;
@@ -162,15 +183,6 @@ public class ServicesInstallerFromConfiguration extends 
InstallerAbstract implem
         }
     }
 
-    // unused, I think....?
-    private static String servicePrefix(final String servicePrefix) {
-        String prefix = servicePrefix == null ? "" : servicePrefix.trim();
-        if (prefix.length() > 0 && 
!prefix.endsWith(ConfigurationConstants.DELIMITER)) {
-            prefix = prefix + ConfigurationConstants.DELIMITER;
-        }
-        return prefix;
-    }
-
     @Override
     public List<Class<?>> getTypes() {
         return listOf(List.class); // ie List<Object.class>, of services

http://git-wip-us.apache.org/repos/asf/isis/blob/4bd90975/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServicesInstallerUtils.java
----------------------------------------------------------------------
diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServicesInstallerUtils.java
 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServicesInstallerUtils.java
index 88d4919..34f72c0 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServicesInstallerUtils.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServicesInstallerUtils.java
@@ -19,10 +19,14 @@
 
 package org.apache.isis.core.runtime.services;
 
-import java.util.*;
+import java.util.Collection;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.SortedMap;
+import java.util.SortedSet;
 import com.google.common.base.Function;
 import com.google.common.base.Predicates;
-import com.google.common.base.Strings;
 import com.google.common.collect.Collections2;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Sets;
@@ -103,18 +107,4 @@ final class ServicesInstallerUtils  {
         };
     }
 
-    static String fullyQualifiedServiceName(String servicePrefix, String 
serviceName) {
-        final StringBuilder buf = new StringBuilder();
-
-        if(!Strings.isNullOrEmpty(servicePrefix)) {
-            buf.append(servicePrefix);
-            if(!servicePrefix.endsWith(".")) {
-                buf.append(".");
-            }
-        }
-
-        buf.append(serviceName);
-
-        return buf.toString();
-    }
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/4bd90975/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/isis.properties
----------------------------------------------------------------------
diff --git 
a/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/isis.properties 
b/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/isis.properties
index 54bf51c..339bae3 100644
--- 
a/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/isis.properties
+++ 
b/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/isis.properties
@@ -95,6 +95,22 @@ isis.authorization=shiro
 
 
 
+#
+# patterns for applying CssClassFa facet (font-awesome icons) to member names
+#
+isis.reflector.facet.cssClassFa.patterns=\
+                        create.*:fa-plus,\
+                        update.*:fa-edit,\
+                        add.*:fa-plus-square,\
+                        remove.*:fa-minus-square,\
+                        move.*:fa-exchange,\
+                        first.*:fa-star,\
+                        find.*:fa-search,\
+                        clear.*:fa-remove,\
+                        previous.*:fa-step-backward,\
+                        next.*:fa-step-forward,\
+                        list.*:fa-list
+
 
#################################################################################
 #
 # Value facet defaults

http://git-wip-us.apache.org/repos/asf/isis/blob/4bd90975/example/application/todoapp/webapp/src/main/webapp/WEB-INF/isis.properties
----------------------------------------------------------------------
diff --git 
a/example/application/todoapp/webapp/src/main/webapp/WEB-INF/isis.properties 
b/example/application/todoapp/webapp/src/main/webapp/WEB-INF/isis.properties
index 66fbabd..494a818 100644
--- a/example/application/todoapp/webapp/src/main/webapp/WEB-INF/isis.properties
+++ b/example/application/todoapp/webapp/src/main/webapp/WEB-INF/isis.properties
@@ -95,6 +95,22 @@ isis.authorization=shiro
 
 
 
+#
+# patterns for applying CssClassFa facet (font-awesome icons) to member names
+#
+isis.reflector.facet.cssClassFa.patterns=\
+                        create.*:fa-plus,\
+                        update.*:fa-edit,\
+                        add.*:fa-plus-square,\
+                        remove.*:fa-minus-square,\
+                        move.*:fa-exchange,\
+                        first.*:fa-star,\
+                        find.*:fa-search,\
+                        clear.*:fa-remove,\
+                        previous.*:fa-step-backward,\
+                        next.*:fa-step-forward,\
+                        list.*:fa-list
+
 
#################################################################################
 #
 # Value facet defaults

Reply via email to