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 2012/11/23 16:50:53 UTC

svn commit: r1412922 - in /isis/trunk/framework: applib/src/main/java/org/apache/isis/applib/filter/ core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specim...

Author: danhaywood
Date: Fri Nov 23 15:50:48 2012
New Revision: 1412922

URL: http://svn.apache.org/viewvc?rev=1412922&view=rev
Log:
ISIS-232: fixes

* error in way contributed actions were being cached in metamodel
* contributed actions had gone missing, now displayed again
* don't disable bookmark links
* remove 'incubating' from powered-by strapline.

Added:
    isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActions.java
      - copied, changed from r1412890, isis/trunk/framework/viewer/wicket/wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/util/ObjectActions.java
Removed:
    isis/trunk/framework/viewer/wicket/wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/util/ObjectActions.java
Modified:
    isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/filter/Filter.java
    isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/filter/Filters.java
    isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionFilters.java
    isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
    isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/appactions/cssmenu/AppActionsCssMenuLinkFactory.java
    isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/bookmarkedpages/BookmarkedPagesPanel.java
    isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/EntityActionLinkFactory.java
    isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/header/EntityHeaderPanel.java
    isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuBuilder.java
    isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.html
    isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java

Modified: isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/filter/Filter.java
URL: http://svn.apache.org/viewvc/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/filter/Filter.java?rev=1412922&r1=1412921&r2=1412922&view=diff
==============================================================================
--- isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/filter/Filter.java (original)
+++ isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/filter/Filter.java Fri Nov 23 15:50:48 2012
@@ -19,6 +19,8 @@
 
 package org.apache.isis.applib.filter;
 
+import com.google.common.base.Predicate;
+
 /**
  * For use by repository implementations to allow a set of objects returned by a
  * back-end objectstore to be filtered before being returned to the caller.
@@ -41,4 +43,5 @@ public interface Filter<T> {
      *         otherwise.
      */
     public boolean accept(T t);
+
 }

Modified: isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/filter/Filters.java
URL: http://svn.apache.org/viewvc/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/filter/Filters.java?rev=1412922&r1=1412921&r2=1412922&view=diff
==============================================================================
--- isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/filter/Filters.java (original)
+++ isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/filter/Filters.java Fri Nov 23 15:50:48 2012
@@ -19,6 +19,8 @@
 
 package org.apache.isis.applib.filter;
 
+import com.google.common.base.Predicate;
+
 public final class Filters {
 
     private Filters() {
@@ -87,4 +89,13 @@ public final class Filters {
         return none();
     }
 
+    public static <T> Predicate<T> asPredicate(final Filter<T> filter) {
+        return new Predicate<T>() {
+            @Override
+            public boolean apply(T candidate) {
+                return filter.accept(candidate);
+            }
+        };
+    }
+
 }

Modified: isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionFilters.java
URL: http://svn.apache.org/viewvc/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionFilters.java?rev=1412922&r1=1412921&r2=1412922&view=diff
==============================================================================
--- isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionFilters.java (original)
+++ isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionFilters.java Fri Nov 23 15:50:48 2012
@@ -12,6 +12,7 @@ import org.apache.isis.core.metamodel.fa
 import org.apache.isis.core.metamodel.interactions.DisablingInteractionAdvisor;
 import org.apache.isis.core.metamodel.interactions.HidingInteractionAdvisor;
 import org.apache.isis.core.metamodel.interactions.ValidatingInteractionAdvisor;
+import org.apache.isis.core.metamodel.spec.ActionType;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 
 public class ObjectActionFilters {
@@ -57,4 +58,13 @@ public class ObjectActionFilters {
             }
         };
     }
+
+    public static Filter<ObjectAction> filterOfType(final ActionType type) {
+        return new Filter<ObjectAction>(){
+            @Override
+            public boolean accept(ObjectAction oa) {
+                return oa.getType() == type;
+            }
+        };
+    }
 }

