http://git-wip-us.apache.org/repos/asf/isis/blob/c3addb51/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/string/StringPanel.java
----------------------------------------------------------------------
diff --git 
a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/string/StringPanel.java
 
b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/string/StringPanel.java
index bc25b2c..8c44e5a 100644
--- 
a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/string/StringPanel.java
+++ 
b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/string/StringPanel.java
@@ -21,46 +21,21 @@ package 
org.apache.isis.viewer.wicket.ui.components.scalars.string;
 
 import java.util.List;
 
-import com.google.common.base.Function;
-import com.google.common.base.Strings;
 import com.google.common.collect.Lists;
 
-import org.apache.wicket.Session;
-import org.apache.wicket.behavior.AttributeAppender;
+import org.apache.wicket.Component;
+import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.markup.html.WebMarkupContainer;
-import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.form.FormComponentLabel;
-import org.apache.wicket.markup.html.link.AbstractLink;
-import org.apache.wicket.markup.html.list.ListItem;
-import org.apache.wicket.markup.html.list.ListView;
 
-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.commons.authentication.AuthenticationSessionProvider;
-import org.apache.isis.core.commons.lang.StringUtils;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import 
org.apache.isis.core.metamodel.adapter.mgr.AdapterManager.ConcurrencyChecking;
-import org.apache.isis.core.metamodel.facets.members.order.MemberOrderFacet;
-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.ObjectAssociation;
-import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
-import 
org.apache.isis.core.metamodel.spec.feature.ObjectActionContainer.Contributed;
 import org.apache.isis.viewer.wicket.model.links.LinkAndLabel;
-import org.apache.isis.viewer.wicket.model.links.LinksProvider;
 import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
 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.collection.CollectionPanel;
