ISIS-537: working towards additional links on panel title for (property) member 
groups

* factored out the code that builds the list of links
* changed way that ActionPromptProvider is derived (CollectionPanel need no 
longer implement directly, can lazily determine from Page when required)
* NB: some code clean up of redundant/commented out code still required.


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

Branch: refs/heads/master
Commit: 9de5ba8e958c0e4ad3be2fe2e64c12a054959135
Parents: b4bd7a4
Author: Dan Haywood <[email protected]>
Authored: Tue Nov 25 07:25:00 2014 +0000
Committer: Dan Haywood <[email protected]>
Committed: Tue Nov 25 07:25:00 2014 +0000

----------------------------------------------------------------------
 .../viewer/wicket/model/models/ActionModel.java | 25 +++++-----
 .../model/models/ActionPromptProvider.java      | 11 ++++-
 .../actions/ActionParametersFormPanel.java      | 10 ++--
 .../additionallinks/AdditionalLinksPanel.java   | 17 ++++++-
 .../additionallinks/EntityActionUtil.java       | 48 ++++++++++++++------
 .../components/collection/CollectionPanel.html  |  2 +-
 .../components/collection/CollectionPanel.java  | 47 +++++++++++++------
 .../CollectionContentsAsAjaxTablePanel.css      |  1 +
 .../entity/properties/EntityPropertiesForm.java | 40 ++++++++++++++--
 .../properties/EntityPropertiesPanel.html       |  8 +++-
 .../components/scalars/ScalarPanelAbstract.java | 34 ++++----------
 .../cssmenu/ActionLinkFactoryAbstract.java      |  9 ++--
 .../wicket/ui/pages/bootstrap-overrides.css     | 11 +----
 13 files changed, 172 insertions(+), 91 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/9de5ba8e/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
----------------------------------------------------------------------
diff --git 
a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
 