Copied: isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActions.java (from r1412890, isis/trunk/framework/viewer/wicket/wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/util/ObjectActions.java)
URL: http://svn.apache.org/viewvc/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActions.java?p2=isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActions.java&p1=isis/trunk/framework/viewer/wicket/wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/util/ObjectActions.java&r1=1412890&r2=1412922&rev=1412922&view=diff
==============================================================================
--- isis/trunk/framework/viewer/wicket/wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/util/ObjectActions.java (original)
+++ isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActions.java Fri Nov 23 15:50:48 2012
@@ -17,33 +17,20 @@
  *  under the License.
  */
 
-package org.apache.isis.viewer.wicket.model.util;
+package org.apache.isis.core.metamodel.spec.feature;
 
-import com.google.common.base.Predicate;
+import java.util.List;
 
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.facets.named.NamedFacet;
-import org.apache.isis.core.metamodel.spec.ActionType;
-import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
+import org.apache.isis.core.metamodel.spec.ObjectActionSet;
+
+import com.google.common.collect.Lists;
 
 public final class ObjectActions {
 
     private ObjectActions() {
     }
 
-    public static Predicate<ObjectAction> ofType(final ActionType type) {
-        return new Predicate<ObjectAction>() {
-            @Override
-            public boolean apply(final ObjectAction input) {
-                return input.getType() == type;
-            }
-        };
-    }
-
-    public static String labelFor(final ObjectAction action, final ObjectAdapter contextAdapter) {
-        return action.promptForParameters(contextAdapter) ? ObjectActions.nameFor(action) : nameFor(action);
-    }
-
     public static String nameFor(final ObjectAction noAction) {
         final String actionName = noAction.getName();
         if (actionName != null) {
@@ -56,4 +43,20 @@ public final class ObjectActions {
         return "(no name)";
     }
 
+    public static List<ObjectAction> flattenedActions(final List<ObjectAction> objectActions) {
+        final List<ObjectAction> actions = Lists.newArrayList();
+        for (final ObjectAction action : objectActions) {
+            if (action.getType().isSet()) {
+                final ObjectActionSet actionSet = (ObjectActionSet) action;
+                final List<ObjectAction> subActions = actionSet.getActions();
+                for (final ObjectAction subAction : subActions) {
+                    actions.add(subAction);
+                }
+            } else {
+                actions.add(action);
+            }
+        }
+        return actions;
+    }
+
 }

Modified: isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
URL: http://svn.apache.org/viewvc/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java?rev=1412922&r1=1412921&r2=1412922&view=diff
==============================================================================
--- isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java (original)
+++ isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java Fri Nov 23 15:50:48 2012
@@ -24,6 +24,7 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 
+import com.google.common.collect.Iterables;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 
@@ -81,7 +82,9 @@ import org.apache.isis.core.metamodel.sp
 import org.apache.isis.core.metamodel.spec.SpecificationContext;
 import org.apache.isis.core.metamodel.spec.SpecificationLoader;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
+import org.apache.isis.core.metamodel.spec.feature.ObjectActionFilters;
 import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
+import org.apache.isis.core.metamodel.spec.feature.ObjectActions;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAssociationFilters;
 import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
@@ -730,27 +733,10 @@ public abstract class ObjectSpecificatio
         return actionListToAppendTo;
     }
 
-    private List<ObjectAction> getFlattenedActions(final List<ObjectAction> objectActions, final ActionType type, final Filter<ObjectAction> filter) {
-        final List<ObjectAction> actions = Lists.newArrayList();
-        for (final ObjectAction action : objectActions) {
-            if (action.getType().isSet()) {
-                final ObjectActionSet actionSet = (ObjectActionSet) action;
-                final List<ObjectAction> subActions = actionSet.getActions();
-                for (final ObjectAction subAction : subActions) {
-                    addAction(type, actions, subAction, filter);
-                }
-            } else {
-                addAction(type, actions, action, filter);
-            }
-        }
-
-        return actions;
-    }
-
-    private void addAction(final ActionType type, final List<ObjectAction> actions, final ObjectAction subAction, Filter<ObjectAction> filter) {
-        if (type.matchesTypeOf(subAction) && filter.accept(subAction)) {
-            actions.add(subAction);
-        }
+    @SuppressWarnings("unchecked")
+    private static List<ObjectAction> getFlattenedActions(final List<ObjectAction> objectActions, final ActionType type, final Filter<ObjectAction> filter) {
+        final List<ObjectAction> actions = ObjectActions.flattenedActions(objectActions);
+        return Lists.newArrayList(Iterables.filter(actions, Filters.asPredicate(Filters.and(ObjectActionFilters.filterOfType(type), filter))));
     }
 
     @Override
@@ -821,6 +807,11 @@ public abstract class ObjectSpecificatio
      * 
      */
     protected List<ObjectAction> getContributedActions(final ActionType actionType, Filter<ObjectAction> filter) {
+        List<ObjectAction> contributedActionSets = getContributedActions(actionType);
+        return Lists.newArrayList(Iterables.filter(contributedActionSets, Filters.asPredicate(filter)));
+    }
+
+    private List<ObjectAction> getContributedActions(final ActionType actionType) {
         if (isService()) {
             return Collections.emptyList();
         }
@@ -831,19 +822,19 @@ public abstract class ObjectSpecificatio
             contributedActionSets = Lists.newArrayList();
             final List<ObjectAdapter> services = getServicesProvider().getServices();
             for (final ObjectAdapter serviceAdapter : services) {
-                addContributedActionsIfAny(serviceAdapter, actionType, filter, contributedActionSets);
+                addContributedActionsIfAny(serviceAdapter, actionType, contributedActionSets);
             }
             contributedActionSetsByType.put(actionType, contributedActionSets);
         }
         return contributedActionSets;
     }
 
-    private void addContributedActionsIfAny(final ObjectAdapter serviceAdapter, final ActionType actionType, Filter<ObjectAction> filter, final List<ObjectAction> contributedActionSetsToAppendTo) {
+    private void addContributedActionsIfAny(final ObjectAdapter serviceAdapter, final ActionType actionType, final List<ObjectAction> contributedActionSetsToAppendTo) {
         final ObjectSpecification specification = serviceAdapter.getSpecification();
         if (specification == this) {
             return;
         }
-        final List<ObjectAction> contributedActions = findContributedActions(specification, actionType, filter);
+        final List<ObjectAction> contributedActions = findContributedActions(specification, actionType);
         // only add if there are matching subactions.
         if (contributedActions.size() == 0) {
             return;
@@ -852,9 +843,9 @@ public abstract class ObjectSpecificatio
         contributedActionSetsToAppendTo.add(contributedActionSet);
     }
 
-    private List<ObjectAction> findContributedActions(final ObjectSpecification specification, final ActionType actionType, Filter<ObjectAction> filter) {
+    private List<ObjectAction> findContributedActions(final ObjectSpecification specification, final ActionType actionType) {
         final List<ObjectAction> contributedActions = Lists.newArrayList();
-        final List<ObjectAction> serviceActions = specification.getObjectActions(actionType, Contributed.INCLUDED, filter);
+        final List<ObjectAction> serviceActions = specification.getObjectActions(actionType, Contributed.INCLUDED, Filters.<ObjectAction>any());
         for (final ObjectAction serviceAction : serviceActions) {
             if (serviceAction.isAlwaysHidden()) {
                 continue;

Modified: isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/appactions/cssmenu/AppActionsCssMenuLinkFactory.java
URL: http://svn.apache.org/viewvc/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/appactions/cssmenu/AppActionsCssMenuLinkFactory.java?rev=1412922&r1=1412921&r2=1412922&view=diff
==============================================================================
--- isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/appactions/cssmenu/AppActionsCssMenuLinkFactory.java (original)
+++ isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/appactions/cssmenu/AppActionsCssMenuLinkFactory.java Fri Nov 23 15:50:48 2012
@@ -26,11 +26,11 @@ import org.apache.wicket.request.mapper.
 
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager.ConcurrencyChecking;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
+import org.apache.isis.core.metamodel.spec.feature.ObjectActions;
 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.ActionModel;
 import org.apache.isis.viewer.wicket.model.models.PageType;
-import org.apache.isis.viewer.wicket.model.util.ObjectActions;
 import org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu.CssMenuLinkFactory;
 import org.apache.isis.viewer.wicket.ui.pages.PageClassRegistry;
 import org.apache.isis.viewer.wicket.ui.pages.PageClassRegistryAccessor;

Modified: isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/bookmarkedpages/BookmarkedPagesPanel.java
URL: http://svn.apache.org/viewvc/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/bookmarkedpages/BookmarkedPagesPanel.java?rev=1412922&r1=1412921&r2=1412922&view=diff
==============================================================================
--- isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/bookmarkedpages/BookmarkedPagesPanel.java (original)
+++ isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/bookmarkedpages/BookmarkedPagesPanel.java Fri Nov 23 15:50:48 2012
@@ -80,7 +80,6 @@ public class BookmarkedPagesPanel extend
                 final AbstractLink link = Links.newBookmarkablePageLink(BOOKMARKED_PAGE_LINK, pageParameters, pageClass);
                 link.add(new Label(BOOKMARKED_PAGE_TITLE, BookmarkedPagesModel.titleFrom(pageParameters)));
                 item.add(link);
-                link.setEnabled(!bookmarkedPagesModel.isCurrent(pageParameters));
             }
         };
         container.add(listView);

Modified: isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/EntityActionLinkFactory.java
URL: http://svn.apache.org/viewvc/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/EntityActionLinkFactory.java?rev=1412922&r1=1412921&r2=1412922&view=diff
==============================================================================
--- isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/EntityActionLinkFactory.java (original)
+++ isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/EntityActionLinkFactory.java Fri Nov 23 15:50:48 2012
@@ -28,6 +28,7 @@ import org.apache.wicket.request.mapper.
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager.ConcurrencyChecking;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
+import org.apache.isis.core.metamodel.spec.feature.ObjectActions;
 import org.apache.isis.runtimes.dflt.runtime.system.context.IsisContext;
 import org.apache.isis.runtimes.dflt.runtime.system.persistence.PersistenceSession;
 import org.apache.isis.viewer.wicket.model.links.LinkAndLabel;
@@ -37,7 +38,6 @@ import org.apache.isis.viewer.wicket.mod
 import org.apache.isis.viewer.wicket.model.models.ActionModel.SingleResultsMode;
 import org.apache.isis.viewer.wicket.model.models.EntityModel;
 import org.apache.isis.viewer.wicket.model.models.PageType;
-import org.apache.isis.viewer.wicket.model.util.ObjectActions;
 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.widgets.cssmenu.CssMenuLinkFactory;
@@ -62,7 +62,7 @@ public final class EntityActionLinkFacto
 
         final AbstractLink link = createLink(adapterMemento, action, linkId, adapter);
         final ObjectAdapter contextAdapter = entityModel.getObject();
-        final String label = ObjectActions.labelFor(action, contextAdapter);
+        final String label = ObjectActions.nameFor(action);
 
         return new LinkAndLabel(link, label);
     }

Modified: isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/header/EntityHeaderPanel.java
URL: http://svn.apache.org/viewvc/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/header/EntityHeaderPanel.java?rev=1412922&r1=1412921&r2=1412922&view=diff
==============================================================================
--- isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/header/EntityHeaderPanel.java (original)
+++ isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/header/EntityHeaderPanel.java Fri Nov 23 15:50:48 2012
@@ -37,7 +37,9 @@ import org.apache.isis.core.metamodel.sp
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.core.metamodel.spec.feature.ObjectActionContainer.Contributed;
 import org.apache.isis.core.metamodel.spec.feature.ObjectActionFilters;
+import org.apache.isis.core.metamodel.spec.feature.ObjectActions;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
+import org.apache.isis.runtimes.dflt.runtime.system.context.IsisContext;
 import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
 import org.apache.isis.viewer.wicket.model.models.ActionModel;
 import org.apache.isis.viewer.wicket.model.models.EntityModel;
@@ -102,14 +104,10 @@ public class EntityHeaderPanel extends P
         final ObjectAdapter adapter = model.getObject();
         final ObjectAdapterMemento adapterMemento = model.getObjectAdapterMemento();
         if (adapter != null) {
-            final ObjectSpecification adapterSpec = adapter.getSpecification();
-            
-            @SuppressWarnings("unchecked")
-            final List<ObjectAction> userActions = adapterSpec.getObjectActions(ActionType.USER, Contributed.INCLUDED, 
-                    Filters.and(memberOrderNameNotCollection(adapterSpec), dynamicallyVisibleFor(adapter)));
+            final List<ObjectAction> topLevelActions = getTopLevelActions(adapter);
 
-            if(!userActions.isEmpty()) {
-                final CssMenuBuilder cssMenuBuilder = new CssMenuBuilder(adapterMemento, getServiceAdapters(), userActions, linkFactory);
+            if(!topLevelActions.isEmpty()) {
+                final CssMenuBuilder cssMenuBuilder = new CssMenuBuilder(adapterMemento, getServiceAdapters(), topLevelActions, linkFactory);
                 // TODO: i18n
                 final CssMenuPanel cssMenuPanel = cssMenuBuilder.buildPanel(ID_ENTITY_ACTIONS, "Actions");
 
@@ -121,6 +119,25 @@ public class EntityHeaderPanel extends P
             permanentlyHide(ID_ENTITY_ACTIONS);
         }
     }
+
+    private List<ObjectAction> getTopLevelActions(final ObjectAdapter adapter) {
+        final List<ObjectAction> topLevelActions = Lists.newArrayList();
+        
+        addTopLevelActions(adapter, ActionType.USER, topLevelActions);
+        if(IsisContext.getDeploymentType().isPrototyping()) {
+            addTopLevelActions(adapter, ActionType.EXPLORATION, topLevelActions);
+            addTopLevelActions(adapter, ActionType.PROTOTYPE, topLevelActions);
+        }
+        return topLevelActions;
+    }
+
+    private void addTopLevelActions(final ObjectAdapter adapter, ActionType actionType, final List<ObjectAction> topLevelActions) {
+        final ObjectSpecification adapterSpec = adapter.getSpecification();
+        @SuppressWarnings("unchecked")
+        final List<ObjectAction> userActions = adapterSpec.getObjectActions(actionType, Contributed.INCLUDED, 
+                Filters.and(memberOrderNameNotCollection(adapterSpec), dynamicallyVisibleFor(adapter)));
+        topLevelActions.addAll(ObjectActions.flattenedActions(userActions));
+    }
     
     private Filter<ObjectAction> memberOrderNameNotCollection(final ObjectSpecification adapterSpec) {
 

Modified: isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuBuilder.java
URL: http://svn.apache.org/viewvc/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuBuilder.java?rev=1412922&r1=1412921&r2=1412922&view=diff
==============================================================================
--- isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuBuilder.java (original)
+++ isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuBuilder.java Fri Nov 23 15:50:48 2012
@@ -28,13 +28,16 @@ import com.google.common.collect.Collect
 
 import org.apache.wicket.Application;
 
+import org.apache.isis.applib.filter.Filters;
 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.ObjectAction;
+import org.apache.isis.core.metamodel.spec.feature.ObjectActionFilters;
+import org.apache.isis.core.metamodel.spec.feature.ObjectActions;
 import org.apache.isis.core.progmodel.facets.actions.notcontributed.NotContributedFacet;
+import org.apache.isis.runtimes.dflt.runtime.system.context.IsisContext;
 import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
-import org.apache.isis.viewer.wicket.model.util.ObjectActions;
 import org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu.CssMenuItem.Builder;
 import org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu.CssMenuPanel.Style;
 
@@ -66,22 +69,18 @@ public class CssMenuBuilder {
     }
 
     private void addMenuItems(final CssMenuItem parent, final List<ObjectAction> actions) {
-        addMenuItemsForActionsOfType(parent, actions, ActionType.SET);
         addMenuItemsForActionsOfType(parent, actions, ActionType.USER);
-        if (isExplorationMode()) {
+        if (isPrototyping()) {
             addMenuItemsForActionsOfType(parent, actions, ActionType.EXPLORATION);
+            addMenuItemsForActionsOfType(parent, actions, ActionType.PROTOTYPE);
         }
         if (isDebugMode()) {
             addMenuItemsForActionsOfType(parent, actions, ActionType.DEBUG);
         }
     }
 
-    /**
-     * Protected so can be overridden in testing if required.
-     */
-    protected boolean isExplorationMode() {
-        //return Application.get().getConfigurationType().equalsIgnoreCase(Application.DEVELOPMENT);
-        return Application.get().usesDeploymentConfig();
+    public boolean isPrototyping() {
+        return IsisContext.getDeploymentType().isPrototyping();
     }
 
     /**
@@ -95,7 +94,7 @@ public class CssMenuBuilder {
     }
 
     private void addMenuItemsForActionsOfType(final CssMenuItem parent, final List<ObjectAction> actions, final ActionType type) {
-        final Collection<ObjectAction> filterActionsOfType = Collections2.filter(actions, ObjectActions.ofType(type));
+        final Collection<ObjectAction> filterActionsOfType = Collections2.filter(actions, Filters.asPredicate(ObjectActionFilters.filterOfType(type)));
         for (final ObjectAction action : filterActionsOfType) {
             addMenuItem(parent, action);
         }

Modified: isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.html
URL: http://svn.apache.org/viewvc/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.html?rev=1412922&r1=1412921&r2=1412922&view=diff
==============================================================================
--- isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.html (original)
+++ isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.html Fri Nov 23 15:50:48 2012
@@ -58,7 +58,7 @@
 
 			<div id="footer">
 				<div class="links">
-					powered by: <a href="http://incubator.apache.org/isis">Apache Isis (incubating)</a>
+					powered by: <a href="http://isis.apache.org">Apache Isis</a>
 				</div>
 			</div>
 

Modified: isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java
URL: http://svn.apache.org/viewvc/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java?rev=1412922&r1=1412921&r2=1412922&view=diff
==============================================================================
--- isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java (original)
+++ isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java Fri Nov 23 15:50:48 2012
@@ -23,20 +23,6 @@ import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 
-import com.google.inject.Inject;
-import com.google.inject.name.Named;
-
-import org.apache.wicket.RestartResponseAtInterceptPageException;
-import org.apache.wicket.markup.head.CssReferenceHeaderItem;
-import org.apache.wicket.markup.head.HeaderItem;
-import org.apache.wicket.markup.head.IHeaderResponse;
-import org.apache.wicket.markup.head.JavaScriptReferenceHeaderItem;
-import org.apache.wicket.markup.html.WebPage;
-import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.html.link.Link;
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.request.mapper.parameter.PageParameters;
-
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
 import org.apache.isis.core.metamodel.services.ServicesInjectorSpi;
 import org.apache.isis.core.metamodel.spec.SpecificationLoaderSpi;
@@ -52,6 +38,18 @@ import org.apache.isis.viewer.wicket.ui.
 import org.apache.isis.viewer.wicket.ui.app.registry.ComponentFactoryRegistryAccessor;
 import org.apache.isis.viewer.wicket.ui.pages.about.AboutPage;
 import org.apache.isis.viewer.wicket.ui.pages.login.WicketSignInPage;
+import org.apache.wicket.RestartResponseAtInterceptPageException;
+import org.apache.wicket.markup.head.CssReferenceHeaderItem;
+import org.apache.wicket.markup.head.IHeaderResponse;
+import org.apache.wicket.markup.head.JavaScriptReferenceHeaderItem;
+import org.apache.wicket.markup.html.WebPage;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.link.Link;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+
+import com.google.inject.Inject;
+import com.google.inject.name.Named;
 
 /**
  * Convenience adapter for {@link WebPage}s built up using {@link ComponentType}