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 2013/05/09 08:24:27 UTC

[3/3] git commit: ISIS-400: factored out AdditionalLinksPanel, now used throughout

ISIS-400: factored out AdditionalLinksPanel, now used throughout

ie all subclasses of ScalarPanelAbstract, and also by entity collections as well.


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

Branch: refs/heads/master
Commit: c3addb515062271eba2720fb208b7cfbb56022cc
Parents: 1fcc800
Author: Dan Haywood <da...@apache.org>
Authored: Thu May 9 08:23:41 2013 +0200
Committer: Dan Haywood <da...@apache.org>
Committed: Thu May 9 08:23:41 2013 +0200

----------------------------------------------------------------------
 .../wicket/model/links/ListOfLinksModel.java       |   26 ++++
 .../viewer/wicket/model/models/ActionModel.java    |   14 +-
 .../viewer/wicket/model/models/EntityModel.java    |    5 -
 .../additionallinks/AdditionalLinksPanel.css       |   18 +++
 .../additionallinks/AdditionalLinksPanel.html      |   37 ++++++
 .../additionallinks/AdditionalLinksPanel.java      |   85 ++++++++++++
 .../additionallinks/EntityActionUtil.java          |   81 ++++++++++++
 .../cssmenu/AppActionsCssMenuLinkFactory.java      |    2 +-
 .../ui/components/collection/CollectionPanel.java  |   76 +-----------
 .../CollectionContentsLinksSelectorPanel.java      |    1 -
 .../components/entity/EntityActionLinkFactory.java |    8 +-
 .../entity/properties/EntityPropertiesForm.java    |    2 +-
 .../ui/components/scalars/ScalarPanelAbstract.java |   45 +++++++-
 .../scalars/ScalarPanelTextFieldAbstract.java      |   16 ++-
 .../isisapplib/IsisBlobOrClobPanelAbstract.css     |   20 +++-
 .../isisapplib/IsisBlobOrClobPanelAbstract.html    |    1 +
 .../isisapplib/IsisBlobOrClobPanelAbstract.java    |   17 ++-
 .../scalars/isisapplib/IsisColorPanel.html         |    1 +
 .../scalars/isisapplib/IsisDatePanel.html          |    1 +
 .../scalars/isisapplib/IsisDateTimePanel.html      |    1 +
 .../scalars/isisapplib/IsisMoneyPanel.html         |    1 +
 .../scalars/isisapplib/IsisPasswordPanel.html      |    1 +
 .../scalars/isisapplib/IsisPercentagePanel.html    |    1 +
 .../scalars/isisapplib/IsisTimePanel.html          |    1 +
 .../scalars/isisapplib/IsisTimeStampPanel.html     |    1 +
 .../scalars/jdkdates/JavaSqlDatePanel.html         |    1 +
 .../scalars/jdkdates/JavaUtilDatePanel.html        |    1 +
 .../scalars/jdkmath/JavaMathBigDecimalPanel.html   |    1 +
 .../scalars/jdkmath/JavaMathBigIntegerPanel.html   |    1 +
 .../scalars/jodatime/JodaDateTimePanel.html        |    1 +
 .../scalars/jodatime/JodaLocalDatePanel.html       |    1 +
 .../scalars/jodatime/JodaLocalDateTimePanel.html   |    1 +
 .../components/scalars/primitive/BooleanPanel.html |    1 +
 .../components/scalars/primitive/BooleanPanel.java |    9 +-
 .../ui/components/scalars/primitive/BytePanel.html |    1 +
 .../scalars/primitive/CharacterPanel.html          |    1 +
 .../components/scalars/primitive/DoublePanel.html  |    1 +
 .../components/scalars/primitive/FloatPanel.html   |    1 +
 .../components/scalars/primitive/IntegerPanel.html |    1 +
 .../ui/components/scalars/primitive/LongPanel.html |    1 +
 .../components/scalars/primitive/ShortPanel.html   |    1 +
 .../scalars/reference/ReferencePanel.html          |    3 +-
 .../scalars/reference/ReferencePanel.java          |    9 +-
 .../scalars/string/MultiLineStringPanel.html       |    5 +-
 .../ui/components/scalars/string/StringPanel.html  |   10 +--
 .../ui/components/scalars/string/StringPanel.java  |  101 +--------------
 .../ui/components/scalars/value/ValuePanel.html    |    1 +
 .../valuechoices/ValueChoicesSelect2Panel.html     |    1 +
 .../valuechoices/ValueChoicesSelect2Panel.java     |    6 +-
 .../isis/viewer/wicket/ui/pages/PageAbstract.css   |    9 +-
 .../selector/links/LinksSelectorPanelAbstract.html |   13 +-
 .../selector/links/LinksSelectorPanelAbstract.java |   78 +++++++-----
 52 files changed, 458 insertions(+), 264 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/c3addb51/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/links/ListOfLinksModel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/links/ListOfLinksModel.java b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/links/ListOfLinksModel.java