b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
index ce3202c..13401c2 100644
--- 
a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
+++ 
b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
@@ -79,6 +79,7 @@ public class ActionModel extends 
BookmarkableModel<ObjectAdapter> {
     private static final long serialVersionUID = 1L;
     
     private static final String NULL_ARG = "$nullArg$";
+    private static Pattern KEY_VALUE_PATTERN = Pattern.compile("([^=]+)=(.+)");
 
     /**
      * Whether we are obtaining arguments (eg in a dialog), or displaying the
@@ -142,9 +143,7 @@ public class ActionModel extends 
BookmarkableModel<ObjectAdapter> {
 
 
     public static Entry<Integer, String> parse(final String paramContext) {
-        // TODO mgrigorov Extract the Pattern as a constant. No need to 
re-compile it again and again
-        final Pattern compile = Pattern.compile("([^=]+)=(.+)");
-        final Matcher matcher = compile.matcher(paramContext);
+        final Matcher matcher = KEY_VALUE_PATTERN.matcher(paramContext);
         if (!matcher.matches()) {
             return null;
         }
@@ -316,7 +315,7 @@ public class ActionModel extends 
BookmarkableModel<ObjectAdapter> {
         this.targetAdapterMemento = actionModel.targetAdapterMemento;
         this.actionMemento = actionModel.actionMemento;
         this.actionMode = actionModel.actionMode;
-        this.actionPrompt = actionModel.actionPrompt;
+        //this.actionPrompt = actionModel.actionPrompt;
         
         primeArgumentModels();
         final Map<Integer, ScalarModel> argumentModelByIdx = 
actionModel.arguments;
@@ -525,15 +524,15 @@ public class ActionModel extends 
BookmarkableModel<ObjectAdapter> {
     
     // //////////////////////////////////////
     
-    private ActionPrompt actionPrompt;
-
-    public void setActionPrompt(ActionPrompt actionPrompt) {
-        this.actionPrompt = actionPrompt;
-    }
-
-    public ActionPrompt getActionPrompt() {
-        return actionPrompt;
-    }
+//    private ActionPrompt actionPrompt;
+//
+//    public void setActionPrompt(ActionPrompt actionPrompt) {
+//        this.actionPrompt = actionPrompt;
+//    }
+//
+//    public ActionPrompt getActionPrompt() {
+//        return actionPrompt;
+//    }
 
     // //////////////////////////////////////
     

http://git-wip-us.apache.org/repos/asf/isis/blob/9de5ba8e/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionPromptProvider.java
----------------------------------------------------------------------
diff --git 
a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionPromptProvider.java
 
b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionPromptProvider.java
index 5ed5151..492e3e0 100644
--- 
a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionPromptProvider.java
+++ 
b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionPromptProvider.java
@@ -31,7 +31,16 @@ public interface ActionPromptProvider {
             } 
             // else
             return null;
-        }}
+        }
+        public static ActionPromptProvider getFrom(Page page) {
+            if(page instanceof ActionPromptProvider) {
+                final ActionPromptProvider provider = (ActionPromptProvider) 
page;
+                return provider;
+            }
+            // else
+            return null;
+        }
+    }
 
     public ActionPrompt getActionPrompt();
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/9de5ba8e/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java
----------------------------------------------------------------------
diff --git 
a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java
 
b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java
index 9fc07ab..93957cf 100644
--- 
a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java
+++ 
b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java
@@ -39,6 +39,7 @@ import 
org.apache.isis.viewer.wicket.model.mementos.ActionParameterMemento;
 import org.apache.isis.viewer.wicket.model.models.ActionExecutor;
 import org.apache.isis.viewer.wicket.model.models.ActionModel;
 import org.apache.isis.viewer.wicket.model.models.ActionPrompt;
+import org.apache.isis.viewer.wicket.model.models.ActionPromptProvider;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.ComponentType;
 import 
org.apache.isis.viewer.wicket.ui.components.actionprompt.ActionPromptModalWindow;
@@ -66,7 +67,7 @@ public class ActionParametersFormPanel extends 
PanelAbstract<ActionModel> {
     private static final String ID_ACTION_PARAMETERS = "parameters";
 
     private final ActionExecutor actionExecutor;
-    private final ActionPrompt actionPromptIfAny;
+    //private final ActionPrompt actionPromptIfAny;
 
     public ActionParametersFormPanel(final String id, final ActionModel model) 
{
         super(id, model);
@@ -74,7 +75,7 @@ public class ActionParametersFormPanel extends 
PanelAbstract<ActionModel> {
         Ensure.ensureThatArg(model.getExecutor(), is(not(nullValue())));
 
         this.actionExecutor = model.getExecutor();
-        this.actionPromptIfAny = model.getActionPrompt();
+        //this.actionPromptIfAny = model.getActionPrompt();
         buildGui();
     }
 
@@ -152,7 +153,7 @@ public class ActionParametersFormPanel extends 
PanelAbstract<ActionModel> {
 
                         target.add(form);
                     } else {
-                        if (actionPromptIfAny != null) {
+                        //if (actionPromptIfAny != null) {
                             
                             final StringBuilder builder = new StringBuilder();
 
@@ -165,7 +166,7 @@ public class ActionParametersFormPanel extends 
PanelAbstract<ActionModel> {
                             String buf = builder.toString();
                             target.appendJavaScript(buf);
                             target.add(form);
-                        }
+                        //}
                     }
                 };
 
@@ -186,6 +187,7 @@ public class ActionParametersFormPanel extends 
PanelAbstract<ActionModel> {
 
                 @Override
                 public void onSubmit(final AjaxRequestTarget target, Form<?> 
form) {
+                    final ActionPrompt actionPromptIfAny = 
ActionPromptProvider.Util.getFrom(ActionParametersFormPanel.this).getActionPrompt();
                     if(actionPromptIfAny != null) {
                         actionPromptIfAny.closePrompt(target);
                     }

http://git-wip-us.apache.org/repos/asf/isis/blob/9de5ba8e/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 e1618eb..dd32ddb 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
@@ -21,6 +21,7 @@ package 
org.apache.isis.viewer.wicket.ui.components.additionallinks;
 
 import java.util.List;
 import com.google.common.base.Strings;
+import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.behavior.AttributeAppender;
 import org.apache.wicket.markup.head.IHeaderResponse;
 import org.apache.wicket.markup.html.WebMarkupContainer;
@@ -48,7 +49,21 @@ public class AdditionalLinksPanel extends 
PanelAbstract<ListOfLinksModel> {
     private static final String ID_ADDITIONAL_LINK_ITEM = "additionalLinkItem";
     private static final String ID_ADDITIONAL_LINK_FONT_AWESOME = 
"additionalLinkFontAwesome";
     private static final String ID_ADDITIONAL_LINK_TITLE = 
"additionalLinkTitle";
-    
+
+    public static void addAdditionalLinks(
+            final MarkupContainer markupContainer,
+            final String id,
+            final List<LinkAndLabel> links) {
+        if(links.isEmpty()) {
+            Components.permanentlyHide(markupContainer, id);
+            return;
+        }
+
+        final WebMarkupContainer additionalLinksPanel = new 
AdditionalLinksPanel(id, links);
+        markupContainer.addOrReplace(additionalLinksPanel);
+    }
+
+
     private List<LinkAndLabel> linkAndLabels;
     
     public AdditionalLinksPanel(final String id, final List<LinkAndLabel> 
links) {

http://git-wip-us.apache.org/repos/asf/isis/blob/9de5ba8e/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 5382a4f..993e699 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
@@ -23,6 +23,7 @@ import java.util.Comparator;
 import java.util.List;
 import com.google.common.base.Function;
 import com.google.common.collect.Lists;
+import org.apache.wicket.Component;
 import org.apache.wicket.Session;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.filter.Filter;
@@ -38,38 +39,55 @@ 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.metamodel.spec.feature.ObjectAssociation;
+import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
 import org.apache.isis.core.runtime.system.DeploymentType;
 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.ScalarModel;
 import 
org.apache.isis.viewer.wicket.ui.components.entity.EntityActionLinkFactory;
 import 
org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu.ActionLinkFactory;
 
 public final class EntityActionUtil {
 
-    public static final String ID_ADDITIONAL_LINK = "additionalLink";
-
     private EntityActionUtil(){}
 
     private final static MemberOrderFacetComparator memberOrderFacetComparator 
= new MemberOrderFacetComparator(false);
-    
-    public static List<LinkAndLabel> entityActionsForAssociation(
-            final EntityModel entityModel,
-            final ObjectAssociation association,
-            final ActionPromptProvider actionPromptProvider,
-            final DeploymentType deploymentType) {
 
-        return entityActionsForAssociation(
-                entityModel, association, actionPromptProvider, 
deploymentType, ID_ADDITIONAL_LINK);
+    public static void appendAdditionalLinksForAssociation(
+            final ScalarModel scalarModel,
+            final Component owningComponent,
+            final DeploymentType deploymentType,
+            final String id,
+            final List<LinkAndLabel> entityActionLinks) {
+
+        if (scalarModel.getKind() != ScalarModel.Kind.PROPERTY) {
+            return;
+        }
+
+        final ObjectAdapterMemento parentMemento = 
scalarModel.getParentObjectAdapterMemento();
+        final EntityModel parentEntityModel = new EntityModel(parentMemento);
+        //final ActionPromptProvider actionPromptProvider = 
ActionPromptProvider.Util.getFrom(owningComponent);
+        final ActionPromptProvider actionPromptProvider = null;
+        final OneToOneAssociation oneToOneAssociation = 
scalarModel.getPropertyMemento().getProperty();
+
+        appendAdditionalLinksForAssociation(
+                parentEntityModel,
+                oneToOneAssociation,
+                actionPromptProvider,
+                deploymentType,
+                id,
+                entityActionLinks);
     }
 
-    public static List<LinkAndLabel> entityActionsForAssociation(
+    public static void appendAdditionalLinksForAssociation(
             final EntityModel entityModel,
             final ObjectAssociation association,
             final ActionPromptProvider actionPromptProvider,
             final DeploymentType deploymentType,
-            final String linkId) {
+            final String linkId,
+            final List<LinkAndLabel> entityActionLinks) {
         final List<ObjectAction> associatedActions = Lists.newArrayList();
 
         addActions(ActionType.USER, entityModel, association, 
associatedActions);
@@ -91,12 +109,14 @@ public final class EntityActionUtil {
         final ActionLinkFactory linkFactory = new 
EntityActionLinkFactory(entityModel);
 
         final ObjectAdapterMemento adapterMemento = 
entityModel.getObjectAdapterMemento();
-        return Lists.transform(associatedActions, new Function<ObjectAction, 
LinkAndLabel>(){
+        final List<LinkAndLabel> linkAndLabels = 
Lists.transform(associatedActions, new Function<ObjectAction, LinkAndLabel>() {
 
             @Override
             public LinkAndLabel apply(ObjectAction objectAction) {
                 return linkFactory.newLink(adapterMemento, objectAction, 
linkId, actionPromptProvider);
-            }});
+            }
+        });
+        entityActionLinks.addAll(linkAndLabels);
     }
 
     private static List<ObjectAction> addActions(

http://git-wip-us.apache.org/repos/asf/isis/blob/9de5ba8e/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/CollectionPanel.html
----------------------------------------------------------------------
diff --git 
a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/CollectionPanel.html
 
b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/CollectionPanel.html
index 8ffda40..4921aeb 100644
--- 
a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/CollectionPanel.html
+++ 
b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/CollectionPanel.html
@@ -27,7 +27,7 @@
             <div class="collectionPanel 
collectionNameAndContentsComponentType">
                 <div class="collectionContents" 
wicket:id="collectionContents"></div>
                 <span wicket:id="feedback"></span>
-                <div wicket:id="actionPromptModalWindow"></div>
+                <div xxwicket:id="actionPromptModalWindow"></div>
             </div>
         </wicket:panel>
     </body>

http://git-wip-us.apache.org/repos/asf/isis/blob/9de5ba8e/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 02e9ced..b6eb312 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
@@ -22,6 +22,7 @@ package 
org.apache.isis.viewer.wicket.ui.components.collection;
 import 
de.agilecoders.wicket.core.markup.html.bootstrap.common.NotificationPanel;
 
 import java.util.List;
+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;
@@ -29,11 +30,11 @@ 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;
 import org.apache.isis.viewer.wicket.model.links.LinkAndLabel;
+import org.apache.isis.viewer.wicket.model.models.ActionPrompt;
 import org.apache.isis.viewer.wicket.model.models.ActionPromptProvider;
 import org.apache.isis.viewer.wicket.model.models.EntityCollectionModel;
 import org.apache.isis.viewer.wicket.model.models.EntityModel;
 import org.apache.isis.viewer.wicket.ui.ComponentType;
-import 
org.apache.isis.viewer.wicket.ui.components.actionprompt.ActionPromptModalWindow;
 import 
org.apache.isis.viewer.wicket.ui.components.additionallinks.EntityActionUtil;
 import 
org.apache.isis.viewer.wicket.ui.components.collection.selector.CollectionSelectorPanel;
 import 
org.apache.isis.viewer.wicket.ui.components.collection.selector.CollectionSelectorProvider;
@@ -65,17 +66,28 @@ public class CollectionPanel extends 
PanelAbstract<EntityCollectionModel> implem
         return collectionModel;
     }
 
-    CollectionPanel(String id, EntityCollectionModel collectionModel) {
+    CollectionPanel(
+            final String id,
+            final EntityCollectionModel collectionModel) {
         this(id, collectionModel, new 
EntityModel(collectionModel.getParentObjectAdapterMemento()), 
collectionModel.getCollectionMemento().getCollection());
     }
 
-    CollectionPanel(final String id, final EntityCollectionModel 
collectionModel, final EntityModel entityModel, final OneToManyAssociation 
otma) {
+    CollectionPanel(
+            final String id,
+            final EntityCollectionModel collectionModel,
+            final EntityModel entityModel,
+            final OneToManyAssociation otma) {
         super(id, collectionModel);
 
-        addActionPromptModalWindow();
-        
-        List<LinkAndLabel> entityActions = 
EntityActionUtil.entityActionsForAssociation(entityModel, otma, this, 
getDeploymentType(), "additionalLink");
-        collectionModel.addEntityActions(entityActions);
+        //addActionPromptModalWindow();
+
+        final List<LinkAndLabel> entityActionLinks = Lists.newArrayList();
+
+        //EntityActionUtil.appendAdditionalLinksForAssociation(entityModel, 
otma, this, getDeploymentType(), "additionalLink", entityActionLinks);
+//        EntityActionUtil.appendAdditionalLinksForAssociation(entityModel, 
otma, ActionPromptProvider.Util.getFrom(this), getDeploymentType(), 
"additionalLink", entityActionLinks);
+        EntityActionUtil.appendAdditionalLinksForAssociation(entityModel, 
otma, null, getDeploymentType(), "additionalLink", entityActionLinks);
+
+        collectionModel.addEntityActions(entityActionLinks);
     }
 
     @Override
@@ -112,15 +124,22 @@ public class CollectionPanel extends 
PanelAbstract<EntityCollectionModel> implem
 
     //region > ActionPromptModalWindowProvider
 
-    private ActionPromptModalWindow actionPromptModalWindow;
-    public ActionPromptModalWindow getActionPrompt() {
-        return 
ActionPromptModalWindow.getActionPromptModalWindowIfEnabled(actionPromptModalWindow);
+    @Override
+    public ActionPrompt getActionPrompt() {
+        return ActionPromptProvider.Util.getFrom(this).getActionPrompt();
     }
 
-    private void addActionPromptModalWindow() {
-        this.actionPromptModalWindow = 
ActionPromptModalWindow.newModalWindow(ID_ACTION_PROMPT_MODAL_WINDOW);
-        addOrReplace(actionPromptModalWindow);
-    }
+//    private ActionPromptModalWindow actionPromptModalWindow;
+//    @Override
+//    public ActionPromptModalWindow getActionPrompt() {
+//        return 
ActionPromptModalWindow.getActionPromptModalWindowIfEnabled(actionPromptModalWindow);
+//    }
+//
+//    private void addActionPromptModalWindow() {
+//        this.actionPromptModalWindow = 
ActionPromptModalWindow.newModalWindow(ID_ACTION_PROMPT_MODAL_WINDOW);
+//        addOrReplace(actionPromptModalWindow);
+//    }
+
     //endregion
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/9de5ba8e/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.css
----------------------------------------------------------------------
diff --git 
a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.css
 
b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.css
index 964a270..acff569 100644
--- 
a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.css
+++ 
b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.css
@@ -138,6 +138,7 @@
 
 .collectionContentsAsAjaxTablePanel .table-responsive {
        overflow-x: auto;
+       padding-bottom: 10px;
 }
 
 .collectionContentsAsAjaxTablePanel table tbody tr:last-child td {

http://git-wip-us.apache.org/repos/asf/isis/blob/9de5ba8e/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 7fa2f99..ae5e862 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
@@ -23,6 +23,7 @@ import de.agilecoders.wicket.core.util.Attributes;
 
 import java.util.List;
 import java.util.Map;
+import com.google.common.collect.Lists;
 import org.apache.wicket.Component;
 import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.Session;
@@ -62,12 +63,17 @@ import 
org.apache.isis.core.metamodel.spec.feature.Contributed;
 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;
+import org.apache.isis.core.runtime.system.DeploymentType;
 import org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.core.runtime.system.transaction.IsisTransactionManager;
+import org.apache.isis.viewer.wicket.model.links.LinkAndLabel;
 import org.apache.isis.viewer.wicket.model.mementos.PropertyMemento;
+import org.apache.isis.viewer.wicket.model.models.ActionPrompt;
+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.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.ComponentType;
+import 
org.apache.isis.viewer.wicket.ui.components.additionallinks.EntityActionUtil;
 import 
org.apache.isis.viewer.wicket.ui.components.widgets.containers.UiHintPathSignificantWebMarkupContainer;
 import 
org.apache.isis.viewer.wicket.ui.components.widgets.formcomponent.CancelHintRequired;
 import org.apache.isis.viewer.wicket.ui.errors.JGrowlBehaviour;
@@ -77,7 +83,7 @@ import 
org.apache.isis.viewer.wicket.ui.panels.IFormSubmitterWithPreValidateHook
 import org.apache.isis.viewer.wicket.ui.util.Components;
 import org.apache.isis.viewer.wicket.ui.util.CssClassAppender;
 
-public class EntityPropertiesForm extends FormAbstract<ObjectAdapter> {
+public class EntityPropertiesForm extends FormAbstract<ObjectAdapter> 
implements ActionPromptProvider {
 
     private static final long serialVersionUID = 1L;
 
@@ -237,21 +243,41 @@ public class EntityPropertiesForm extends 
FormAbstract<ObjectAdapter> {
         return !groupNames.isEmpty();
     }
 
-    private void addPropertyToForm(final EntityModel entityModel,
+    public static final String ID_ADDITIONAL_LINK = "additionalLink";
+
+
+    private void addPropertyToForm(
+            final EntityModel entityModel,
             final ObjectAssociation association,
             final WebMarkupContainer container) {
+
+        final List<LinkAndLabel> entityActions = Lists.newArrayList();
+
         final OneToOneAssociation otoa = (OneToOneAssociation) association;
         final PropertyMemento pm = new PropertyMemento(otoa);
 
         final ScalarModel scalarModel = entityModel.getPropertyModel(pm);
         final Component component = 
getComponentFactoryRegistry().addOrReplaceComponent(container, ID_PROPERTY, 
ComponentType.SCALAR_NAME_AND_VALUE, scalarModel);
-        
+
+        EntityActionUtil.appendAdditionalLinksForAssociation(
+                entityModel, otoa,
+                this,
+                getDeploymentType(),
+                ID_ADDITIONAL_LINK,
+                entityActions);
+
         if(!renderedFirstField) {
             component.add(new CssClassAppender("first-field"));
             renderedFirstField = true;
         }
     }
 
+//    protected void addAdditionalLinksTo(final MarkupContainer 
labelIfRegular) {
+//        // ... and add them to the panel
+//        AdditionalLinksPanel.addAdditionalLinks(labelIfRegular, 
ID_ADDITIONAL_LINKS, entityActions);
+//    }
+
+
     private List<ObjectAssociation> visibleProperties(final ObjectAdapter 
adapter, final ObjectSpecification objSpec, Where where) {
         return objSpec.getAssociations(Contributed.INCLUDED, 
visiblePropertyFilter(adapter, where));
     }
@@ -268,6 +294,11 @@ public class EntityPropertiesForm extends 
FormAbstract<ObjectAdapter> {
         Attributes.addClass(tag, "form-horizontal");
     }
 
+    @Override
+    public ActionPrompt getActionPrompt() {
+        return ActionPromptProvider.Util.getFrom(this).getActionPrompt();
+    }
+
     abstract class AjaxButtonWithOnError extends AjaxButton {
 
         public AjaxButtonWithOnError(String id, IModel<String> model) {
@@ -710,5 +741,8 @@ public class EntityPropertiesForm extends 
FormAbstract<ObjectAdapter> {
         return getAuthenticationSession().getMessageBroker();
     }
 
+    protected DeploymentType getDeploymentType() {
+        return IsisContext.getDeploymentType();
+    }
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/9de5ba8e/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesPanel.html
----------------------------------------------------------------------
diff --git 
a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesPanel.html
 
b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesPanel.html
index ff9128a..b909597 100644
--- 
a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesPanel.html
+++ 
b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesPanel.html
@@ -28,7 +28,13 @@
                                 <fieldset wicket:id="memberGroup" 
class="memberGroup myBlockContainer">
                                     <div class="panel panel-default">
                                         <div class="panel-heading">
-                                            <div class="panel-title" 
wicket:id="memberGroupName" >[group name]</div>
+                                            <span wicket:id="memberGroupName" 
class="panel-title">[group name]</span>
+
+                                            <div class="additionalLinks 
pull-right">
+                                                <div class="btn-group">
+                                                    <div 
xxwicket:id="additionalLinks"></div>
+                                                </div>
+                                            </div>
                                         </div>
                                         <div class="properties panel-body">
                                             <div wicket:id="properties">

http://git-wip-us.apache.org/repos/asf/isis/blob/9de5ba8e/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 6f6e6fe..b8acec6 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
@@ -30,7 +30,6 @@ import 
org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
 import org.apache.wicket.behavior.AttributeAppender;
 import org.apache.wicket.behavior.Behavior;
 import org.apache.wicket.feedback.ComponentFeedbackMessageFilter;
-import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.form.LabeledWebMarkupContainer;
 import org.apache.wicket.markup.html.panel.Fragment;
@@ -42,16 +41,12 @@ import 
org.apache.isis.core.metamodel.facets.propparam.labelat.LabelAtFacet;
 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.EntityModel.RenderingHint;
 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.scalars.TextFieldValueModel.ScalarModelProvider;
 import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
-import org.apache.isis.viewer.wicket.ui.util.Components;
 import org.apache.isis.viewer.wicket.ui.util.CssClassAppender;
 
 /**
@@ -73,6 +68,8 @@ public abstract class ScalarPanelAbstract extends 
PanelAbstract<ScalarModel> imp
     protected static final String ID_SCALAR_IF_COMPACT = "scalarIfCompact";
 
     private static final String ID_ADDITIONAL_LINKS = "additionalLinks";
+    public static final String ID_ADDITIONAL_LINK = "additionalLink";
+
     private static final String ID_FEEDBACK = "feedback";
 
     public enum CompactType {
@@ -294,30 +291,15 @@ public abstract class ScalarPanelAbstract extends 
PanelAbstract<ScalarModel> imp
     }
     
     protected void addAdditionalLinksTo(final MarkupContainer labelIfRegular) {
-        final List<LinkAndLabel> entityActions;
-        if(scalarModel.getKind() == ScalarModel.Kind.PROPERTY) {
-            final ObjectAdapterMemento parentMemento = 
scalarModel.getParentObjectAdapterMemento();
-            final EntityModel parentEntityModel = new 
EntityModel(parentMemento);
-            final ActionPromptProvider actionPromptProvider = 
ActionPromptProvider.Util.getFrom(this);
-            entityActions = EntityActionUtil.entityActionsForAssociation(
-                    parentEntityModel, 
scalarModel.getPropertyMemento().getProperty(), actionPromptProvider, 
getDeploymentType());
-        } else {
-            entityActions = null;
-        }
-        addAdditionalLinks(labelIfRegular, entityActions);
-    }
+        // find the links...
+        final List<LinkAndLabel> entityActions = Lists.newArrayList();
 
-    private void addAdditionalLinks(MarkupContainer markupContainer, 
List<LinkAndLabel> links) {
-        if(links == null || links.isEmpty()) {
-            Components.permanentlyHide(markupContainer, ID_ADDITIONAL_LINKS);
-            return;
-        }
-        links = Lists.newArrayList(links); // copy, to serialize any lazy 
evaluation
-        
-        final WebMarkupContainer views = new 
AdditionalLinksPanel(ID_ADDITIONAL_LINKS, links);
-        markupContainer.addOrReplace(views);
+        EntityActionUtil.appendAdditionalLinksForAssociation(this.scalarModel, 
this, getDeploymentType(), ID_ADDITIONAL_LINK, entityActions);
+        // ... and add them to the panel
+        AdditionalLinksPanel.addAdditionalLinks(labelIfRegular, 
ID_ADDITIONAL_LINKS, entityActions);
     }
 
+
     /**
      * Optional hook.
      */

http://git-wip-us.apache.org/repos/asf/isis/blob/9de5ba8e/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/ActionLinkFactoryAbstract.java
----------------------------------------------------------------------
diff --git 
a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/ActionLinkFactoryAbstract.java
 
b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/ActionLinkFactoryAbstract.java
index dc41c4a..50c3478 100644
--- 
a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/ActionLinkFactoryAbstract.java
+++ 
b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/ActionLinkFactoryAbstract.java
@@ -90,10 +90,12 @@ public abstract class ActionLinkFactoryAbstract implements 
ActionLinkFactory {
             final ObjectAction action,
             final ActionPromptProvider actionPromptProvider) {
         
-        final ActionPrompt actionPrompt = 
actionPromptProvider.getActionPrompt();
-        if(actionPrompt != null) {
+        //final ActionPrompt actionPrompt = 
actionPromptProvider.getActionPrompt();
+        //if(actionPrompt != null) {
+
+        if(true) {
             final ActionModel actionModel = ActionModel.create(objectAdapter, 
action);
-            actionModel.setActionPrompt(actionPrompt);
+            //actionModel.setActionPrompt(actionPrompt);
             
             final AjaxDeferredBehaviour ajaxDeferredBehaviour = 
determineDeferredBehaviour(action, actionModel);
 
@@ -103,6 +105,7 @@ public abstract class ActionLinkFactoryAbstract implements 
ActionLinkFactory {
                 @Override
                 public void onClick(AjaxRequestTarget target) {
 
+                    final ActionPrompt actionPrompt = 
ActionPromptProvider.Util.getFrom(getPage()).getActionPrompt();
                     if(ajaxDeferredBehaviour != null) {
                         ajaxDeferredBehaviour.initiate(target);
                     } else {

http://git-wip-us.apache.org/repos/asf/isis/blob/9de5ba8e/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap-overrides.css
----------------------------------------------------------------------
diff --git 
a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap-overrides.css
 
b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap-overrides.css
index c7143f3..612dbfa 100644
--- 
a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap-overrides.css
+++ 
b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap-overrides.css
@@ -67,7 +67,7 @@
     padding-bottom: 5px;
 }
 .entityPropertiesPanel .collection.panel-body {
-    padding-bottom: 10px;
+    padding-bottom: 0px;
 }
 
 
@@ -77,11 +77,6 @@
 
 .collection.panel-body {
     padding-top: 0px;
-    /*
-    padding-left: 5px;
-    padding-right: 5px;
-    padding-bottom: 5px;
-    */
 }
 
 .collectionPanel .well {
@@ -117,7 +112,6 @@ div.label-left label.control-label {
     width: 30%;
     float: left;
     padding-top: 2px;
-    /*padding-left: 10px;*/
     text-align: start;
 }
 
@@ -212,9 +206,6 @@ div.label-left .choicesPlaceholder {
     padding-bottom: 10px;
 }
 
-
-
-
 #body {
     padding-top: 20px;
 }

Reply via email to