-import 
org.apache.isis.viewer.wicket.ui.components.entity.EntityActionLinkFactory;
+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.ScalarPanelTextFieldParseableAbstract;
-import 
org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu.CssMenuLinkFactory;
-import 
org.apache.isis.viewer.wicket.ui.selector.links.LinksSelectorPanelAbstract;
-import org.apache.isis.viewer.wicket.ui.util.CssClassAppender;
+import org.apache.isis.viewer.wicket.ui.util.Components;
 
 /**
  * Panel for rendering scalars of type {@link String}.
@@ -70,81 +45,15 @@ public class StringPanel extends 
ScalarPanelTextFieldParseableAbstract {
     private static final long serialVersionUID = 1L;
     private static final String ID_SCALAR_VALUE = "scalarValue";
 
-    private static final String ID_ADDITIONAL_LINKS = "additionalLinks";
-    private static final String ID_ADDITIONAL_LINK_LIST = "additionalLinkList";
-    public static final String ID_ADDITIONAL_LINK = "additionalLink";
-    private static final String ID_ADDITIONAL_LINK_ITEM = "additionalLinkItem";
-    private static final String ID_ADDITIONAL_LINK_TITLE = 
"additionalLinkTitle";
     
     public StringPanel(final String id, final ScalarModel scalarModel) {
         super(id, ID_SCALAR_VALUE, scalarModel);
     }
 
-    
-
     @Override
     protected void addSemantics() {
         super.addSemantics();
     }
     
-    @Override
-    protected FormComponentLabel addComponentForRegular() {
-        final FormComponentLabel fcl = super.addComponentForRegular();
-
-        final List<LinkAndLabel> entityActions;
-        if(scalarModel.getKind() == ScalarModel.Kind.PROPERTY) {
-            final ObjectAdapterMemento parentMemento = 
scalarModel.getParentObjectAdapterMemento();
-            final EntityModel parentEntityModel = new 
EntityModel(parentMemento);
-            entityActions = CollectionPanel.entityActions(parentEntityModel, 
scalarModel.getPropertyMemento().getProperty());
-        } else {
-            entityActions = null;
-        }
-        addAdditionalLinks(fcl, entityActions);
-
-        return fcl;
-    }
-    
-    protected void addAdditionalLinks(FormComponentLabel fcl, 
List<LinkAndLabel> links) {
-        if(links == null || links.isEmpty()) {
-            permanentlyHide(ID_ADDITIONAL_LINKS);
-            return;
-        }
-        links = Lists.newArrayList(links); // copy, to serialize any lazy 
evaluation
-        
-        final WebMarkupContainer views = new 
WebMarkupContainer(ID_ADDITIONAL_LINKS);
-        
-        final WebMarkupContainer container = new 
WebMarkupContainer(ID_ADDITIONAL_LINK_LIST);
-        
-        views.addOrReplace(container);
-        views.setOutputMarkupId(true);
-        
-        this.setOutputMarkupId(true);
-        
-        final ListView<LinkAndLabel> listView = new 
ListView<LinkAndLabel>(ID_ADDITIONAL_LINK_ITEM, links) {
-
-            private static final long serialVersionUID = 1L;
-
-            @Override
-            protected void populateItem(ListItem<LinkAndLabel> item) {
-                final LinkAndLabel linkAndLabel = item.getModelObject();
-                
-                final AbstractLink link = linkAndLabel.getLink();
-                        
-                Label viewTitleLabel = new Label(ID_ADDITIONAL_LINK_TITLE, 
linkAndLabel.getLabel());
-                String disabledReasonIfAny = 
linkAndLabel.getDisabledReasonIfAny();
-                if(disabledReasonIfAny != null) {
-                    viewTitleLabel.add(new AttributeAppender("title", 
disabledReasonIfAny));
-                }
-                viewTitleLabel.add(new 
CssClassAppender(StringUtils.toLowerDashed(linkAndLabel.getLabel())));
-                link.addOrReplace(viewTitleLabel);
-                item.addOrReplace(link);
-            }
-        };
-        container.addOrReplace(listView);
-        //addOrReplace(views);
-        
-        fcl.addOrReplace(views);
-    }
-
     
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/c3addb51/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/value/ValuePanel.html
----------------------------------------------------------------------
diff --git 
a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/value/ValuePanel.html
 
b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/value/ValuePanel.html
index aa64850..70183f6 100644
--- 
a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/value/ValuePanel.html
+++ 
b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/value/ValuePanel.html
@@ -31,6 +31,7 @@
                                <span class="scalarValue">
                                        <input type="text" name="scalarValue" 
wicket:id="scalarValue" />
                                        <span wicket:id="feedback"></span>
+                        <span wicket:id="additionalLinks"/>
                                </span>
                                </label>
                                <label wicket:id="scalarIfCompact"></label>

http://git-wip-us.apache.org/repos/asf/isis/blob/c3addb51/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/ValueChoicesSelect2Panel.html
----------------------------------------------------------------------
diff --git 
a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/ValueChoicesSelect2Panel.html
 
b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/ValueChoicesSelect2Panel.html
index 5beab23..c894934 100644
--- 
a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/ValueChoicesSelect2Panel.html
+++ 
b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/ValueChoicesSelect2Panel.html
@@ -36,6 +36,7 @@
                                <span class="scalarValue">
                                        <input wicket:id="valueId" 
type="hidden" class="choices" />
                                <span wicket:id="feedback"></span>
+                        <span wicket:id="additionalLinks"/>
                                        </span>
                                </label>
                        

http://git-wip-us.apache.org/repos/asf/isis/blob/c3addb51/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 c268e7d..79a9b29 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
@@ -82,9 +82,11 @@ public class ValueChoicesSelect2Panel extends 
ScalarPanelAbstract { // ScalarPan
         if(getModel().isRequired()) {
             labelIfRegular.add(new CssClassAppender("mandatory"));
         }
+        
         addOrReplace(labelIfRegular);
-
-        labelIfRegular.addOrReplace(new ComponentFeedbackPanel(ID_FEEDBACK, 
valueField));
+        addFeedbackTo(labelIfRegular, valueField);
+        addAdditionalLinksTo(labelIfRegular);
+        
         return labelIfRegular;
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/c3addb51/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.css
----------------------------------------------------------------------
diff --git 
a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.css
 
b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.css
index 2183ec4..efd8544 100644
--- 
a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.css
+++ 
b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.css
@@ -825,5 +825,10 @@ div#jGrowl div.jGrowl-closer {
 
 .properties .property .additionalLinkList {
     float:none;
-    margin-top: 10px;
-}
\ No newline at end of file
+    padding-top: 5px;
+    padding-bottom: 20px;
+}
+
+.properties .property .isisBlobPanel .additionalLinkList {
+    padding-top: 0px;
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/c3addb51/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/selector/links/LinksSelectorPanelAbstract.html
----------------------------------------------------------------------
diff --git 
a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/selector/links/LinksSelectorPanelAbstract.html
 
b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/selector/links/LinksSelectorPanelAbstract.html
index fad408f..b61bc8d 100644
--- 
a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/selector/links/LinksSelectorPanelAbstract.html
+++ 
b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/selector/links/LinksSelectorPanelAbstract.html
@@ -31,15 +31,18 @@
                                                </li>
                                        </ul>
                                </span>
-                               <span wicket:id="additionalLinks" 
class="additionalLinks">
-                                       <ul wicket:id="additionalLinkList" 
class="additionalLinkList">
-                                               <li 
wicket:id="additionalLinkItem" class="additionalLinkItem">
-                                                       <a href="#" 
wicket:id="additionalLink">
-                                                               <span 
wicket:id="additionalLinkTitle" class="additionalLinkItem">[link title]</span>
+                <span wicket:id="additionalLinks"/>
+                <!-- 
+                               <span xwicket:id="additionalLinks" 
class="additionalLinks">
+                                       <ul xwicket:id="additionalLinkList" 
class="additionalLinkList">
+                                               <li 
xwicket:id="additionalLinkItem" class="additionalLinkItem">
+                                                       <a href="#" 
xwicket:id="additionalLink">
+                                                               <span 
xwicket:id="additionalLinkTitle" class="additionalLinkItem">[link title]</span>
                                                        </a>
                                                </li>
                                        </ul>
                                </span>
+                 -->
                                
                                <br class="clear"/>
                                

http://git-wip-us.apache.org/repos/asf/isis/blob/c3addb51/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/selector/links/LinksSelectorPanelAbstract.java
----------------------------------------------------------------------
diff --git 
a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/selector/links/LinksSelectorPanelAbstract.java
 
b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/selector/links/LinksSelectorPanelAbstract.java
index 87e0db1..c21a016 100644
--- 
a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/selector/links/LinksSelectorPanelAbstract.java
+++ 
b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/selector/links/LinksSelectorPanelAbstract.java
@@ -28,6 +28,7 @@ import com.google.common.collect.Lists;
 
 import org.apache.wicket.AttributeModifier;
 import org.apache.wicket.Component;
+import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.markup.html.AjaxLink;
 import org.apache.wicket.behavior.AttributeAppender;
@@ -45,8 +46,10 @@ import 
org.apache.isis.viewer.wicket.model.links.LinkAndLabel;
 import org.apache.isis.viewer.wicket.model.links.LinksProvider;
 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.collectioncontents.unresolved.CollectionContentsAsUnresolvedPanelFactory;
 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;
 
 public abstract class LinksSelectorPanelAbstract<T extends IModel<?>> extends 
PanelAbstract<T> {
@@ -89,39 +92,54 @@ public abstract class LinksSelectorPanelAbstract<T extends 
IModel<?>> extends Pa
         LinksProvider linksProvider = (LinksProvider) model;
         List<LinkAndLabel> links = linksProvider.getLinks();
         
-        final WebMarkupContainer views = new 
WebMarkupContainer(ID_ADDITIONAL_LINKS);
-        
-        final WebMarkupContainer container = new 
WebMarkupContainer(ID_ADDITIONAL_LINK_LIST);
-        
-        views.addOrReplace(container);
-        views.setOutputMarkupId(true);
-        
-        this.setOutputMarkupId(true);
-        
-        final ListView<LinkAndLabel> listView = new 
ListView<LinkAndLabel>(ID_ADDITIONAL_LINK_ITEM, links) {
-
-            private static final long serialVersionUID = 1L;
+        addAdditionalLinks(this, links);
+    }
 
-            @Override
-            protected void populateItem(ListItem<LinkAndLabel> item) {
-                final LinkAndLabel linkAndLabel = item.getModelObject();
-                
-                final AbstractLink link = linkAndLabel.getLink();
-                        
-                Label viewTitleLabel = new Label(ID_ADDITIONAL_LINK_TITLE, 
linkAndLabel.getLabel());
-                String disabledReasonIfAny = 
linkAndLabel.getDisabledReasonIfAny();
-                if(disabledReasonIfAny != null) {
-                    viewTitleLabel.add(new AttributeAppender("title", 
disabledReasonIfAny));
-                }
-                viewTitleLabel.add(new 
CssClassAppender(StringUtils.toLowerDashed(linkAndLabel.getLabel())));
-                link.addOrReplace(viewTitleLabel);
-                item.addOrReplace(link);
-            }
-        };
-        container.addOrReplace(listView);
-        addOrReplace(views);
+    protected 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);
     }
 
+//    protected void addAdditionalLinks(MarkupContainer markupContainer, 
List<LinkAndLabel> links) {
+//        final WebMarkupContainer views = new 
WebMarkupContainer(ID_ADDITIONAL_LINKS);
+//        
+//        final WebMarkupContainer container = new 
WebMarkupContainer(ID_ADDITIONAL_LINK_LIST);
+//        
+//        views.addOrReplace(container);
+//        views.setOutputMarkupId(true);
+//        
+//        this.setOutputMarkupId(true);
+//        
+//        final ListView<LinkAndLabel> listView = new 
ListView<LinkAndLabel>(ID_ADDITIONAL_LINK_ITEM, links) {
+//
+//            private static final long serialVersionUID = 1L;
+//
+//            @Override
+//            protected void populateItem(ListItem<LinkAndLabel> item) {
+//                final LinkAndLabel linkAndLabel = item.getModelObject();
+//                
+//                final AbstractLink link = linkAndLabel.getLink();
+//                        
+//                Label viewTitleLabel = new Label(ID_ADDITIONAL_LINK_TITLE, 
linkAndLabel.getLabel());
+//                String disabledReasonIfAny = 
linkAndLabel.getDisabledReasonIfAny();
+//                if(disabledReasonIfAny != null) {
+//                    viewTitleLabel.add(new AttributeAppender("title", 
disabledReasonIfAny));
+//                }
+//                viewTitleLabel.add(new 
CssClassAppender(StringUtils.toLowerDashed(linkAndLabel.getLabel())));
+//                link.addOrReplace(viewTitleLabel);
+//                item.addOrReplace(link);
+//            }
+//        };
+//        container.addOrReplace(listView);
+//        markupContainer.addOrReplace(views);
+//    }
+
     private void addUnderlyingViews(final String underlyingIdPrefix, final T 
model, final ComponentFactory factory) {
         final List<ComponentFactory> componentFactories = 
findOtherComponentFactories(model, factory);
 

Reply via email to