You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2014/11/28 18:44:56 UTC

[1/5] isis git commit: ISIS-537: pattern matching of CSS classes based on action name (similar to FA icons)

Repository: isis
Updated Branches:
  refs/heads/master 2aa0df30a -> 0a447948a


ISIS-537: pattern matching of CSS classes based on action name (similar to FA icons)

Also: required to inject ServicesInjector into facet factory to query whether a method was from a service or not.  To support this, refactored so that ServicesInjectorDefault is basically has global scope as opposed to session/request scope.  Implementation adapted from that already used for SpecificationLoader (aka the ObjectReflector).  A bit hacky, but a move in the right general direction.


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

Branch: refs/heads/master
Commit: 3d836959677bacba1db426e0cf5192c576608f3d
Parents: 2aa0df3
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Fri Nov 28 00:20:14 2014 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Fri Nov 28 16:10:53 2014 +0000

----------------------------------------------------------------------
 .../isis/core/metamodel/app/IsisMetaModel.java  |   2 +-
 ...ssClassFacetOnActionFromConfiguredRegex.java |  30 ++++
 ...FacetOnActionFromConfiguredRegexFactory.java | 174 +++++++++++++++++++
 .../annotprop/CssClassFacetOnMemberFactory.java |  21 ++-
 .../CssClassFaFacetOnMemberFactory.java         |   6 +-
 .../runtimecontext/RuntimeContext.java          |   2 +-
 .../runtimecontext/RuntimeContextAbstract.java  |  24 ++-
 .../noruntime/RuntimeContextNoRuntime.java      |   3 +-
 .../services/ServicesInjectorDelegator.java     |  67 +++++++
 .../specloader/ObjectReflectorDefault.java      |  11 +-
 .../dflt/ProgrammingModelFacetsJava5.java       |   3 +
 .../metamodel/app/IsisMetaModelTest_init.java   |   2 +-
 .../internal/RuntimeContextFromSession.java     |  57 ++----
 .../IsisSystemAbstract.java                     |   2 +-
 .../src/main/webapp/WEB-INF/isis.properties     |  24 ++-
 .../src/main/webapp/WEB-INF/isis.properties     |  22 ++-
 16 files changed, 386 insertions(+), 64 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/3d836959/core/metamodel/src/main/java/org/apache/isis/core/metamodel/app/IsisMetaModel.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/app/IsisMetaModel.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/app/IsisMetaModel.java
