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:57 UTC

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

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