new file mode 100644
index 0000000..10f520d
--- /dev/null
+++ b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/links/ListOfLinksModel.java
@@ -0,0 +1,26 @@
+package org.apache.isis.viewer.wicket.model.links;
+
+import java.util.List;
+
+import com.google.common.collect.Lists;
+
+import org.apache.wicket.model.LoadableDetachableModel;
+
+
+public class ListOfLinksModel extends LoadableDetachableModel<List<LinkAndLabel>> {
+
+    private static final long serialVersionUID = 1L;
+    
+    private final List<LinkAndLabel> links;
+
+    public ListOfLinksModel(List<LinkAndLabel> links) {
+        // copy, in case supplied list is a non-serializable guava list using lazy evaluation;
+        this.links = Lists.newArrayList(links); 
+    }
+
+    @Override
+    protected List<LinkAndLabel> load() {
+        return links;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/c3addb51/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 d5c2004..c36f96b 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
@@ -106,10 +106,11 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> {
      * Factory method for creating {@link PageParameters}.
      * 
      * see {@link #ActionModel(PageParameters)}
+     * @param concurrencyChecking TODO
      */
-    public static PageParameters createPageParameters(final ObjectAdapter adapter, final ObjectAction objectAction, final ObjectAdapter contextAdapter, final SingleResultsMode singleResultsMode) {
+    public static PageParameters createPageParameters(final ObjectAdapter adapter, final ObjectAction objectAction, final ObjectAdapter contextAdapter, final SingleResultsMode singleResultsMode, ConcurrencyChecking concurrencyChecking) {
         
-        final PageParameters pageParameters = createPageParameters(adapter, objectAction, singleResultsMode);
+        final PageParameters pageParameters = createPageParameters(adapter, objectAction, singleResultsMode, concurrencyChecking);
 
         final String actionTitle = objectAction.getName();
         PageParameterNames.PAGE_TITLE.addStringTo(pageParameters, actionTitle);
@@ -121,13 +122,15 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> {
         return pageParameters;
     }
 
-    private static PageParameters createPageParameters(final ObjectAdapter adapter, final ObjectAction objectAction, final SingleResultsMode singleResultsMode) {
+    private static PageParameters createPageParameters(final ObjectAdapter adapter, final ObjectAction objectAction, final SingleResultsMode singleResultsMode, ConcurrencyChecking concurrencyChecking) {
         final PageParameters pageParameters = new PageParameters();
 
         PageParameterNames.PAGE_TYPE.addEnumTo(pageParameters, PageType.ACTION);
         PageParameterNames.ACTION_SINGLE_RESULTS_MODE.addEnumTo(pageParameters, singleResultsMode);
 
-        final String oidStr = adapter.getOid().enString(getOidMarshaller());
+        final String oidStr = concurrencyChecking == ConcurrencyChecking.CHECK?
+                adapter.getOid().enString(getOidMarshaller()):
+                adapter.getOid().enStringNoVersion(getOidMarshaller());
         PageParameterNames.OBJECT_OID.addStringTo(pageParameters, oidStr);
 
         final ActionType actionType = objectAction.getType();
@@ -147,8 +150,7 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> {
     public PageParameters asPageParameters() {
         final ObjectAdapter adapter = getTargetAdapter();
         final ObjectAction objectAction = getActionMemento().getAction();
-        final PageParameters pageParameters = createPageParameters(adapter, objectAction, SingleResultsMode.REDIRECT);
-
+        final PageParameters pageParameters = createPageParameters(adapter, objectAction, SingleResultsMode.REDIRECT, ConcurrencyChecking.CHECK);
 
         // capture argument values and build up a title
         final StringBuilder buf = new StringBuilder();

http://git-wip-us.apache.org/repos/asf/isis/blob/c3addb51/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
index 5827fa8..e79a6dd 100644
--- a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
+++ b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
@@ -483,9 +483,4 @@ public class EntityModel extends BookmarkableModel<ObjectAdapter> {
         return IsisContext.getSpecificationLoader();
     }
 
-
-
-
-
-
 }

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/additionallinks/AdditionalLinksPanel.css
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/additionallinks/AdditionalLinksPanel.css b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/additionallinks/AdditionalLinksPanel.css
new file mode 100644
index 0000000..eaeea17
--- /dev/null
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/additionallinks/AdditionalLinksPanel.css
@@ -0,0 +1,18 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */

http://git-wip-us.apache.org/repos/asf/isis/blob/c3addb51/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/additionallinks/AdditionalLinksPanel.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/additionallinks/AdditionalLinksPanel.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/additionallinks/AdditionalLinksPanel.html
new file mode 100644
index 0000000..f532181
--- /dev/null
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/additionallinks/AdditionalLinksPanel.html
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+         http://www.apache.org/licenses/LICENSE-2.0
+         
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"  
+      xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd"  
+      xml:lang="en"  
+      lang="en">
+	<head></head>
+	<body>
+		<wicket:panel>
+            <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>
+                    </a>
+                </li>
+            </ul>
+		</wicket:panel>
+	</body>
+</html>

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/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
new file mode 100644
index 0000000..259b9a6
--- /dev/null
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/additionallinks/AdditionalLinksPanel.java
@@ -0,0 +1,85 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.viewer.wicket.ui.components.additionallinks;
+
+import java.util.List;
+
+import org.apache.wicket.behavior.AttributeAppender;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.link.AbstractLink;
+import org.apache.wicket.markup.html.list.ListItem;
+import org.apache.wicket.markup.html.list.ListView;
+
+import org.apache.isis.core.commons.lang.StringUtils;
+import org.apache.isis.viewer.wicket.model.links.LinkAndLabel;
+import org.apache.isis.viewer.wicket.model.links.ListOfLinksModel;
+import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
+import org.apache.isis.viewer.wicket.ui.util.CssClassAppender;
+
+/**
+ * Panel for rendering scalars of type {@link String}.
+ */
+public class AdditionalLinksPanel extends PanelAbstract<ListOfLinksModel> {
+
+    private static final long serialVersionUID = 1L;
+
+    private static final String ID_ADDITIONAL_LINK_LIST = "additionalLinkList";
+    private static final String ID_ADDITIONAL_LINK_ITEM = "additionalLinkItem";
+    private static final String ID_ADDITIONAL_LINK_TITLE = "additionalLinkTitle";
+    
+    private List<LinkAndLabel> linkAndLabels;
+    
+    public AdditionalLinksPanel(final String id, final List<LinkAndLabel> links) {
+        super(id, new ListOfLinksModel(links));
+
+        this.linkAndLabels = getModel().getObject();
+        
+        final WebMarkupContainer container = new WebMarkupContainer(ID_ADDITIONAL_LINK_LIST);
+        addOrReplace(container);
+        
+        container.setOutputMarkupId(true);
+        
+        setOutputMarkupId(true);
+        
+        final ListView<LinkAndLabel> listView = new ListView<LinkAndLabel>(ID_ADDITIONAL_LINK_ITEM, this.linkAndLabels) {
+
+            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);
+    }
+    
+}

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/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
new file mode 100644
index 0000000..5f1f7b6
--- /dev/null
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/additionallinks/EntityActionUtil.java
@@ -0,0 +1,81 @@
+package org.apache.isis.viewer.wicket.ui.components.additionallinks;
+
+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.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.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.ObjectActionContainer.Contributed;
+import org.apache.isis.core.metamodel.spec.feature.ObjectActionFilters;
+import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
+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.EntityModel;
+import org.apache.isis.viewer.wicket.ui.components.entity.EntityActionLinkFactory;
+import org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu.CssMenuLinkFactory;
+import org.apache.isis.viewer.wicket.ui.selector.links.LinksSelectorPanelAbstract;
+
+public final class EntityActionUtil {
+    
+    private EntityActionUtil(){}
+
+    public static List<LinkAndLabel> entityActions(EntityModel entityModel, ObjectAssociation association) {
+        final ObjectSpecification adapterSpec = entityModel.getTypeOfSpecification();
+        final ObjectAdapter adapter = entityModel.load(ConcurrencyChecking.NO_CHECK);
+        final ObjectAdapterMemento adapterMemento = entityModel.getObjectAdapterMemento();
+        
+        @SuppressWarnings("unchecked")
+        final List<ObjectAction> userActions = adapterSpec.getObjectActions(ActionType.USER, Contributed.INCLUDED,
+                Filters.and(EntityActionUtil.memberOrderOf(association), EntityActionUtil.dynamicallyVisibleFor(adapter)));
+        
+        final CssMenuLinkFactory linkFactory = new EntityActionLinkFactory(entityModel);
+    
+        return Lists.transform(userActions, new Function<ObjectAction, LinkAndLabel>(){
+    
+            @Override
+            public LinkAndLabel apply(ObjectAction objectAction) {
+                return linkFactory.newLink(adapterMemento, objectAction, LinksSelectorPanelAbstract.ID_ADDITIONAL_LINK);
+            }});
+    }
+
+    private static Filter<ObjectAction> dynamicallyVisibleFor(final ObjectAdapter adapter) {
+        final AuthenticationSessionProvider asa = (AuthenticationSessionProvider) Session.get();
+        AuthenticationSession authSession = asa.getAuthenticationSession();
+        return ObjectActionFilters.dynamicallyVisible(authSession, adapter, Where.ANYWHERE);
+    }
+
+    private static Filter<ObjectAction> memberOrderOf(ObjectAssociation association) {
+        final String collectionName = association.getName();
+        final String collectionId = association.getId();
+        return new Filter<ObjectAction>() {
+    
+            @Override
+            public boolean accept(ObjectAction t) {
+                final MemberOrderFacet memberOrderFacet = t.getFacet(MemberOrderFacet.class);
+                if(memberOrderFacet == null) {
+                    return false; 
+                }
+                final String memberOrderName = memberOrderFacet.name();
+                if(Strings.isNullOrEmpty(memberOrderName)) {
+                    return false;
+                }
+                return memberOrderName.equalsIgnoreCase(collectionName) || memberOrderName.equalsIgnoreCase(collectionId);
+            }
+        };
+    }
+
+}

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/appactions/cssmenu/AppActionsCssMenuLinkFactory.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/appactions/cssmenu/AppActionsCssMenuLinkFactory.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/appactions/cssmenu/AppActionsCssMenuLinkFactory.java
index 01c339c..8e3964b 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/appactions/cssmenu/AppActionsCssMenuLinkFactory.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/appactions/cssmenu/AppActionsCssMenuLinkFactory.java
@@ -42,7 +42,7 @@ class AppActionsCssMenuLinkFactory implements CssMenuLinkFactory {
 
     @Override
     public LinkAndLabel newLink(final ObjectAdapterMemento adapterMemento, final ObjectAction action, final String linkId) {
-        final PageParameters pageParameters = ActionModel.createPageParameters(adapterMemento.getObjectAdapter(ConcurrencyChecking.NO_CHECK), action, null, ActionModel.SingleResultsMode.REDIRECT);
+        final PageParameters pageParameters = ActionModel.createPageParameters(adapterMemento.getObjectAdapter(ConcurrencyChecking.NO_CHECK), action, null, ActionModel.SingleResultsMode.REDIRECT, ConcurrencyChecking.NO_CHECK);
 
         final Class<? extends Page> pageClass = getPageClassRegistry().getPageClass(PageType.ACTION);
 

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/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 56bf437..b6065df 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
@@ -21,39 +21,19 @@ package org.apache.isis.viewer.wicket.ui.components.collection;
 
 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.Component;
-import org.apache.wicket.Session;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.panel.ComponentFeedbackPanel;
 
-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.metamodel.adapter.ObjectAdapter;
-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.ObjectActionContainer.Contributed;
-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.viewer.wicket.model.links.LinkAndLabel;
-import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
 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.entity.EntityActionLinkFactory;
+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.cssmenu.CssMenuLinkFactory;
 import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
-import org.apache.isis.viewer.wicket.ui.selector.links.LinksSelectorPanelAbstract;
 
 /**
  * Panel for rendering entity collection; analogous to (any concrete subclass
@@ -68,60 +48,12 @@ public class CollectionPanel extends PanelAbstract<EntityCollectionModel> {
 
     private static EntityCollectionModel createEntityCollectionModel(EntityModel entityModel, OneToManyAssociation otma) {
         EntityCollectionModel collectionModel = EntityCollectionModel.createParented(entityModel, otma);
-        List<LinkAndLabel> entityActions = entityActions(entityModel, otma);
-        
+        List<LinkAndLabel> entityActions = EntityActionUtil.entityActions(entityModel, otma);
+
         collectionModel.addEntityActions(entityActions);
         return collectionModel;
     }
 
-    // TODO: move to a utility class, since also called outside this class...
-    public static List<LinkAndLabel> entityActions(EntityModel entityModel, ObjectAssociation association) {
-        final ObjectSpecification adapterSpec = entityModel.getTypeOfSpecification();
-        final ObjectAdapter adapter = entityModel.getObject();
-        final ObjectAdapterMemento adapterMemento = entityModel.getObjectAdapterMemento();
-        
-        @SuppressWarnings("unchecked")
-        final List<ObjectAction> userActions = adapterSpec.getObjectActions(ActionType.USER, Contributed.INCLUDED,
-                Filters.and(memberOrderOf(association), dynamicallyVisibleFor(adapter)));
-        
-        final CssMenuLinkFactory linkFactory = new EntityActionLinkFactory(entityModel);
-
-        return Lists.transform(userActions, new Function<ObjectAction, LinkAndLabel>(){
-
-            @Override
-            public LinkAndLabel apply(ObjectAction objectAction) {
-                return linkFactory.newLink(adapterMemento, objectAction, LinksSelectorPanelAbstract.ID_ADDITIONAL_LINK);
-            }});
-    }
-
-    // TODO: move to a utility class, since also called outside this class...
-    private static Filter<ObjectAction> dynamicallyVisibleFor(final ObjectAdapter adapter) {
-        final AuthenticationSessionProvider asa = (AuthenticationSessionProvider) Session.get();
-        AuthenticationSession authSession = asa.getAuthenticationSession();
-        return ObjectActionFilters.dynamicallyVisible(authSession, adapter, Where.ANYWHERE);
-    }
-
-    // TODO: move to a utility class, since also called outside this class...
-    private static Filter<ObjectAction> memberOrderOf(ObjectAssociation association) {
-        final String collectionName = association.getName();
-        final String collectionId = association.getId();
-        return new Filter<ObjectAction>() {
-
-            @Override
-            public boolean accept(ObjectAction t) {
-                final MemberOrderFacet memberOrderFacet = t.getFacet(MemberOrderFacet.class);
-                if(memberOrderFacet == null) {
-                    return false; 
-                }
-                final String memberOrderName = memberOrderFacet.name();
-                if(Strings.isNullOrEmpty(memberOrderName)) {
-                    return false;
-                }
-                return memberOrderName.equalsIgnoreCase(collectionName) || memberOrderName.equalsIgnoreCase(collectionId);
-            }
-        };
-    }
-
     public CollectionPanel(final String id, final EntityModel entityModel, OneToManyAssociation otma) {
         this(id, createEntityCollectionModel(entityModel, otma));
     }
@@ -134,14 +66,12 @@ public class CollectionPanel extends PanelAbstract<EntityCollectionModel> {
 
     
     private void buildGui() {
-
         final WebMarkupContainer markupContainer = new WebMarkupContainer(ID_COLLECTION);
 
         final Component collectionContents = getComponentFactoryRegistry().addOrReplaceComponent(markupContainer, ComponentType.COLLECTION_CONTENTS, getModel());
         
         addOrReplace(new ComponentFeedbackPanel(ID_FEEDBACK, collectionContents));
         addOrReplace(markupContainer);
-
     }
     
 }

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/collectioncontents/selector/links/CollectionContentsLinksSelectorPanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/selector/links/CollectionContentsLinksSelectorPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/selector/links/CollectionContentsLinksSelectorPanel.java
index f45e307..6580da1 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/selector/links/CollectionContentsLinksSelectorPanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/selector/links/CollectionContentsLinksSelectorPanel.java
@@ -19,7 +19,6 @@
 
 package org.apache.isis.viewer.wicket.ui.components.collectioncontents.selector.links;
 
-import java.util.ArrayList;
 import java.util.List;
 
 import com.google.common.collect.Lists;

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/entity/EntityActionLinkFactory.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/EntityActionLinkFactory.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/EntityActionLinkFactory.java
index 4522efe..2d5f70a 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/EntityActionLinkFactory.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/EntityActionLinkFactory.java
@@ -20,11 +20,9 @@
 package org.apache.isis.viewer.wicket.ui.components.entity;
 
 import org.apache.wicket.Application;
-import org.apache.wicket.AttributeModifier;
 import org.apache.wicket.Page;
 import org.apache.wicket.markup.html.link.AbstractLink;
 import org.apache.wicket.markup.html.link.Link;
-import org.apache.wicket.model.Model;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 
 import org.apache.isis.applib.annotation.Where;
@@ -99,7 +97,11 @@ public final class EntityActionLinkFactory implements CssMenuLinkFactory {
         final ObjectAdapter adapter = adapterMemento.getObjectAdapter(ConcurrencyChecking.NO_CHECK);
         final ObjectAdapter contextAdapter = entityModel.getObject();
 
-        final PageParameters pageParameters = ActionModel.createPageParameters(adapter, action, contextAdapter, ActionModel.SingleResultsMode.REDIRECT);
+        // use NO concurrency checking because the link is rendered on the entity page.
+        // REVIEW: is this good enough.  On the one hand we need it because otherwise a change done by this user basically prevents all actions from working
+        // on the other hand, if a change were made by some other user, then this user would want to know...
+        // perhaps the generated bookmarks need to subscribe to the EntityModel that backs the page?
+        final PageParameters pageParameters = ActionModel.createPageParameters(adapter, action, contextAdapter, ActionModel.SingleResultsMode.REDIRECT, ConcurrencyChecking.NO_CHECK);
         final Class<? extends Page> pageClass = getPageClassRegistry().getPageClass(PageType.ACTION);
         return Links.newBookmarkablePageLink(linkId, pageParameters, pageClass);
     }

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/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 20c72ad..9eccf45 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
@@ -94,7 +94,7 @@ class EntityPropertiesForm extends FormAbstract<ObjectAdapter> {
 
         buildGui();
         
-        // add any concurrency exception that might have been propogated into the entity model 
+        // add any concurrency exception that might have been propagated into the entity model 
         // as a result of a previous action invocation
         final String concurrencyExceptionIfAny = entityModel.getAndClearConcurrencyExceptionIfAny();
         if(concurrencyExceptionIfAny != null) {

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/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 1075790..eedff4d 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
@@ -19,18 +19,31 @@
 
 package org.apache.isis.viewer.wicket.ui.components.scalars;
 
+import java.util.List;
+
+import com.google.common.collect.Lists;
+
 import org.apache.wicket.Component;
+import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.behavior.AttributeAppender;
+import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.form.FormComponentLabel;
 import org.apache.wicket.markup.html.form.LabeledWebMarkupContainer;
+import org.apache.wicket.markup.html.panel.ComponentFeedbackPanel;
 import org.apache.wicket.model.Model;
 
 import org.apache.isis.applib.annotation.Where;
+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.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.ScalarPanelAbstract.Rendering;
 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;
 
 /**
  * Adapter for {@link PanelAbstract panel}s that use a {@link ScalarModel} as
@@ -43,7 +56,9 @@ import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
 public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> implements ScalarModelProvider {
 
     private static final long serialVersionUID = 1L;
-
+    
+    private static final String ID_ADDITIONAL_LINKS = "additionalLinks";
+    private static final String ID_FEEDBACK = "feedback";
 
     public enum Rendering {
         /**
@@ -169,7 +184,35 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
 
     protected abstract Component addComponentForCompact();
 
+    protected void addFeedbackTo(MarkupContainer markupContainer, Component component) {
+        markupContainer.addOrReplace(new ComponentFeedbackPanel(ID_FEEDBACK, component));
+    }
+    
+    protected void addAdditionalLinksTo(final FormComponentLabel labelIfRegular) {
+        final List<LinkAndLabel> entityActions;
+        if(scalarModel.getKind() == ScalarModel.Kind.PROPERTY) {
+            final ObjectAdapterMemento parentMemento = scalarModel.getParentObjectAdapterMemento();
+            final EntityModel parentEntityModel = new EntityModel(parentMemento);
+            entityActions = EntityActionUtil.entityActions(parentEntityModel, scalarModel.getPropertyMemento().getProperty());
+        } else {
+            entityActions = null;
+        }
+        addAdditionalLinks(labelIfRegular, entityActions);
+    }
+
+
     
+    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);
+    }
+
     /**
      * Optional hook.
      */

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/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 eb8c79e..f26b6b3 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
@@ -20,6 +20,7 @@
 package org.apache.isis.viewer.wicket.ui.components.scalars;
 
 import java.io.Serializable;
+import java.util.List;
 
 import org.apache.wicket.AttributeModifier;
 import org.apache.wicket.Component;
@@ -34,7 +35,11 @@ import org.apache.wicket.model.Model;
 import org.apache.isis.core.metamodel.facets.SingleIntValueFacet;
 import org.apache.isis.core.metamodel.facets.maxlen.MaxLengthFacet;
 import org.apache.isis.core.metamodel.facets.typicallen.TypicalLengthFacet;
+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.EntityModel;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
+import org.apache.isis.viewer.wicket.ui.components.additionallinks.EntityActionUtil;
 import org.apache.isis.viewer.wicket.ui.util.CssClassAppender;
 
 /**
@@ -98,14 +103,13 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
             labelIfRegular.add(new AttributeModifier("title", Model.of(describedAs)));
         }
         
-        addFeedbackTo(labelIfRegular);
+        addFeedbackTo(labelIfRegular, textField);
+        addAdditionalLinksTo(labelIfRegular);
+        
         return labelIfRegular;
     }
-
-    protected void addFeedbackTo(MarkupContainer markupContainer) {
-        // 6.0.0
-        markupContainer.addOrReplace(new ComponentFeedbackPanel(ID_FEEDBACK, textField));
-    }
+    
+    
 
     /**
      * Optional hook method

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/isisapplib/IsisBlobOrClobPanelAbstract.css
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.css b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.css
index e90c9fa..d08ec3a 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.css
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.css
@@ -36,7 +36,7 @@
     font-size: 0.9em;
 }
 
-.isisBlobPanel .scalarValue span.uploadFile input {
+.isisBlobPanel .scalarValue .uploadFile input {
 	display: none;
 }
 
@@ -50,7 +50,8 @@
 .isisBlobPanel .scalarValue a:hover span.downloadTitle,
 .isisBlobPanel .scalarValue span.uploadTitle:hover,
 .isisBlobPanel .scalarValue a:hover span.clearTitle {
-	background-color:#E3E3D9;
+	background-color:#40C0CB;
+	color: white;
     text-decoration:none;
     cursor: pointer;
 }
@@ -68,3 +69,18 @@
    background-color: #DDD;
    cursor:pointer;
 }
+
+
+
+.isisBlobPanel .scalarValue {
+	height: 30px;
+	line-height: 30px;
+}
+
+.isisBlobPanel .scalarValue span.uploadTitle,
+.isisBlobPanel .scalarValue span.downloadTitle,
+.isisBlobPanel .scalarValue span.clearTitle {
+    padding-top: 0px;
+    padding-bottom: 0px;
+    font-weight: bold;
+}

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/isisapplib/IsisBlobOrClobPanelAbstract.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.html
index a0e43ec..8986cd9 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.html
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.html
@@ -34,6 +34,7 @@
 	                    <a class="clear" wicket:id="scalarIfRegularClear"><span class="clearTitle">Clear</span></a>
 	      			</span>
 	                <span wicket:id="feedback"></span>
+                    <span wicket:id="additionalLinks"/>
 				</label>
 
                 <span wicket:id="scalarIfCompact">

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/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 319d2e6..753c97f 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
@@ -71,21 +71,22 @@ public abstract class IsisBlobOrClobPanelAbstract<T extends NamedWithMimeType> e
         final FileUploadField fileUploadField = createFileUploadField(ID_SCALAR_VALUE);
         fileUploadField.setLabel(Model.of(getModel().getName()));
         
-        final FormComponentLabel scalarIfRegular = new FormComponentLabel(ID_SCALAR_IF_REGULAR, fileUploadField);
-        scalarIfRegular.add(fileUploadField);
+        final FormComponentLabel labelIfRegular = new FormComponentLabel(ID_SCALAR_IF_REGULAR, fileUploadField);
+        labelIfRegular.add(fileUploadField);
     
         final Label scalarUploadLabel = new Label(ID_SCALAR_IF_REGULAR_UPLOAD, "Upload");
-        scalarIfRegular.add(scalarUploadLabel);
+        labelIfRegular.add(scalarUploadLabel);
     
         final Label scalarName = new Label(ID_SCALAR_NAME, getModel().getName());
-        scalarIfRegular.add(scalarName);
+        labelIfRegular.add(scalarName);
         
-        updateDownloadLink(ID_SCALAR_IF_REGULAR_DOWNLOAD, scalarIfRegular);
-        scalarIfRegular.addOrReplace(new ComponentFeedbackPanel(ID_FEEDBACK, fileUploadField));
+        updateDownloadLink(ID_SCALAR_IF_REGULAR_DOWNLOAD, labelIfRegular);
         
-        addOrReplace(scalarIfRegular);
+        addOrReplace(labelIfRegular);
+        addFeedbackTo(labelIfRegular, fileUploadField);
+        addAdditionalLinksTo(labelIfRegular);
         
-        return scalarIfRegular;
+        return labelIfRegular;
     }
 
     @Override

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/isisapplib/IsisColorPanel.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisColorPanel.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisColorPanel.html
index 2d0c261..4f9c395 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisColorPanel.html
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisColorPanel.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/scalars/isisapplib/IsisDatePanel.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisDatePanel.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisDatePanel.html
index 89cbbd1..a62d736 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisDatePanel.html
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisDatePanel.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>
                 <input type="text" wicket:id="scalarIfCompact"></input>

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/isisapplib/IsisDateTimePanel.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisDateTimePanel.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisDateTimePanel.html
index 5ae35c8..6d7352e 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisDateTimePanel.html
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisDateTimePanel.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>
                 <input type="text" wicket:id="scalarIfCompact"></input>

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/isisapplib/IsisMoneyPanel.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisMoneyPanel.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisMoneyPanel.html
index 134c9cb..bc59011 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisMoneyPanel.html
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisMoneyPanel.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/scalars/isisapplib/IsisPasswordPanel.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisPasswordPanel.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisPasswordPanel.html
index 3e53112..1c435a3 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisPasswordPanel.html
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisPasswordPanel.html
@@ -31,6 +31,7 @@
 	      			<span class="scalarValue">
 	      				<input type="password" 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/scalars/isisapplib/IsisPercentagePanel.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisPercentagePanel.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisPercentagePanel.html
index 0e81054..29dc45a 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisPercentagePanel.html
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisPercentagePanel.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/scalars/isisapplib/IsisTimePanel.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisTimePanel.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisTimePanel.html
index ac590c4..463d254 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisTimePanel.html
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisTimePanel.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/scalars/isisapplib/IsisTimeStampPanel.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisTimeStampPanel.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisTimeStampPanel.html
index de63e76..f367884 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisTimeStampPanel.html
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisTimeStampPanel.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/scalars/jdkdates/JavaSqlDatePanel.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaSqlDatePanel.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaSqlDatePanel.html
index 5f75575..19abac8 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaSqlDatePanel.html
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaSqlDatePanel.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>
 				<input type="text" wicket:id="scalarIfCompact"></input>

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/jdkdates/JavaUtilDatePanel.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaUtilDatePanel.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaUtilDatePanel.html
index b3488fb..49c9ef3 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaUtilDatePanel.html
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaUtilDatePanel.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>
 				<input type="text" wicket:id="scalarIfCompact"></input>

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/jdkmath/JavaMathBigDecimalPanel.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigDecimalPanel.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigDecimalPanel.html
index 6fad655..4fa1a20 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigDecimalPanel.html
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigDecimalPanel.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>
 				<input type="text" wicket:id="scalarIfCompact"></input>

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/jdkmath/JavaMathBigIntegerPanel.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigIntegerPanel.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigIntegerPanel.html
index 1ced237..5672ced 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigIntegerPanel.html
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigIntegerPanel.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>
 				<input type="text" wicket:id="scalarIfCompact"></input>

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/jodatime/JodaDateTimePanel.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaDateTimePanel.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaDateTimePanel.html
index 93883f3..b0056bd 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaDateTimePanel.html
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaDateTimePanel.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>
 				<input type="text" wicket:id="scalarIfCompact"></input>

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/jodatime/JodaLocalDatePanel.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaLocalDatePanel.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaLocalDatePanel.html
index d8b955c..a26c44c 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaLocalDatePanel.html
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaLocalDatePanel.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>
 				<input type="text" wicket:id="scalarIfCompact"></input>

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/jodatime/JodaLocalDateTimePanel.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaLocalDateTimePanel.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaLocalDateTimePanel.html
index 0256334..22e9afa 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaLocalDateTimePanel.html
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaLocalDateTimePanel.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>
 				<input type="text" wicket:id="scalarIfCompact"></input>

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/primitive/BooleanPanel.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.html
index 87976aa..b9f5012 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.html
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.html
@@ -31,6 +31,7 @@
 	      			<span class="scalarValue">
 	      				<input type="checkbox" name="scalarValue" wicket:id="scalarValue" />
 		      			<span wicket:id="feedback"></span>
+                        <span wicket:id="additionalLinks"/>
 	      			</span>
 				</label>
 				<input type="checkbox" wicket:id="scalarIfCompact" />

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/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 c2a9306..54a660d 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
@@ -21,6 +21,7 @@ package org.apache.isis.viewer.wicket.ui.components.scalars.primitive;
 
 import org.apache.wicket.AttributeModifier;
 import org.apache.wicket.Component;
+import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.form.CheckBox;
 import org.apache.wicket.markup.html.form.FormComponentLabel;
@@ -42,7 +43,6 @@ public class BooleanPanel extends ScalarPanelAbstract {
     private static final String ID_SCALAR_IF_REGULAR = "scalarIfRegular";
     private static final String ID_SCALAR_NAME = "scalarName";
     private static final String ID_SCALAR_VALUE = "scalarValue";
-    private static final String ID_FEEDBACK = "feedback";
 
     private static final String ID_SCALAR_IF_COMPACT = "scalarIfCompact";
 
@@ -76,11 +76,14 @@ public class BooleanPanel extends ScalarPanelAbstract {
 
         addOrReplace(labelIfRegular);
         
-        labelIfRegular.addOrReplace(new ComponentFeedbackPanel(ID_FEEDBACK, checkBox));
+        addFeedbackTo(labelIfRegular, checkBox);
+        addAdditionalLinksTo(labelIfRegular);
 
         return labelIfRegular;
     }
-    
+
+
+
 
     /**
      * Mandatory hook method to build the component to render the model when in

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/primitive/BytePanel.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BytePanel.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BytePanel.html
index 1080f6de..462a0aa 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BytePanel.html
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BytePanel.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>
 				<input type="text" wicket:id="scalarIfCompact"></input>

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/primitive/CharacterPanel.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/CharacterPanel.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/CharacterPanel.html
index 9b5f300..e5bdc68 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/CharacterPanel.html
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/CharacterPanel.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/scalars/primitive/DoublePanel.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/DoublePanel.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/DoublePanel.html
index f201269..ac10bb0 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/DoublePanel.html
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/DoublePanel.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>
 				<input type="text" wicket:id="scalarIfCompact"></input>

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/primitive/FloatPanel.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/FloatPanel.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/FloatPanel.html
index 3af85d8..319ead7 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/FloatPanel.html
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/FloatPanel.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>
 				<input type="text" wicket:id="scalarIfCompact"></input>

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/primitive/IntegerPanel.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/IntegerPanel.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/IntegerPanel.html
index 16bdecd..8f39178 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/IntegerPanel.html
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/IntegerPanel.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>
 				<input type="text" wicket:id="scalarIfCompact"></input>

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/primitive/LongPanel.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/LongPanel.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/LongPanel.html
index 0286267..34c230b 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/LongPanel.html
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/LongPanel.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>
 				<input type="text" wicket:id="scalarIfCompact"></input>

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/primitive/ShortPanel.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/ShortPanel.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/ShortPanel.html
index fd175ed..b0bb7cb 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/ShortPanel.html
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/ShortPanel.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>
 				<input type="text" wicket:id="scalarIfCompact"></input>

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/reference/ReferencePanel.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.html
index 5baa8eb..57dad38 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.html
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.html
@@ -30,6 +30,8 @@
 	      			<span wicket:id="scalarName" class="scalarName">[Label text]</span>
 	      			<span class="scalarValue">
 		      			<span class="entityLink" wicket:id="entityLink">[property or parameter value]</span>
+              			<span wicket:id="feedback"></span>
+                        <span wicket:id="additionalLinks"/>
 	      			</span>
 				</label>
 				<label wicket:id="scalarIfCompact" class="scalarIfCompact">
@@ -37,7 +39,6 @@
 		      			<span class="entityLink" wicket:id="entityLink">[property or parameter value]</span>
 	      			</span>
 				</label>
-      			<span wicket:id="feedback"></span>
   			</div>
 		</wicket:panel>
 	</body>

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/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 f09e4ae..3f52fba 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
@@ -93,10 +93,6 @@ public class ReferencePanel extends ScalarPanelAbstract {
         final FormComponentLabel labelIfRegular = new FormComponentLabel(ID_SCALAR_IF_REGULAR, entityLink);
         labelIfRegular.add(entityLink);
         
-        if(getModel().isRequired()) {
-            labelIfRegular.add(new CssClassAppender("mandatory"));
-        }
-
         final String describedAs = getModel().getDescribedAs();
         if(describedAs != null) {
             labelIfRegular.add(new AttributeModifier("title", Model.of(describedAs)));
@@ -107,7 +103,8 @@ public class ReferencePanel extends ScalarPanelAbstract {
         
         addOrReplace(labelIfRegular);
         
-        addOrReplace(new ComponentFeedbackPanel(ID_FEEDBACK, entityLink));
+        addFeedbackTo(labelIfRegular, entityLink);
+        addAdditionalLinksTo(labelIfRegular);
         
         addStandardSemantics();
         addSemantics();
@@ -173,8 +170,6 @@ public class ReferencePanel extends ScalarPanelAbstract {
         
         addOrReplace(labelIfCompact);
         
-        addOrReplace(new ComponentFeedbackPanel(ID_FEEDBACK, entityLink));
-        
         return labelIfCompact;
     }
 }

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/MultiLineStringPanel.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/string/MultiLineStringPanel.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/string/MultiLineStringPanel.html
index fe2f3d8..ef908fe 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/string/MultiLineStringPanel.html
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/string/MultiLineStringPanel.html
@@ -29,9 +29,10 @@
 				<label for="scalarValue" wicket:id="scalarIfRegular">
 	      			<span wicket:id="scalarName" class="scalarName">[Label text]</span>
 	      			<span class="scalarValue">
-                            <textarea name="scalarValue" wicket:id="scalarValue" ></textarea>
+                        <textarea name="scalarValue" wicket:id="scalarValue" ></textarea>
+                        <span wicket:id="feedback"></span>
+                        <span wicket:id="additionalLinks"/>
 	      			</span>
-	      			<span wicket:id="feedback"></span>
 				</label>
 				<label wicket:id="scalarIfCompact"></label>
 			</div>

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.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/string/StringPanel.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/string/StringPanel.html
index 4fe408b..cdac6f6 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/string/StringPanel.html
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/string/StringPanel.html
@@ -31,15 +31,7 @@
 	      			<span class="scalarValue">
 	      				<input type="text" name="scalarValue" wicket:id="scalarValue" />
 		      			<span wicket:id="feedback"></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>
-                                    </a>
-                                </li>
-                            </ul>
-                        </span>
+                        <span wicket:id="additionalLinks"/>
 	      			</span>
 				</label>
 				<label wicket:id="scalarIfCompact"></label>