index f0cd890..ad8a6a1 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/app/IsisMetaModel.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/app/IsisMetaModel.java
@@ -181,7 +181,7 @@ public class IsisMetaModel implements ApplicationScopedComponent {
      */
     public ServicesInjector getDependencyInjector() {
         ensureInitialized();
-        return runtimeContext.getDependencyInjector();
+        return runtimeContext.getServicesInjector();
     }
 
     // ///////////////////////////////////////////////////////

http://git-wip-us.apache.org/repos/asf/isis/blob/3d836959/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclass/annotprop/CssClassFacetOnActionFromConfiguredRegex.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclass/annotprop/CssClassFacetOnActionFromConfiguredRegex.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclass/annotprop/CssClassFacetOnActionFromConfiguredRegex.java
new file mode 100644
index 0000000..32c1c93
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclass/annotprop/CssClassFacetOnActionFromConfiguredRegex.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.cssclass.annotprop;
+
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacetAbstract;
+
+public class CssClassFacetOnActionFromConfiguredRegex extends CssClassFacetAbstract {
+
+    public CssClassFacetOnActionFromConfiguredRegex(final String value, final FacetHolder holder) {
+        super(value, holder);
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/3d836959/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclass/annotprop/CssClassFacetOnActionFromConfiguredRegexFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclass/annotprop/CssClassFacetOnActionFromConfiguredRegexFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclass/annotprop/CssClassFacetOnActionFromConfiguredRegexFactory.java
new file mode 100644
index 0000000..b6b19ba
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclass/annotprop/CssClassFacetOnActionFromConfiguredRegexFactory.java
@@ -0,0 +1,174 @@
+/*
+ *  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.cssclass.annotprop;
+
+import java.lang.reflect.Method;
+import java.util.Map;
+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.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;
+import org.apache.isis.core.metamodel.facets.ContributeeMemberFacetFactory;
+import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
+import org.apache.isis.core.metamodel.facets.FacetedMethod;
+import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacet;
+import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
+import org.apache.isis.core.metamodel.runtimecontext.ServicesInjectorAware;
+import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
+import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
+
+public class CssClassFacetOnActionFromConfiguredRegexFactory extends FacetFactoryAbstract implements ContributeeMemberFacetFactory, IsisConfigurationAware, ServicesInjectorAware {
+
+    public CssClassFacetOnActionFromConfiguredRegexFactory() {
+        super(FeatureType.ACTIONS_ONLY);
+    }
+
+    @Override
+    public void process(final ProcessMethodContext processMethodContext) {
+
+        final FacetedMethod facetHolder = processMethodContext.getFacetHolder();
+        if(facetHolder.containsDoOpFacet(CssClassFacet.class)) {
+            return;
+        }
+
+        final Method method = processMethodContext.getMethod();
+        final String name = method.getName();
+
+        // bit of a bodge... we want to ignore any service actions; any contributed actions will be picked up below
+        // in process(final ProcessContributeeMemberContext processMemberContext)
+        //
+        // if we don't do this, then any contributed properties or collections end up picking up the CssClass; almost
+        // certainly not what is expected/required.
+        final Class<?> owningType = facetHolder.getOwningType();
+        final Object service = servicesInjector.lookupService(owningType);
+        if(service != null) {
+            return;
+        }
+        CssClassFacet cssClassFacet = createFromConfiguredRegexIfPossible(name, facetHolder);
+
+        // no-op if null
+        FacetUtil.addFacet(cssClassFacet);
+    }
+
+    
+    @Override
+    public void process(final ProcessContributeeMemberContext processMemberContext) {
+
+        final ObjectMember objectMember = processMemberContext.getFacetHolder();
+        if(!(objectMember instanceof ObjectAction)) {
+            return;
+        }
+        if(objectMember.containsDoOpFacet(CssClassFacet.class)) {
+            return;
+        }
+
+        final String id = objectMember.getId();
+        CssClassFacet cssClassFacet = createFromConfiguredRegexIfPossible(id, objectMember);
+
+        // no-op if null
+        FacetUtil.addFacet(cssClassFacet);
+    }
+
+    //region > cssClassFromPattern
+
+    private final static Pattern CSS_CLASS_REGEX_PATTERN = Pattern.compile("([^:]+):(.+)");
+
+    private CssClassFacet createFromConfiguredRegexIfPossible(String name, FacetHolder facetHolder) {
+        String value = cssIfAnyFor(name);
+        return value != null
+                ? new CssClassFacetOnActionFromConfiguredRegex(value, facetHolder)
+                : null;
+    }
+
+    private String cssIfAnyFor(String name) {
+        final Map<Pattern, String> cssClassByPattern = getCssClassByPattern();
+
+        for (Map.Entry<Pattern, String> entry : cssClassByPattern.entrySet()) {
+            final Pattern pattern = entry.getKey();
+            final String cssClass = entry.getValue();
+            if(pattern.matcher(name).matches()) {
+                return cssClass;
+            }
+        }
+        return null;
+    }
+
+    private Map<Pattern,String> cssClassByPattern;
+
+    private Map<Pattern, String> getCssClassByPattern() {
+        if (cssClassByPattern == null) {
+            // build lazily
+            final String cssClassPatterns = configuration.getString("isis.reflector.facet.cssClass.patterns");
+            this.cssClassByPattern = buildCssClassByPattern(cssClassPatterns);
+        }
+        return cssClassByPattern;
+    }
+
+    private static Map<Pattern, String> buildCssClassByPattern(String cssClassPatterns) {
+        final Map<Pattern,String> cssClassByPattern = Maps.newLinkedHashMap();
+        if(cssClassPatterns != null) {
+            final StringTokenizer regexToCssClasses = new StringTokenizer(cssClassPatterns, ConfigurationConstants.LIST_SEPARATOR);
+            final Map<String,String> cssClassByRegex = Maps.newLinkedHashMap();
+            while (regexToCssClasses.hasMoreTokens()) {
+                String regexToCssClass = regexToCssClasses.nextToken().trim();
+                if (Strings.isNullOrEmpty(regexToCssClass)) {
+                    continue;
+                }
+                final Matcher matcher = CSS_CLASS_REGEX_PATTERN.matcher(regexToCssClass);
+                if(matcher.matches()) {
+                    cssClassByRegex.put(matcher.group(1), matcher.group(2));
+                }
+            }
+            for (Map.Entry<String, String> entry : cssClassByRegex.entrySet()) {
+                final String regex = entry.getKey();
+                final String faIcon = entry.getValue();
+                cssClassByPattern.put(Pattern.compile(regex), faIcon);
+            }
+        }
+        return cssClassByPattern;
+    }
+    //endregion
+
+
+    //region > injected
+    private IsisConfiguration configuration;
+
+    @Override
+    public void setConfiguration(final IsisConfiguration configuration) {
+        this.configuration = configuration;
+    }
+
+    private ServicesInjector servicesInjector;
+    @Override
+    public void setServicesInjector(ServicesInjector servicesInjector) {
+        this.servicesInjector = servicesInjector;
+    }
+
+    //endregion
+
+}
+

http://git-wip-us.apache.org/repos/asf/isis/blob/3d836959/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclass/annotprop/CssClassFacetOnMemberFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclass/annotprop/CssClassFacetOnMemberFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclass/annotprop/CssClassFacetOnMemberFactory.java
index b645220..35cc1b3 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclass/annotprop/CssClassFacetOnMemberFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclass/annotprop/CssClassFacetOnMemberFactory.java
@@ -20,8 +20,9 @@
 package org.apache.isis.core.metamodel.facets.members.cssclass.annotprop;
 
 import java.util.Properties;
-
 import org.apache.isis.applib.annotation.CssClass;
+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;
@@ -30,7 +31,7 @@ import org.apache.isis.core.metamodel.facets.ContributeeMemberFacetFactory;
 import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
 import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacet;
 
-public class CssClassFacetOnMemberFactory extends FacetFactoryAbstract implements ContributeeMemberFacetFactory {
+public class CssClassFacetOnMemberFactory extends FacetFactoryAbstract implements ContributeeMemberFacetFactory, IsisConfigurationAware {
 
     public CssClassFacetOnMemberFactory() {
         super(FeatureType.MEMBERS);
@@ -42,15 +43,16 @@ public class CssClassFacetOnMemberFactory extends FacetFactoryAbstract implement
         if(cssClassFacet == null) {
             cssClassFacet = createFromAnnotationIfPossible(processMethodContext);
         }
-        
+
         // no-op if null
         FacetUtil.addFacet(cssClassFacet);
     }
 
     
     @Override
-    public void process(ProcessContributeeMemberContext processMemberContext) {
+    public void process(final ProcessContributeeMemberContext processMemberContext) {
         CssClassFacet cssClassFacet = createFromMetadataPropertiesIfPossible(processMemberContext);
+
         // no-op if null
         FacetUtil.addFacet(cssClassFacet);
     }
@@ -64,10 +66,21 @@ public class CssClassFacetOnMemberFactory extends FacetFactoryAbstract implement
         return properties != null ? new CssClassFacetOnMemberFromProperties(properties, holder) : null;
     }
 
+
     private CssClassFacet createFromAnnotationIfPossible(final ProcessMethodContext processMethodContext) {
         final CssClass annotation = Annotations.getAnnotation(processMethodContext.getMethod(), CssClass.class);
         return annotation != null ? new CssClassFacetOnMemberAnnotation(annotation.value(), processMethodContext.getFacetHolder()) : null;
     }
 
+
+    //region > injected
+    private IsisConfiguration configuration;
+
+    @Override
+    public void setConfiguration(final IsisConfiguration configuration) {
+        this.configuration = configuration;
+    }
+    //endregion
+
 }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/3d836959/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 6e8dd1d..09ec8d3 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
@@ -39,9 +39,8 @@ 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, IsisConfigurationAware{
+public class CssClassFaFacetOnMemberFactory extends FacetFactoryAbstract implements ContributeeMemberFacetFactory, IsisConfigurationAware {
 
-    private IsisConfiguration configuration;
 
     public CssClassFaFacetOnMemberFactory() {
         super(FeatureType.ACTIONS_ONLY);
@@ -85,7 +84,6 @@ public class CssClassFaFacetOnMemberFactory extends FacetFactoryAbstract impleme
 
     //region > faIconFromPattern
 
-
     private final static Pattern FA_ICON_REGEX_PATTERN = Pattern.compile("([^:]+):(.+)");
 
     private CssClassFaFacet createFromConfiguredRegexIfPossible(final ProcessMethodContext processMethodContext) {
@@ -153,6 +151,8 @@ public class CssClassFaFacetOnMemberFactory extends FacetFactoryAbstract impleme
     //endregion
 
     //region > injected
+    private IsisConfiguration configuration;
+
     @Override
     public void setConfiguration(final IsisConfiguration configuration) {
         this.configuration = configuration;

http://git-wip-us.apache.org/repos/asf/isis/blob/3d836959/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/RuntimeContext.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/RuntimeContext.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/RuntimeContext.java
index 696812b..60605ea 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/RuntimeContext.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/RuntimeContext.java
@@ -66,7 +66,7 @@ public interface RuntimeContext extends Injectable, ApplicationScopedComponent {
     /**
      * aka the ServicesInjector...
      */
-    public ServicesInjector getDependencyInjector();
+    public ServicesInjector getServicesInjector();
 
     public ObjectDirtier getObjectDirtier();
 

http://git-wip-us.apache.org/repos/asf/isis/blob/3d836959/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/RuntimeContextAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/RuntimeContextAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/RuntimeContextAbstract.java
index 333986f..7cba2ba 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/RuntimeContextAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/RuntimeContextAbstract.java
@@ -24,12 +24,20 @@ import java.util.Collection;
 import java.util.List;
 import java.util.Properties;
 import com.google.common.collect.Lists;
-import org.apache.isis.core.metamodel.spec.*;
+import org.apache.isis.core.metamodel.services.ServicesInjectorSpi;
+import org.apache.isis.core.metamodel.services.ServicesInjectorDelegator;
+import org.apache.isis.core.metamodel.spec.ObjectSpecId;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.metamodel.spec.SpecificationLoader;
+import org.apache.isis.core.metamodel.spec.SpecificationLoaderDelegator;
+import org.apache.isis.core.metamodel.spec.SpecificationLoaderSpi;
+import org.apache.isis.core.metamodel.spec.SpecificationLoaderSpiAware;
 
-public abstract class RuntimeContextAbstract implements RuntimeContext, SpecificationLoaderSpiAware {
+public abstract class RuntimeContextAbstract implements RuntimeContext, SpecificationLoaderSpiAware, ServicesInjectorAware {
 
     private final SpecificationLoaderDelegator specificationLookupDelegator = new SpecificationLoaderDelegator();
-    
+    protected final ServicesInjectorDelegator servicesInjectorDelegator = new ServicesInjectorDelegator();
+
     private Properties properties;
 
 
@@ -54,7 +62,7 @@ public abstract class RuntimeContextAbstract implements RuntimeContext, Specific
     protected void injectSubcomponentsInto(final Object candidate) {
         getAdapterManager().injectInto(candidate);
         getAuthenticationSessionProvider().injectInto(candidate);
-        getDependencyInjector().injectInto(candidate);
+        getServicesInjector().injectInto(candidate);
         getDomainObjectServices().injectInto(candidate);
         getLocalizationProvider().injectInto(candidate);
         getObjectInstantiator().injectInto(candidate);
@@ -160,4 +168,12 @@ public abstract class RuntimeContextAbstract implements RuntimeContext, Specific
         return list;
     }
 
+
+    //region > injected services
+    @Override
+    public void setServicesInjector(ServicesInjector servicesInjector) {
+        this.servicesInjectorDelegator.setServicesInjectorSpi((ServicesInjectorSpi) servicesInjector);
+    }
+    //endregion
+
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/3d836959/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java
index 8e19839..36a25b4 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java
@@ -336,7 +336,7 @@ public class RuntimeContextNoRuntime extends RuntimeContextAbstract {
     }
 
     @Override
-    public ServicesInjector getDependencyInjector() {
+    public ServicesInjector getServicesInjector() {
         return servicesInjector;
     }
 
@@ -384,5 +384,4 @@ public class RuntimeContextNoRuntime extends RuntimeContextAbstract {
     public TransactionState getTransactionState() {
         throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
     }
-
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/3d836959/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjectorDelegator.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjectorDelegator.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjectorDelegator.java
new file mode 100644
index 0000000..6a9f168
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjectorDelegator.java
@@ -0,0 +1,67 @@
+/*
+ *  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.services;
+
+import java.util.List;
+import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
+import org.apache.isis.core.metamodel.runtimecontext.ServicesInjectorAware;
+
+public class ServicesInjectorDelegator implements ServicesInjector {
+
+    private ServicesInjectorSpi servicesInjectorSpi;
+
+    public void setServicesInjectorSpi(ServicesInjectorSpi servicesInjectorSpi) {
+        this.servicesInjectorSpi = servicesInjectorSpi;
+        servicesInjectorSpi.init();
+    }
+
+    @Override
+    public List<Object> getRegisteredServices() {
+        return servicesInjectorSpi.getRegisteredServices();
+    }
+
+    @Override
+    public void injectServicesInto(Object domainObject) {
+        servicesInjectorSpi.injectServicesInto(domainObject);
+    }
+
+    @Override
+    public void injectServicesInto(List<Object> domainObjects) {
+        servicesInjectorSpi.injectServicesInto(domainObjects);
+    }
+
+    @Override
+    public <T> T lookupService(Class<T> serviceClass) {
+        return servicesInjectorSpi.lookupService(serviceClass);
+    }
+
+    @Override
+    public <T> List<T> lookupServices(Class<T> serviceClass) {
+        return servicesInjectorSpi.lookupServices(serviceClass);
+    }
+
+    @Override
+    public void injectInto(Object candidate) {
+        if (ServicesInjectorAware.class.isAssignableFrom(candidate.getClass())) {
+            final ServicesInjectorAware cast = ServicesInjectorAware.class.cast(candidate);
+            cast.setServicesInjector(this);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/3d836959/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
index 8634828..1a7d340 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
@@ -47,7 +47,9 @@ import org.apache.isis.core.metamodel.progmodel.ProgrammingModel;
 import org.apache.isis.core.metamodel.runtimecontext.RuntimeContext;
 import org.apache.isis.core.metamodel.runtimecontext.RuntimeContextAware;
 import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
+import org.apache.isis.core.metamodel.runtimecontext.ServicesInjectorAware;
 import org.apache.isis.core.metamodel.runtimecontext.noruntime.RuntimeContextNoRuntime;
+import org.apache.isis.core.metamodel.services.ServicesInjectorDefault;
 import org.apache.isis.core.metamodel.spec.*;
 import org.apache.isis.core.metamodel.spec.feature.ObjectMemberContext;
 import org.apache.isis.core.metamodel.specloader.classsubstitutor.ClassSubstitutor;
@@ -440,7 +442,7 @@ public final class ObjectReflectorDefault implements SpecificationLoaderSpi, App
             return new ObjectSpecificationOnStandaloneList(specContext, objectMemberContext);
         } else {
             final SpecificationLoaderSpi specificationLoader = this;
-            final ServicesInjector dependencyInjector = getRuntimeContext().getDependencyInjector();
+            final ServicesInjector dependencyInjector = getRuntimeContext().getServicesInjector();
             final CreateObjectContext createObjectContext = new CreateObjectContext(adapterMap, dependencyInjector);
             final FacetedMethodsBuilderContext facetedMethodsBuilderContext = new FacetedMethodsBuilderContext(specificationLoader, facetProcessor);
             return new ObjectSpecificationDefault(cls, facetedMethodsBuilderContext, specContext, objectMemberContext, createObjectContext);
@@ -532,6 +534,13 @@ public final class ObjectReflectorDefault implements SpecificationLoaderSpi, App
             final SpecificationLoaderAware cast = SpecificationLoaderAware.class.cast(candidate);
             cast.setSpecificationLookup(this);
         }
+        if (ServicesInjectorAware.class.isAssignableFrom(candidateClass)) {
+            final ServicesInjectorAware cast = ServicesInjectorAware.class.cast(candidate);
+            final ServicesInjectorDefault servicesInjector = new ServicesInjectorDefault();
+            servicesInjector.setSpecificationLookup(this);
+            servicesInjector.setServices(this.services);
+            cast.setServicesInjector(servicesInjector);
+        }
     }
 
     // /////////////////////////////////////////////////////////////

http://git-wip-us.apache.org/repos/asf/isis/blob/3d836959/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java b/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
index ba149cb..6b8b96e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
+++ b/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
@@ -53,6 +53,7 @@ import org.apache.isis.core.metamodel.facets.collections.parented.ParentedFacetS
 import org.apache.isis.core.metamodel.facets.collections.sortedby.annotation.SortedByFacetAnnotationFactory;
 import org.apache.isis.core.metamodel.facets.collections.typeof.annotation.TypeOfFacetOnCollectionAnnotationFactory;
 import org.apache.isis.core.metamodel.facets.fallback.FallbackFacetFactory;
+import org.apache.isis.core.metamodel.facets.members.cssclass.annotprop.CssClassFacetOnActionFromConfiguredRegexFactory;
 import org.apache.isis.core.metamodel.facets.members.cssclass.annotprop.CssClassFacetOnMemberFactory;
 import org.apache.isis.core.metamodel.facets.members.cssclassfa.annotprop.CssClassFaFacetOnMemberFactory;
 import org.apache.isis.core.metamodel.facets.members.describedas.annotprop.DescribedAsFacetOnMemberFactory;
@@ -362,6 +363,8 @@ public final class ProgrammingModelFacetsJava5 extends ProgrammingModelAbstract
 
         addFactory(CssClassFacetOnTypeAnnotationFactory.class);
         addFactory(CssClassFacetOnMemberFactory.class);
+        // must come after CssClassFacetOnMemberFactory
+        addFactory(CssClassFacetOnActionFromConfiguredRegexFactory.class);
 
         addFactory(CssClassFaFacetOnTypeAnnotationFactory.class);
         addFactory(CssClassFaFacetOnMemberFactory.class);

http://git-wip-us.apache.org/repos/asf/isis/blob/3d836959/core/metamodel/src/test/java/org/apache/isis/core/metamodel/app/IsisMetaModelTest_init.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/app/IsisMetaModelTest_init.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/app/IsisMetaModelTest_init.java
index fb3ba4c..889c8e8 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/app/IsisMetaModelTest_init.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/app/IsisMetaModelTest_init.java
@@ -98,7 +98,7 @@ public class IsisMetaModelTest_init {
                 allowing(mockRuntimeContext).getQuerySubmitter();
                 will(returnValue(mockQuerySubmitter));
 
-                allowing(mockRuntimeContext).getDependencyInjector();
+                allowing(mockRuntimeContext).getServicesInjector();
                 will(returnValue(mockDependencyInjector));
 
                 allowing(mockRuntimeContext).getServicesProvider();

http://git-wip-us.apache.org/repos/asf/isis/blob/3d836959/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java
index bc0d459..a8bf011 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java
@@ -28,7 +28,18 @@ import org.apache.isis.core.commons.authentication.AuthenticationSession;
 import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
 import org.apache.isis.core.commons.authentication.AuthenticationSessionProviderAbstract;
 import org.apache.isis.core.commons.authentication.MessageBroker;
-import org.apache.isis.core.metamodel.adapter.*;
+import org.apache.isis.core.metamodel.adapter.DomainObjectServices;
+import org.apache.isis.core.metamodel.adapter.DomainObjectServicesAbstract;
+import org.apache.isis.core.metamodel.adapter.LocalizationProviderAbstract;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.adapter.ObjectDirtier;
+import org.apache.isis.core.metamodel.adapter.ObjectDirtierAbstract;
+import org.apache.isis.core.metamodel.adapter.ObjectPersistor;
+import org.apache.isis.core.metamodel.adapter.ObjectPersistorAbstract;
+import org.apache.isis.core.metamodel.adapter.QuerySubmitter;
+import org.apache.isis.core.metamodel.adapter.QuerySubmitterAbstract;
+import org.apache.isis.core.metamodel.adapter.ServicesProvider;
+import org.apache.isis.core.metamodel.adapter.ServicesProviderAbstract;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManagerAware;
 import org.apache.isis.core.metamodel.adapter.oid.Oid;
@@ -37,7 +48,6 @@ import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
 import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacetUtils;
 import org.apache.isis.core.metamodel.runtimecontext.RuntimeContextAbstract;
 import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
-import org.apache.isis.core.metamodel.runtimecontext.ServicesInjectorAware;
 import org.apache.isis.core.metamodel.services.container.query.QueryCardinality;
 import org.apache.isis.core.metamodel.spec.ObjectInstantiationException;
 import org.apache.isis.core.metamodel.spec.ObjectInstantiator;
@@ -64,7 +74,6 @@ public class RuntimeContextFromSession extends RuntimeContextAbstract {
     private final ObjectInstantiator objectInstantiator;
     private final ObjectPersistor objectPersistor;
     private final ServicesProvider servicesProvider;
-    private final ServicesInjector servicesInjector;
     private final QuerySubmitter querySubmitter;
     private final DomainObjectServices domainObjectServices;
     private final LocalizationProviderAbstract localizationProvider;
@@ -177,7 +186,7 @@ public class RuntimeContextFromSession extends RuntimeContextAbstract {
 
             @Override
             public <T> T lookupService(Class<T> cls) {
-                return getPersistenceSession().getServicesInjector().lookupService(cls);
+                return servicesInjectorDelegator.lookupService(cls);
             }
         };
         this.domainObjectServices = new DomainObjectServicesAbstract() {
@@ -281,42 +290,6 @@ public class RuntimeContextFromSession extends RuntimeContextAbstract {
                 return list.size() > 0 ? list.get(0) : null;
             }
         };
-        this.servicesInjector = new ServicesInjector() {
-
-            @Override
-            public void injectServicesInto(final Object object) {
-                getPersistenceSession().getServicesInjector().injectServicesInto(object);
-            }
-
-            @Override
-            public void injectServicesInto(List<Object> objects) {
-                getPersistenceSession().getServicesInjector().injectServicesInto(objects);
-            }
-
-            @Override
-            public <T> T lookupService(Class<T> serviceClass) {
-                return getPersistenceSession().getServicesInjector().lookupService(serviceClass);
-            }
-
-            @Override
-            public <T> List<T> lookupServices(Class<T> serviceClass) {
-                return getPersistenceSession().getServicesInjector().lookupServices(serviceClass);
-            }
-
-            @Override
-            public void injectInto(Object candidate) {
-                if (ServicesInjectorAware.class.isAssignableFrom(candidate.getClass())) {
-                    final ServicesInjectorAware cast = ServicesInjectorAware.class.cast(candidate);
-                    cast.setServicesInjector(this);
-                }
-            }
-
-            @Override
-            public List<Object> getRegisteredServices() {
-                return getPersistenceSession().getServicesInjector().getRegisteredServices();
-            }
-
-        };
         this.localizationProvider = new LocalizationProviderAbstract() {
 
             @Override
@@ -371,8 +344,8 @@ public class RuntimeContextFromSession extends RuntimeContextAbstract {
     }
 
     @Override
-    public ServicesInjector getDependencyInjector() {
-        return servicesInjector;
+    public ServicesInjector getServicesInjector() {
+        return servicesInjectorDelegator;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/3d836959/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisSystemAbstract.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisSystemAbstract.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisSystemAbstract.java
index 5cfcd50..2b2b62f 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisSystemAbstract.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisSystemAbstract.java
@@ -66,7 +66,7 @@ public abstract class IsisSystemAbstract extends IsisSystemFixturesHookAbstract
     // ///////////////////////////////////////////
 
     public IsisSystemAbstract(final DeploymentType deploymentType) {
-        super(deploymentType, new IsisLocaleInitializer(), new IsisTimeZoneInitializer());
+        this(deploymentType, new IsisLocaleInitializer(), new IsisTimeZoneInitializer());
     }
 
     public IsisSystemAbstract(final DeploymentType deploymentType, final IsisLocaleInitializer localeInitializer, final IsisTimeZoneInitializer timeZoneInitializer) {

http://git-wip-us.apache.org/repos/asf/isis/blob/3d836959/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 f28d7e3..2b39844 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
@@ -99,17 +99,37 @@ isis.authorization=shiro
 # patterns for applying CssClassFa facet (font-awesome icons) to member names
 #
 isis.reflector.facet.cssClassFa.patterns=\
+                        new.*:fa-plus,\
+                        add.*:fa-plus-square,\
                         create.*:fa-plus,\
                         update.*:fa-edit,\
-                        add.*:fa-plus-square,\
+                        change.*:fa-edit,\
                         remove.*:fa-minus-square,\
                         move.*:fa-exchange,\
                         first.*:fa-star,\
                         find.*:fa-search,\
+                        lookup.*:fa-search,\
                         clear.*:fa-remove,\
                         previous.*:fa-step-backward,\
                         next.*:fa-step-forward,\
-                        list.*:fa-list
+                        list.*:fa-list, \
+                        all.*:fa-list, \
+                        download.*:fa-download, \
+                        upload.*:fa-upload, \
+                        execute.*:fa-bolt, \
+                        run.*:fa-bolt, \
+                        calculate.*:fa-calculator, \
+                        verify.*:fa-check-circle, \
+                        refresh.*:fa-refresh, \
+                        install.*:fa-wrench
+
+
+isis.reflector.facet.cssClass.patterns=\
+                        update.*:btn-default,\
+                        delete.*:btn-warning,\
+                        .*:btn-primary
+
+
 
 #################################################################################
 #

http://git-wip-us.apache.org/repos/asf/isis/blob/3d836959/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 c61481f..3b53f77 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
@@ -99,17 +99,35 @@ isis.authorization=shiro
 # patterns for applying CssClassFa facet (font-awesome icons) to member names
 #
 isis.reflector.facet.cssClassFa.patterns=\
+                        new.*:fa-plus,\
+                        add.*:fa-plus-square,\
                         create.*:fa-plus,\
                         update.*:fa-edit,\
-                        add.*:fa-plus-square,\
+                        change.*:fa-edit,\
                         remove.*:fa-minus-square,\
                         move.*:fa-exchange,\
                         first.*:fa-star,\
                         find.*:fa-search,\
+                        lookup.*:fa-search,\
                         clear.*:fa-remove,\
                         previous.*:fa-step-backward,\
                         next.*:fa-step-forward,\
-                        list.*:fa-list
+                        list.*:fa-list, \
+                        all.*:fa-list, \
+                        download.*:fa-download, \
+                        upload.*:fa-upload, \
+                        execute.*:fa-bolt, \
+                        run.*:fa-bolt, \
+                        calculate.*:fa-calculator, \
+                        verify.*:fa-check-circle, \
+                        refresh.*:fa-refresh, \
+                        install.*:fa-wrench
+
+isis.reflector.facet.cssClass.patterns=\
+                        update.*:btn-default,\
+                        delete.*:btn-warning,\
+                        .*:btn-primary
+
 
 #################################################################################
 #


[5/5] isis git commit: ISIS-537: fixing up ServicesInjectorDefault initialization, responsibility for instantiation now solely in PersistenceSessionFactory, and ObjectReflectorDefault (SpecficationLoaderSpi) is handed a copy rather than instantiate its o

Posted by da...@apache.org.
ISIS-537: fixing up ServicesInjectorDefault initialization, responsibility for instantiation now solely in PersistenceSessionFactory, and ObjectReflectorDefault (SpecficationLoaderSpi) is handed a copy rather than instantiate its own instance.

There's plenty of scope to improve matters further, but the test that was failing is at least now passing.


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

Branch: refs/heads/master
Commit: 0a447948ae84b9bc172563012eb94dae8526fa6f
Parents: fd3e6ee
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Fri Nov 28 17:27:18 2014 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Fri Nov 28 17:43:54 2014 +0000

----------------------------------------------------------------------
 .../isis/core/metamodel/app/IsisMetaModel.java  |  5 +-
 .../annotation/ViewModelFacetAnnotation.java    |  1 -
 .../runtimecontext/RuntimeContext.java          |  1 -
 .../runtimecontext/RuntimeContextAbstract.java  |  7 +-
 .../services/ServicesInjectorDefault.java       |  8 ++-
 .../services/ServicesInjectorDelegator.java     | 67 --------------------
 .../metamodel/services/ServicesInjectorSpi.java |  3 +-
 .../services/ServicesInjectorSpiDelegator.java  | 67 ++++++++++++++++++++
 .../metamodel/spec/SpecificationLoaderSpi.java  |  5 +-
 .../specloader/ObjectReflectorDefault.java      | 28 +++-----
 .../metamodel/facets/ProgrammableReflector.java |  3 +-
 .../ObjectReflectorDefaultTestAbstract.java     |  3 +-
 .../session/IsisSessionFactoryDefault.java      |  6 +-
 13 files changed, 104 insertions(+), 100 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/0a447948/core/metamodel/src/main/java/org/apache/isis/core/metamodel/app/IsisMetaModel.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/app/IsisMetaModel.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/app/IsisMetaModel.java
index ad8a6a1..5218540 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/app/IsisMetaModel.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/app/IsisMetaModel.java
@@ -29,6 +29,7 @@ import org.apache.isis.core.metamodel.metamodelvalidator.dflt.MetaModelValidator
 import org.apache.isis.core.metamodel.progmodel.ProgrammingModel;
 import org.apache.isis.core.metamodel.runtimecontext.RuntimeContext;
 import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
+import org.apache.isis.core.metamodel.services.ServicesInjectorDefault;
 import org.apache.isis.core.metamodel.services.container.DomainObjectContainerDefault;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.SpecificationLoaderSpi;
@@ -134,7 +135,9 @@ public class IsisMetaModel implements ApplicationScopedComponent {
         ensureNotInitialized();
         reflector = new ObjectReflectorDefault(configuration, programmingModel, facetDecorators, metaModelValidator);
 
-        reflector.setServices(services);
+        final ServicesInjectorDefault servicesInjector = new ServicesInjectorDefault();
+        servicesInjector.setServices(services);
+        reflector.setServiceInjector(servicesInjector);
         
         runtimeContext.injectInto(reflector);
         reflector.injectInto(runtimeContext);

http://git-wip-us.apache.org/repos/asf/isis/blob/0a447948/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/viewmodel/annotation/ViewModelFacetAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/viewmodel/annotation/ViewModelFacetAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/viewmodel/annotation/ViewModelFacetAnnotation.java
index 0b5d11e..d5f00b4 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/viewmodel/annotation/ViewModelFacetAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/viewmodel/annotation/ViewModelFacetAnnotation.java
@@ -22,7 +22,6 @@ package org.apache.isis.core.metamodel.facets.object.viewmodel.annotation;
 import java.util.List;
 import java.util.Set;
 import java.util.UUID;
-import org.apache.isis.applib.ViewModel;
 import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.applib.services.bookmark.BookmarkService;
 import org.apache.isis.applib.services.memento.MementoService;

http://git-wip-us.apache.org/repos/asf/isis/blob/0a447948/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/RuntimeContext.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/RuntimeContext.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/RuntimeContext.java
index 60605ea..57dea94 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/RuntimeContext.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/RuntimeContext.java
@@ -19,7 +19,6 @@
 
 package org.apache.isis.core.metamodel.runtimecontext;
 
-import org.apache.isis.applib.DomainObjectContainer;
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
 import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
 import org.apache.isis.core.commons.components.ApplicationScopedComponent;

http://git-wip-us.apache.org/repos/asf/isis/blob/0a447948/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/RuntimeContextAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/RuntimeContextAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/RuntimeContextAbstract.java
index 7cba2ba..93751bc 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/RuntimeContextAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/RuntimeContextAbstract.java
@@ -24,8 +24,7 @@ import java.util.Collection;
 import java.util.List;
 import java.util.Properties;
 import com.google.common.collect.Lists;
-import org.apache.isis.core.metamodel.services.ServicesInjectorSpi;
-import org.apache.isis.core.metamodel.services.ServicesInjectorDelegator;
+import org.apache.isis.core.metamodel.services.ServicesInjectorSpiDelegator;
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.SpecificationLoader;
@@ -36,7 +35,7 @@ import org.apache.isis.core.metamodel.spec.SpecificationLoaderSpiAware;
 public abstract class RuntimeContextAbstract implements RuntimeContext, SpecificationLoaderSpiAware, ServicesInjectorAware {
 
     private final SpecificationLoaderDelegator specificationLookupDelegator = new SpecificationLoaderDelegator();
-    protected final ServicesInjectorDelegator servicesInjectorDelegator = new ServicesInjectorDelegator();
+    protected final ServicesInjectorSpiDelegator servicesInjectorDelegator = new ServicesInjectorSpiDelegator();
 
     private Properties properties;
 
@@ -172,7 +171,7 @@ public abstract class RuntimeContextAbstract implements RuntimeContext, Specific
     //region > injected services
     @Override
     public void setServicesInjector(ServicesInjector servicesInjector) {
-        this.servicesInjectorDelegator.setServicesInjectorSpi((ServicesInjectorSpi) servicesInjector);
+        this.servicesInjectorDelegator.setServicesInjectorSpi((org.apache.isis.core.metamodel.services.ServicesInjectorSpi) servicesInjector);
     }
     //endregion
 

http://git-wip-us.apache.org/repos/asf/isis/blob/0a447948/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjectorDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjectorDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjectorDefault.java
index dd34686..da67329 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjectorDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjectorDefault.java
@@ -41,6 +41,7 @@ import org.apache.isis.core.metamodel.runtimecontext.ServicesInjectorAware;
 import org.apache.isis.core.metamodel.spec.InjectorMethodEvaluator;
 import org.apache.isis.core.metamodel.spec.SpecificationLoader;
 import org.apache.isis.core.metamodel.spec.SpecificationLoaderAware;
+import org.apache.isis.core.metamodel.specloader.InjectorMethodEvaluatorDefault;
 
 /**
  * Must be a thread-safe.
@@ -71,7 +72,7 @@ public class ServicesInjectorDefault implements ServicesInjectorSpi, Specificati
      * @param injectorMethodEvaluator
      */
     public ServicesInjectorDefault(InjectorMethodEvaluator injectorMethodEvaluator) {
-        this.injectorMethodEvaluator = injectorMethodEvaluator;
+        this.injectorMethodEvaluator = injectorMethodEvaluator != null ? injectorMethodEvaluator : new InjectorMethodEvaluatorDefault();
     }
 
 //region > init, shutdown
@@ -96,6 +97,11 @@ public class ServicesInjectorDefault implements ServicesInjectorSpi, Specificati
         autowireServicesAndContainer();
     }
 
+    public ServicesInjectorDefault withServices(final List<Object> services) {
+        setServices(services);
+        return this;
+    }
+
     @Override
     public <T> void replaceService(final T existingService, final T replacementService) {
 

http://git-wip-us.apache.org/repos/asf/isis/blob/0a447948/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjectorDelegator.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjectorDelegator.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjectorDelegator.java
deleted file mode 100644
index 6a9f168..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjectorDelegator.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- *  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.services;
-
-import java.util.List;
-import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
-import org.apache.isis.core.metamodel.runtimecontext.ServicesInjectorAware;
-
-public class ServicesInjectorDelegator implements ServicesInjector {
-
-    private ServicesInjectorSpi servicesInjectorSpi;
-
-    public void setServicesInjectorSpi(ServicesInjectorSpi servicesInjectorSpi) {
-        this.servicesInjectorSpi = servicesInjectorSpi;
-        servicesInjectorSpi.init();
-    }
-
-    @Override
-    public List<Object> getRegisteredServices() {
-        return servicesInjectorSpi.getRegisteredServices();
-    }
-
-    @Override
-    public void injectServicesInto(Object domainObject) {
-        servicesInjectorSpi.injectServicesInto(domainObject);
-    }
-
-    @Override
-    public void injectServicesInto(List<Object> domainObjects) {
-        servicesInjectorSpi.injectServicesInto(domainObjects);
-    }
-
-    @Override
-    public <T> T lookupService(Class<T> serviceClass) {
-        return servicesInjectorSpi.lookupService(serviceClass);
-    }
-
-    @Override
-    public <T> List<T> lookupServices(Class<T> serviceClass) {
-        return servicesInjectorSpi.lookupServices(serviceClass);
-    }
-
-    @Override
-    public void injectInto(Object candidate) {
-        if (ServicesInjectorAware.class.isAssignableFrom(candidate.getClass())) {
-            final ServicesInjectorAware cast = ServicesInjectorAware.class.cast(candidate);
-            cast.setServicesInjector(this);
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/0a447948/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjectorSpi.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjectorSpi.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjectorSpi.java
index 4a9d444..e50e2b8 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjectorSpi.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjectorSpi.java
@@ -21,7 +21,6 @@ package org.apache.isis.core.metamodel.services;
 
 import java.util.List;
 
-import org.apache.isis.applib.DomainObjectContainer;
 import org.apache.isis.core.commons.components.ApplicationScopedComponent;
 import org.apache.isis.core.commons.components.Injectable;
 import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
@@ -30,7 +29,7 @@ import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
  * The repository of services, also able to inject into any object.
  * 
  * <p>
- * Can be considered a mutable SPI to the {@link ServicesInjector} immutable API.
+ * Can be considered a mutable SPI to the {@link org.apache.isis.core.metamodel.runtimecontext.ServicesInjector} immutable API.
  */
 public interface ServicesInjectorSpi extends ApplicationScopedComponent, Injectable, ServicesInjector {
 

http://git-wip-us.apache.org/repos/asf/isis/blob/0a447948/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjectorSpiDelegator.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjectorSpiDelegator.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjectorSpiDelegator.java
new file mode 100644
index 0000000..5cdf24a
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjectorSpiDelegator.java
@@ -0,0 +1,67 @@
+/*
+ *  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.services;
+
+import java.util.List;
+import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
+import org.apache.isis.core.metamodel.runtimecontext.ServicesInjectorAware;
+
+public class ServicesInjectorSpiDelegator implements ServicesInjector {
+
+    private org.apache.isis.core.metamodel.services.ServicesInjectorSpi servicesInjectorSpi;
+
+    public void setServicesInjectorSpi(org.apache.isis.core.metamodel.services.ServicesInjectorSpi servicesInjectorSpi) {
+        this.servicesInjectorSpi = servicesInjectorSpi;
+        servicesInjectorSpi.init();
+    }
+
+    @Override
+    public List<Object> getRegisteredServices() {
+        return servicesInjectorSpi.getRegisteredServices();
+    }
+
+    @Override
+    public void injectServicesInto(Object domainObject) {
+        servicesInjectorSpi.injectServicesInto(domainObject);
+    }
+
+    @Override
+    public void injectServicesInto(List<Object> domainObjects) {
+        servicesInjectorSpi.injectServicesInto(domainObjects);
+    }
+
+    @Override
+    public <T> T lookupService(Class<T> serviceClass) {
+        return servicesInjectorSpi.lookupService(serviceClass);
+    }
+
+    @Override
+    public <T> List<T> lookupServices(Class<T> serviceClass) {
+        return servicesInjectorSpi.lookupServices(serviceClass);
+    }
+
+    @Override
+    public void injectInto(Object candidate) {
+        if (ServicesInjectorAware.class.isAssignableFrom(candidate.getClass())) {
+            final ServicesInjectorAware cast = ServicesInjectorAware.class.cast(candidate);
+            cast.setServicesInjector(this);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/0a447948/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/SpecificationLoaderSpi.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/SpecificationLoaderSpi.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/SpecificationLoaderSpi.java
index 32f44b8..049fee3 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/SpecificationLoaderSpi.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/SpecificationLoaderSpi.java
@@ -19,17 +19,18 @@
 
 package org.apache.isis.core.metamodel.spec;
 
-import java.util.List;
 import org.apache.isis.core.commons.components.ApplicationScopedComponent;
 import org.apache.isis.core.commons.debug.DebuggableWithTitle;
+import org.apache.isis.core.metamodel.services.ServicesInjectorSpi;
 import org.apache.isis.core.metamodel.specloader.validator.ValidationFailures;
 
 public interface SpecificationLoaderSpi extends ApplicationScopedComponent, DebuggableWithTitle, SpecificationLoader {
 
     /**
      * Specify the services to pro-actively prime the cache, and to initialize them also.
+     * @param services
      */
-    void setServices(List<Object> services);
+    void setServiceInjector(ServicesInjectorSpi services);
 
     /**
      * Populated as a result of running metamodel validation after all specs have been loaded.

http://git-wip-us.apache.org/repos/asf/isis/blob/0a447948/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
index 1a7d340..6e0c9cd 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
@@ -49,7 +49,7 @@ import org.apache.isis.core.metamodel.runtimecontext.RuntimeContextAware;
 import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
 import org.apache.isis.core.metamodel.runtimecontext.ServicesInjectorAware;
 import org.apache.isis.core.metamodel.runtimecontext.noruntime.RuntimeContextNoRuntime;
-import org.apache.isis.core.metamodel.services.ServicesInjectorDefault;
+import org.apache.isis.core.metamodel.services.ServicesInjectorSpi;
 import org.apache.isis.core.metamodel.spec.*;
 import org.apache.isis.core.metamodel.spec.feature.ObjectMemberContext;
 import org.apache.isis.core.metamodel.specloader.classsubstitutor.ClassSubstitutor;
@@ -140,15 +140,14 @@ public final class ObjectReflectorDefault implements SpecificationLoaderSpi, App
 
     private final SpecificationTraverser specificationTraverser = new SpecificationTraverser();
 
-    /**
-     * @see #setServices(List)
-     */
-    private List<Object> services;
-
     private final MetaModelValidator metaModelValidator;
     private final SpecificationCacheDefault cache = new SpecificationCacheDefault();
 
     private boolean initialized = false;
+    /**
+     * Populated in {@link SpecificationLoaderSpi#setServiceInjector(org.apache.isis.core.metamodel.services.ServicesInjectorSpi)}.
+     */
+    private ServicesInjectorSpi servicesInjector;
 
 
     // /////////////////////////////////////////////////////////////
@@ -190,7 +189,7 @@ public final class ObjectReflectorDefault implements SpecificationLoaderSpi, App
 
     /**
      * Initializes and wires up, and primes the cache based on any service
-     * classes that may have been {@link #setServices(List) injected}.
+     * classes that may have been {@link SpecificationLoaderSpi#setServiceInjector(org.apache.isis.core.metamodel.services.ServicesInjectorSpi) injected}.
      */
     @Override
     public void init() {
@@ -536,10 +535,7 @@ public final class ObjectReflectorDefault implements SpecificationLoaderSpi, App
         }
         if (ServicesInjectorAware.class.isAssignableFrom(candidateClass)) {
             final ServicesInjectorAware cast = ServicesInjectorAware.class.cast(candidate);
-            final ServicesInjectorDefault servicesInjector = new ServicesInjectorDefault();
-            servicesInjector.setSpecificationLookup(this);
-            servicesInjector.setServices(this.services);
-            cast.setServicesInjector(servicesInjector);
+            cast.setServicesInjector(this.servicesInjector);
         }
     }
 
@@ -619,7 +615,7 @@ public final class ObjectReflectorDefault implements SpecificationLoaderSpi, App
     // ////////////////////////////////////////////////////////////////////
 
     public List<Class<?>> getServiceClasses() {
-        List<Class<?>> serviceClasses = Lists.transform(services, new Function<Object, Class<?>>(){
+        List<Class<?>> serviceClasses = Lists.transform(this.servicesInjector.getRegisteredServices(), new Function<Object, Class<?>>(){
             public Class<?> apply(Object o) {
                 return o.getClass();
             }
@@ -627,13 +623,9 @@ public final class ObjectReflectorDefault implements SpecificationLoaderSpi, App
         return Collections.unmodifiableList(serviceClasses);
     }
 
-    private List<Object> getServices() {
-        return services;
-    }
-    
     @Override
-    public void setServices(final List<Object> services) {
-        this.services = services;
+    public void setServiceInjector(final ServicesInjectorSpi services) {
+        servicesInjector = services;
     }
 
     // ////////////////////////////////////////////////////////////////////

http://git-wip-us.apache.org/repos/asf/isis/blob/0a447948/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/ProgrammableReflector.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/ProgrammableReflector.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/ProgrammableReflector.java
index 3222efb..7529a44 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/ProgrammableReflector.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/ProgrammableReflector.java
@@ -29,6 +29,7 @@ import org.apache.isis.core.commons.debug.DebugBuilder;
 import org.apache.isis.core.commons.exceptions.NotYetImplementedException;
 import org.apache.isis.core.metamodel.runtimecontext.RuntimeContext;
 import org.apache.isis.core.metamodel.runtimecontext.RuntimeContextAware;
+import org.apache.isis.core.metamodel.services.ServicesInjectorSpi;
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.SpecificationLoaderAbstract;
@@ -121,7 +122,7 @@ public class ProgrammableReflector extends SpecificationLoaderAbstract implement
     }
 
     @Override
-    public void setServices(final List<Object> services) {
+    public void setServiceInjector(final ServicesInjectorSpi serviceInjector) {
         throw new NotYetImplementedException();
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/0a447948/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefaultTestAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefaultTestAbstract.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefaultTestAbstract.java
index 2346a2e..4478638 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefaultTestAbstract.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefaultTestAbstract.java
@@ -38,6 +38,7 @@ import org.apache.isis.core.metamodel.facets.object.plural.PluralFacet;
 import org.apache.isis.core.metamodel.metamodelvalidator.dflt.MetaModelValidatorDefault;
 import org.apache.isis.core.metamodel.runtimecontext.RuntimeContext;
 import org.apache.isis.core.metamodel.runtimecontext.noruntime.RuntimeContextNoRuntime;
+import org.apache.isis.core.metamodel.services.ServicesInjectorDefault;
 import org.apache.isis.core.metamodel.services.container.DomainObjectContainerDefault;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.unittestsupport.jmocking.InjectIntoJMockAction;
@@ -79,7 +80,7 @@ public abstract class ObjectReflectorDefaultTestAbstract {
                         new HashSet<FacetDecorator>(),
                         new MetaModelValidatorDefault());
         reflector.setRuntimeContext(runtimeContext);
-        reflector.setServices(Collections.<Object>singletonList(new DomainObjectContainerDefault()));
+        reflector.setServiceInjector(new ServicesInjectorDefault().withServices(Collections.<Object>singletonList(new DomainObjectContainerDefault())));
         reflector.init();
         
         specification = loadSpecification(reflector);

http://git-wip-us.apache.org/repos/asf/isis/blob/0a447948/core/runtime/src/main/java/org/apache/isis/core/runtime/system/session/IsisSessionFactoryDefault.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/session/IsisSessionFactoryDefault.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/session/IsisSessionFactoryDefault.java
index 31b7b3b..d575c6f 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/session/IsisSessionFactoryDefault.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/session/IsisSessionFactoryDefault.java
@@ -35,6 +35,7 @@ import org.apache.isis.core.commons.components.ApplicationScopedComponent;
 import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.adapter.oid.OidMarshaller;
 import org.apache.isis.core.metamodel.services.ServiceUtil;
+import org.apache.isis.core.metamodel.services.ServicesInjectorSpi;
 import org.apache.isis.core.metamodel.spec.SpecificationLoaderSpi;
 import org.apache.isis.core.metamodel.specloader.ServiceInitializer;
 import org.apache.isis.core.runtime.authentication.AuthenticationManager;
@@ -184,7 +185,10 @@ public class IsisSessionFactoryDefault implements IsisSessionFactory {
      */
     @Override
     public void init() {
-        specificationLoaderSpi.setServices(serviceList);
+        final ServicesInjectorSpi servicesInjector = persistenceSessionFactory.getServicesInjector();
+        servicesInjector.setServices(serviceList);
+        specificationLoaderSpi.setServiceInjector(servicesInjector);
+
         specificationLoaderSpi.init();
 
         // must come after init of spec loader.


[3/5] isis git commit: ISIS-537: deleting the defunct parts of CssMenu panel and items etc

Posted by da...@apache.org.
ISIS-537: deleting the defunct parts of CssMenu panel and items etc


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

Branch: refs/heads/master
Commit: d9a3775a14d395a898da937ad7d7c5f3d2cb870c
Parents: de0cc86
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Fri Nov 28 11:26:18 2014 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Fri Nov 28 16:10:55 2014 +0000

----------------------------------------------------------------------
 .../cssmenu/AppActionsCssMenuFactory.java       |  10 +-
 .../entity/header/EntityHeaderPanel.java        |  12 -
 .../widgets/cssmenu/ApplicationActionsPanel.css | 236 +++++++++++++++++++
 .../widgets/cssmenu/CssMenuBuilder.java         | 178 --------------
 .../components/widgets/cssmenu/CssMenuItem.java |  26 +-
 .../components/widgets/cssmenu/CssMenuPanel.css | 226 ------------------
 .../widgets/cssmenu/CssMenuPanel.java           |  42 +---
 7 files changed, 245 insertions(+), 485 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/d9a3775a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/appactions/cssmenu/AppActionsCssMenuFactory.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/appactions/cssmenu/AppActionsCssMenuFactory.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/appactions/cssmenu/AppActionsCssMenuFactory.java
index 0c27eee..4c7d806 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/appactions/cssmenu/AppActionsCssMenuFactory.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/appactions/cssmenu/AppActionsCssMenuFactory.java
@@ -44,7 +44,6 @@ import org.apache.isis.viewer.wicket.ui.ComponentFactoryAbstract;
 import org.apache.isis.viewer.wicket.ui.ComponentType;
 import org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu.ActionLinkFactory;
 import org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu.ApplicationActionsPanel;
-import org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu.CssMenuBuilder;
 import org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu.CssMenuItem;
 import org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu.CssMenuItem.Builder;
 import org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu.CssMenuPanel;
@@ -80,7 +79,8 @@ public class AppActionsCssMenuFactory extends ComponentFactoryAbstract {
     private final static ActionLinkFactory cssMenuLinkFactory = new AppActionsCssMenuLinkFactory();
 
     public AppActionsCssMenuFactory() {
-        super(ComponentType.APPLICATION_ACTIONS, CssMenuPanel.class);
+        super(ComponentType.APPLICATION_ACTIONS, ApplicationActionsPanel.class);
+        //super(ComponentType.APPLICATION_ACTIONS, CssMenuPanel.class);
     }
 
     /**
@@ -113,7 +113,7 @@ public class AppActionsCssMenuFactory extends ComponentFactoryAbstract {
         // prune any service names that have no service actions
         serviceNamesInOrder.retainAll(serviceActionsByName.keySet());
         
-        return buildMenuItems(serviceNamesInOrder, serviceActionsByName, new CssMenuBuilder.CssMenuContext(cssMenuLinkFactory, appActionsModel.getActionPromptProvider()));
+        return buildMenuItems(serviceNamesInOrder, serviceActionsByName, cssMenuLinkFactory);
     }
 
     /**
@@ -122,7 +122,7 @@ public class AppActionsCssMenuFactory extends ComponentFactoryAbstract {
     private List<CssMenuItem> buildMenuItems(
             final Set<String> serviceNamesInOrder,
             final Map<String, List<LogicalServiceAction>> serviceActionsByName,
-            final CssMenuBuilder.CssMenuContext cssMenuContext) {
+            final ActionLinkFactory actionLinkFactory) {
         
         final List<CssMenuItem> menuItems = Lists.newArrayList();
         for (String serviceName : serviceNamesInOrder) {
@@ -137,7 +137,7 @@ public class AppActionsCssMenuFactory extends ComponentFactoryAbstract {
                 final ObjectAdapterMemento serviceAdapterMemento = logicalServiceAction.serviceAdapterMemento;
                 final ObjectAction objectAction = logicalServiceAction.objectAction;
                 final boolean separator = logicalServiceAction.separator;
-                final Builder subMenuItemBuilder = serviceMenuItem.newSubMenuItem(serviceAdapterMemento, objectAction, separator, cssMenuContext);
+                final Builder subMenuItemBuilder = serviceMenuItem.newSubMenuItem(serviceAdapterMemento, objectAction, separator, actionLinkFactory);
                 if (subMenuItemBuilder == null) {
                     // not visible
                     continue;

http://git-wip-us.apache.org/repos/asf/isis/blob/d9a3775a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/header/EntityHeaderPanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/header/EntityHeaderPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/header/EntityHeaderPanel.java
index 509e6a1..6edd1af 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/header/EntityHeaderPanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/header/EntityHeaderPanel.java
@@ -90,18 +90,6 @@ public class EntityHeaderPanel extends PanelAbstract<EntityModel> {
             final List<LinkAndLabel> entityActionLinks = EntityActionUtil.asLinkAndLabelsForAdditionalLinksPanel(model, topLevelActions);
 
             AdditionalLinksPanel.addAdditionalLinks(this, ID_ENTITY_ACTIONS, entityActionLinks, AdditionalLinksPanel.Style.INLINE_LIST);
-//            if(!topLevelActions.isEmpty()) {
-//
-//
-//                final ActionPromptProvider actionPromptProvider = ActionPromptProvider.Util.getFrom(this);
-//                final CssMenuBuilder cssMenuBuilder = new CssMenuBuilder(
-//                        adapterMemento, topLevelActions, linkFactory, actionPromptProvider, null);
-//                final CssMenuPanel cssMenuPanel = cssMenuBuilder.buildPanel(ID_ENTITY_ACTIONS, "Actions");
-//
-//                this.addOrReplace(cssMenuPanel);
-//            } else {
-//                permanentlyHide(ID_ENTITY_ACTIONS);
-//            }
         } else {
             permanentlyHide(ID_ENTITY_ACTIONS);
         }

http://git-wip-us.apache.org/repos/asf/isis/blob/d9a3775a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/ApplicationActionsPanel.css
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/ApplicationActionsPanel.css b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/ApplicationActionsPanel.css
index 9367e66..87a8864 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/ApplicationActionsPanel.css
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/ApplicationActionsPanel.css
@@ -17,6 +17,242 @@
  *  under the License.
  */
 
+
+/* copied from CssMenuPanel.css (since deleted that panel */
+
+
+
+.cssMenuPanel span.clear {
+    line-height: 3px;
+}
+
+.cssMenuPanel .menuh .small {
+    float: none;
+    display: inline;
+}
+
+.cssMenuPanel .menuh p .small {
+    float: none;
+    display: inline;
+}
+
+.menuh a,.menuh p {
+    text-align: left;
+    display: block;
+    white-space: nowrap;
+    margin: 0;
+    padding: 1px;
+    padding-right: 1.6em;
+    padding-left: 0.4em;
+    font-weight: normal;
+    cursor: default;
+}
+
+.cssMenuPanel .menuh a:hover {
+    text-decoration: underline;
+}
+
+.cssMenuPanel .menuh a.top-parent,.cssMenuPanel .menuh p.top-parent {
+    background-position: right center;
+    background-repeat: no-repeat;
+}
+
+.cssMenuPanel .menuh a.top-parent:hover,.cssMenuPanel .menuh p.top-parent:hover	{
+    background-position: right center;
+    background-repeat: no-repeat;
+}
+
+.cssMenuPanel .menuh a.parent,.cssMenuPanel .menuh p.parent {
+    background-position: right center;
+    background-repeat: no-repeat;
+}
+
+.cssMenuPanel .menuh a.parent:hover,.cssMenuPanel .menuh p.parent:hover	{
+    background-position: right center;
+    background-repeat: no-repeat;
+}
+
+.cssMenuPanel .menuh ul {
+    list-style: none;
+    margin: 0;
+    padding: 0;
+    float: left;
+    display: inline;
+}
+
+.cssMenuPanel .menuh li {
+    position: relative;
+    min-height: 1px;
+}
+
+.cssMenuPanel .menuh ul ul {
+    position: absolute;
+    z-index: 500;
+    top: auto;
+    display: none;
+    padding: 1em;
+    margin: -1em 0 0 -1em;
+}
+
+.cssMenuPanel .menuh ul ul ul {
+    top: 0;
+    left: 100%;
+}
+
+.cssMenuPanel span.menuh a:hover {
+    cursor: pointer;
+    z-index: 100;
+}
+
+.cssMenuPanel span.menuh li:hover ul ul,.cssMenuPanel span.menuh li li:hover ul ul,.cssMenuPanel span.menuh li li li:hover ul ul,.cssMenuPanel span.menuh li li li li:hover ul ul {
+    display: none;
+}
+
+.cssMenuPanel span.menuh li:hover ul,.cssMenuPanel span.menuh li li:hover ul,.cssMenuPanel span.menuh li li li:hover ul,.cssMenuPanel span.menuh li li li li:hover ul {
+    display: block;
+}
+
+.cssMenuPanel li.cssSubMenuItem p.disabled {
+    cursor: not-allowed;
+}
+
+.cssMenuPanel li.cssSubMenuItem {
+    margin-left:0;
+}
+
+/******** overrides for grouped actions and entity actions ***************/
+.groupedActions .cssMenuPanel li.cssMenuItemPanel>p.top-parent {
+    display: none;
+}
+
+.groupedActions .cssMenuPanel .menuh ul {
+    position: relative;
+    display: block;
+    float: right;
+    margin: 0;
+    padding: 0;
+}
+
+.groupedActions .cssMenuPanel .menuh ul ul {
+    position: relative;
+    display: block;
+    float: right;
+    margin: 0;
+    padding: 0;
+}
+
+.groupedActions .cssMenuPanel .menuh li,
+.groupedActions .cssMenuPanel .menuh li p	{
+    float:left;
+    display:block;
+    margin-left:10px;
+}
+
+.groupedActions .cssMenuPanel .menuh a,.groupedActions .cssMenuPanel .menuh p
+{
+    display: inline-block;
+    border: none;
+}
+
+.groupedActions .cssMenuPanel .menuh a:link,
+.groupedActions .cssMenuPanel .menuh a:visited,
+.groupedActions .cssMenuPanel .menuh a:active,
+.groupedActions .cssMenuPanel .menuh p {
+    display: block;
+    float: left;
+    height: 30px;
+    line-height: 30px;
+    padding: 0 10px;
+    font-weight: bold;
+    /*font-size: 0.85em;*/
+    border-radius: 4px;
+    -moz-border-radius: 4px;
+    -webkit-border-radius: 4px;
+    text-decoration: none;
+}
+
+.entityActions .cssMenuPanel li.cssMenuItemPanel>p.top-parent {
+    display: none;
+}
+
+.entityActions .cssMenuPanel .menuh ul {
+    position: relative;
+    display: block;
+    float: right;
+    margin: 0 0 10px;
+    padding: 0;
+}
+
+.entityActions .cssMenuPanel .menuh ul ul {
+    position: relative;
+    display: block;
+    float: right;
+    margin: 0;
+    padding: 0;
+}
+
+.entityActions .cssMenuPanel .menuh li {
+    float:left;
+    display:block;
+    margin-left:10px;
+}
+
+.entityActions .cssMenuPanel .menuh li p {
+    float:left;
+    display:block;
+    margin-left:0;
+}
+
+.entityActions .cssMenuPanel .menuh a,
+.entityActions .cssMenuPanel .menuh p {
+    display: inline-block;
+    /*border: none;*/
+}
+
+.entityActions .cssMenuPanel .menuh a,
+.entityActions .cssMenuPanel .menuh a:link,
+.entityActions .cssMenuPanel .menuh a:visited,
+.entityActions .cssMenuPanel .menuh a:active,
+.entityActions .cssMenuPanel .menuh p {
+    display: block;
+    float: left;
+    height: 30px;
+    /*line-height: 30px;*/
+    padding: 4px 10px 0;
+    /*font-size:0.85em;*/
+    border-radius:4px;
+    -moz-border-radius:4px;
+    -webkit-border-radius:4px;
+    text-decoration:none;
+}
+
+.additionalLinkList {
+    float:left;
+    margin:0;
+    padding:0;
+    list-style:none;
+}
+
+.entityCollectionsPanel .panel-heading .additionalLinkList {
+    margin-right: 10px;
+}
+
+.additionalLinkList li {
+    float:left;
+    margin-right:10px;
+    /*	margin-bottom: 2px;*/
+}
+.entityPropertiesPanel .additionalLinkList li {
+    margin-right:0px;
+}
+.entityPropertiesPanel .properties .panel-heading .additionalLinkList {
+    margin-right: -5px;
+}
+
+
+
+
+
 /**
  * Borrowed from http://bootsnipp.com/snippets/featured/multi-level-dropdown-menu-bs3
  */

http://git-wip-us.apache.org/repos/asf/isis/blob/d9a3775a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuBuilder.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuBuilder.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuBuilder.java
deleted file mode 100644
index 0b12d23..0000000
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuBuilder.java
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- *  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.viewer.wicket.ui.components.widgets.cssmenu;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import com.google.common.base.Predicate;
-import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
-import org.apache.isis.applib.filter.Filters;
-import org.apache.isis.core.metamodel.spec.ActionType;
-import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
-import org.apache.isis.core.metamodel.facets.actions.bulk.BulkFacet;
-import org.apache.isis.core.metamodel.facets.actions.notcontributed.NotContributedFacet;
-import org.apache.isis.core.runtime.system.context.IsisContext;
-import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
-import org.apache.isis.viewer.wicket.model.models.ActionPromptProvider;
-import org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu.CssMenuItem.Builder;
-import org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu.CssMenuPanel.Style;
-
-/**
- * Used to build a {@link CssMenuItem} hierarchy from a
- * {@link ObjectAdapterMemento object adapter}'s actions and any contributed
- * actions from services.
- */
-public class CssMenuBuilder {
-
-    /**
-     * The target to invoke upon; may be null in case of bulk actions; not used if a contributed action. 
-     */
-    private final ObjectAdapterMemento adapterMemento;
-    private final List<ObjectAction> actions;
-    private final CssMenuContext cssMenuContext;
-
-    public static class CssMenuContext {
-        private final ActionLinkFactory cssMenuLinkFactory;
-        private final ActionPromptProvider actionPromptProvider;
-        private final Predicate<ObjectAction> objectActionPredicate;
-
-        public CssMenuContext(
-                final ActionLinkFactory cssMenuLinkFactory,
-                final ActionPromptProvider actionPromptProvider,
-                final Predicate<ObjectAction> objectActionPredicate) {
-            this.cssMenuLinkFactory = cssMenuLinkFactory;
-            this.actionPromptProvider = actionPromptProvider;
-            this.objectActionPredicate = objectActionPredicate != null? objectActionPredicate: Predicates.<ObjectAction>alwaysTrue();
-        }
-
-        public CssMenuContext(ActionLinkFactory cssMenuLinkFactory, ActionPromptProvider actionPromptProvider) {
-            this(cssMenuLinkFactory, actionPromptProvider, null);
-        }
-
-        public ActionLinkFactory getCssMenuLinkFactory() {
-            return cssMenuLinkFactory;
-        }
-        public ActionPromptProvider getActionPromptProvider() {
-            return actionPromptProvider;
-        }
-        public Predicate<ObjectAction> getObjectActionPredicate() {
-            return objectActionPredicate;
-        }
-    }
-
-    public CssMenuBuilder(
-            final ObjectAdapterMemento adapterMemento,
-            final List<ObjectAction> actions,
-            final ActionLinkFactory cssMenuLinkFactory,
-            final ActionPromptProvider actionPromptProvider,
-            final Predicate<ObjectAction> objectActionPredicate) {
-        this.adapterMemento = adapterMemento; // may be null
-        this.actions = actions;
-        this.cssMenuContext = new CssMenuContext(cssMenuLinkFactory, actionPromptProvider, objectActionPredicate);
-    }
-
-    public CssMenuPanel buildPanel(
-            final String wicketId,
-            final String rootName) {
-        final CssMenuItem root = CssMenuItem.newMenuItem(rootName).build();
-        addMenuItems(root, actions);
-        final CssMenuPanel cssMenuPanel = new CssMenuPanel(wicketId, Style.SMALL, Collections.singletonList(root));
-        return cssMenuPanel;
-    }
-
-    private void addMenuItems(
-            final CssMenuItem parent,
-            final List<ObjectAction> actions) {
-        addMenuItemsForActionsOfType(parent, actions, ActionType.USER);
-        if ( isExploring() || isPrototyping()) {
-            addMenuItemsForActionsOfType(parent, actions, ActionType.EXPLORATION);
-            addMenuItemsForActionsOfType(parent, actions, ActionType.PROTOTYPE);
-        }
-        if (isDebugMode()) {
-            addMenuItemsForActionsOfType(parent, actions, ActionType.DEBUG);
-        }
-    }
-
-    public boolean isExploring() {
-        return IsisContext.getDeploymentType().isExploring();
-    }
-    public boolean isPrototyping() {
-        return IsisContext.getDeploymentType().isPrototyping();
-    }
-
-    /**
-     * Protected so can be overridden in testing if required.
-     */
-    protected boolean isDebugMode() {
-        // TODO: need to figure out how to switch into debug mode;
-        // probably call a Debug toggle page, and stuff into
-        // Session.getMetaData()
-        return true;
-    }
-
-    private void addMenuItemsForActionsOfType(
-            final CssMenuItem parent,
-            final List<ObjectAction> actions,
-            final ActionType type) {
-        final Collection<ObjectAction> filterActionsOfType = Collections2.filter(actions, Filters.asPredicate(ObjectAction.Filters.ofType(type)));
-        for (final ObjectAction action : filterActionsOfType) {
-            addMenuItem(parent, action);
-        }
-    }
-
-    private void addMenuItem(
-            final CssMenuItem parent,
-            final ObjectAction action) {
-        addMenuItemForAction(parent, action);
-    }
-
-    private void addMenuItemForAction(
-            final CssMenuItem parent,
-            final ObjectAction action) {
-        
-        final NotContributedFacet notContributed = action.getFacet(NotContributedFacet.class);
-        if (notContributed != null && notContributed.toActions()) {
-            // skip if is an action that has been annotated to not be contributed
-            return;
-        }
-
-        Builder subMenuItemBuilder = null;
-        
-        final ObjectAdapterMemento targetAdapterMemento = adapterMemento; // determineAdapterFor(action);
-        if(targetAdapterMemento != null) {
-            // against an entity or a service (if a contributed action)
-            subMenuItemBuilder = parent.newSubMenuItem(targetAdapterMemento, action, false, cssMenuContext);
-        } else {
-            if (action.containsDoOpFacet(BulkFacet.class)) {
-                // ignore fact have no target action; 
-                // we expect that the link factory is able to handle this
-                // (ie will iterate through all objects from a list and invoke in bulk)
-                subMenuItemBuilder = parent.newSubMenuItem(action, cssMenuContext);
-            }
-        }
-        
-        if (subMenuItemBuilder != null) {
-            subMenuItemBuilder.build();
-        }
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/d9a3775a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuItem.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuItem.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuItem.java
index 8d8c157..88caef5 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuItem.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuItem.java
@@ -72,7 +72,7 @@ public class CssMenuItem implements Serializable {
             return this;
         }
 
-        public <T extends Page> Builder link(final Class<T> pageClass) {
+        public <T extends Page> Builder link() {
             final AbstractLink link = new SubmitLink(ID_MENU_LINK); 
             return link(link);
         }
@@ -297,7 +297,7 @@ public class CssMenuItem implements Serializable {
             final ObjectAdapterMemento targetAdapterMemento,
             final ObjectAction objectAction,
             final boolean separator,
-            final CssMenuBuilder.CssMenuContext cssMenuContext) {
+            final ActionLinkFactory actionLinkFactory) {
 
         // check visibility
         final AuthenticationSession session = getAuthenticationSession();
@@ -308,7 +308,7 @@ public class CssMenuItem implements Serializable {
         }
 
         // build the link
-        final LinkAndLabel linkAndLabel = cssMenuContext.getCssMenuLinkFactory().newLink(
+        final LinkAndLabel linkAndLabel = actionLinkFactory.newLink(
                 targetAdapterMemento, objectAction, PageAbstract.ID_MENU_LINK
         );
         if(linkAndLabel==null) {
@@ -339,26 +339,6 @@ public class CssMenuItem implements Serializable {
     }
 
 
-    /**
-     * Creates a {@link Builder} for a submenu item where the provided {@link ActionLinkFactory} is able to provide the target adapter.
-     */
-    public Builder newSubMenuItem(
-            final ObjectAction objectAction,
-            final CssMenuBuilder.CssMenuContext cssMenuContext) {
-
-        final LinkAndLabel linkAndLabel = cssMenuContext.getCssMenuLinkFactory().newLink(null, objectAction, PageAbstract.ID_MENU_LINK);
-
-        final AbstractLink link = linkAndLabel.getLink();
-        final String actionLabel = linkAndLabel.getLabel();
-        Builder builder = this.newSubMenuItem(actionLabel)
-                              .link(link)
-                              .prototyping(linkAndLabel.isPrototype())
-                              .returnsBlobOrClob(linkAndLabel.isBlobOrClob())
-                              .withFacet(objectAction.getFacet(CssClassFacet.class))
-                              .withFacet(objectAction.getFacet(CssClassFaFacet.class));
-        return builder;
-    }
-
     // //////////////////////////////////////////////////////////////
     // Build wicket components from the menu item.
     // //////////////////////////////////////////////////////////////

http://git-wip-us.apache.org/repos/asf/isis/blob/d9a3775a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuPanel.css
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuPanel.css b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuPanel.css
index 87bbf2b..eaeea17 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuPanel.css
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuPanel.css
@@ -16,229 +16,3 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-.cssMenuPanel span.clear {
-	line-height: 3px;
-}
-
-.cssMenuPanel .menuh .small {
-	float: none;
-	display: inline;
-}
-
-.cssMenuPanel .menuh p .small {
-	float: none;
-	display: inline;
-}
-
-.menuh a,.menuh p {
-	text-align: left;
-	display: block;
-	white-space: nowrap;
-	margin: 0;
-	padding: 1px;
-	padding-right: 1.6em;
-	padding-left: 0.4em;
-	font-weight: normal;
-	cursor: default;
-}
-
-.cssMenuPanel .menuh a:hover {
-	text-decoration: underline;
-}
-
-.cssMenuPanel .menuh a.top-parent,.cssMenuPanel .menuh p.top-parent {
-	background-position: right center;
-	background-repeat: no-repeat;
-}
-
-.cssMenuPanel .menuh a.top-parent:hover,.cssMenuPanel .menuh p.top-parent:hover	{
-	background-position: right center;
-	background-repeat: no-repeat;
-}
-
-.cssMenuPanel .menuh a.parent,.cssMenuPanel .menuh p.parent {
-	background-position: right center;
-	background-repeat: no-repeat;
-}
-
-.cssMenuPanel .menuh a.parent:hover,.cssMenuPanel .menuh p.parent:hover	{
-	background-position: right center;
-	background-repeat: no-repeat;
-}
-
-.cssMenuPanel .menuh ul {
-	list-style: none;
-	margin: 0;
-	padding: 0;
-	float: left;
-	display: inline;
-}
-
-.cssMenuPanel .menuh li {
-	position: relative;
-	min-height: 1px;
-}
-
-.cssMenuPanel .menuh ul ul {
-	position: absolute;
-	z-index: 500;
-	top: auto;
-	display: none;
-	padding: 1em;
-	margin: -1em 0 0 -1em;
-}
-
-.cssMenuPanel .menuh ul ul ul {
-	top: 0;
-	left: 100%;
-}
-
-.cssMenuPanel span.menuh a:hover {
-	cursor: pointer;
-	z-index: 100;
-}
-
-.cssMenuPanel span.menuh li:hover ul ul,.cssMenuPanel span.menuh li li:hover ul ul,.cssMenuPanel span.menuh li li li:hover ul ul,.cssMenuPanel span.menuh li li li li:hover ul ul {
-	display: none;
-}
-
-.cssMenuPanel span.menuh li:hover ul,.cssMenuPanel span.menuh li li:hover ul,.cssMenuPanel span.menuh li li li:hover ul,.cssMenuPanel span.menuh li li li li:hover ul {
-	display: block;
-}
-
-.cssMenuPanel li.cssSubMenuItem p.disabled {
-    cursor: not-allowed;
-}
-
-.cssMenuPanel li.cssSubMenuItem {
-    margin-left:0;
-}
-
-/******** overrides for grouped actions and entity actions ***************/
-.groupedActions .cssMenuPanel li.cssMenuItemPanel>p.top-parent {
-	display: none;
-}
-
-.groupedActions .cssMenuPanel .menuh ul {
-	position: relative;
-	display: block;
-	float: right;
-	margin: 0;
-	padding: 0;
-}
-
-.groupedActions .cssMenuPanel .menuh ul ul {
-	position: relative;
-	display: block;
-	float: right;
-	margin: 0;
-	padding: 0;
-}
-
-.groupedActions .cssMenuPanel .menuh li,
-.groupedActions .cssMenuPanel .menuh li p	{
-	float:left;
-	display:block;
-	margin-left:10px;
-}
-
-.groupedActions .cssMenuPanel .menuh a,.groupedActions .cssMenuPanel .menuh p
-	{
-	display: inline-block;
-	border: none;
-}
-
-.groupedActions .cssMenuPanel .menuh a:link,
-.groupedActions .cssMenuPanel .menuh a:visited,
-.groupedActions .cssMenuPanel .menuh a:active,
-.groupedActions .cssMenuPanel .menuh p {
-    display: block;
-    float: left;
-    height: 30px;
-    line-height: 30px;
-    padding: 0 10px;
-    font-weight: bold;
-    /*font-size: 0.85em;*/
-    border-radius: 4px;
-    -moz-border-radius: 4px;
-    -webkit-border-radius: 4px;
-    text-decoration: none;
-}
-
-.entityActions .cssMenuPanel li.cssMenuItemPanel>p.top-parent {
-	display: none;
-}
-
-.entityActions .cssMenuPanel .menuh ul {
-	position: relative;
-	display: block;
-	float: right;
-	margin: 0 0 10px;
-	padding: 0;
-}
-
-.entityActions .cssMenuPanel .menuh ul ul {
-	position: relative;
-	display: block;
-	float: right;
-	margin: 0;
-	padding: 0;
-}
-
-.entityActions .cssMenuPanel .menuh li {
-	float:left;
-	display:block;
-	margin-left:10px;
-}
-
-.entityActions .cssMenuPanel .menuh li p {
-    float:left;
-    display:block;
-    margin-left:0;
-}
-
-.entityActions .cssMenuPanel .menuh a,
-.entityActions .cssMenuPanel .menuh p {
-	display: inline-block;
-	/*border: none;*/
-}
-
-.entityActions .cssMenuPanel .menuh a,
-.entityActions .cssMenuPanel .menuh a:link,
-.entityActions .cssMenuPanel .menuh a:visited,
-.entityActions .cssMenuPanel .menuh a:active,
-.entityActions .cssMenuPanel .menuh p {
-    display: block;
-    float: left;
-    height: 30px;
-    /*line-height: 30px;*/
-	padding: 4px 10px 0;
-	/*font-size:0.85em;*/
-    border-radius:4px;
-    -moz-border-radius:4px;
-    -webkit-border-radius:4px;
-    text-decoration:none;
-}
-
-.additionalLinkList {
-    float:left;
-    margin:0;
-    padding:0;
-    list-style:none;
-}
-
-.entityCollectionsPanel .panel-heading .additionalLinkList {
-	margin-right: 10px;
-}
-
-.additionalLinkList li {
-	float:left;
-	margin-right:10px;
-/*	margin-bottom: 2px;*/
-}
-.entityPropertiesPanel .additionalLinkList li {
-	margin-right:0px;
-}
-.entityPropertiesPanel .properties .panel-heading .additionalLinkList {
-	margin-right: -5px;
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/d9a3775a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuPanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuPanel.java
index 7717c68..742f343 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuPanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuPanel.java
@@ -24,45 +24,18 @@ import org.apache.wicket.markup.head.IHeaderResponse;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.repeater.RepeatingView;
 import org.apache.wicket.model.util.ListModel;
-import org.apache.isis.core.commons.lang.StringExtensions;
 import org.apache.isis.viewer.wicket.ui.ComponentFactory;
 import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
 import org.apache.isis.viewer.wicket.ui.panels.PanelUtil;
-import org.apache.isis.viewer.wicket.ui.util.CssClassAppender;
 
 /**
  * Top level panel for a CSS menu, consisting of a number of unparented
  * {@link CssMenuItem}s.
- * 
- * <p>
- * The {@link Style} enum allows the presentation to be altered.
  */
 public class CssMenuPanel extends PanelAbstract<CssMenuPanel.ListOfCssMenuItemsModel> {
 
     private static final long serialVersionUID = 1L;
 
-    public enum Style {
-        REGULAR {
-            @Override
-            public String getAppendValue() {
-                return null; // ie, append nothing
-            }
-        },
-        SMALL {
-            @Override
-            public String getAppendValue() {
-                return toString();
-            }
-        };
-        @Override
-        public String toString() {
-            return StringExtensions.toCamelCase(name());
-        }
-
-        public String getAppendValue() {
-            return toString();
-        }
-    }
 
     static class ListOfCssMenuItemsModel extends ListModel<CssMenuItem> {
 
@@ -73,15 +46,11 @@ public class CssMenuPanel extends PanelAbstract<CssMenuPanel.ListOfCssMenuItemsM
         }
     }
 
-    private final StyleAppender styleAppender;
     static final String ID_MENU_ITEMS = "menuItems";
     static final String ID_MENU_ITEM = "menuItem";
 
-    public CssMenuPanel(final String id, final Style style, final List<CssMenuItem> topLevelMenuItems) {
+    private CssMenuPanel(final String id, final List<CssMenuItem> topLevelMenuItems) {
         super(id, new ListOfCssMenuItemsModel(topLevelMenuItems));
-        this.styleAppender = new StyleAppender(style);
-
-        //add(styleAppender);
 
         final RepeatingView menuItemRv = new RepeatingView(CssMenuPanel.ID_MENU_ITEMS);
         add(menuItemRv);
@@ -95,15 +64,6 @@ public class CssMenuPanel extends PanelAbstract<CssMenuPanel.ListOfCssMenuItemsM
 
     }
 
-    static final class StyleAppender extends CssClassAppender {
-
-        private static final long serialVersionUID = 1L;
-
-        public StyleAppender(final Style style) {
-            super(style.getAppendValue());
-        }
-    }
-
     /**
      * Because there is no {@link ComponentFactory} for this component,
      * its CSS must be contributed in this way instead (also meaning its CSS is not bundled).


[2/5] isis git commit: ISIS-537: refactored EntityHeaderPanel to use additional links instead of CssMenuBuilder.

Posted by da...@apache.org.
ISIS-537: refactored EntityHeaderPanel to use additional links instead of CssMenuBuilder.


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

Branch: refs/heads/master
Commit: de0cc868fb520403c9fc9f574fe1b740d03d2e3b
Parents: 3d83695
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Fri Nov 28 09:01:50 2014 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Fri Nov 28 16:10:54 2014 +0000

----------------------------------------------------------------------
 .../additionallinks/AdditionalLinksPanel.java   |  2 +
 .../additionallinks/EntityActionUtil.java       | 79 ++++++++++++-----
 .../components/collection/CollectionPanel.java  |  5 +-
 .../entity/header/EntityHeaderPanel.java        | 93 +++++---------------
 .../entity/properties/EntityPropertiesForm.java | 12 +--
 .../components/scalars/ScalarPanelAbstract.java |  2 -
 .../scalars/ScalarPanelTextFieldAbstract.java   |  9 +-
 .../isisapplib/IsisBlobOrClobPanelAbstract.java |  5 +-
 .../scalars/primitive/BooleanPanel.java         |  4 +-
 .../scalars/reference/ReferencePanel.java       |  3 +-
 .../valuechoices/ValueChoicesSelect2Panel.java  |  5 +-
 .../src/main/java/dom/todo/ToDoItem.layout.json | 11 ++-
 .../src/main/webapp/WEB-INF/isis.properties     |  1 -
 13 files changed, 99 insertions(+), 132 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/de0cc868/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/additionallinks/AdditionalLinksPanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/additionallinks/AdditionalLinksPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/additionallinks/AdditionalLinksPanel.java
index 81d1954..68f4df5 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/additionallinks/AdditionalLinksPanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/additionallinks/AdditionalLinksPanel.java
@@ -47,6 +47,8 @@ public class AdditionalLinksPanel extends PanelAbstract<ListOfLinksModel> {
     private static final String ID_ADDITIONAL_LINK_FONT_AWESOME = "additionalLinkFontAwesome";
     private static final String ID_ADDITIONAL_LINK_TITLE = "additionalLinkTitle";
 
+    public static final String ID_ADDITIONAL_LINK = "additionalLink";
+
     public enum Style {
         INLINE_LIST {
             @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/de0cc868/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/additionallinks/EntityActionUtil.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/additionallinks/EntityActionUtil.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/additionallinks/EntityActionUtil.java
index a2ff4bc..bd44fbc 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/additionallinks/EntityActionUtil.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/additionallinks/EntityActionUtil.java
@@ -53,34 +53,29 @@ public final class EntityActionUtil {
 
     private final static MemberOrderFacetComparator memberOrderFacetComparator = new MemberOrderFacetComparator(false);
 
-    public static List<LinkAndLabel> appendAdditionalLinksForAssociation(
+    public static List<LinkAndLabel> getEntityActionLinksForAssociation(
             final ScalarModel scalarModel,
-            final DeploymentType deploymentType,
-            final String id,
-            final List<LinkAndLabel> entityActionLinks) {
+            final DeploymentType deploymentType) {
+        final List<LinkAndLabel> entityActions = Lists.newArrayList();
 
         if (scalarModel.getKind() != ScalarModel.Kind.PROPERTY) {
-            return entityActionLinks;
-        }
+            return entityActions;
+        } else {
+            final ObjectAdapterMemento parentMemento = scalarModel.getParentObjectAdapterMemento();
+            final EntityModel parentEntityModel = new EntityModel(parentMemento);
+            final OneToOneAssociation oneToOneAssociation = scalarModel.getPropertyMemento().getProperty();
 
-        final ObjectAdapterMemento parentMemento = scalarModel.getParentObjectAdapterMemento();
-        final EntityModel parentEntityModel = new EntityModel(parentMemento);
-        final OneToOneAssociation oneToOneAssociation = scalarModel.getPropertyMemento().getProperty();
+            final List<ObjectAction> associatedActions = getObjectActionsForAssociation(parentEntityModel, oneToOneAssociation, deploymentType);
 
-        return appendAdditionalLinksForAssociation(
-                parentEntityModel,
-                oneToOneAssociation,
-                deploymentType,
-                id,
-                entityActionLinks);
+            entityActions.addAll(asLinkAndLabelsForAdditionalLinksPanel(parentEntityModel, associatedActions));
+            return entityActions;
+        }
     }
 
-    public static List<LinkAndLabel> appendAdditionalLinksForAssociation(
+    public static List<ObjectAction> getObjectActionsForAssociation(
             final EntityModel entityModel,
             final ObjectAssociation association,
-            final DeploymentType deploymentType,
-            final String linkId,
-            final List<LinkAndLabel> entityActionLinks) {
+            final DeploymentType deploymentType) {
         final List<ObjectAction> associatedActions = Lists.newArrayList();
 
         addActions(ActionType.USER, entityModel, association, associatedActions);
@@ -98,20 +93,29 @@ public final class EntityActionUtil {
                 return memberOrderFacetComparator.compare(m1, m2);
             }
         });
+        return associatedActions;
+    }
+
+    /**
+     * Converts an {@link org.apache.isis.viewer.wicket.model.models.EntityModel} and a (subset of its) {@link org.apache.isis.core.metamodel.spec.feature.ObjectAction}s into a
+     * list of {@link org.apache.isis.viewer.wicket.model.links.LinkAndLabel}s intended to be apassed
+     * to the {@link org.apache.isis.viewer.wicket.ui.components.additionallinks.AdditionalLinksPanel}.
+     */
+    public static List<LinkAndLabel> asLinkAndLabelsForAdditionalLinksPanel(
+            final EntityModel entityModel,
+            final List<ObjectAction> actions) {
 
+        final String linkId = AdditionalLinksPanel.ID_ADDITIONAL_LINK;
         final ActionLinkFactory linkFactory = new EntityActionLinkFactory(entityModel);
 
         final ObjectAdapterMemento adapterMemento = entityModel.getObjectAdapterMemento();
-        final List<LinkAndLabel> linkAndLabels = Lists.transform(associatedActions, new Function<ObjectAction, LinkAndLabel>() {
+        return Lists.transform(actions, new Function<ObjectAction, LinkAndLabel>() {
 
             @Override
             public LinkAndLabel apply(ObjectAction objectAction) {
                 return linkFactory.newLink(adapterMemento, objectAction, linkId);
             }
         });
-        entityActionLinks.addAll(linkAndLabels);
-
-        return entityActionLinks;
     }
 
     private static List<ObjectAction> addActions(
@@ -139,4 +143,33 @@ public final class EntityActionUtil {
     }
 
 
+    public static void addTopLevelActions(
+            final ObjectAdapter adapter,
+            final ActionType actionType,
+            final List<ObjectAction> topLevelActions,
+            final AuthenticationSession authenticationSession) {
+
+        final ObjectSpecification adapterSpec = adapter.getSpecification();
+
+        @SuppressWarnings({ "unchecked", "deprecation" })
+        Filter<ObjectAction> filter = Filters.and(
+                ObjectAction.Filters.memberOrderNotAssociationOf(adapterSpec),
+                ObjectAction.Filters.dynamicallyVisible(authenticationSession, adapter, Where.ANYWHERE),
+                ObjectAction.Filters.notBulkOnly(),
+                ObjectAction.Filters.excludeWizardActions(adapterSpec));
+
+        final List<ObjectAction> userActions = adapterSpec.getObjectActions(actionType, Contributed.INCLUDED, filter);
+        topLevelActions.addAll(userActions);
+    }
+
+    public static List<ObjectAction> getTopLevelActions(final ObjectAdapter adapter, final DeploymentType deploymentType, final AuthenticationSession authenticationSession) {
+        final List<ObjectAction> topLevelActions = Lists.newArrayList();
+
+        addTopLevelActions(adapter, ActionType.USER, topLevelActions, authenticationSession);
+        if(deploymentType.isPrototyping()) {
+            addTopLevelActions(adapter, ActionType.EXPLORATION, topLevelActions, authenticationSession);
+            addTopLevelActions(adapter, ActionType.PROTOTYPE, topLevelActions, authenticationSession);
+        }
+        return topLevelActions;
+    }
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/de0cc868/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/CollectionPanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/CollectionPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/CollectionPanel.java
index 2f116f9..5609289 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/CollectionPanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/CollectionPanel.java
@@ -26,6 +26,7 @@ import com.google.common.collect.Lists;
 import org.apache.wicket.Component;
 import org.apache.wicket.feedback.ComponentFeedbackMessageFilter;
 import org.apache.wicket.markup.html.basic.Label;
+import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
 import org.apache.isis.core.runtime.system.DeploymentType;
 import org.apache.isis.core.runtime.system.context.IsisContext;
@@ -78,7 +79,9 @@ public class CollectionPanel extends PanelAbstract<EntityCollectionModel> implem
 
         final List<LinkAndLabel> entityActionLinks = Lists.newArrayList();
 
-        EntityActionUtil.appendAdditionalLinksForAssociation(entityModel, otma, getDeploymentType(), "additionalLink", entityActionLinks);
+        final List<ObjectAction> associatedActions = EntityActionUtil.getObjectActionsForAssociation(entityModel, otma, getDeploymentType());
+
+        entityActionLinks.addAll(EntityActionUtil.asLinkAndLabelsForAdditionalLinksPanel(entityModel, associatedActions));
 
         collectionModel.addEntityActions(entityActionLinks);
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/de0cc868/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/header/EntityHeaderPanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/header/EntityHeaderPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/header/EntityHeaderPanel.java
index 8ee749c..509e6a1 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/header/EntityHeaderPanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/header/EntityHeaderPanel.java
@@ -20,32 +20,20 @@
 package org.apache.isis.viewer.wicket.ui.components.entity.header;
 
 import java.util.List;
-import com.google.common.collect.Lists;
-import com.google.inject.Inject;
 import org.apache.wicket.Component;
 import org.apache.wicket.markup.head.IHeaderResponse;
-import org.apache.isis.applib.annotation.Where;
-import org.apache.isis.applib.filter.Filter;
-import org.apache.isis.applib.filter.Filters;
-import org.apache.isis.core.commons.authentication.AuthenticationSession;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.spec.ActionType;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.spec.feature.Contributed;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.core.runtime.system.DeploymentType;
 import org.apache.isis.core.runtime.system.context.IsisContext;
+import org.apache.isis.viewer.wicket.model.links.LinkAndLabel;
 import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
-import org.apache.isis.viewer.wicket.model.models.ActionPromptProvider;
 import org.apache.isis.viewer.wicket.model.models.EntityModel;
-import org.apache.isis.viewer.wicket.model.models.ImageResourceCache;
 import org.apache.isis.viewer.wicket.ui.ComponentFactory;
 import org.apache.isis.viewer.wicket.ui.ComponentType;
+import org.apache.isis.viewer.wicket.ui.components.additionallinks.AdditionalLinksPanel;
+import org.apache.isis.viewer.wicket.ui.components.additionallinks.EntityActionUtil;
 import org.apache.isis.viewer.wicket.ui.components.entity.EntityActionLinkFactory;
-import org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu.CssMenuBuilder;
-import org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu.CssMenuPanel;
-import org.apache.isis.viewer.wicket.ui.pages.PageClassRegistry;
-import org.apache.isis.viewer.wicket.ui.pages.PageClassRegistryAccessor;
 import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
 import org.apache.isis.viewer.wicket.ui.panels.PanelUtil;
 
@@ -97,53 +85,28 @@ public class EntityHeaderPanel extends PanelAbstract<EntityModel> {
         final ObjectAdapter adapter = model.getObject();
         final ObjectAdapterMemento adapterMemento = model.getObjectAdapterMemento();
         if (adapter != null) {
-            final List<ObjectAction> topLevelActions = getTopLevelActions(adapter);
-
-            if(!topLevelActions.isEmpty()) {
-                final ActionPromptProvider actionPromptProvider = ActionPromptProvider.Util.getFrom(this);
-                final CssMenuBuilder cssMenuBuilder = new CssMenuBuilder(
-                        adapterMemento, topLevelActions, linkFactory, actionPromptProvider, null);
-                final CssMenuPanel cssMenuPanel = cssMenuBuilder.buildPanel(ID_ENTITY_ACTIONS, "Actions");
-
-                this.addOrReplace(cssMenuPanel);
-            } else {
-                permanentlyHide(ID_ENTITY_ACTIONS);
-            }
+            final List<ObjectAction> topLevelActions = EntityActionUtil.getTopLevelActions(adapter, getDeploymentType(), getAuthenticationSession());
+
+            final List<LinkAndLabel> entityActionLinks = EntityActionUtil.asLinkAndLabelsForAdditionalLinksPanel(model, topLevelActions);
+
+            AdditionalLinksPanel.addAdditionalLinks(this, ID_ENTITY_ACTIONS, entityActionLinks, AdditionalLinksPanel.Style.INLINE_LIST);
+//            if(!topLevelActions.isEmpty()) {
+//
+//
+//                final ActionPromptProvider actionPromptProvider = ActionPromptProvider.Util.getFrom(this);
+//                final CssMenuBuilder cssMenuBuilder = new CssMenuBuilder(
+//                        adapterMemento, topLevelActions, linkFactory, actionPromptProvider, null);
+//                final CssMenuPanel cssMenuPanel = cssMenuBuilder.buildPanel(ID_ENTITY_ACTIONS, "Actions");
+//
+//                this.addOrReplace(cssMenuPanel);
+//            } else {
+//                permanentlyHide(ID_ENTITY_ACTIONS);
+//            }
         } else {
             permanentlyHide(ID_ENTITY_ACTIONS);
         }
     }
 
-    private List<ObjectAction> getTopLevelActions(final ObjectAdapter adapter) {
-        final List<ObjectAction> topLevelActions = Lists.newArrayList();
-        
-        addTopLevelActions(adapter, ActionType.USER, topLevelActions);
-        if(getDeploymentType().isPrototyping()) {
-            addTopLevelActions(adapter, ActionType.EXPLORATION, topLevelActions);
-            addTopLevelActions(adapter, ActionType.PROTOTYPE, topLevelActions);
-        }
-        return topLevelActions;
-    }
-
-    private void addTopLevelActions(
-            final ObjectAdapter adapter,
-            final ActionType actionType,
-            final List<ObjectAction> topLevelActions) {
-
-        final ObjectSpecification adapterSpec = adapter.getSpecification();
-        final AuthenticationSession authenticationSession = getAuthenticationSession();
-
-        @SuppressWarnings({ "unchecked", "deprecation" })
-        Filter<ObjectAction> filter = Filters.and(
-                ObjectAction.Filters.memberOrderNotAssociationOf(adapterSpec),
-                ObjectAction.Filters.dynamicallyVisible(authenticationSession, adapter, Where.ANYWHERE),
-                ObjectAction.Filters.notBulkOnly(),
-                ObjectAction.Filters.excludeWizardActions(adapterSpec));
-
-        final List<ObjectAction> userActions = adapterSpec.getObjectActions(actionType, Contributed.INCLUDED, filter);
-        topLevelActions.addAll(userActions);
-    }
-
     @Override
     public void renderHead(IHeaderResponse response) {
         super.renderHead(response);
@@ -151,28 +114,12 @@ public class EntityHeaderPanel extends PanelAbstract<EntityModel> {
         PanelUtil.renderHead(response, getClass());
     }
 
-    // ///////////////////////////////////////////////////////////////////
-    // Convenience
-    // ///////////////////////////////////////////////////////////////////
-
-    protected PageClassRegistry getPageClassRegistry() {
-        final PageClassRegistryAccessor pcra = (PageClassRegistryAccessor) getApplication();
-        return pcra.getPageClassRegistry();
-    }
 
 
     // ///////////////////////////////////////////////
     // Dependency Injection
     // ///////////////////////////////////////////////
 
-    @Inject
-    private ImageResourceCache imageCache;
-
-    protected ImageResourceCache getImageCache() {
-        return imageCache;
-    }
-
-
     protected DeploymentType getDeploymentType() {
         return IsisContext.getDeploymentType();
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/de0cc868/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesForm.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesForm.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesForm.java
index bad729d..aa40774 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesForm.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesForm.java
@@ -61,6 +61,7 @@ import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.ObjectSpecifications;
 import org.apache.isis.core.metamodel.spec.ObjectSpecifications.MemberGroupLayoutHint;
 import org.apache.isis.core.metamodel.spec.feature.Contributed;
+import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
 import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
 import org.apache.isis.core.runtime.memento.Memento;
@@ -264,9 +265,6 @@ public class EntityPropertiesForm extends FormAbstract<ObjectAdapter> implements
         return !groupNames.isEmpty();
     }
 
-    public static final String ID_ADDITIONAL_LINK = "additionalLink";
-
-
     private void addPropertyToForm(
             final EntityModel entityModel,
             final OneToOneAssociation association,
@@ -278,11 +276,9 @@ public class EntityPropertiesForm extends FormAbstract<ObjectAdapter> implements
         final ScalarModel scalarModel = entityModel.getPropertyModel(pm);
         final Component component = getComponentFactoryRegistry().addOrReplaceComponent(container, ID_PROPERTY, ComponentType.SCALAR_NAME_AND_VALUE, scalarModel);
 
-        EntityActionUtil.appendAdditionalLinksForAssociation(
-                entityModel, otoa,
-                getDeploymentType(),
-                ID_ADDITIONAL_LINK,
-                entityActions);
+        final List<ObjectAction> associatedActions = EntityActionUtil.getObjectActionsForAssociation(entityModel, otoa, getDeploymentType());
+
+        entityActions.addAll(EntityActionUtil.asLinkAndLabelsForAdditionalLinksPanel(entityModel, associatedActions));
 
         if(!renderedFirstField) {
             component.add(new CssClassAppender("first-field"));

http://git-wip-us.apache.org/repos/asf/isis/blob/de0cc868/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
index 2edf2ea..ad93822 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
@@ -69,8 +69,6 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
     private static final String ID_ASSOCIATED_ACTION_LINKS_BELOW = "associatedActionLinksBelow";
     private static final String ID_ASSOCIATED_ACTION_LINKS_RIGHT = "associatedActionLinksRight";
 
-    protected static final String ID_ADDITIONAL_LINK = "additionalLink";
-
     private static final String ID_FEEDBACK = "feedback";
 
     public enum CompactType {

http://git-wip-us.apache.org/repos/asf/isis/blob/de0cc868/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
index 1e1ba98..f47e54d 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
@@ -21,9 +21,7 @@ package org.apache.isis.viewer.wicket.ui.components.scalars;
 
 import java.io.Serializable;
 import java.util.List;
-
 import com.google.common.base.Strings;
-import com.google.common.collect.Lists;
 import org.apache.wicket.AttributeModifier;
 import org.apache.wicket.Component;
 import org.apache.wicket.MarkupContainer;
@@ -35,13 +33,11 @@ import org.apache.wicket.markup.html.form.TextField;
 import org.apache.wicket.markup.html.panel.Fragment;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
-
 import org.apache.isis.core.metamodel.facets.SingleIntValueFacet;
-import org.apache.isis.core.metamodel.facets.propparam.maxlen.MaxLengthFacet;
 import org.apache.isis.core.metamodel.facets.objpropparam.typicallen.TypicalLengthFacet;
+import org.apache.isis.core.metamodel.facets.propparam.maxlen.MaxLengthFacet;
 import org.apache.isis.viewer.wicket.model.links.LinkAndLabel;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
-import org.apache.isis.viewer.wicket.ui.components.additionallinks.AdditionalLinksPanel;
 import org.apache.isis.viewer.wicket.ui.components.additionallinks.EntityActionUtil;
 import org.apache.isis.viewer.wicket.ui.components.widgets.bootstrap.FormGroup;
 import org.apache.isis.viewer.wicket.ui.util.CssClassAppender;
@@ -106,9 +102,8 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
         final Label scalarName = new Label(ID_SCALAR_NAME, getRendering().getLabelCaption(textField));
 
         // find the links...
-        final List<LinkAndLabel> entityActions = Lists.newArrayList();
 
-        EntityActionUtil.appendAdditionalLinksForAssociation(this.scalarModel, getDeploymentType(), ID_ADDITIONAL_LINK, entityActions);
+        final List<LinkAndLabel> entityActions = EntityActionUtil.getEntityActionLinksForAssociation(this.scalarModel, getDeploymentType());
 
         addPositioningCssTo(labelIfRegular, entityActions);
 

http://git-wip-us.apache.org/repos/asf/isis/blob/de0cc868/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java
index f78b265..b6c6c8e 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java
@@ -26,7 +26,6 @@ import java.io.IOException;
 import java.util.List;
 import javax.activation.MimeType;
 import javax.imageio.ImageIO;
-import com.google.common.collect.Lists;
 import org.apache.wicket.Component;
 import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.ajax.AjaxRequestTarget;
@@ -96,9 +95,7 @@ public abstract class IsisBlobOrClobPanelAbstract<T extends NamedWithMimeType> e
         labelIfRegular.add(scalarName);
 
         // find the links...
-        final List<LinkAndLabel> entityActions = Lists.newArrayList();
-
-        EntityActionUtil.appendAdditionalLinksForAssociation(this.scalarModel, getDeploymentType(), ID_ADDITIONAL_LINK, entityActions);
+        final List<LinkAndLabel> entityActions = EntityActionUtil.getEntityActionLinksForAssociation(this.scalarModel, getDeploymentType());
 
         addPositioningCssTo(labelIfRegular, entityActions);
 

http://git-wip-us.apache.org/repos/asf/isis/blob/de0cc868/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java
index 71d2508..cd57534 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java
@@ -23,7 +23,6 @@ import de.agilecoders.wicket.extensions.markup.html.bootstrap.form.checkboxx.Che
 import de.agilecoders.wicket.extensions.markup.html.bootstrap.form.checkboxx.CheckBoxXConfig;
 
 import java.util.List;
-import com.google.common.collect.Lists;
 import org.apache.wicket.AttributeModifier;
 import org.apache.wicket.Component;
 import org.apache.wicket.MarkupContainer;
@@ -82,8 +81,7 @@ public class BooleanPanel extends ScalarPanelAbstract {
         final Label scalarName = new Label(ID_SCALAR_NAME, getRendering().getLabelCaption(checkBox));
         labelIfRegular.add(scalarName);
 
-        final List<LinkAndLabel> entityActions = Lists.newArrayList();
-        EntityActionUtil.appendAdditionalLinksForAssociation(this.scalarModel, getDeploymentType(), ID_ADDITIONAL_LINK, entityActions);
+        final List<LinkAndLabel> entityActions = EntityActionUtil.getEntityActionLinksForAssociation(this.scalarModel, getDeploymentType());
 
         addPositioningCssTo(labelIfRegular, entityActions);
 

http://git-wip-us.apache.org/repos/asf/isis/blob/de0cc868/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
index 0a9e692..e580d77 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
@@ -126,8 +126,7 @@ public class ReferencePanel extends ScalarPanelAbstract {
         labelIfRegular.add(scalarName);
 
         // find the links...
-        final List<LinkAndLabel> entityActions = Lists.newArrayList();
-        EntityActionUtil.appendAdditionalLinksForAssociation(this.scalarModel, getDeploymentType(), ID_ADDITIONAL_LINK, entityActions);
+        final List<LinkAndLabel> entityActions = EntityActionUtil.getEntityActionLinksForAssociation(this.scalarModel, getDeploymentType());
 
         addPositioningCssTo(labelIfRegular, entityActions);
 

http://git-wip-us.apache.org/repos/asf/isis/blob/de0cc868/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/ValueChoicesSelect2Panel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/ValueChoicesSelect2Panel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/ValueChoicesSelect2Panel.java
index 699865b..346a40f 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/ValueChoicesSelect2Panel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/ValueChoicesSelect2Panel.java
@@ -38,7 +38,6 @@ import org.apache.isis.viewer.wicket.model.links.LinkAndLabel;
 import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.model.models.ScalarModelWithPending;
-import org.apache.isis.viewer.wicket.ui.components.additionallinks.AdditionalLinksPanel;
 import org.apache.isis.viewer.wicket.ui.components.additionallinks.EntityActionUtil;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelAbstract;
 import org.apache.isis.viewer.wicket.ui.components.widgets.ObjectAdapterMementoProviderAbstract;
@@ -86,9 +85,7 @@ public class ValueChoicesSelect2Panel extends ScalarPanelAbstract implements Sca
         labelIfRegular.addOrReplace(scalarName);
 
         // find the links...
-        final List<LinkAndLabel> entityActions = Lists.newArrayList();
-
-        EntityActionUtil.appendAdditionalLinksForAssociation(this.scalarModel, getDeploymentType(), ID_ADDITIONAL_LINK, entityActions);
+        final List<LinkAndLabel> entityActions = EntityActionUtil.getEntityActionLinksForAssociation(this.scalarModel, getDeploymentType());
 
         addPositioningCssTo(labelIfRegular, entityActions);
 

http://git-wip-us.apache.org/repos/asf/isis/blob/de0cc868/example/application/todoapp/dom/src/main/java/dom/todo/ToDoItem.layout.json
----------------------------------------------------------------------
diff --git a/example/application/todoapp/dom/src/main/java/dom/todo/ToDoItem.layout.json b/example/application/todoapp/dom/src/main/java/dom/todo/ToDoItem.layout.json
index 706e20e..0619d46 100644
--- a/example/application/todoapp/dom/src/main/java/dom/todo/ToDoItem.layout.json
+++ b/example/application/todoapp/dom/src/main/java/dom/todo/ToDoItem.layout.json
@@ -37,9 +37,8 @@
                                 }
                             },
                             "analyseCategory": {
-                                "cssClassFa": {
-                                     "value": "fa fa-pie-chart"
-                                }
+                                "cssClass": { "value": "btn-default" },
+                                "cssClassFa": { "value": "fa fa-pie-chart" }
                             }
                         }
                     },
@@ -53,6 +52,7 @@
                                 "describedAs": {
                                     "value": "Update this todo item as complete"
                                 },
+                                "cssClass": { "value": "btn-success" },
                                 "cssClassFa": { "value": "fa fa-thumbs-up" }
                             },
                             "notYetCompleted": {
@@ -60,6 +60,7 @@
                                 "describedAs": {
                                     "value": "Update this todo item as not yet complete"
                                 },
+                                "cssClass": { "value": "btn-info" },
                                 "cssClassFa": { "value": "fa fa-thumbs-down" }
                             },
                             "scheduleExplicitly": {
@@ -151,10 +152,11 @@
                 "disabled": {},
                 "actions": {
                     "add":{
+                        "cssClass": { "value": "btn-default" },
                         "cssClassFa": { "value": "fa fa-plus-square" }
                     },
                     "remove": {
-                        "cssClass": { "value": "x-caution btn-danger" },
+                        "cssClass": { "value": "x-caution btn-default" },
                         "cssClassFa": { "value": "fa fa-minus-square" }
                     }
                 },
@@ -190,6 +192,7 @@
             "describedAs": {
                 "value": "Create a new todo item from this one"
             },
+            "cssClass": { "value": "btn-default" },
             "cssClassFa": { "value": "fa fa-copy fa-lg" }
         }
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/de0cc868/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 3b53f77..e2f1027 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
@@ -124,7 +124,6 @@ isis.reflector.facet.cssClassFa.patterns=\
                         install.*:fa-wrench
 
 isis.reflector.facet.cssClass.patterns=\
-                        update.*:btn-default,\
                         delete.*:btn-warning,\
                         .*:btn-primary
 


[4/5] isis git commit: ISIS-537: further deletion of unused CssMenuItem stuff.

Posted by da...@apache.org.
ISIS-537: further deletion of unused CssMenuItem stuff.


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

Branch: refs/heads/master
Commit: fd3e6eeff930b7a9d8a5a3db6ea7e881f18c388f
Parents: d9a3775
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Fri Nov 28 13:30:17 2014 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Fri Nov 28 16:10:56 2014 +0000

----------------------------------------------------------------------
 .../wicket/viewer/IsisWicketApplication.java    |  4 --
 .../cssmenu/AppActionsCssMenuFactory.java       |  3 +-
 .../cssmenu/ApplicationActionsPanel.java        | 17 ++---
 .../widgets/cssmenu/CssMenuItemPanel.css        | 20 ------
 .../widgets/cssmenu/CssMenuItemPanel.html       | 34 ---------
 .../widgets/cssmenu/CssMenuItemPanel.java       | 44 ------------
 .../cssmenu/CssMenuItemPanelAbstract.java       |  8 ---
 .../components/widgets/cssmenu/CssMenuPanel.css | 18 -----
 .../widgets/cssmenu/CssMenuPanel.html           | 32 ---------
 .../widgets/cssmenu/CssMenuPanel.java           | 76 --------------------
 .../widgets/cssmenu/CssSubMenuItemsPanel.css    | 20 ------
 11 files changed, 10 insertions(+), 266 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/fd3e6eef/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java b/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java
index e1ea9f0..332a7d7 100644
--- a/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java
+++ b/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java
@@ -94,8 +94,6 @@ import org.apache.isis.viewer.wicket.ui.app.registry.ComponentFactoryRegistry;
 import org.apache.isis.viewer.wicket.ui.app.registry.ComponentFactoryRegistryAccessor;
 import org.apache.isis.viewer.wicket.ui.components.additionallinks.AdditionalLinksPanel;
 import org.apache.isis.viewer.wicket.ui.components.scalars.string.MultiLineStringPanel;
-import org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu.CssMenuItemPanel;
-import org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu.CssSubMenuItemsPanel;
 import org.apache.isis.viewer.wicket.ui.components.widgets.select2.Select2BootstrapCssReference;
 import org.apache.isis.viewer.wicket.ui.components.widgets.select2.Select2JsReference;
 import org.apache.isis.viewer.wicket.ui.pages.PageClassRegistry;
@@ -495,8 +493,6 @@ public class IsisWicketApplication extends AuthenticatedWebApplication implement
 
         // components without factories
         references.add(PanelUtil.cssResourceReferenceFor(AdditionalLinksPanel.class));
-        references.add(PanelUtil.cssResourceReferenceFor(CssSubMenuItemsPanel.class));
-        references.add(PanelUtil.cssResourceReferenceFor(CssMenuItemPanel.class));
 
         // non-conforming component factories
         references.add(PanelUtil.cssResourceReferenceFor(MultiLineStringPanel.class));

http://git-wip-us.apache.org/repos/asf/isis/blob/fd3e6eef/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/appactions/cssmenu/AppActionsCssMenuFactory.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/appactions/cssmenu/AppActionsCssMenuFactory.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/appactions/cssmenu/AppActionsCssMenuFactory.java
index 4c7d806..29a604a 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/appactions/cssmenu/AppActionsCssMenuFactory.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/appactions/cssmenu/AppActionsCssMenuFactory.java
@@ -46,10 +46,9 @@ import org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu.ActionLinkFac
 import org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu.ApplicationActionsPanel;
 import org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu.CssMenuItem;
 import org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu.CssMenuItem.Builder;
-import org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu.CssMenuPanel;
 
 /**
- * {@link ComponentFactory} for a {@link CssMenuPanel} to represent the
+ * {@link ComponentFactory} for a {@link org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu.ApplicationActionsPanel} to represent the
  * {@link ApplicationActionsModel application action}s.
  */
 public class AppActionsCssMenuFactory extends ComponentFactoryAbstract {

http://git-wip-us.apache.org/repos/asf/isis/blob/fd3e6eef/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/ApplicationActionsPanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/ApplicationActionsPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/ApplicationActionsPanel.java
index d2c3f05..656af3a 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/ApplicationActionsPanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/ApplicationActionsPanel.java
@@ -14,6 +14,7 @@ import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.link.AbstractLink;
+import org.apache.wicket.markup.html.link.ExternalLink;
 import org.apache.wicket.markup.html.list.ListItem;
 import org.apache.wicket.markup.html.list.ListView;
 import org.apache.wicket.markup.html.panel.Fragment;
@@ -59,14 +60,14 @@ public class ApplicationActionsPanel extends Panel {
 
 // fake data to test multi-level menus
 
-//                if (menuItem.getName().equals("Text")) {
-//                    CssMenuItem fakeItem = menuItem.newSubMenuItem("Fake item").build();
-//
-//                    fakeItem.newSubMenuItem("Fake item 1").link(new ExternalLink("menuLink", "http://abv.bg")).build();
-//                    CssMenuItem fakeMenu12 = fakeItem.newSubMenuItem("Fake item 2").link(new ExternalLink("menuLink", "http://google.com")).build();
-//
-//                    fakeMenu12.newSubMenuItem("Fake item 2.1").link(new ExternalLink("menuLink", "http://web.de")).build();
-//                }
+                if (menuItem.getName().equals("ToDos")) {
+                    CssMenuItem fakeItem = menuItem.newSubMenuItem("Fake item").build();
+
+                    fakeItem.newSubMenuItem("Fake item 1").link(new ExternalLink("menuLink", "http://abv.bg")).build();
+                    CssMenuItem fakeMenu12 = fakeItem.newSubMenuItem("Fake item 2").link(new ExternalLink("menuLink", "http://google.com")).build();
+
+                    fakeMenu12.newSubMenuItem("Fake item 2.1").link(new ExternalLink("menuLink", "http://web.de")).build();
+                }
 
                 ListView<CssMenuItem> subMenuItemsView = new ListView<CssMenuItem>("subMenuItems", subMenuItems) {
                     @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/fd3e6eef/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuItemPanel.css
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuItemPanel.css b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuItemPanel.css
deleted file mode 100644
index 5921aeb..0000000
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuItemPanel.css
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- *  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.
- */
-
- 
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/fd3e6eef/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuItemPanel.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuItemPanel.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuItemPanel.html
deleted file mode 100644
index 7d80c8e..0000000
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuItemPanel.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  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.
--->
-<html xmlns:wicket="http://wicket.apache.org">
-    <body>
-        <wicket:panel>
-            <li class="cssMenuItemPanel">
-                <a wicket:id="menuLink" class="btn">
-                    <span class="fontAwesomeIcon" wicket:id="menuLinkFontAwesome"></span>
-                    <span class="menuLabel" wicket:id="menuLabel">[menu label]</span>
-                </a>
-
-                <p wicket:id="menuLabel">[menu label]</p>
-                <span wicket:id="subMenuItems">[subMenuItems]</span>
-            </li>
-        </wicket:panel>
-    </body>
-</html>

http://git-wip-us.apache.org/repos/asf/isis/blob/fd3e6eef/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuItemPanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuItemPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuItemPanel.java
deleted file mode 100644
index 3a6792c..0000000
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuItemPanel.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- *  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.viewer.wicket.ui.components.widgets.cssmenu;
-
-import org.apache.wicket.model.Model;
-
-/**
- * Panel containing a single {@link CssMenuItem}.
- */
-public class CssMenuItemPanel extends CssMenuItemPanelAbstract<CssMenuItemPanel.MyModel> {
-
-    private static final long serialVersionUID = 1L;
-
-    static class MyModel extends Model<CssMenuItem> {
-        private static final long serialVersionUID = 1L;
-
-        public MyModel(final CssMenuItem cssMenuItem) {
-            super(cssMenuItem);
-        }
-    }
-
-    public CssMenuItemPanel(final String id, final CssMenuItem cssMenuItem) {
-        super(id, new MyModel(cssMenuItem));
-
-        addSubMenuItems(this, getModel().getObject());
-    }
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/fd3e6eef/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuItemPanelAbstract.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuItemPanelAbstract.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuItemPanelAbstract.java
index f6f922c..832515b 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuItemPanelAbstract.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuItemPanelAbstract.java
@@ -43,13 +43,5 @@ abstract class CssMenuItemPanelAbstract<T extends IModel<?>> extends PanelAbstra
         cssMenuItem.addTo(markupContainer);
     }
 
-    /**
-     * Because there is no {@link ComponentFactory} for (the subclasses of) this component,
-     * its CSS must be contributed in this way instead (also meaning its CSS is not bundled).
-     */
-    @Override
-    public void renderHead(final IHeaderResponse response) {
-        PanelUtil.renderHead(response, this.getClass());
-    }
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/fd3e6eef/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuPanel.css
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuPanel.css b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuPanel.css
deleted file mode 100644
index eaeea17..0000000
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuPanel.css
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- *  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.
- */

http://git-wip-us.apache.org/repos/asf/isis/blob/fd3e6eef/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuPanel.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuPanel.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuPanel.html
deleted file mode 100644
index d53c012..0000000
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuPanel.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  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.
--->
-<html xmlns:wicket="http://wicket.apache.org">
-    <body>
-        <wicket:panel>
-            <span class="cssMenuPanel">
-            <span class="menuh">
-                <ul wicket:id="menuItems" class="cssMenuItems">
-                    <span wicket:id="menuItem">[menuItem here]</span>
-                </ul>
-            </span>
-            </span>
-        </wicket:panel>
-    </body>
-</html>

http://git-wip-us.apache.org/repos/asf/isis/blob/fd3e6eef/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuPanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuPanel.java
deleted file mode 100644
index 742f343..0000000
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuPanel.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- *  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.viewer.wicket.ui.components.widgets.cssmenu;
-
-import java.util.List;
-import org.apache.wicket.markup.head.IHeaderResponse;
-import org.apache.wicket.markup.html.WebMarkupContainer;
-import org.apache.wicket.markup.repeater.RepeatingView;
-import org.apache.wicket.model.util.ListModel;
-import org.apache.isis.viewer.wicket.ui.ComponentFactory;
-import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
-import org.apache.isis.viewer.wicket.ui.panels.PanelUtil;
-
-/**
- * Top level panel for a CSS menu, consisting of a number of unparented
- * {@link CssMenuItem}s.
- */
-public class CssMenuPanel extends PanelAbstract<CssMenuPanel.ListOfCssMenuItemsModel> {
-
-    private static final long serialVersionUID = 1L;
-
-
-    static class ListOfCssMenuItemsModel extends ListModel<CssMenuItem> {
-
-        private static final long serialVersionUID = 1L;
-
-        public ListOfCssMenuItemsModel(final List<CssMenuItem> cssMenuItems) {
-            super(cssMenuItems);
-        }
-    }
-
-    static final String ID_MENU_ITEMS = "menuItems";
-    static final String ID_MENU_ITEM = "menuItem";
-
-    private CssMenuPanel(final String id, final List<CssMenuItem> topLevelMenuItems) {
-        super(id, new ListOfCssMenuItemsModel(topLevelMenuItems));
-
-        final RepeatingView menuItemRv = new RepeatingView(CssMenuPanel.ID_MENU_ITEMS);
-        add(menuItemRv);
-
-        for (final CssMenuItem cssMenuItem : this.getModel().getObject()) {
-            final WebMarkupContainer menuItemMarkup = new WebMarkupContainer(menuItemRv.newChildId());
-            menuItemRv.add(menuItemMarkup);
-
-            menuItemMarkup.add(new CssMenuItemPanel(CssMenuPanel.ID_MENU_ITEM, cssMenuItem));
-        }
-
-    }
-
-    /**
-     * Because there is no {@link ComponentFactory} for this component,
-     * its CSS must be contributed in this way instead (also meaning its CSS is not bundled).
-     */
-    @Override
-    public void renderHead(final IHeaderResponse response) {
-        PanelUtil.renderHead(response, this.getClass());
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/fd3e6eef/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssSubMenuItemsPanel.css
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssSubMenuItemsPanel.css b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssSubMenuItemsPanel.css
deleted file mode 100644
index 5921aeb..0000000
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssSubMenuItemsPanel.css
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- *  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.
- */
-
- 
\ No newline at end of file