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 2017/04/28 09:21:06 UTC

[01/43] isis git commit: ISIS-1603: event behaviour to replace with property a link for dummy panel

Repository: isis
Updated Branches:
  refs/heads/master 530d5550b -> fac70844b


ISIS-1603: event behaviour to replace with property a link for dummy panel


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

Branch: refs/heads/master
Commit: f65f45c2a1a49b308e9e6f0d4c100472b3cf0ae7
Parents: 9470369
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Sat Apr 22 19:06:35 2017 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Apr 27 13:25:36 2017 +0100

----------------------------------------------------------------------
 core/pom.xml                                    |  13 --
 core/viewer-wicket-ui/pom.xml                   |   5 -
 .../scalars/ScalarPanelTextFieldAbstract.html   |   8 +-
 .../scalars/ScalarPanelTextFieldAbstract.java   | 132 ++-----------------
 4 files changed, 19 insertions(+), 139 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/f65f45c2/core/pom.xml
----------------------------------------------------------------------
diff --git a/core/pom.xml b/core/pom.xml
index 6fb09a7..150c5f1 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -149,7 +149,6 @@
         <select2.version>4.0.3</select2.version>
 
         <jquery-ui.version>1.11.4</jquery-ui.version>
-        <x-editable.version>1.5.1</x-editable.version>
 
         <guice.version>4.1.0</guice.version>
         <picocontainer.version>2.15</picocontainer.version>
@@ -1627,18 +1626,6 @@ ${license.additional-notes}
 
             <dependency>
                 <groupId>org.webjars</groupId>
-                <artifactId>x-editable-bootstrap</artifactId>
-                <version>${x-editable.version}</version>
-                <exclusions>
-                    <exclusion>
-                        <groupId>org.webjars</groupId>
-                        <artifactId>bootstrap</artifactId>
-                    </exclusion>
-                </exclusions>
-            </dependency>
-
-            <dependency>
-                <groupId>org.webjars</groupId>
                 <artifactId>select2</artifactId>
                 <version>${select2.version}</version>
             </dependency>

http://git-wip-us.apache.org/repos/asf/isis/blob/f65f45c2/core/viewer-wicket-ui/pom.xml
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/pom.xml b/core/viewer-wicket-ui/pom.xml
index 43a9353..22df597 100644
--- a/core/viewer-wicket-ui/pom.xml
+++ b/core/viewer-wicket-ui/pom.xml
@@ -94,11 +94,6 @@
 		</dependency>
 
 		<dependency>
-			<groupId>org.webjars</groupId>
-			<artifactId>x-editable-bootstrap</artifactId>
-		</dependency>
-
-		<dependency>
             <groupId>org.webjars</groupId>
             <artifactId>select2</artifactId>
         </dependency>

http://git-wip-us.apache.org/repos/asf/isis/blob/f65f45c2/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.html
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.html b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.html
index 098988a..8f4cc42 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.html
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.html
@@ -26,7 +26,7 @@
         <wicket:extend>
             <wicket:container wicket:id="scalarValueContainer"/>
 
-            <wicket:container wicket:id="scalarValueEditInlineContainer">
+            <div wicket:id="scalarValueEditInlineContainer">
                 <a
                         href="#"
                         name="scalarValueEditInline"
@@ -35,9 +35,11 @@
                     <span wicket:id="scalarValueEditInlineLabel"></span>
                 </a>
 
-                <wicket:container wicket:id="propertyEditForm"/>
+                <div wicket:id="propertyEditForm">
+                    <div><span>property edit form</span></div>
+                </div>
 
-            </wicket:container>
+            </div>
 
             <wicket:fragment wicket:id="text">
                 <input

http://git-wip-us.apache.org/repos/asf/isis/blob/f65f45c2/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
index d74909c..e00a34b 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
@@ -29,8 +29,6 @@ import org.apache.wicket.Component;
 import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.ajax.AjaxEventBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.attributes.AjaxCallListener;
-import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
 import org.apache.wicket.behavior.Behavior;
 import org.apache.wicket.markup.ComponentTag;
 import org.apache.wicket.markup.html.WebMarkupContainer;
@@ -40,15 +38,12 @@ import org.apache.wicket.markup.html.form.TextField;
 import org.apache.wicket.markup.html.panel.Fragment;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
-import org.apache.wicket.request.cycle.RequestCycle;
-import org.apache.wicket.util.string.StringValue;
 import org.apache.wicket.validation.IValidatable;
 import org.apache.wicket.validation.IValidator;
 import org.apache.wicket.validation.ValidationError;
 
 import org.apache.isis.applib.annotation.PropertyEditStyle;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.facets.SingleIntValueFacet;
 import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxLengthFacet;
@@ -60,11 +55,6 @@ import org.apache.isis.viewer.wicket.ui.components.actionmenu.entityactions.Enti
 import org.apache.isis.viewer.wicket.ui.components.widgets.bootstrap.FormGroup;
 import org.apache.isis.viewer.wicket.ui.util.CssClassAppender;
 
-import de.agilecoders.wicket.extensions.markup.html.bootstrap.xeditable.XEditableBehavior;
-import de.agilecoders.wicket.extensions.markup.html.bootstrap.xeditable.XEditableOptions;
-import de.agilecoders.wicket.jquery.Key;
-import de.agilecoders.wicket.jquery.util.Json;
-
 /**
  * Adapter for {@link ScalarPanelAbstract scalar panel}s that are implemented
  * using a simple {@link TextField}.
@@ -156,7 +146,8 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
 
 
         this.scalarValueEditInlineContainer = new WebMarkupContainer("scalarValueEditInlineContainer");
-        editInlineLink = new WebMarkupContainer(ID_SCALAR_VALUE_EDIT_INLINE);
+        scalarValueEditInlineContainer.setOutputMarkupId(true);
+        this.editInlineLink = new WebMarkupContainer(ID_SCALAR_VALUE_EDIT_INLINE);
         editInlineLink.setOutputMarkupId(true);
         scalarValueEditInlineContainer.add(editInlineLink);
 
@@ -166,115 +157,20 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
         final Label editInlineLinkLabel = new Label(ID_SCALAR_VALUE_EDIT_INLINE_LABEL, textFieldModel);
         editInlineLink.add(editInlineLinkLabel);
 
-        if(scalarModel.getEditStyle() == PropertyEditStyle.INLINE) {
-
-            final XEditableOptions options = new XEditableOptions() {
-                {
-                    put(new Key<String>("toggle"), "click");
-                    if(scalarModel.isRequired()) {
-                        put(new Key<Json.RawValue>("validate"), new Json.RawValue(
-                                "function (value) { if (value == '') { return 'Required field'; } }"));
-                    }
-                    //                    put(new Key<Json.RawValue>("error"), new Json.RawValue(
-                    //                            "function(response, newValue) {\n"
-                    //                                    + "    if(response.status === 500) {\n"
-                    //                                    + "        return 'Service unavailable. Please try later.';\n"
-                    //                                    + "    } else {\n"
-                    //                                    + "        return response.responseText;\n"
-                    //                                    + "    }\n"
-                    //                                    + "}"));
-
-                }
-            }.withMode("inline");
-
-            options.withDefaultValue(asString(textFieldModel));
-
-            XEditableBehavior xEditable = new XEditableBehavior(options) {
-                @Override
-                protected void onSave(final AjaxRequestTarget target, final String value) {
-
-                    scalarModel.setObjectAsString(value);
-
-                    ObjectAdapter adapter = scalarModel.getParentObjectAdapterMemento()
-                            .getObjectAdapter(AdapterManager.ConcurrencyChecking.NO_CHECK, getPersistenceSession(),
-                                    getSpecificationLoader());
-
-                    scalarModel.applyValue(adapter);
-
-                    target.add(editInlineLink);
-
-                    options.withDefaultValue(asString(textFieldModel));
-                }
-
-                protected AjaxEventBehavior newSaveListener() {
-                    return new AjaxEventBehavior("save") {
-                        @Override
-                        protected void onEvent(AjaxRequestTarget target) {
-
-                            final ObjectAdapter currentValue = scalarModel.getObject();
-                            StringValue newValue = RequestCycle.get().getRequest().getRequestParameters().getParameterValue("newValue");
-
-                            try {
-                                onSave(target, newValue.toString());
-                            } catch (Exception ex) {
-                                scalarModel.setObject(currentValue);
-
-                                final String value = asString(textFieldModel);
-                                options.withDefaultValue(value);
-
-                                //
-                                // hmmm... thought had this working, but turns out that can't rely on the .control-group to exist
-                                //
-                                // also: even if get going, still need to reset the value of the inline edit, and also
-                                // to handle updates to the title (eg Wicket event bus, I think)
-                                //
-                                final String message = ex.getMessage();
-                                target.appendJavaScript(
-                                        "( function() { "
-                                                + "var component = $(\"#" + editInlineLink.getMarkupId() + "\"); "
-                                                + "var parent = $(component).parent(); "
-
-                                                + "var controlGroup = $(parent).find(\".control-group\"); "
-                                                + "var errorBlock = $(parent).find(\".editable-error-block\"); "
-
-                                                + "$(component).editable(\"show\"); "
-                                                + "$(controlGroup).addClass(\"has-error\"); "
-                                                + "$(errorBlock).css(\"display\", \"block\"); "
-                                                + "$(errorBlock).text(\"" + message + "\"); "
-
-                                                + "} )();");
-                            }
-
-                        }
-
-                        @Override
-                        protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
-                            super.updateAjaxAttributes(attributes);
-                            attributes.getDynamicExtraParameters().add("return [{'name':'newValue', 'value': attrs.event.extraData.newValue}]");
-
-                            AjaxCallListener myAjaxCallListener = new AjaxCallListener() {
-
-                                @Override
-                                public CharSequence getBeforeHandler(Component component) {
-                                    return ""; // "var myEl = $(\"#" + component.getMarkupId() + "\"); console.log(myEl);";
-                                }
-
-                                @Override public CharSequence getFailureHandler(final Component component) {
-                                    return "alert(\"failure!!!\")";
-                                }
-                            };
-                            attributes.getAjaxCallListeners().add(myAjaxCallListener);
-
-                        }
-                    };
-                }
-
-            };
-
+        editInlineLink.add(new AjaxEventBehavior("click") {
+            @Override
+            protected void onEvent(final AjaxRequestTarget target) {
+                editInlineLink.setVisible(false);
+                propertyEditForm.setVisible(true);
+                target.add(scalarValueEditInlineContainer);
+            }
 
-            editInlineLink.add(xEditable);
-        }
+            @Override public boolean isEnabled(final Component component) {
+                return true;
+            }
+        });
 
+        propertyEditForm.setVisible(false);
 
         final MarkupContainer scalarIfRegularFormGroup = createScalarIfRegularFormGroup();
 


[03/43] isis git commit: ISIS-1603: updates pom.xml, trivial changes in PageAbstract and PanelAbstract, the TextFieldXxxModels, also ScalarPanelAbstract

Posted by da...@apache.org.
ISIS-1603: updates pom.xml, trivial changes in PageAbstract and PanelAbstract, the TextFieldXxxModels, also ScalarPanelAbstract


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

Branch: refs/heads/master
Commit: a3a93c2714ef78d95ecf26b82fe8b02802acf979
Parents: 4ad7645
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Fri Apr 21 13:31:48 2017 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Apr 27 13:25:36 2017 +0100

----------------------------------------------------------------------
 core/pom.xml                                     | 13 +++++++++++++
 core/viewer-wicket-ui/pom.xml                    |  8 +++++++-
 .../components/scalars/ScalarPanelAbstract.java  | 19 +++++++++++++------
 .../components/scalars/TextFieldStringModel.java | 11 +++++++++++
 .../components/scalars/TextFieldValueModel.java  | 12 ++++++++++--
 .../viewer/wicket/ui/pages/PageAbstract.java     |  4 +++-
 .../viewer/wicket/ui/panels/PanelAbstract.java   |  5 -----
 7 files changed, 57 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/a3a93c27/core/pom.xml
----------------------------------------------------------------------
diff --git a/core/pom.xml b/core/pom.xml
index 150c5f1..6fb09a7 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -149,6 +149,7 @@
         <select2.version>4.0.3</select2.version>
 
         <jquery-ui.version>1.11.4</jquery-ui.version>
+        <x-editable.version>1.5.1</x-editable.version>
 
         <guice.version>4.1.0</guice.version>
         <picocontainer.version>2.15</picocontainer.version>
@@ -1626,6 +1627,18 @@ ${license.additional-notes}
 
             <dependency>
                 <groupId>org.webjars</groupId>
+                <artifactId>x-editable-bootstrap</artifactId>
+                <version>${x-editable.version}</version>
+                <exclusions>
+                    <exclusion>
+                        <groupId>org.webjars</groupId>
+                        <artifactId>bootstrap</artifactId>
+                    </exclusion>
+                </exclusions>
+            </dependency>
+
+            <dependency>
+                <groupId>org.webjars</groupId>
                 <artifactId>select2</artifactId>
                 <version>${select2.version}</version>
             </dependency>

http://git-wip-us.apache.org/repos/asf/isis/blob/a3a93c27/core/viewer-wicket-ui/pom.xml
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/pom.xml b/core/viewer-wicket-ui/pom.xml
index e2ff0af..43a9353 100644
--- a/core/viewer-wicket-ui/pom.xml
+++ b/core/viewer-wicket-ui/pom.xml
@@ -56,6 +56,7 @@
 	</build>
 
 	<dependencies>
+
 		<dependency>
 			<groupId>org.apache.isis.core</groupId>
 			<artifactId>isis-core-viewer-wicket-model</artifactId>
@@ -92,7 +93,12 @@
 			<artifactId>wicketstuff-select2</artifactId>
 		</dependency>
 
-        <dependency>
+		<dependency>
+			<groupId>org.webjars</groupId>
+			<artifactId>x-editable-bootstrap</artifactId>
+		</dependency>
+
+		<dependency>
             <groupId>org.webjars</groupId>
             <artifactId>select2</artifactId>
         </dependency>

http://git-wip-us.apache.org/repos/asf/isis/blob/a3a93c27/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
index 09980e2..3c6c74d 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
@@ -37,6 +37,7 @@ import org.apache.wicket.markup.html.panel.Fragment;
 import org.apache.wicket.model.Model;
 
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.PropertyEditStyle;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
@@ -74,6 +75,8 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
     protected static final String ID_SCALAR_IF_REGULAR = "scalarIfRegular";
     protected static final String ID_SCALAR_NAME = "scalarName";
     protected static final String ID_SCALAR_VALUE = "scalarValue";
+    protected static final String ID_SCALAR_VALUE_EDIT_INLINE = "scalarValueEditInline";
+    protected static final String ID_SCALAR_VALUE_EDIT_INLINE_LABEL = "scalarValueEditInlineLabel";
 
     protected static final String ID_SCALAR_IF_COMPACT = "scalarIfCompact";
 
@@ -164,7 +167,7 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
     }
 
     protected Rendering getRendering() {
-        return Rendering.renderingFor(getModel().getRenderingHint());
+        return Rendering.renderingFor(scalarModel.getRenderingHint());
     }
 
     protected Component getLabelForCompact() {
@@ -199,7 +202,7 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
 
     /**
      * hook for highly dynamic components, eg conditional choices.
-     * 
+     *
      * <p>
      * Returning <tt>true</tt> means that the component is always rebuilt prior to
      * every {@link #onBeforeRender() render}ing.
@@ -292,8 +295,10 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
     }
 
     protected void addEditPropertyTo(final MarkupContainer markupContainer) {
-        final String disableReasonIfAny = scalarModel.disable(getRendering().getWhere());
-        if (disableReasonIfAny == null && scalarModel.isViewMode()) {
+
+        final PropertyEditStyle editStyle = this.scalarModel.getEditStyle();
+        if(editStyle == PropertyEditStyle.DIALOG) {
+
             final WebMarkupContainer editProperty = new WebMarkupContainer(ID_EDIT_PROPERTY);
 
             editProperty.setOutputMarkupId(true);
@@ -305,11 +310,12 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
                             .getFrom(ScalarPanelAbstract.this).getActionPrompt();
 
                     PropertyEditPromptHeaderPanel titlePanel = new PropertyEditPromptHeaderPanel(prompt.getTitleId(),
-                            scalarModel);
+                            ScalarPanelAbstract.this.scalarModel);
 
                     final PropertyEditPanel propertyEditPanel =
                             (PropertyEditPanel) getComponentFactoryRegistry().createComponent(
-                                    ComponentType.PROPERTY_EDIT_PROMPT, prompt.getContentId(), scalarModel);
+                                    ComponentType.PROPERTY_EDIT_PROMPT, prompt.getContentId(),
+                                    ScalarPanelAbstract.this.scalarModel);
 
                     propertyEditPanel.setShowHeader(false);
 
@@ -321,6 +327,7 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
             });
 
             markupContainer.addOrReplace(editProperty);
+
         } else {
             Components.permanentlyHide(markupContainer, ID_EDIT_PROPERTY);
         }

http://git-wip-us.apache.org/repos/asf/isis/blob/a3a93c27/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/TextFieldStringModel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/TextFieldStringModel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/TextFieldStringModel.java
new file mode 100644
index 0000000..051969f
--- /dev/null
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/TextFieldStringModel.java
@@ -0,0 +1,11 @@
+package org.apache.isis.viewer.wicket.ui.components.scalars;
+
+public class TextFieldStringModel extends TextFieldValueModel<String> {
+
+    private static final long serialVersionUID = 1L;
+
+    public TextFieldStringModel(final TextFieldValueModel.ScalarModelProvider parent) {
+        super(parent);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/a3a93c27/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/TextFieldValueModel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/TextFieldValueModel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/TextFieldValueModel.java
index 4f69b40..b2a290a 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/TextFieldValueModel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/TextFieldValueModel.java
@@ -29,12 +29,12 @@ import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 
 /**
  * For custom {@link ScalarPanelTextFieldAbstract}s to use as the {@link Model}
- * of their {@link TextField} (as constructed in {@link ScalarPanelTextFieldAbstract#createTextFieldForRegular()}).
+ * of their {@link TextField} (as constructed in {@link ScalarPanelTextFieldAbstract#createTextFieldForRegular(String)}).
  */
 public class TextFieldValueModel<T extends Serializable> extends Model<T> {
     
     private static final long serialVersionUID = 1L;
-    
+
     public interface ScalarModelProvider {
         ScalarModel getModel();
         AdapterManager getAdapterManager();
@@ -67,4 +67,12 @@ public class TextFieldValueModel<T extends Serializable> extends Model<T> {
             scalarModelProvider.getModel().setObject(objectAdapter);
         }
     }
+
+    // FIXME: a bit of a hack to just use toString(), probably want to format somehow.
+    public String getObjectAsString() {
+        T object = getObject();
+        return object != null ? object.toString() : null;
+    }
+
+
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/a3a93c27/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java
index d7dad78..be3313d 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java
@@ -282,7 +282,9 @@ public abstract class PageAbstract extends WebPage implements ActionPromptProvid
     }
 
     private void addBootLint(final IHeaderResponse response) {
-        response.render(BootlintHeaderItem.INSTANCE);
+        // rather than using the default BootlintHeaderItem.INSTANCE;
+        // this allows us to assign 'form-control' class to an <a> (for x-editable styling)
+        response.render(new BootlintHeaderItem("bootlint.showLintReportForCurrentDocument(['E042'], {'problemFree': false});"));
     }
 
     private boolean isModernBrowser() {

http://git-wip-us.apache.org/repos/asf/isis/blob/a3a93c27/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PanelAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PanelAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PanelAbstract.java
index 0995a80..4b43e78 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PanelAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PanelAbstract.java
@@ -116,11 +116,6 @@ public abstract class PanelAbstract<T extends IModel<?>> extends Panel {
         return UiHintContainer.Util.hintContainerOf(this);
     }
 
-    // seemes to be unused
-    public <T extends UiHintContainer> T getUiHintContainer(final Class<T> additionalConstraint) {
-        return UiHintContainer.Util.hintContainerOf(this, additionalConstraint);
-    }
-
 
     // ///////////////////////////////////////////////////////////////////
     // Convenience


[35/43] isis git commit: ISIS-1603: improvements to the tabbing experience.

Posted by da...@apache.org.
ISIS-1603: improvements to the tabbing experience.


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

Branch: refs/heads/master
Commit: 0d95f410cab614f800b313298d6f698f3c8d060f
Parents: 8d06152
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Thu Apr 27 15:38:56 2017 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Apr 27 15:38:56 2017 +0100

----------------------------------------------------------------------
 .../serviceactions/ServiceActionsPanel.html     |  2 +-
 .../actions/ActionParametersFormPanel.java      |  3 +-
 .../icontitle/EntityIconAndTitlePanel.html      |  2 +-
 .../ui/components/header/HeaderPanel.html       |  4 +-
 .../property/PropertyEditFormPanel.java         |  3 +-
 .../scalars/ScalarModelSubscriber.java          |  6 +--
 .../components/scalars/ScalarPanelAbstract.java | 46 ++++++++++++--------
 .../scalars/ScalarPanelTextFieldAbstract.java   |  7 ++-
 .../scalars/reference/ReferencePanel.java       | 30 +++++++++++++
 .../wicket/ui/pages/bootstrap-overrides.css     | 17 ++++++++
 .../ui/pages/jquery.isis.wicket.viewer.js       | 12 ++++-
 .../ui/panels/PromptFormPanelAbstract.java      |  7 ++-
 12 files changed, 103 insertions(+), 36 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/0d95f410/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/ServiceActionsPanel.html
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/ServiceActionsPanel.html b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/ServiceActionsPanel.html
index 8b51434..f80ca9c 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/ServiceActionsPanel.html
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/ServiceActionsPanel.html
@@ -22,7 +22,7 @@
     <body>
         <wicket:panel>
             <li class="dropdown" wicket:id="menuItems">
-                <a href="javascript:;" class="dropdown-toggle" data-toggle="dropdown"><span wicket:id="name"></span> <span class="caret"></span></a>
+                <a tabindex="-1" href="javascript:;" class="dropdown-toggle" data-toggle="dropdown"><span wicket:id="name"></span> <span class="caret"></span></a>
                 <ul wicket:id="topMenu" class="dropdown-menu scrollable-menu multi-level" role="menu">
                     <li wicket:id="subMenuItems">
                         <wicket:container wicket:id="content"></wicket:container>

http://git-wip-us.apache.org/repos/asf/isis/blob/0d95f410/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java
index 0ee44c9..be49fca 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java
@@ -43,7 +43,6 @@ import org.apache.isis.viewer.wicket.ui.panels.PromptFormPanelAbstract;
 import org.apache.isis.viewer.wicket.ui.components.property.PropertyEditFormPanel;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarModelSubscriber;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelAbstract;
-import org.apache.isis.viewer.wicket.ui.components.scalars.TextFieldValueModel.ScalarModelProvider;
 import org.apache.isis.viewer.wicket.ui.pages.entity.EntityPage;
 import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
 
@@ -138,7 +137,7 @@ public class ActionParametersFormPanel extends PromptFormPanelAbstract<ActionMod
         }
 
         @Override
-        public void onUpdate(AjaxRequestTarget target, ScalarModelProvider provider) {
+        public void onUpdate(AjaxRequestTarget target, ScalarPanelAbstract scalarPanel) {
 
             final ActionModel actionModel = getActionModel();
             

http://git-wip-us.apache.org/repos/asf/isis/blob/0d95f410/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanel.html
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanel.html b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanel.html
index 4c919af..d7165ef 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanel.html
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanel.html
@@ -21,7 +21,7 @@
     <body>
         <wicket:panel>
              <span wicket:id="entityLinkWrapper" class="entityIconAndTitlePanel entityIconAndTitleComponentType">
-                 <a href="#" wicket:id="entityLink" class="entityUrlSource">
+                 <a tabindex="-1" href="#" wicket:id="entityLink" class="entityUrlSource">
                      <span wicket:id="entityFontAwesome"></span>
                      <img wicket:id="entityImage" class="entityImage"/>
                      <span wicket:id="entityTitle" class="entityTitle">[title]</span>

http://git-wip-us.apache.org/repos/asf/isis/blob/0d95f410/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/header/HeaderPanel.html
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/header/HeaderPanel.html b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/header/HeaderPanel.html
index 889bc50..e887868 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/header/HeaderPanel.html
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/header/HeaderPanel.html
@@ -31,7 +31,7 @@
                         <span class="icon-bar"></span>
                         <span class="icon-bar"></span>
                     </button>
-                    <a class="navbar-brand" wicket:id="applicationName">
+                    <a tabindex="-1" class="navbar-brand" wicket:id="applicationName">
                         <span wicket:id="brandText"></span>
                         <img alt="Brand" wicket:id="brandLogo"/>
                     </a>
@@ -39,7 +39,7 @@
                 <div class="navbar-header navbar-right">
                     <ul class="nav navbar-nav tertiary">
                         <li class="dropdown">
-                            <a href="#" class="dropdown-toggle" data-toggle="dropdown">
+                            <a tabindex="-1" href="#" class="dropdown-toggle" data-toggle="dropdown">
                                 <i class="fa fa-fw fa-user"></i> <span wicket:id="userName"></span><span class="caret"></span>
                             </a>
                             <ul wicket:id="tertiaryMenuBar" class="dropdown-menu" role="menu" style="min-width: 0px;">

http://git-wip-us.apache.org/repos/asf/isis/blob/0d95f410/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditFormPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditFormPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditFormPanel.java
index 2c6719e..37ebf3b 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditFormPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditFormPanel.java
@@ -37,7 +37,6 @@ import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.ComponentType;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarModelSubscriber;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelAbstract;
-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.panels.PromptFormPanelAbstract;
 
@@ -114,7 +113,7 @@ public class PropertyEditFormPanel extends PromptFormPanelAbstract<ScalarModel>
 
         @Override
         public void onUpdate(
-                final AjaxRequestTarget target, final ScalarModelProvider provider) {
+                final AjaxRequestTarget target, final ScalarPanelAbstract scalarPanel) {
 
         }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/0d95f410/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarModelSubscriber.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarModelSubscriber.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarModelSubscriber.java
index 647d903..30977de 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarModelSubscriber.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarModelSubscriber.java
@@ -18,12 +18,10 @@ package org.apache.isis.viewer.wicket.ui.components.scalars;
 
 import org.apache.wicket.ajax.AjaxRequestTarget;
 
-import org.apache.isis.viewer.wicket.ui.components.scalars.TextFieldValueModel.ScalarModelProvider;
-
 public interface ScalarModelSubscriber {
 
-    void onUpdate(AjaxRequestTarget target, ScalarModelProvider provider);
+    void onUpdate(AjaxRequestTarget target, ScalarPanelAbstract scalarPanel);
 
-    void onError(AjaxRequestTarget target, ScalarModelProvider provider);
+    void onError(AjaxRequestTarget target, ScalarPanelAbstract scalarPanel);
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/0d95f410/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
index e70c846..f334f01 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
@@ -56,7 +56,6 @@ import org.apache.isis.viewer.wicket.ui.components.property.PropertyEditFormExec
 import org.apache.isis.viewer.wicket.ui.components.property.PropertyEditFormPanel;
 import org.apache.isis.viewer.wicket.ui.components.property.PropertyEditPanel;
 import org.apache.isis.viewer.wicket.ui.components.property.PropertyEditPromptHeaderPanel;
-import org.apache.isis.viewer.wicket.ui.components.scalars.TextFieldValueModel.ScalarModelProvider;
 import org.apache.isis.viewer.wicket.ui.components.scalars.isisapplib.IsisBlobOrClobPanelAbstract;
 import org.apache.isis.viewer.wicket.ui.components.scalars.primitive.BooleanPanel;
 import org.apache.isis.viewer.wicket.ui.components.scalars.reference.ReferencePanel;
@@ -67,7 +66,7 @@ import org.apache.isis.viewer.wicket.ui.util.CssClassAppender;
 
 import de.agilecoders.wicket.core.markup.html.bootstrap.common.NotificationPanel;
 
-public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> implements ScalarModelProvider {
+public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> implements ScalarModelSubscriber {
 
     private static final long serialVersionUID = 1L;
 
@@ -263,11 +262,16 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
                 }
             }
         }
+        if(scalarModel.getPromptStyle() != PromptStyle.INLINE) {
+            getScalarValueComponent().add(new AttributeAppender("tabindex", "-1"));
+        }
 
         getRendering().buildGui(this);
         addCssForMetaModel();
 
-        addFormComponentBehaviour();
+        notifyOnChange(this);
+        addFormComponentBehaviourToUpdateSubscribers();
+
     }
 
     /**
@@ -312,6 +316,7 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
 
     static class ScalarUpdatingBehavior extends AjaxFormComponentUpdatingBehavior {
         private static final long serialVersionUID = 1L;
+
         private final ScalarPanelAbstract scalarPanel;
 
         private ScalarUpdatingBehavior(final ScalarPanelAbstract scalarPanel) {
@@ -324,10 +329,6 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
             for (ScalarModelSubscriber subscriber : scalarPanel.subscribers) {
                 subscriber.onUpdate(target, scalarPanel);
             }
-
-            // hmmm... this doesn't seem to be picked up...
-            target.appendJavaScript(
-                    String.format("Wicket.Event.publish(Isis.Topic.FOCUS_FIRST_ACTION_PARAMETER, '%s')", scalarPanel.getMarkupId()));
         }
 
         @Override
@@ -345,11 +346,7 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
         subscribers.add(subscriber);
     }
 
-    private void addFormComponentBehaviour() {
-        if (subscribers.isEmpty()) {
-            return;
-        }
-
+    private void addFormComponentBehaviourToUpdateSubscribers() {
         Component scalarValueComponent = getScalarValueComponent();
         if(scalarValueComponent == null) {
             return;
@@ -360,8 +357,27 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
         scalarValueComponent.add(new ScalarUpdatingBehavior(this));
     }
 
+    // //////////////////////////////////////
+
+    @Override
+    public void onUpdate(
+            final AjaxRequestTarget target, final ScalarPanelAbstract scalarPanel) {
+
+        target.appendJavaScript(
+                String.format("Wicket.Event.publish(Isis.Topic.FOCUS_FIRST_PARAMETER, '%s')", getMarkupId()));
+    }
+
+
+    @Override
+    public void onError(
+            final AjaxRequestTarget target, final ScalarPanelAbstract scalarPanel) {
+
+    }
+
+
     // ///////////////////////////////////////////////////////////////////
 
+
     public enum Rendering {
         /**
          * Does not show labels, eg for use in tables
@@ -639,11 +655,5 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
         target.add(this);
     }
 
-    // ///////////////////////////////////////////////////////////////////
-
-    @Override
-    public AdapterManager getAdapterManager() {
-        return getPersistenceSession();
-    }
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/0d95f410/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
index 245e05f..e27a358 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
@@ -39,6 +39,7 @@ import org.apache.wicket.validation.IValidator;
 import org.apache.wicket.validation.ValidationError;
 
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.facets.SingleIntValueFacet;
 import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxLengthFacet;
@@ -62,7 +63,7 @@ import org.apache.isis.viewer.wicket.ui.util.CssClassAppender;
  * This implementation is for panels that use a textfield/text area.
  * </p>
  */
-public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> extends ScalarPanelAbstract {
+public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> extends ScalarPanelAbstract implements TextFieldValueModel.ScalarModelProvider {
 
     private static final long serialVersionUID = 1L;
 
@@ -342,6 +343,10 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
         return settings;
     }
 
+    @Override
+    public AdapterManager getAdapterManager() {
+        return getPersistenceSession();
+    }
 
 }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/0d95f410/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
index a600b68..92e3fb2 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
@@ -26,6 +26,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.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.model.IModel;
@@ -49,6 +50,7 @@ import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.ComponentFactory;
 import org.apache.isis.viewer.wicket.ui.ComponentType;
 import org.apache.isis.viewer.wicket.ui.components.scalars.PanelWithChoices;
+import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelAbstract;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelSelect2Abstract;
 import org.apache.isis.viewer.wicket.ui.components.widgets.bootstrap.FormGroup;
 import org.apache.isis.viewer.wicket.ui.components.widgets.entitysimplelink.EntityLinkSimplePanel;
@@ -150,6 +152,7 @@ public class ReferencePanel extends ScalarPanelSelect2Abstract implements PanelW
             }
         });
 
+
         return formGroup;
     }
 
@@ -230,6 +233,7 @@ public class ReferencePanel extends ScalarPanelSelect2Abstract implements PanelW
 
 
 
+
     // //////////////////////////////////////
     // onBeforeRender*
     // //////////////////////////////////////
@@ -455,6 +459,30 @@ public class ReferencePanel extends ScalarPanelSelect2Abstract implements PanelW
 
     
     // //////////////////////////////////////
+
+    @Override
+    public void onUpdate(
+            final AjaxRequestTarget target, final ScalarPanelAbstract scalarPanel) {
+
+        target.appendJavaScript(
+                String.format("Wicket.Event.publish(Isis.Topic.CLOSE_SELECT2, '%s')", getMarkupId()));
+
+
+        // super.onUpdate(target, scalarPanel);
+//        target.appendJavaScript("console.log(\"ReferencePanel : changed\")");
+//        target.appendJavaScript("console.log(" + jQuery(scalarPanel) + ".find(\"select\"));");
+//        target.appendJavaScript("" + jQuery(scalarPanel) + ".find(\"select\").focus();");
+    }
+
+    private static String jQuery(final ScalarPanelAbstract scalarPanel) {
+        return "$(" + markupId(scalarPanel) + ")";
+    }
+
+    private static String markupId(final ScalarPanelAbstract scalarPanel) {
+        return "\"#" + scalarPanel.getMarkupId() + "\"";
+    }
+
+    // //////////////////////////////////////
     // helpers querying model state
     // //////////////////////////////////////
 
@@ -496,3 +524,5 @@ public class ReferencePanel extends ScalarPanelSelect2Abstract implements PanelW
     }
 
 }
+
+

http://git-wip-us.apache.org/repos/asf/isis/blob/0d95f410/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap-overrides.css
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap-overrides.css b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap-overrides.css
index 7001b98..df8b700 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap-overrides.css
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap-overrides.css
@@ -896,3 +896,20 @@ tr.headers th form input {
 .referencePanel .inlinePrompt .entityIconAndTitlePanel .entityTitle {
     display: none;
 }
+
+#container  a:focus,
+#container  .btn:focus,
+#container  input:focus,
+#container  :focus {
+//    outline-color: darkorange;
+//    outline-color: sienna;
+//    outline-color: darkred;
+    outline-color: maroon;
+    outline-style: solid;
+    outline-width: 2px;
+}
+
+#container  a.edit:focus {
+    padding: 3px;
+}
+

http://git-wip-us.apache.org/repos/asf/isis/blob/0d95f410/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/jquery.isis.wicket.viewer.js
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/jquery.isis.wicket.viewer.js b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/jquery.isis.wicket.viewer.js
index 8c91219..24b391e 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/jquery.isis.wicket.viewer.js
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/jquery.isis.wicket.viewer.js
@@ -27,6 +27,7 @@ $(function() {
     window.Isis = {
         Topic: {
             OPEN_IN_NEW_TAB: 'openInNewTab',
+            CLOSE_SELECT2: 'closeSelect2',
             FOCUS_FIRST_PARAMETER: 'focusFirstParameter',
             FOCUS_FIRST_PROPERTY: 'focusFirstProperty'
         },
@@ -79,6 +80,15 @@ $(function() {
         if(win) { win.focus(); }
     });
 
+    Wicket.Event.subscribe(Isis.Topic.CLOSE_SELECT2, function(jqEvent, panelId) {
+        setTimeout(function() {
+            var $panel = $('#'+panelId);
+             console.log($panel);
+            $($panel).find('select').select2('close');
+            $($panel).find('select').filter(':visible:first').focus();
+        }, 0);
+    });
+
     Wicket.Event.subscribe(Isis.Topic.FOCUS_FIRST_PARAMETER, function(jqEvent, modalWindowId) {
         setTimeout(function() {
             $('#'+modalWindowId).find('.inputFormTable.parameters').find('input,textarea,select').filter(':visible:first').focus();
@@ -87,7 +97,7 @@ $(function() {
 
     Wicket.Event.subscribe(Isis.Topic.FOCUS_FIRST_PROPERTY, function(jqEvent) {
         setTimeout(function() {
-            $(document).find('a.scalarValueEditInline').filter(':visible:first').focus();
+            $(document).find('a.scalarValueInlinePromptLink').filter(':visible:first').focus();
         }, 0);
     });
 

http://git-wip-us.apache.org/repos/asf/isis/blob/0d95f410/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormPanelAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormPanelAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormPanelAbstract.java
index 8a20f08..786d0c9 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormPanelAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormPanelAbstract.java
@@ -44,7 +44,6 @@ import org.apache.isis.viewer.wicket.model.models.FormExecutor;
 import org.apache.isis.viewer.wicket.model.models.HasFormExecutor;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarModelSubscriber;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelAbstract;
-import org.apache.isis.viewer.wicket.ui.components.scalars.TextFieldValueModel;
 import org.apache.isis.viewer.wicket.ui.components.widgets.formcomponent.FormFeedbackPanel;
 import org.apache.isis.viewer.wicket.ui.errors.JGrowlBehaviour;
 import org.apache.isis.viewer.wicket.ui.errors.JGrowlUtil;
@@ -221,10 +220,10 @@ public abstract class PromptFormPanelAbstract<T extends IModel<?> & HasFormExecu
                 final Form<?> form);
 
         @Override
-        public void onError(AjaxRequestTarget target, TextFieldValueModel.ScalarModelProvider provider) {
-            if(provider instanceof Component) {
+        public void onError(AjaxRequestTarget target, ScalarPanelAbstract scalarPanel) {
+            if(scalarPanel instanceof Component) {
                 // ensure that any feedback error associated with the providing component is shown.
-                target.add((Component)provider);
+                target.add(scalarPanel);
             }
         }
 


[25/43] isis git commit: ISIS-1603: factors out common createSelect2 method for value choices and reference panel, moves up to ScalarPanelAbstract superclass.

Posted by da...@apache.org.
ISIS-1603: factors out common createSelect2 method for value choices and reference panel, moves up to ScalarPanelAbstract superclass.

Along the way found that ValueChoicesSelect2Panel implements a different interface (ScalarModelWith{Multi}Pending), experimented and seems can instead use the model of ReferencePanel (just use the underlying ScalarModel when creating the select2)


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

Branch: refs/heads/master
Commit: e1e28f9d59f2bfa7816b14991cae8ccb2695dbbb
Parents: 6558405
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Thu Apr 27 11:09:56 2017 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Apr 27 13:26:40 2017 +0100

----------------------------------------------------------------------
 .../components/scalars/ScalarPanelAbstract.java | 40 ++++++++++++++++++++
 .../scalars/reference/ReferencePanel.java       | 18 ++-------
 .../valuechoices/ValueChoicesSelect2Panel.java  | 29 +++++++-------
 3 files changed, 57 insertions(+), 30 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/e1e28f9d/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
index 75c493e..76109cb 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
@@ -19,6 +19,7 @@
 
 package org.apache.isis.viewer.wicket.ui.components.scalars;
 
+import java.util.ArrayList;
 import java.util.List;
 
 import com.google.common.collect.Lists;
@@ -45,10 +46,13 @@ import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.labelat.LabelAtFacet;
 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.ActionPrompt;
 import org.apache.isis.viewer.wicket.model.models.ActionPromptProvider;
 import org.apache.isis.viewer.wicket.model.models.EntityModel;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
+import org.apache.isis.viewer.wicket.model.models.ScalarModelWithMultiPending;
+import org.apache.isis.viewer.wicket.model.models.ScalarModelWithPending;
 import org.apache.isis.viewer.wicket.ui.ComponentType;
 import org.apache.isis.viewer.wicket.ui.components.actionmenu.entityactions.AdditionalLinksPanel;
 import org.apache.isis.viewer.wicket.ui.components.actionmenu.entityactions.EntityActionUtil;
@@ -61,6 +65,7 @@ import org.apache.isis.viewer.wicket.ui.components.scalars.isisapplib.IsisBlobOr
 import org.apache.isis.viewer.wicket.ui.components.scalars.primitive.BooleanPanel;
 import org.apache.isis.viewer.wicket.ui.components.scalars.reference.ReferencePanel;
 import org.apache.isis.viewer.wicket.ui.components.scalars.valuechoices.ValueChoicesSelect2Panel;
+import org.apache.isis.viewer.wicket.ui.components.widgets.select2.Select2;
 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;
@@ -339,6 +344,41 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
     }
 
 
+
+
+    // //////////////////////////////////////
+
+    /**
+     * For convenience of implementations that use a select2 dropdown ({@link ReferencePanel} and {@link ValueChoicesSelect2Panel}).
+     */
+    protected Select2 createSelect2(final String id) {
+        final Select2 select2;
+        if(getModel().isCollection()) {
+            final IModel<ArrayList<ObjectAdapterMemento>> model = ScalarModelWithMultiPending.Util.createModel(scalarModel);
+            select2 = Select2.newSelect2MultiChoice(id, model, scalarModel);
+        } else {
+            final IModel<ObjectAdapterMemento> model = ScalarModelWithPending.Util.createModel(scalarModel);
+            select2 = Select2.newSelect2Choice(id, model, scalarModel);
+        }
+        return select2;
+    }
+
+    // the implementation pulled up from ValueChoicesSelect2Panel.
+    // however, uses an overloaded version that relies on VCSP implementing ScalarModlWith{Multi}Pending.  Experimenting as to whether that's actually required...
+//    protected Select2 createSelect2(final String id) {
+//        final Select2 select2;
+//        if(getModel().isCollection()) {
+//            final IModel<ArrayList<ObjectAdapterMemento>> model = ScalarModelWithMultiPending.Util.createModel(this);
+//            select2 = Select2.newSelect2MultiChoice(id, model, scalarModel);
+//        } else {
+//            final IModel<ObjectAdapterMemento> modelObject = ScalarModelWithPending.Util.createModel(this);
+//            select2 = Select2.newSelect2Choice(ID_SCALAR_VALUE, modelObject, scalarModel);
+//        }
+//        return select2;
+//    }
+
+
+
     // //////////////////////////////////////
 
     private final List<ScalarModelSubscriber> subscribers = Lists.newArrayList();

http://git-wip-us.apache.org/repos/asf/isis/blob/e1e28f9d/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
index 2ea7c4b..c8c8a3f 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
@@ -19,7 +19,6 @@
 
 package org.apache.isis.viewer.wicket.ui.components.scalars.reference;
 
-import java.util.ArrayList;
 import java.util.List;
 
 import com.google.common.collect.Lists;
@@ -49,8 +48,6 @@ import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
 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.model.models.ScalarModelWithMultiPending;
-import org.apache.isis.viewer.wicket.model.models.ScalarModelWithPending;
 import org.apache.isis.viewer.wicket.ui.ComponentFactory;
 import org.apache.isis.viewer.wicket.ui.ComponentType;
 import org.apache.isis.viewer.wicket.ui.components.scalars.PanelWithChoices;
@@ -121,7 +118,7 @@ public class ReferencePanel extends ScalarPanelAbstract implements PanelWithChoi
         entityLink = new EntityLinkSelect2Panel(ComponentType.ENTITY_LINK.getWicketId(), this);
 
         entityLink.setRequired(getModel().isRequired());
-        this.select2 = createSelect2();
+        this.select2 = createSelect2AndSemantics();
         entityLink.addOrReplace(select2.component());
 
         syncWithInput();
@@ -179,18 +176,9 @@ public class ReferencePanel extends ScalarPanelAbstract implements PanelWithChoi
         return select2.component();
     }
 
-    private Select2 createSelect2() {
+    private Select2 createSelect2AndSemantics() {
 
-        final Select2 select2;
-        if(getModel().isCollection()) {
-            final IModel<ArrayList<ObjectAdapterMemento>> model =
-                    ScalarModelWithMultiPending.Util.createModel(getModel());
-            select2 = Select2.newSelect2MultiChoice(ID_AUTO_COMPLETE, model, getModel());
-        } else {
-            final IModel<ObjectAdapterMemento> modelObject =
-                    ScalarModelWithPending.Util.createModel(getModel());
-            select2 = Select2.newSelect2Choice(ID_AUTO_COMPLETE, modelObject, getModel());
-        }
+        final Select2 select2 = createSelect2(ID_AUTO_COMPLETE);
 
         setProviderAndCurrAndPending(select2, getModel().getActionArgsHint());
 

http://git-wip-us.apache.org/repos/asf/isis/blob/e1e28f9d/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
index 0522d8f..7ddf536 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
@@ -35,12 +35,10 @@ import org.wicketstuff.select2.ChoiceProvider;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
 import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
-import org.apache.isis.viewer.wicket.model.links.LinkAndLabel;
 import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.model.models.ScalarModelWithMultiPending;
 import org.apache.isis.viewer.wicket.model.models.ScalarModelWithPending;
-import org.apache.isis.viewer.wicket.ui.components.actionmenu.entityactions.EntityActionUtil;
 import org.apache.isis.viewer.wicket.ui.components.scalars.PanelWithChoices;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelAbstract;
 import org.apache.isis.viewer.wicket.ui.components.widgets.bootstrap.FormGroup;
@@ -70,27 +68,19 @@ public class ValueChoicesSelect2Panel extends ScalarPanelAbstract implements Sca
 
         // same pattern as in ReferencePanel
         if(select2 == null) {
-            if(getModel().isCollection()) {
-                final IModel<ArrayList<ObjectAdapterMemento>> modelObject = ScalarModelWithMultiPending.Util.createModel(this);
-                select2 = Select2.newSelect2MultiChoice(ID_SCALAR_VALUE, modelObject, scalarModel);
-            } else {
-                final IModel<ObjectAdapterMemento> modelObject = ScalarModelWithPending.Util.createModel(this);
-                select2 = Select2.newSelect2Choice(ID_SCALAR_VALUE, modelObject, scalarModel);
-            }
+            this.select2 = createSelect2AndSemantics();
 
             final ObjectAdapter[] actionArgsHint = scalarModel.getActionArgsHint();
             setProviderAndCurrAndPending(select2, actionArgsHint);
-            addStandardSemantics();
+            addStandardSemantics(select2);
         } else {
             select2.clearInput();
         }
 
-
         final MarkupContainer scalarIfRegularFormGroup = createScalarIfRegularFormGroup();
         if(getModel().isRequired()) {
             scalarIfRegularFormGroup.add(new CssClassAppender("mandatory"));
         }
-        
 
         final Label scalarName = new Label(ID_SCALAR_NAME, getRendering().getLabelCaption(select2.component()));
         if(getModel().isRequired()) {
@@ -109,6 +99,15 @@ public class ValueChoicesSelect2Panel extends ScalarPanelAbstract implements Sca
         return scalarIfRegularFormGroup;
     }
 
+    private Select2 createSelect2AndSemantics() {
+        final Select2 select2 = createSelect2(ID_SCALAR_VALUE);
+
+        final ObjectAdapter[] actionArgsHint = scalarModel.getActionArgsHint();
+        setProviderAndCurrAndPending(select2, actionArgsHint);
+        addStandardSemantics(select2);
+        return select2;
+    }
+
     protected Component getScalarValueComponent() {
         return select2.component();
     }
@@ -121,11 +120,11 @@ public class ValueChoicesSelect2Panel extends ScalarPanelAbstract implements Sca
         return Lists.newArrayList(Lists.transform(choices, ObjectAdapterMemento.Functions.fromAdapter()));
     }
 
-    protected void addStandardSemantics() {
-        setRequiredIfSpecified();
+    protected void addStandardSemantics(final Select2 select2) {
+        setRequiredIfSpecified(select2);
     }
 
-    private void setRequiredIfSpecified() {
+    private void setRequiredIfSpecified(final Select2 select2) {
         final ScalarModel scalarModel = getModel();
         final boolean required = scalarModel.isRequired();
         select2.setRequired(required);


[24/43] isis git commit: ISIS-1603: reference panel now correctly hides link when in prompts. Also fixes layout when not in a prompt

Posted by da...@apache.org.
ISIS-1603: reference panel now correctly hides link when in prompts.  Also fixes layout when not in a prompt


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

Branch: refs/heads/master
Commit: 6558405af975f4b0915caa2a52c6b1ae4b0d430e
Parents: 47334e3
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Thu Apr 27 08:43:06 2017 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Apr 27 13:26:40 2017 +0100

----------------------------------------------------------------------
 .../ui/components/scalars/reference/ReferencePanel.java     | 5 ++++-
 .../isis/viewer/wicket/ui/pages/bootstrap-overrides.css     | 9 +++++++++
 2 files changed, 13 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/6558405a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
index 01568f6..2ea7c4b 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
@@ -222,7 +222,10 @@ public class ReferencePanel extends ScalarPanelAbstract implements PanelWithChoi
 
     @Override
     protected InlinePromptConfig getInlinePromptConfig() {
-        return InlinePromptConfig.supported();
+        return InlinePromptConfig.supportedAndHide(
+                scalarModel.getMode() == EntityModel.Mode.EDIT || scalarModel.getKind() == ScalarModel.Kind.PARAMETER
+                        ? select2.component()
+                        : null);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/6558405a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap-overrides.css
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap-overrides.css b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap-overrides.css
index 6552b04..c307f05 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap-overrides.css
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap-overrides.css
@@ -881,3 +881,12 @@ tr.headers th form input {
     padding-left: 5px;
     padding-right: 15px;
 }
+
+.referencePanel .form-control.scalarValueInlinePromptLink {
+    display: inline-block;
+    width: 50%;
+}
+
+.referencePanel div.label-left .scalarValueWrapper .form-control.scalarValueInlinePromptLink {
+    width: 50%;
+}


[43/43] isis git commit: ISIS-1603: updates some docs

Posted by da...@apache.org.
ISIS-1603: updates some docs


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

Branch: refs/heads/master
Commit: fac70844bbb1458b531f27607a5f13e78b9520c6
Parents: 04f9805
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Fri Apr 28 10:17:39 2017 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Fri Apr 28 10:17:39 2017 +0100

----------------------------------------------------------------------
 .../rgant/_rgant-ActionLayout_bookmarking.adoc  |  5 +--
 .../rgant/_rgant-ActionLayout_cssClass.adoc     |  5 +--
 .../rgant/_rgant-ActionLayout_cssClassFa.adoc   |  5 +--
 .../rgant/_rgant-ActionLayout_describedAs.adoc  |  5 +--
 .../rgant/_rgant-ActionLayout_hidden.adoc       |  5 +--
 .../guides/rgant/_rgant-ActionLayout_named.adoc |  5 +--
 .../rgant/_rgant-ActionLayout_position.adoc     |  5 +--
 .../rgant/_rgant-ActionLayout_promptStyle.adoc  | 38 ++++++++++++++++++++
 .../rgant/_rgant-CollectionLayout_cssClass.adoc |  5 +--
 .../_rgant-CollectionLayout_defaultView.adoc    |  5 +--
 .../_rgant-CollectionLayout_describedAs.adoc    |  5 +--
 .../rgant/_rgant-CollectionLayout_hidden.adoc   |  5 +--
 .../rgant/_rgant-CollectionLayout_named.adoc    |  5 +--
 .../rgant/_rgant-CollectionLayout_paged.adoc    |  5 +--
 .../rgant/_rgant-CollectionLayout_render.adoc   |  5 +--
 .../rgant/_rgant-CollectionLayout_sortedBy.adoc |  5 +--
 .../rgant/_rgant-PropertyLayout_cssClass.adoc   |  5 +--
 .../_rgant-PropertyLayout_describedAs.adoc      |  5 +--
 .../rgant/_rgant-PropertyLayout_hidden.adoc     |  5 +--
 .../_rgant-PropertyLayout_labelPosition.adoc    |  5 +--
 .../rgant/_rgant-PropertyLayout_multiLine.adoc  |  5 +--
 .../rgant/_rgant-PropertyLayout_named.adoc      |  5 +--
 .../_rgant-PropertyLayout_promptStyle.adoc      | 13 ++++---
 ...gant-PropertyLayout_renderedAsDayBefore.adoc |  5 +--
 .../_rgant-PropertyLayout_typicalLength.adoc    |  3 ++
 25 files changed, 116 insertions(+), 48 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/fac70844/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_bookmarking.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_bookmarking.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_bookmarking.adoc
index da095d4..6db7334 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_bookmarking.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_bookmarking.adoc
@@ -50,8 +50,9 @@ The enum value `AS_CHILD` has no meaning for actions; it relates only to bookmar
 
 
 
-As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[`.layout.json`]
-can be used instead, eg:
+As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead, eg:
+
+NOTE: FIXME - change to .layout.xml syntax instead.
 
 [source,javascript]
 ----

http://git-wip-us.apache.org/repos/asf/isis/blob/fac70844/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_cssClass.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_cssClass.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_cssClass.adoc
index d59294e..4d02afd 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_cssClass.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_cssClass.adoc
@@ -30,8 +30,9 @@ to apply CSS, specifically to add http://fortawesome.github.io/Font-Awesome/icon
 
 
 
-As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[`.layout.json`]
-can be used instead, eg:
+As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead, eg:
+
+NOTE: FIXME - change to .layout.xml syntax instead.
 
 [source,javascript]
 ----

http://git-wip-us.apache.org/repos/asf/isis/blob/fac70844/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_cssClassFa.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_cssClassFa.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_cssClassFa.adoc
index f072cf3..c4f596b 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_cssClassFa.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_cssClassFa.adoc
@@ -31,8 +31,9 @@ public class ToDoItem {
 There can be multiple "fa-" classes, eg to mirror or rotate the icon. There is no need to include the mandatory `fa` "marker" CSS class; it will be automatically added to the list.  The `fa-` prefix can also be omitted from the class names; it will be prepended to each if required.
 
 
-As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[`.layout.json`]
-can be used instead, eg:
+As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead, eg:
+
+NOTE: FIXME - change to .layout.xml syntax instead.
 
 [source,javascript]
 ----

http://git-wip-us.apache.org/repos/asf/isis/blob/fac70844/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_describedAs.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_describedAs.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_describedAs.adoc
index e9b5655..79f10b2 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_describedAs.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_describedAs.adoc
@@ -24,8 +24,9 @@ public class Customer {
 
 
 
-As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[`.layout.json`]
-can be used instead, eg:
+As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead, eg:
+
+NOTE: FIXME - change to .layout.xml syntax instead.
 
 [source,javascript]
 ----

http://git-wip-us.apache.org/repos/asf/isis/blob/fac70844/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_hidden.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_hidden.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_hidden.adoc
index f5696ee..7f74052 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_hidden.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_hidden.adoc
@@ -37,8 +37,9 @@ The action should not be hidden.
 The other values of the `Where` enum have no meaning for a collection.
 
 
-As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[`.layout.json`]
-can be used instead, eg:
+As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead, eg:
+
+NOTE: FIXME - change to .layout.xml syntax instead.
 
 [source,javascript]
 ----

http://git-wip-us.apache.org/repos/asf/isis/blob/fac70844/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_named.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_named.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_named.adoc
index 9ca98f9..9aa6542 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_named.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_named.adoc
@@ -25,8 +25,9 @@ public class Customer {
 ----
 
 
-As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[`.layout.json`]
-can be used instead, eg:
+As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead, eg:
+
+NOTE: FIXME - change to .layout.xml syntax instead.
 
 [source,javascript]
 ----

http://git-wip-us.apache.org/repos/asf/isis/blob/fac70844/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_position.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_position.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_position.adoc
index 1fe7e60..50a6279 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_position.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_position.adoc
@@ -67,8 +67,9 @@ image::{_imagesdir}reference-annotations/ActionLayout/position-PANEL_DROPDOWN.pn
 If there are multiple actions associated with a single property then the positioning can be mix'ed-and-match'ed as required.  If the `PANEL` or `PANEL_DROPDOWN` are used, then (as the screenshots above show) the actions from potentially multiple properties grouped by that panel will be shown together.
 
 
-As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[`.layout.json`]
-can be used instead, eg:
+As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead, eg:
+
+NOTE: FIXME - change to .layout.xml syntax instead.
 
 [source,javascript]
 ----

http://git-wip-us.apache.org/repos/asf/isis/blob/fac70844/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_promptStyle.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_promptStyle.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_promptStyle.adoc
new file mode 100644
index 0000000..bf1fbbb
--- /dev/null
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_promptStyle.adoc
@@ -0,0 +1,38 @@
+[[_rgant-ActionLayout_promptStyle]]
+= `promptStyle()` (`1.15.0-SNAPSHOT`)
+:Notice: 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.
+:_basedir: ../../
+:_imagesdir: images/
+
+
+The `promptStyle()` attribute is used to specify whether, when invoking an action associated with a domain object property, the parameters for the action are prompted by way of a dialog box, or is prompted using an inline panel (replacing the property on the page).
+
+If the attribute is not set, then thevalue of the xref:../rgcfg/rgcfg.adoc#_rgcfg_configuring-core[configuration property] `isis.objects.promptStyle` is used.
+If this is itself not set, then a dialog box is used.
+
+For example:
+
+[source,java]
+----
+public class Customer {
+
+    public int getNotes(){ ... }
+    public void setNotes(String notes) { ... }
+
+    @MemberOrder(
+            named="notes",                          // <1>
+            sequence="1")
+    @ActionLayout(
+        promptStyle=PromptStyle.INLINE              // <2>
+    )
+    public int getNotes(){ ... }
+    public void setNotes(String notes) { ... }
+}
+----
+<1> associate this action with the "notes" property
+<2> prompt for the action's parameters using an inline panel
+
+
+As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead, eg:
+
+NOTE: FIXME - provide .layout.xml example here

http://git-wip-us.apache.org/repos/asf/isis/blob/fac70844/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_cssClass.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_cssClass.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_cssClass.adoc
index f9664f7..f58be5b 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_cssClass.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_cssClass.adoc
@@ -24,8 +24,9 @@ public class ToDoItem {
 ----
 
 
-As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[`.layout.json`]
-can be used instead, eg:
+As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead, eg:
+
+NOTE: FIXME - change to .layout.xml syntax instead.
 
 [source,javascript]
 ----

http://git-wip-us.apache.org/repos/asf/isis/blob/fac70844/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_defaultView.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_defaultView.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_defaultView.adoc
index a3f71d2..afb01c0 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_defaultView.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_defaultView.adoc
@@ -24,8 +24,9 @@ public class BusRoute {
 ----
 
 
-As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[`.layout.json`]
-can be used instead, eg:
+As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead, eg:
+
+NOTE: FIXME - change to .layout.xml syntax instead.
 
 [source,javascript]
 ----

http://git-wip-us.apache.org/repos/asf/isis/blob/fac70844/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_describedAs.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_describedAs.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_describedAs.adoc
index 56037be..0055bac 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_describedAs.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_describedAs.adoc
@@ -24,8 +24,9 @@ public class ToDoItem {
 ----
 
 
-As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[`.layout.json`]
-can be used instead, eg:
+As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead, eg:
+
+NOTE: FIXME - change to .layout.xml syntax instead.
 
 [source,javascript]
 ----

http://git-wip-us.apache.org/repos/asf/isis/blob/fac70844/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_hidden.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_hidden.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_hidden.adoc
index 88b6c5a..f9f4a47 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_hidden.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_hidden.adoc
@@ -47,8 +47,9 @@ The collection should not be hidden.
 The other values of the `Where` enum have no meaning for a collection.
 
 
-As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[`.layout.json`]
-can be used instead, eg:
+As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead, eg:
+
+NOTE: FIXME - change to .layout.xml syntax instead.
 
 [source,javascript]
 ----

http://git-wip-us.apache.org/repos/asf/isis/blob/fac70844/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_named.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_named.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_named.adoc
index 8c12d3c..d91ca28 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_named.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_named.adoc
@@ -33,8 +33,9 @@ public class ToDoItem {
 
 
 
-As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[`.layout.json`]
-can be used instead, eg:
+As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead, eg:
+
+NOTE: FIXME - change to .layout.xml syntax instead.
 
 [source,javascript]
 ----

http://git-wip-us.apache.org/repos/asf/isis/blob/fac70844/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_paged.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_paged.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_paged.adoc
index e578a16..38192b8 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_paged.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_paged.adoc
@@ -31,8 +31,9 @@ It is also possible to specify a global default for the page size of standalone
 
 
 
-As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[`.layout.json`]
-can be used instead, eg:
+As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead, eg:
+
+NOTE: FIXME - change to .layout.xml syntax instead.
 
 [source,javascript]
 ----

http://git-wip-us.apache.org/repos/asf/isis/blob/fac70844/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_render.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_render.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_render.adoc
index 9a1b0d4..3466f1d 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_render.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_render.adoc
@@ -20,8 +20,9 @@ public class Order {
 ----
 
 
-As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[`.layout.json`]
-can be used instead, eg:
+As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead, eg:
+
+NOTE: FIXME - change to .layout.xml syntax instead.
 
 [source,javascript]
 ----

http://git-wip-us.apache.org/repos/asf/isis/blob/fac70844/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_sortedBy.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_sortedBy.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_sortedBy.adoc
index 0b4e4c2..b84adcf 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_sortedBy.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_sortedBy.adoc
@@ -46,8 +46,9 @@ Without this annotation, the order would have been inverted (because the natural
 
 
 
-As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[`.layout.json`]
-can be used instead, eg:
+As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead, eg:
+
+NOTE: FIXME - change to .layout.xml syntax instead.
 
 [source,javascript]
 ----

http://git-wip-us.apache.org/repos/asf/isis/blob/fac70844/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_cssClass.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_cssClass.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_cssClass.adoc
index acd69a0..31192f2 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_cssClass.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_cssClass.adoc
@@ -23,8 +23,9 @@ public class ToDoItem {
 
 
 
-As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[`.layout.json`]
-can be used instead, eg:
+As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead, eg:
+
+NOTE: FIXME - change to .layout.xml syntax instead.
 
 [source,javascript]
 ----

http://git-wip-us.apache.org/repos/asf/isis/blob/fac70844/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_describedAs.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_describedAs.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_describedAs.adoc
index bbc427c..410f7ea 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_describedAs.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_describedAs.adoc
@@ -20,8 +20,9 @@ public class Customer {
 ----
 
 
-As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[`.layout.json`]
-can be used instead, eg:
+As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead, eg:
+
+NOTE: FIXME - change to .layout.xml syntax instead.
 
 [source,javascript]
 ----

http://git-wip-us.apache.org/repos/asf/isis/blob/fac70844/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_hidden.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_hidden.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_hidden.adoc
index cf21719..35b43f5 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_hidden.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_hidden.adoc
@@ -68,8 +68,9 @@ The xref:../ugvro/ugvro.adoc#[RestfulObjects viewer] has only partial support fo
 ====
 
 
-As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[`.layout.json`]
-can be used instead, eg:
+As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead, eg:
+
+NOTE: FIXME - change to .layout.xml syntax instead.
 
 [source,javascript]
 ----

http://git-wip-us.apache.org/repos/asf/isis/blob/fac70844/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_labelPosition.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_labelPosition.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_labelPosition.adoc
index b1504fe..294c15a 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_labelPosition.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_labelPosition.adoc
@@ -58,8 +58,9 @@ image::{_imagesdir}reference-annotations/PropertyLayout/labelPosition-boolean-RI
 
 
 
-As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[`.layout.json`]
-can be used instead, eg:
+As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead, eg:
+
+NOTE: FIXME - change to .layout.xml syntax instead.
 
 [source,javascript]
 ----

http://git-wip-us.apache.org/repos/asf/isis/blob/fac70844/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_multiLine.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_multiLine.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_multiLine.adoc
index 20dc3ac..d1b3b02 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_multiLine.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_multiLine.adoc
@@ -25,8 +25,9 @@ Here the `stepsToReproduce` will be displayed in a text area of 10 rows.
 
 
 
-As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[`.layout.json`]
-can be used instead, eg:
+As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead, eg:
+
+NOTE: FIXME - change to .layout.xml syntax instead.
 
 [source,javascript]
 ----

http://git-wip-us.apache.org/repos/asf/isis/blob/fac70844/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_named.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_named.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_named.adoc
index b009165..04167b0 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_named.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_named.adoc
@@ -31,8 +31,9 @@ public class ToDoItem {
 
 
 
-As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[`.layout.json`]
-can be used instead, eg:
+As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead, eg:
+
+NOTE: FIXME - change to .layout.xml syntax instead.
 
 [source,javascript]
 ----

http://git-wip-us.apache.org/repos/asf/isis/blob/fac70844/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_promptStyle.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_promptStyle.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_promptStyle.adoc
index 8d780c4..08b46ef 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_promptStyle.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_promptStyle.adoc
@@ -5,9 +5,9 @@
 :_imagesdir: images/
 
 
-The `promptStyle()` attribute is used to specify whether a domain object property is edited through a dialog box (similar to an action parameter form) or using an inline edit.
+The `promptStyle()` attribute is used to specify whether, when editing a domain object property, the new value for the property is prompted by way of a dialog box, or is prompted using an inline panel (replacing the property on the page).
 
-If the attribute is not set, then thevalue of the xref:../rgcfg/rgcfg.adoc#_rgcfg_configuring-core[configuration property] `isis.objects.promptStyle` is used.
+If the attribute is not set, then the value of the xref:../rgcfg/rgcfg.adoc#_rgcfg_configuring-core[configuration property] `isis.objects.promptStyle` is used.
 If this is itself not set, then a dialog box is used.
 
 For example:
@@ -15,11 +15,16 @@ For example:
 [source,java]
 ----
 public class Customer {
-    @Property(
-        promptStyle=PromptStyle.INLINE
+    @PropertyLayout(
+        promptStyle=PromptStyle.INLINE          // <1>
     )
     public int getNotes(){ ... }
     public void setNotes(String notes) { ... }
 }
 ----
+<1> prompt for the new value for the property using an inline panel
 
+
+Alternatively, the `promptStyle()` can be specified using xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layouts].
+
+NOTE: FIXME - provide an example here

http://git-wip-us.apache.org/repos/asf/isis/blob/fac70844/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_renderedAsDayBefore.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_renderedAsDayBefore.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_renderedAsDayBefore.adoc
index 6f8266a..e29987f 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_renderedAsDayBefore.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_renderedAsDayBefore.adoc
@@ -32,8 +32,9 @@ public class Tenancy {
 
 
 
-As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[`.layout.json`]
-can be used instead, eg:
+As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead, eg:
+
+NOTE: FIXME - change to .layout.xml syntax instead.
 
 [source,javascript]
 ----

http://git-wip-us.apache.org/repos/asf/isis/blob/fac70844/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_typicalLength.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_typicalLength.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_typicalLength.adoc
index 5ffdc03..6fa3a03 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_typicalLength.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_typicalLength.adoc
@@ -23,3 +23,6 @@ public class Customer {
 }
 ----
 
+As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead, eg:
+
+NOTE: FIXME - provide a .layout.xml example here.


[02/43] isis git commit: ISIS-1603: adds a placeholder wicket:container for the form

Posted by da...@apache.org.
ISIS-1603: adds a placeholder wicket:container for the form


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

Branch: refs/heads/master
Commit: 94703697f7cc5178c710d0427a629710ece687d2
Parents: 02c7e29
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Sat Apr 22 18:35:26 2017 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Apr 27 13:25:36 2017 +0100

----------------------------------------------------------------------
 .../ui/components/scalars/ScalarPanelTextFieldAbstract.html   | 7 +++++--
 .../ui/components/scalars/ScalarPanelTextFieldAbstract.java   | 4 ++++
 2 files changed, 9 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/94703697/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.html
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.html b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.html
index 8126419..098988a 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.html
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.html
@@ -26,7 +26,7 @@
         <wicket:extend>
             <wicket:container wicket:id="scalarValueContainer"/>
 
-            <div wicket:id="scalarValueEditInlineContainer">
+            <wicket:container wicket:id="scalarValueEditInlineContainer">
                 <a
                         href="#"
                         name="scalarValueEditInline"
@@ -34,7 +34,10 @@
                         wicket:id="scalarValueEditInline">
                     <span wicket:id="scalarValueEditInlineLabel"></span>
                 </a>
-            </div>
+
+                <wicket:container wicket:id="propertyEditForm"/>
+
+            </wicket:container>
 
             <wicket:fragment wicket:id="text">
                 <input

http://git-wip-us.apache.org/repos/asf/isis/blob/94703697/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
index 7fb331e..d74909c 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
@@ -91,6 +91,7 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
 
     private WebMarkupContainer scalarValueEditInlineContainer;
     private WebMarkupContainer editInlineLink;
+    private WebMarkupContainer propertyEditForm;
 
     public ScalarPanelTextFieldAbstract(final String id, final ScalarModel scalarModel, final Class<T> cls) {
         super(id, scalarModel);
@@ -159,6 +160,9 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
         editInlineLink.setOutputMarkupId(true);
         scalarValueEditInlineContainer.add(editInlineLink);
 
+        propertyEditForm = new WebMarkupContainer("propertyEditForm");
+        scalarValueEditInlineContainer.add(propertyEditForm);
+
         final Label editInlineLinkLabel = new Label(ID_SCALAR_VALUE_EDIT_INLINE_LABEL, textFieldModel);
         editInlineLink.add(editInlineLinkLabel);
 


[23/43] isis git commit: ISIS-1603: reference panel and value choices now have the iniine prompt link and inline prompt form, getting there...

Posted by da...@apache.org.
ISIS-1603: reference panel and value choices now have the iniine prompt link and inline prompt form, getting there...

need to:
- fix visiblity for value and reference panel
- fix callbacks for reference panel


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

Branch: refs/heads/master
Commit: 87841965f03db6c4064639e9ac049671ddec0481
Parents: 0f1bfc4
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Wed Apr 26 07:35:49 2017 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Apr 27 13:26:40 2017 +0100

----------------------------------------------------------------------
 .../components/scalars/ScalarPanelAbstract.java | 173 ++++++++++++-------
 .../scalars/ScalarPanelTextFieldAbstract.html   |  14 +-
 .../scalars/ScalarPanelTextFieldAbstract.java   |  58 ++-----
 .../components/scalars/TextFieldValueModel.java |   6 -
 .../isisapplib/IsisBlobOrClobPanelAbstract.java |   9 +
 .../scalars/primitive/BooleanPanel.java         |   9 +
 .../scalars/reference/ReferencePanel.html       |  18 +-
 .../scalars/reference/ReferencePanel.java       |  14 +-
 .../valuechoices/ValueChoicesSelect2Panel.html  |  21 +--
 .../valuechoices/ValueChoicesSelect2Panel.java  |  16 +-
 .../wicket/ui/pages/bootstrap-overrides.css     |   4 +-
 11 files changed, 197 insertions(+), 145 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/87841965/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
index 30ba801..8fe1a7b 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
@@ -32,7 +32,9 @@ import org.apache.wicket.behavior.AttributeAppender;
 import org.apache.wicket.behavior.Behavior;
 import org.apache.wicket.feedback.ComponentFeedbackMessageFilter;
 import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.form.LabeledWebMarkupContainer;
+import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
 
 import org.apache.isis.applib.annotation.ActionLayout;
@@ -77,16 +79,15 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
 
 
     /**
-     * as per {@link #editInlineLink}
+     * as per {@link #inlinePromptLink}
      */
-    protected static final String ID_SCALAR_VALUE_EDIT_INLINE = "scalarValueEditInline";
-    protected static final String ID_SCALAR_VALUE_EDIT_INLINE_LABEL = "scalarValueEditInlineLabel";
+    protected static final String ID_SCALAR_VALUE_INLINE_PROMPT_LINK = "scalarValueInlinePromptLink";
+    protected static final String ID_SCALAR_VALUE_INLINE_PROMPT_LABEL = "scalarValueInlinePromptLabel";
 
     /**
      * as per {@link #scalarIfRegularInlinePromptForm}.
      */
-    protected static final String ID_SCALAR_IF_REGULAR_INLINE_EDIT_FORM = "scalarIfRegularInlineEditForm";
-
+    protected static final String ID_SCALAR_IF_REGULAR_INLINE_PROMPT_FORM = "scalarIfRegularInlinePromptForm";
 
 
     private static final String ID_EDIT_PROPERTY = "editProperty";
@@ -99,16 +100,16 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
     protected final ScalarModel scalarModel;
 
     private Component scalarIfCompact;
-    private Component scalarIfRegular;
+    private MarkupContainer scalarIfRegular;
 
     private WebMarkupContainer scalarTypeContainer;
 
     /**
      * Used by most subclasses ({@link ScalarPanelAbstract}, {@link ReferencePanel}, {@link ValueChoicesSelect2Panel}) but not all ({@link IsisBlobOrClobPanelAbstract}, {@link BooleanPanel})
      */
-    protected WebMarkupContainer scalarIfRegularInlinePromptForm;
+    private WebMarkupContainer scalarIfRegularInlinePromptForm;
 
-    protected WebMarkupContainer editInlineLink;
+    WebMarkupContainer inlinePromptLink;
 
     public ScalarPanelAbstract(final String id, final ScalarModel scalarModel) {
         super(id, scalarModel);
@@ -179,13 +180,21 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
 
         this.scalarIfCompact = createComponentForCompact();
         this.scalarIfRegular = createComponentForRegular();
-        this.scalarIfRegularInlinePromptForm = createFormForInlinePromptIfRequired();
+        this.scalarIfRegularInlinePromptForm = createInlinePromptFormIfRequired();
 
         scalarTypeContainer.addOrReplace(scalarIfCompact, scalarIfRegular);
         if(scalarIfRegularInlinePromptForm != null) {
             scalarTypeContainer.addOrReplace(scalarIfRegularInlinePromptForm);
         }
 
+        inlinePromptLink = createInlinePromptLinkIfRequired();
+        if(this.inlinePromptLink != null) {
+            scalarIfRegular.add(inlinePromptLink);
+            configureInlinePromptLinkCallback();
+            configureEditVisibility(scalarIfRegular, inlinePromptLink);
+        }
+
+
         getRendering().buildGui(this);
         addCssForMetaModel();
 
@@ -271,49 +280,6 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
 
     // ///////////////////////////////////////////////////////////////////
 
-    /**
-     * For convenience of subclasses that support inline prompts ({@link ScalarPanelAbstract}, {@link ReferencePanel}, {@link ValueChoicesSelect2Panel}).
-     */
-    protected void configureInlinePromptCallback() {
-
-        final PromptStyle promptStyle = this.scalarModel.getPromptStyle();
-        if(promptStyle == PromptStyle.INLINE) {
-
-            if(editInlineLink != null) {
-                editInlineLink.add(new AjaxEventBehavior("click") {
-                    @Override
-                    protected void onEvent(final AjaxRequestTarget target) {
-
-                        scalarModel.toEditMode();
-
-                        // dynamically update the edit form.
-                        final PropertyEditFormExecutor formExecutor =
-                                new PropertyEditFormExecutor(ScalarPanelAbstract.this, scalarModel);
-                        scalarModel.setFormExecutor(formExecutor);
-                        scalarModel.setInlinePromptContext(
-                                new ScalarModel.InlinePromptContext(
-                                        getComponentForRegular(),
-                                        scalarIfRegularInlinePromptForm));
-
-                        switchFormForInlinePrompt();
-
-                        getComponentForRegular().setVisible(false);
-                        scalarIfRegularInlinePromptForm.setVisible(true);
-
-                        target.add(scalarTypeContainer);
-                    }
-
-                    @Override
-                    public boolean isEnabled(final Component component) {
-                        return true;
-                    }
-                });
-            }
-        }
-    }
-
-
-    // ///////////////////////////////////////////////////////////////////
 
     /**
      * Mandatory hook.
@@ -380,6 +346,10 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
 
     // ///////////////////////////////////////////////////////////////////
 
+    protected Component getComponentForRegular() {
+        return scalarIfRegular;
+    }
+
     /**
      * Mandatory hook method to build the component to render the model when in
      * {@link Rendering#REGULAR regular} format.
@@ -400,26 +370,109 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
      */
     protected abstract Component createComponentForCompact();
 
+
     /**
-     * Optional hook method.
+     * Optional hook method to return a container holding an empty form.  This can be switched out using {@link #switchFormForInlinePrompt()}.
      *
      * <p>
+     *     Implementations that don't support inline prompts can override and return <tt>null</tt>.
+     * </p>
+     * <p>
      *     If non-null, is added to {@link #scalarTypeContainer}.
      * </p>
      */
-    protected WebMarkupContainer createFormForInlinePromptIfRequired() {
+    protected WebMarkupContainer createInlinePromptFormIfRequired() {
+
+        // (placeholder initially, create dynamically when needed - otherwise infinite loop because form references regular)
+
+        WebMarkupContainer scalarIfRegularInlinePromptForm = new WebMarkupContainer(
+                ID_SCALAR_IF_REGULAR_INLINE_PROMPT_FORM);
+        scalarIfRegularInlinePromptForm.setOutputMarkupId(true);
+        scalarIfRegularInlinePromptForm.setVisible(false);
+
+        return scalarIfRegularInlinePromptForm;
+    }
+
+    private WebMarkupContainer createInlinePromptLinkIfRequired() {
+        final IModel<?> textFieldModel = obtainPromptInlineLinkModelIfAvailable();
+        if(textFieldModel == null) {
+            return null;
+        }
+
+        final WebMarkupContainer inlinePromptLink = new WebMarkupContainer(ID_SCALAR_VALUE_INLINE_PROMPT_LINK);
+        inlinePromptLink.setOutputMarkupId(true);
+
+        final Label editInlineLinkLabel = new Label(ID_SCALAR_VALUE_INLINE_PROMPT_LABEL, textFieldModel);
+        inlinePromptLink.add(editInlineLinkLabel);
+
+        return inlinePromptLink;
+    }
+
+    /**
+     * Optional hook; if returns non null then the model will be used to set up a link representing the
+     * component for inline prompt.
+     */
+    protected IModel<?> obtainPromptInlineLinkModelIfAvailable() {
         return null;
     }
 
-    protected void switchFormForInlinePrompt() {
-        scalarIfRegularInlinePromptForm = (PropertyEditFormPanel) getComponentFactoryRegistry().addOrReplaceComponent(
-                scalarTypeContainer, ID_SCALAR_IF_REGULAR_INLINE_EDIT_FORM, ComponentType.PROPERTY_EDIT_FORM, scalarModel);
+
+    /**
+     * Optional hook to set the visibility of subfields according to editability.
+     *
+     * <p>
+     * Only implementations that support inline prompts need override.
+     * </p>
+     */
+    protected void configureEditVisibility(
+            final MarkupContainer scalarIfRegularFormGroup,
+            final WebMarkupContainer inlinePromptLink) {
     }
 
-    protected Component getComponentForRegular() {
-        return scalarIfRegular;
+    private void configureInlinePromptLinkCallback() {
+
+        final PromptStyle promptStyle = this.scalarModel.getPromptStyle();
+        if(promptStyle == PromptStyle.INLINE) {
+
+            if(inlinePromptLink != null) {
+                inlinePromptLink.add(new AjaxEventBehavior("click") {
+                    @Override
+                    protected void onEvent(final AjaxRequestTarget target) {
+
+                        scalarModel.toEditMode();
+
+                        // dynamically update the edit form.
+                        final PropertyEditFormExecutor formExecutor =
+                                new PropertyEditFormExecutor(ScalarPanelAbstract.this, scalarModel);
+                        scalarModel.setFormExecutor(formExecutor);
+                        scalarModel.setInlinePromptContext(
+                                new ScalarModel.InlinePromptContext(
+                                        getComponentForRegular(),
+                                        scalarIfRegularInlinePromptForm));
+
+                        switchFormForInlinePrompt();
+
+                        getComponentForRegular().setVisible(false);
+                        scalarIfRegularInlinePromptForm.setVisible(true);
+
+                        target.add(scalarTypeContainer);
+                    }
+
+                    @Override
+                    public boolean isEnabled(final Component component) {
+                        return true;
+                    }
+                });
+            }
+        }
     }
 
+    private void switchFormForInlinePrompt() {
+        scalarIfRegularInlinePromptForm = (PropertyEditFormPanel) getComponentFactoryRegistry().addOrReplaceComponent(
+                scalarTypeContainer, ID_SCALAR_IF_REGULAR_INLINE_PROMPT_FORM, ComponentType.PROPERTY_EDIT_FORM, scalarModel);
+    }
+
+
     // ///////////////////////////////////////////////////////////////////
 
     protected void addEditPropertyTo(
@@ -517,8 +570,6 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
         return false;
     }
 
-    // ///////////////////////////////////////////////////////////////////
-
 
     // ///////////////////////////////////////////////////////////////////
 

http://git-wip-us.apache.org/repos/asf/isis/blob/87841965/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.html
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.html b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.html
index 31538a6..77ce949 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.html
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.html
@@ -41,10 +41,10 @@
                             <span class="editing">
 
                                 <a href="#"
-                                   name="scalarValueEditInline"
-                                   class="form-control input-sm scalarValueEditInline"
-                                   wicket:id="scalarValueEditInline">
-                                    <span wicket:id="scalarValueEditInlineLabel"></span>
+                                   name="scalarValueInlinePromptLink"
+                                   class="form-control input-sm scalarValueInlinePromptLink"
+                                   wicket:id="scalarValueInlinePromptLink">
+                                    <span wicket:id="scalarValueInlinePromptLabel"></span>
                                 </a>
 
                                 <wicket:container wicket:id="scalarValueContainer"/>
@@ -67,9 +67,9 @@
             <div class="clearfix"></div>
         </div>
 
-        <div class="inlineEditForm"
-             wicket:id="scalarIfRegularInlineEditForm" >
-            <div><span>property edit form</span></div>
+        <div class="inlinePromptForm"
+             wicket:id="scalarIfRegularInlinePromptForm" >
+            <div><span>[property edit form]</span></div>
         </div>
 
         <wicket:container wicket:id="scalarIfCompact"></wicket:container>

http://git-wip-us.apache.org/repos/asf/isis/blob/87841965/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
index 3e72251..c3bdcc6 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
@@ -103,7 +103,7 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
         return createTextField(id);
     }
 
-    protected TextFieldValueModel<T> newTextFieldValueModel() {
+    TextFieldValueModel<T> newTextFieldValueModel() {
         return new TextFieldValueModel<>(this);
     }
 
@@ -123,9 +123,6 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
 
         addStandardSemantics();
 
-        final IModel<T> textFieldModel = textField.getModel();
-
-
 
 
         //
@@ -153,50 +150,31 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
         addEntityActionLinksBelowAndRight(scalarIfRegularFormGroup, entityActions);
 
 
+        return scalarIfRegularFormGroup;
+    }
 
-        //
-        // inline edit
-        //
-
-        this.editInlineLink = new WebMarkupContainer(ID_SCALAR_VALUE_EDIT_INLINE);
-        editInlineLink.setOutputMarkupId(true);
-
-        final Label editInlineLinkLabel = new Label(ID_SCALAR_VALUE_EDIT_INLINE_LABEL, textFieldModel);
-        editInlineLink.add(editInlineLinkLabel);
-
-
-        scalarIfRegularFormGroup.add(editInlineLink);
-
-
-
-
-        //
-        // configure dialog edit vs inline edit
-        //
+    @Override
+    protected void configureEditVisibility(
+            final MarkupContainer scalarIfRegularFormGroup,
+            final WebMarkupContainer inlinePromptLink) {
 
         addEditPropertyTo(scalarIfRegularFormGroup);
-        configureInlinePromptCallback();
 
         if (scalarModel.canEnterEditMode() && scalarModel.getPromptStyle() == PromptStyle.INLINE) {
             textField.setVisibilityAllowed(false);
         } else {
-            editInlineLink.setVisibilityAllowed(false);
+            inlinePromptLink.setVisibilityAllowed(false);
         }
-
-        return scalarIfRegularFormGroup;
     }
 
     @Override
-    protected WebMarkupContainer createFormForInlinePromptIfRequired() {
-
-        // (placeholder initially, create dynamically when needed - otherwise infinite loop because form references regular)
-
-        WebMarkupContainer scalarIfRegularInlinePromptForm = new WebMarkupContainer(ID_SCALAR_IF_REGULAR_INLINE_EDIT_FORM);
-        scalarIfRegularInlinePromptForm.setOutputMarkupId(true);
-
-        scalarIfRegularInlinePromptForm.setVisible(false);
+    protected WebMarkupContainer createInlinePromptFormIfRequired() {
+        return super.createInlinePromptFormIfRequired();
+    }
 
-        return scalarIfRegularInlinePromptForm;
+    @Override
+    protected IModel<T> obtainPromptInlineLinkModelIfAvailable() {
+        return textField.getModel();
     }
 
     private void addReplaceDisabledTagWithReadonlyTagBehaviourIfRequired(final Component component) {
@@ -317,7 +295,7 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
     }
 
 
-    protected Fragment getCompactFragment(CompactType type) {
+    Fragment getCompactFragment(CompactType type) {
         Fragment compactFragment;
         switch (type) {
         case INPUT_CHECKBOX:
@@ -349,7 +327,7 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
         textField.setEnabled(false);
         addReplaceDisabledTagWithReadonlyTagBehaviourIfRequired(textField);
 
-        editInlineLink.setEnabled(false);
+        inlinePromptLink.setEnabled(false);
 
         setTitleAttribute(disableReason);
     }
@@ -358,14 +336,14 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
     protected void onBeforeRenderWhenEnabled() {
         super.onBeforeRenderWhenEnabled();
         textField.setEnabled(true);
-        editInlineLink.setEnabled(true);
+        inlinePromptLink.setEnabled(true);
         setTitleAttribute("");
     }
 
     private void setTitleAttribute(final String titleAttribute) {
         AttributeModifier title = new AttributeModifier("title", Model.of(titleAttribute));
         textField.add(title);
-        editInlineLink.add(title);
+        inlinePromptLink.add(title);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/87841965/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/TextFieldValueModel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/TextFieldValueModel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/TextFieldValueModel.java
index b2a290a..cc71bf7 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/TextFieldValueModel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/TextFieldValueModel.java
@@ -68,11 +68,5 @@ public class TextFieldValueModel<T extends Serializable> extends Model<T> {
         }
     }
 
-    // FIXME: a bit of a hack to just use toString(), probably want to format somehow.
-    public String getObjectAsString() {
-        T object = getObject();
-        return object != null ? object.toString() : null;
-    }
-
 
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/87841965/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java
index 6994722..becdc3b 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java
@@ -123,6 +123,15 @@ public abstract class IsisBlobOrClobPanelAbstract<T extends NamedWithMimeType> e
         return scalarIfRegularFormGroup;
     }
 
+    /**
+     * Inline prompts are <i>not</i> supported by this component.
+     */
+    @Override
+    protected WebMarkupContainer createInlinePromptFormIfRequired() {
+        return null;
+    }
+
+
     private Image asWicketImage(String id) {
         
         final ObjectAdapter adapter = getModel().getObject();

http://git-wip-us.apache.org/repos/asf/isis/blob/87841965/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java
index a36adc4..63348b1 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java
@@ -25,6 +25,7 @@ import org.apache.wicket.AttributeModifier;
 import org.apache.wicket.Component;
 import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.behavior.Behavior;
+import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.model.Model;
 
@@ -114,6 +115,14 @@ public class BooleanPanel extends ScalarPanelAbstract {
         return createCheckBox(ID_SCALAR_IF_COMPACT);
     }
 
+    /**
+     * Inline prompts are <i>not</i> supported by this component.
+     */
+    @Override
+    protected WebMarkupContainer createInlinePromptFormIfRequired() {
+        return null;
+    }
+
     private CheckBoxX createCheckBox(final String id) {
         final CheckBoxX checkBox = new CheckBoxX(id, new Model<Boolean>() {
             private static final long serialVersionUID = 1L;

http://git-wip-us.apache.org/repos/asf/isis/blob/87841965/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.html
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.html b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.html
index 44757cf..675ffab 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.html
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.html
@@ -44,14 +44,12 @@
                                 <span class="scalarValueInput">
                                     <span class="editing">
 
-                                        <wicket:remove>
                                         <a href="#"
-                                           name="scalarValueEditInline"
-                                           class="form-control input-sm scalarValueEditInline"
-                                           xwicket:id="scalarValueEditInline">
-                                            <span xwicket:id="scalarValueEditInlineLabel"></span>
+                                           name="scalarValueInlinePromptLink"
+                                           class="form-control input-sm scalarValueInlinePromptLink"
+                                           wicket:id="scalarValueInlinePromptLink">
+                                            <span wicket:id="scalarValueInlinePromptLabel"></span>
                                         </a>
-                                        </wicket:remove>
 
                                         <span class="autoCompletePlaceholder">
                                             <span wicket:id="entityLink">link or drop down</span>
@@ -75,12 +73,10 @@
                     <div class="clearfix"></div>
                 </div>
 
-                <wicket:remove>
-                <div class="inlineEditForm"
-                     xwicket:id="scalarIfRegularInlineEditForm" >
-                    <div><span>property edit form</span></div>
+                <div class="inlinePromptForm"
+                     wicket:id="scalarIfRegularInlinePromptForm" >
+                    <div><span>[property edit form]</span></div>
                 </div>
-                </wicket:remove>
 
                 <div class="scalarIfCompact"
                      wicket:id="scalarIfCompact" >

http://git-wip-us.apache.org/repos/asf/isis/blob/87841965/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
index 5b9fbe8..bc624ce 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
@@ -84,7 +84,6 @@ public class ReferencePanel extends ScalarPanelAbstract implements PanelWithChoi
     private static final String KEY_DISABLE_DEPENDENT_CHOICE_AUTO_SELECTION = "isis.viewer.wicket.disableDependentChoiceAutoSelection";
 
     private EntityLinkSelect2Panel entityLink;
-
     Select2 select2;
 
 
@@ -96,8 +95,6 @@ public class ReferencePanel extends ScalarPanelAbstract implements PanelWithChoi
     }
 
     // //////////////////////////////////////
-    // addComponentFor{Compact/Regular}
-    // //////////////////////////////////////
 
     // First called as a side-effect of {@link #beforeRender()}
     @Override
@@ -228,6 +225,17 @@ public class ReferencePanel extends ScalarPanelAbstract implements PanelWithChoi
         return select2;
     }
 
+    @Override
+    protected WebMarkupContainer createInlinePromptFormIfRequired() {
+        return super.createInlinePromptFormIfRequired();
+    }
+
+    @Override
+    protected IModel<?> obtainPromptInlineLinkModelIfAvailable() {
+        return select2.getModel();
+//        return new TextFieldValueModel<>(this);
+    }
+
     // //////////////////////////////////////
 
     // called from buildGui

http://git-wip-us.apache.org/repos/asf/isis/blob/87841965/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.html
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.html b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.html
index 3b61826..4f05345 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.html
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.html
@@ -40,14 +40,12 @@
                             <span class="scalarValueInput">
                                 <span class="editing">
 
-                                    <wicket:remove>
                                     <a href="#"
-                                       name="scalarValueEditInline"
-                                       class="form-control input-sm scalarValueEditInline"
-                                       xwicket:id="scalarValueEditInline">
-                                        <span xwicket:id="scalarValueEditInlineLabel"></span>
+                                       name="scalarValueInlinePromptLink"
+                                       class="form-control input-sm scalarValueInlinePromptLink"
+                                       wicket:id="scalarValueInlinePromptLink">
+                                        <span wicket:id="scalarValueInlinePromptLabel"></span>
                                     </a>
-                                    </wicket:remove>
 
                                     <select class="choices input-sm select2-remote"
                                             style="width: 99.8%;"
@@ -69,13 +67,10 @@
                 </div>
 
 
-                <wicket:remove>
-                    <div class="inlineEditForm"
-                         xwicket:id="scalarIfRegularInlineEditForm" >
-                        <div><span>property edit form</span></div>
-                    </div>
-                </wicket:remove>
-
+                <div class="inlinePromptForm"
+                     wicket:id="scalarIfRegularInlinePromptForm" >
+                    <div><span>[property edit form]</span></div>
+                </div>
 
                 <span class="scalarIfCompact"
                       wicket:id="scalarIfCompact"></span>

http://git-wip-us.apache.org/repos/asf/isis/blob/87841965/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
index c00d172..0e7bc20 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
@@ -27,6 +27,7 @@ import org.apache.wicket.Component;
 import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.behavior.Behavior;
+import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
@@ -154,8 +155,19 @@ public class ValueChoicesSelect2Panel extends ScalarPanelAbstract implements Sca
         return new Label(ID_SCALAR_IF_COMPACT, getModel().getObjectAsString());
     }
 
-    
-    protected ChoiceProvider<ObjectAdapterMemento> newChoiceProvider(final List<ObjectAdapterMemento> choicesMementos) {
+    @Override
+    protected WebMarkupContainer createInlinePromptFormIfRequired() {
+        return super.createInlinePromptFormIfRequired();
+    }
+
+    @Override
+    protected IModel<?> obtainPromptInlineLinkModelIfAvailable() {
+        return select2.getModel();
+//        return new TextFieldValueModel<>(this);
+    }
+
+
+    private ChoiceProvider<ObjectAdapterMemento> newChoiceProvider(final List<ObjectAdapterMemento> choicesMementos) {
         return new ObjectAdapterMementoProviderForValueChoices(scalarModel, choicesMementos, wicketViewerSettings);
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/87841965/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap-overrides.css
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap-overrides.css b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap-overrides.css
index 3e0544c..6552b04 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap-overrides.css
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap-overrides.css
@@ -871,13 +871,13 @@ tr.headers th form input {
     height: inherit;
 }
 
-.scalarNameAndValueComponentType .inlineEditForm {
+.scalarNameAndValueComponentType .inlinePromptForm {
     border: 2px solid;
     padding: 10px;
     margin-bottom: 20px
 }
 
-.scalarNameAndValueComponentType .inlineEditForm .form-group {
+.scalarNameAndValueComponentType .inlinePromptForm .form-group {
     padding-left: 5px;
     padding-right: 15px;
 }


[41/43] isis git commit: ISIS-1603: now have cancel working for action prompts.

Posted by da...@apache.org.
ISIS-1603: now have cancel working for action prompts.


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

Branch: refs/heads/master
Commit: b886b82cfabe5d2cf89c344e7a683bbf2270e54c
Parents: 977ab2f
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Fri Apr 28 09:51:03 2017 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Fri Apr 28 09:51:03 2017 +0100

----------------------------------------------------------------------
 .../viewer/wicket/model/models/ActionModel.java |  8 +-
 .../model/models/FormExecutorContext.java       | 33 ++++++++
 .../wicket/model/models/HasFormExecutor.java    | 28 -------
 .../model/models/InlinePromptContext.java       | 60 +++++++++++++++
 .../viewer/wicket/model/models/ScalarModel.java | 47 ++----------
 .../actions/ActionParametersFormPanel.java      |  8 +-
 .../property/PropertyEditFormPanel.java         | 57 +-------------
 .../components/scalars/ScalarPanelAbstract.java |  5 +-
 .../linkandlabel/ActionLinkFactoryAbstract.java |  5 +-
 .../ui/panels/PromptFormPanelAbstract.java      | 79 +++++++++++++++++---
 10 files changed, 187 insertions(+), 143 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/b886b82c/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
index 1c6e18f..f853ae2 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
@@ -83,7 +83,7 @@ import org.apache.isis.viewer.wicket.model.mementos.PageParameterNames;
  * action's {@link Mode#PARAMETERS parameters}, or the handling of the
  * {@link Mode#RESULTS results} once invoked.
  */
-public class ActionModel extends BookmarkableModel<ObjectAdapter> implements HasFormExecutor {
+public class ActionModel extends BookmarkableModel<ObjectAdapter> implements FormExecutorContext {
 
     private static final long serialVersionUID = 1L;
     
@@ -719,16 +719,16 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> implements Has
 
     //////////////////////////////////////////////////
 
-    private ScalarModel.InlinePromptContext inlinePromptContext;
+    private InlinePromptContext inlinePromptContext;
 
     /**
      * Further hint, to support inline prompts...
      */
-    public ScalarModel.InlinePromptContext getInlinePromptContext() {
+    public InlinePromptContext getInlinePromptContext() {
         return inlinePromptContext;
     }
 
-    public void setInlinePromptContext(ScalarModel.InlinePromptContext inlinePromptContext) {
+    public void setInlinePromptContext(InlinePromptContext inlinePromptContext) {
         this.inlinePromptContext = inlinePromptContext;
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/b886b82c/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/FormExecutorContext.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/FormExecutorContext.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/FormExecutorContext.java
new file mode 100644
index 0000000..542e866
--- /dev/null
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/FormExecutorContext.java
@@ -0,0 +1,33 @@
+/*
+ *  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.model.models;
+
+import org.apache.isis.applib.annotation.PromptStyle;
+
+public interface FormExecutorContext {
+
+    FormExecutor getFormExecutor();
+
+    PromptStyle getPromptStyle();
+
+    InlinePromptContext getInlinePromptContext();
+
+    void reset();
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/b886b82c/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/HasFormExecutor.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/HasFormExecutor.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/HasFormExecutor.java
deleted file mode 100644
index 128d7f8..0000000
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/HasFormExecutor.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- *  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.model.models;
-
-import org.apache.isis.applib.annotation.PromptStyle;
-
-public interface HasFormExecutor {
-    PromptStyle getPromptStyle();
-
-    FormExecutor getFormExecutor();
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/b886b82c/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/InlinePromptContext.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/InlinePromptContext.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/InlinePromptContext.java
new file mode 100644
index 0000000..872ab3b
--- /dev/null
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/InlinePromptContext.java
@@ -0,0 +1,60 @@
+/*
+ *  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.model.models;
+
+import java.io.Serializable;
+
+import org.apache.wicket.Component;
+import org.apache.wicket.MarkupContainer;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+
+public class InlinePromptContext implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private final Component scalarIfRegular;
+    private final WebMarkupContainer scalarIfRegularInlinePromptForm;
+    private final MarkupContainer scalarTypeContainer;
+
+    public InlinePromptContext(
+            final Component scalarIfRegular,
+            final WebMarkupContainer scalarIfRegularInlinePromptForm,
+            final MarkupContainer scalarTypeContainer) {
+        this.scalarIfRegular = scalarIfRegular;
+        this.scalarIfRegularInlinePromptForm = scalarIfRegularInlinePromptForm;
+        this.scalarTypeContainer = scalarTypeContainer;
+    }
+
+    public Component getScalarIfRegular() {
+        return scalarIfRegular;
+    }
+
+    public WebMarkupContainer getScalarIfRegularInlinePromptForm() {
+        return scalarIfRegularInlinePromptForm;
+    }
+
+    public void onCancel() {
+        scalarIfRegular.setVisible(true);
+        scalarIfRegularInlinePromptForm.setVisible(false);
+    }
+
+    public MarkupContainer getScalarTypeContainer() {
+        return scalarTypeContainer;
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/b886b82c/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
index a847c79..209a4c9 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
@@ -19,7 +19,6 @@
 
 package org.apache.isis.viewer.wicket.model.models;
 
-import java.io.Serializable;
 import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -29,10 +28,6 @@ import java.util.List;
 import com.google.common.collect.FluentIterable;
 import com.google.common.collect.Lists;
 
-import org.apache.wicket.Component;
-import org.apache.wicket.MarkupContainer;
-import org.apache.wicket.markup.html.WebMarkupContainer;
-
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
@@ -73,7 +68,7 @@ import org.apache.isis.viewer.wicket.model.mementos.SpecUtils;
  * Is the backing model to each of the fields that appear in forms (for entities
  * or action dialogs).
  */
-public class ScalarModel extends EntityModel implements LinksProvider,HasFormExecutor, ActionArgumentModel {
+public class ScalarModel extends EntityModel implements LinksProvider,FormExecutorContext, ActionArgumentModel {
 
     private static final long serialVersionUID = 1L;
 
@@ -1044,46 +1039,16 @@ public class ScalarModel extends EntityModel implements LinksProvider,HasFormExe
     }
 
     public void setInlinePromptContext(InlinePromptContext inlinePromptContext) {
+        if (this.inlinePromptContext != null) {
+            // otherwise the components created for an property edit inline prompt will overwrite the original
+            // components on the underlying page (which we go back to if the prompt is cancelled).
+            return;
+        }
         this.inlinePromptContext = inlinePromptContext;
     }
 
     // //////////////////////////////////////
 
-    public static class InlinePromptContext implements Serializable {
-
-        private static final long serialVersionUID = 1L;
-
-        private final Component scalarIfRegular;
-        private final WebMarkupContainer scalarIfRegularInlinePromptForm;
-        private final MarkupContainer scalarTypeContainer;
-
-        public InlinePromptContext(
-                final Component scalarIfRegular,
-                final WebMarkupContainer scalarIfRegularInlinePromptForm,
-                final MarkupContainer scalarTypeContainer) {
-            this.scalarIfRegular = scalarIfRegular;
-            this.scalarIfRegularInlinePromptForm = scalarIfRegularInlinePromptForm;
-            this.scalarTypeContainer = scalarTypeContainer;
-        }
-
-        public Component getScalarIfRegular() {
-            return scalarIfRegular;
-        }
-
-        public WebMarkupContainer getScalarIfRegularInlinePromptForm() {
-            return scalarIfRegularInlinePromptForm;
-        }
-
-        public void onCancel() {
-            scalarIfRegular.setVisible(true);
-            scalarIfRegularInlinePromptForm.setVisible(false);
-        }
-
-        public MarkupContainer getScalarTypeContainer() {
-            return scalarTypeContainer;
-        }
-    }
-
     // //////////////////////////////////////
 
     /**

http://git-wip-us.apache.org/repos/asf/isis/blob/b886b82c/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java
index be49fca..7db99e0 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java
@@ -35,16 +35,16 @@ import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.viewer.wicket.model.hints.IsisActionCompletedEvent;
 import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
 import org.apache.isis.viewer.wicket.model.mementos.ActionParameterMemento;
-import org.apache.isis.viewer.wicket.model.models.ActionModel;
 import org.apache.isis.viewer.wicket.model.models.ActionArgumentModel;
+import org.apache.isis.viewer.wicket.model.models.ActionModel;
 import org.apache.isis.viewer.wicket.ui.ComponentType;
-import org.apache.isis.viewer.wicket.ui.components.scalars.PanelWithChoices;
-import org.apache.isis.viewer.wicket.ui.panels.PromptFormPanelAbstract;
 import org.apache.isis.viewer.wicket.ui.components.property.PropertyEditFormPanel;
+import org.apache.isis.viewer.wicket.ui.components.scalars.PanelWithChoices;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarModelSubscriber;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelAbstract;
 import org.apache.isis.viewer.wicket.ui.pages.entity.EntityPage;
 import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
+import org.apache.isis.viewer.wicket.ui.panels.PromptFormPanelAbstract;
 
 import de.agilecoders.wicket.extensions.markup.html.bootstrap.confirmation.ConfirmationBehavior;
 
@@ -113,6 +113,7 @@ public class ActionParametersFormPanel extends PromptFormPanelAbstract<ActionMod
 
         @Override
         protected void configureButtons(final AjaxButton okButton, final AjaxButton cancelButton) {
+            super.configureButtons(okButton, cancelButton);
             applyAreYouSure(okButton);
         }
 
@@ -180,7 +181,6 @@ public class ActionParametersFormPanel extends PromptFormPanelAbstract<ActionMod
             // done in the loop above).  However, that logic is wrong, because any values entered in the browser
             // get trampled over (ISIS-629).
         }
-        
 
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/b886b82c/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditFormPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditFormPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditFormPanel.java
index 37ebf3b..65f22f3 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditFormPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditFormPanel.java
@@ -20,12 +20,8 @@
 package org.apache.isis.viewer.wicket.ui.components.property;
 
 import org.apache.wicket.Component;
-import org.apache.wicket.MarkupContainer;
-import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.markup.html.form.AjaxButton;
 import org.apache.wicket.markup.head.IHeaderResponse;
-import org.apache.wicket.markup.head.JavaScriptContentHeaderItem;
 import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.form.Form;
@@ -117,6 +113,9 @@ public class PropertyEditFormPanel extends PromptFormPanelAbstract<ScalarModel>
 
         }
 
+        // REVIEW: this overload may not be necessary, recall that the important call needed is getScalarModel().reset(),
+        // which is called in the superclass.
+        @Override
         public void onCancel(
                 final AjaxRequestTarget target) {
 
@@ -126,59 +125,11 @@ public class PropertyEditFormPanel extends PromptFormPanelAbstract<ScalarModel>
 
                 getScalarModel().toViewMode();
                 getScalarModel().clearPending();
-                getScalarModel().reset();
-
-                // replace
-                final String id = propertyEditFormPanel.getId();
-                final MarkupContainer parent = propertyEditFormPanel.getParent();
-
-                final WebMarkupContainer replacementPropertyEditFormPanel = new WebMarkupContainer(id);
-                replacementPropertyEditFormPanel.setVisible(false);
-
-                parent.addOrReplace(replacementPropertyEditFormPanel);
-
-
-                // change visibility of inline components
-                getScalarModel().getInlinePromptContext().onCancel();
-
-                // redraw
-                target.add(parent);
             }
 
+            super.onCancel(target);
         }
 
-        @Override
-        protected void configureButtons(final AjaxButton okButton, final AjaxButton cancelButton) {
-            if(getScalarModel().getPromptStyle() == PromptStyle.INLINE) {
-                cancelButton.add(new AbstractDefaultAjaxBehavior() {
-
-                    private static final String PRE_JS =
-                            ""+"$(document).ready( function() { \n"
-                            +  "  $(document).bind('keyup', function(evt) { \n"
-                            +  "    if (evt.keyCode == 27) { \n";
-                    private static final String POST_JS =
-                            ""+"      evt.preventDefault(); \n   "
-                            +  "    } \n"
-                            +  "  }); \n"
-                            +  "});";
-
-                    @Override
-                    public void renderHead(final Component component, final IHeaderResponse response) {
-                        super.renderHead(component, response);
-
-                        final String javascript = PRE_JS + getCallbackScript() + POST_JS;
-                        response.render(
-                                JavaScriptContentHeaderItem.forScript(javascript, null, null));
-                    }
-
-                    @Override
-                    protected void respond(final AjaxRequestTarget target) {
-                        onCancel(target);
-                    }
-
-                });
-            }
-        }
 
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/b886b82c/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
index d57dabe..72ebf8f 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
@@ -48,6 +48,7 @@ import org.apache.isis.viewer.wicket.model.links.LinkAndLabel;
 import org.apache.isis.viewer.wicket.model.models.ActionPrompt;
 import org.apache.isis.viewer.wicket.model.models.ActionPromptProvider;
 import org.apache.isis.viewer.wicket.model.models.EntityModel;
+import org.apache.isis.viewer.wicket.model.models.InlinePromptContext;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.ComponentType;
 import org.apache.isis.viewer.wicket.ui.components.actionmenu.entityactions.AdditionalLinksPanel;
@@ -230,6 +231,8 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
 
         this.scalarIfCompact = createComponentForCompact();
         this.scalarIfRegular = createComponentForRegular();
+        scalarIfRegular.setOutputMarkupId(true);
+
         scalarTypeContainer.addOrReplace(scalarIfCompact, scalarIfRegular);
 
         final InlinePromptConfig inlinePromptConfig = getInlinePromptConfig();
@@ -242,7 +245,7 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
             // even if this particular scalarModel (property) is not configured for inline edits, it's possible that
             // one of the associated actions is.  Thus we set the prompt context
             scalarModel.setInlinePromptContext(
-                    new ScalarModel.InlinePromptContext(
+                    new InlinePromptContext(
                             getComponentForRegular(),
                             scalarIfRegularInlinePromptForm, scalarTypeContainer));
 

http://git-wip-us.apache.org/repos/asf/isis/blob/b886b82c/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLinkFactoryAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLinkFactoryAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLinkFactoryAbstract.java
index e108ec5..c0887f5 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLinkFactoryAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLinkFactoryAbstract.java
@@ -39,6 +39,7 @@ import org.apache.isis.viewer.wicket.model.links.LinkAndLabel;
 import org.apache.isis.viewer.wicket.model.models.ActionModel;
 import org.apache.isis.viewer.wicket.model.models.ActionPrompt;
 import org.apache.isis.viewer.wicket.model.models.ActionPromptProvider;
+import org.apache.isis.viewer.wicket.model.models.InlinePromptContext;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.ComponentType;
 import org.apache.isis.viewer.wicket.ui.app.registry.ComponentFactoryRegistry;
@@ -197,7 +198,7 @@ public abstract class ActionLinkFactoryAbstract implements ActionLinkFactory {
 
 
 
-        ScalarModel.InlinePromptContext inlinePromptContext = determineInlinePromptContext();
+        InlinePromptContext inlinePromptContext = determineInlinePromptContext();
         PromptStyle promptStyle = actionModel.getPromptStyle();
 
         if(inlinePromptContext == null || promptStyle != PromptStyle.INLINE) {
@@ -263,7 +264,7 @@ public abstract class ActionLinkFactoryAbstract implements ActionLinkFactory {
         return LinkAndLabel.newLinkAndLabel(objectAdapter, objectAction, link, disabledReasonIfAny, whetherReturnsBlobOrClob);
     }
 
-    private ScalarModel.InlinePromptContext determineInlinePromptContext() {
+    private InlinePromptContext determineInlinePromptContext() {
         return scalarModelForAssociationIfAny != null
                 ? scalarModelForAssociationIfAny.getInlinePromptContext()
                 : null;

http://git-wip-us.apache.org/repos/asf/isis/blob/b886b82c/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormPanelAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormPanelAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormPanelAbstract.java
index 786d0c9..29741ab 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormPanelAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormPanelAbstract.java
@@ -24,15 +24,21 @@ import java.util.List;
 import com.google.common.collect.Lists;
 
 import org.apache.wicket.Component;
+import org.apache.wicket.MarkupContainer;
+import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
 import org.apache.wicket.ajax.markup.html.form.AjaxButton;
 import org.apache.wicket.event.Broadcast;
 import org.apache.wicket.extensions.ajax.markup.html.IndicatingAjaxButton;
+import org.apache.wicket.markup.head.IHeaderResponse;
+import org.apache.wicket.markup.head.JavaScriptContentHeaderItem;
+import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.ResourceModel;
 
+import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.runtime.system.context.IsisContext;
@@ -40,8 +46,7 @@ import org.apache.isis.core.runtime.system.session.IsisSessionFactory;
 import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
 import org.apache.isis.viewer.wicket.model.models.ActionPrompt;
 import org.apache.isis.viewer.wicket.model.models.ActionPromptProvider;
-import org.apache.isis.viewer.wicket.model.models.FormExecutor;
-import org.apache.isis.viewer.wicket.model.models.HasFormExecutor;
+import org.apache.isis.viewer.wicket.model.models.FormExecutorContext;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarModelSubscriber;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelAbstract;
 import org.apache.isis.viewer.wicket.ui.components.widgets.formcomponent.FormFeedbackPanel;
@@ -52,7 +57,7 @@ import org.apache.isis.viewer.wicket.ui.errors.JGrowlUtil;
  * {@link PanelAbstract Panel} to capture the arguments for an action
  * invocation.
  */
-public abstract class PromptFormPanelAbstract<T extends IModel<?> & HasFormExecutor> extends PanelAbstract<T> {
+public abstract class PromptFormPanelAbstract<T extends IModel<?> & FormExecutorContext> extends PanelAbstract<T> {
 
     private static final String ID_OK_BUTTON = "okButton";
     private static final String ID_CANCEL_BUTTON = "cancelButton";
@@ -63,7 +68,7 @@ public abstract class PromptFormPanelAbstract<T extends IModel<?> & HasFormExecu
         super(id, model);
     }
 
-    public static abstract class FormAbstract<T extends IModel<ObjectAdapter> & HasFormExecutor> extends Form<ObjectAdapter>
+    public static abstract class FormAbstract<T extends IModel<ObjectAdapter> & FormExecutorContext> extends Form<ObjectAdapter>
             implements ScalarModelSubscriber {
 
         protected static final String ID_FEEDBACK = "feedback";
@@ -71,7 +76,7 @@ public abstract class PromptFormPanelAbstract<T extends IModel<?> & HasFormExecu
         protected final List<ScalarPanelAbstract> paramPanels = Lists.newArrayList();
         protected final Component parentPanel;
         private final WicketViewerSettings settings;
-        private final FormExecutor formExecutor;
+        private final T formExecutorContext;
 
         public FormAbstract(
                 final String id,
@@ -81,7 +86,7 @@ public abstract class PromptFormPanelAbstract<T extends IModel<?> & HasFormExecu
             super(id, model);
             this.parentPanel = parentPanel;
             this.settings = settings;
-            this.formExecutor = model.getFormExecutor();
+            this.formExecutorContext = model;
 
             setOutputMarkupId(true); // for ajax button
             addParameters();
@@ -95,7 +100,7 @@ public abstract class PromptFormPanelAbstract<T extends IModel<?> & HasFormExecu
         }
 
 
-    protected abstract void addParameters();
+        protected abstract void addParameters();
 
         protected AjaxButton addOkButton() {
             AjaxButton okButton = settings.isUseIndicatorForFormSubmit()
@@ -174,13 +179,44 @@ public abstract class PromptFormPanelAbstract<T extends IModel<?> & HasFormExecu
         }
 
         protected void configureButtons(final AjaxButton okButton, final AjaxButton cancelButton) {
+
+            if(formExecutorContext.getPromptStyle() == PromptStyle.INLINE) {
+                cancelButton.add(new AbstractDefaultAjaxBehavior() {
+
+                    private static final String PRE_JS =
+                            ""+"$(document).ready( function() { \n"
+                                    +  "  $(document).bind('keyup', function(evt) { \n"
+                                    +  "    if (evt.keyCode == 27) { \n";
+                    private static final String POST_JS =
+                            ""+"      evt.preventDefault(); \n   "
+                                    +  "    } \n"
+                                    +  "  }); \n"
+                                    +  "});";
+
+                    @Override
+                    public void renderHead(final Component component, final IHeaderResponse response) {
+                        super.renderHead(component, response);
+
+                        final String javascript = PRE_JS + getCallbackScript() + POST_JS;
+                        response.render(
+                                JavaScriptContentHeaderItem.forScript(javascript, null, null));
+                    }
+
+                    @Override
+                    protected void respond(final AjaxRequestTarget target) {
+                        onCancel(target);
+                    }
+
+                });
+            }
         }
 
         private void onSubmitOf(
                 final AjaxRequestTarget target,
                 final Form<?> form,
                 final AjaxButton ajaxButton) {
-            boolean succeeded = formExecutor.executeAndProcessResults(target, form);
+
+            boolean succeeded = formExecutorContext.getFormExecutor().executeAndProcessResults(target, form);
             if(succeeded) {
                 // the Wicket ajax callbacks will have just started to hide the veil
                 // we now show it once more, so that a veil continues to be shown until the
@@ -221,7 +257,7 @@ public abstract class PromptFormPanelAbstract<T extends IModel<?> & HasFormExecu
 
         @Override
         public void onError(AjaxRequestTarget target, ScalarPanelAbstract scalarPanel) {
-            if(scalarPanel instanceof Component) {
+            if(scalarPanel != null) {
                 // ensure that any feedback error associated with the providing component is shown.
                 target.add(scalarPanel);
             }
@@ -230,6 +266,29 @@ public abstract class PromptFormPanelAbstract<T extends IModel<?> & HasFormExecu
         public void onCancel(
                 final AjaxRequestTarget target) {
 
+            final PromptStyle promptStyle = formExecutorContext.getPromptStyle();
+
+            if(promptStyle == PromptStyle.INLINE) {
+
+                formExecutorContext.reset();
+
+                // replace
+                final String id = parentPanel.getId();
+                final MarkupContainer parent = parentPanel.getParent();
+
+                final WebMarkupContainer replacementPropertyEditFormPanel = new WebMarkupContainer(id);
+                replacementPropertyEditFormPanel.setVisible(false);
+
+                parent.addOrReplace(replacementPropertyEditFormPanel);
+
+
+                // change visibility of inline components
+                formExecutorContext.getInlinePromptContext().onCancel();
+
+                // redraw
+                target.add(parent);
+            }
+
         }
 
     }
@@ -237,7 +296,7 @@ public abstract class PromptFormPanelAbstract<T extends IModel<?> & HasFormExecu
 
     //region > dependencies
     @com.google.inject.Inject
-    private WicketViewerSettings settings;
+    WicketViewerSettings settings;
     protected WicketViewerSettings getSettings() {
         return settings;
     }


[37/43] isis git commit: ISIS-1607: fixes links oin swagger-ui.html

Posted by da...@apache.org.
ISIS-1607: fixes links oin swagger-ui.html


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

Branch: refs/heads/master
Commit: a5a1cd6968612d3c7e217459a6781ad62e5504af
Parents: bf3c5a7
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Thu Apr 27 16:43:28 2017 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Apr 27 16:43:28 2017 +0100

----------------------------------------------------------------------
 .../simpleapp/webapp/src/main/webapp/swagger-ui/index.html         | 2 +-
 .../webapp/src/main/webapp/swagger-ui/index.html                   | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/a5a1cd69/example/application/simpleapp/webapp/src/main/webapp/swagger-ui/index.html
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/webapp/src/main/webapp/swagger-ui/index.html b/example/application/simpleapp/webapp/src/main/webapp/swagger-ui/index.html
index c22fcaf..fa2a324 100644
--- a/example/application/simpleapp/webapp/src/main/webapp/swagger-ui/index.html
+++ b/example/application/simpleapp/webapp/src/main/webapp/swagger-ui/index.html
@@ -20,7 +20,7 @@
 <html>
 <head>
     <meta charset="UTF-8">
-    <base href="../webjars/swagger-ui/2.1.3/"/>
+    <base href="../webjars/swagger-ui/2.1.4/"/>
     <title>Swagger UI</title>
     <link rel="icon" type="image/png" href="images/favicon-32x32.png" sizes="32x32" />
     <link rel="icon" type="image/png" href="images/favicon-16x16.png" sizes="16x16" />

http://git-wip-us.apache.org/repos/asf/isis/blob/a5a1cd69/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp/swagger-ui/index.html
----------------------------------------------------------------------
diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp/swagger-ui/index.html b/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp/swagger-ui/index.html
index a504c37..4694b93 100644
--- a/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp/swagger-ui/index.html
+++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp/swagger-ui/index.html
@@ -23,7 +23,7 @@
 <html>
 <head>
     <meta charset="UTF-8">
-    <base href="../webjars/swagger-ui/2.1.3/"/>
+    <base href="../webjars/swagger-ui/2.1.4/"/>
     <title>Swagger UI</title>
     <link rel="icon" type="image/png" href="images/favicon-32x32.png" sizes="32x32" />
     <link rel="icon" type="image/png" href="images/favicon-16x16.png" sizes="16x16" />


[32/43] isis git commit: ISIS-1603: deletes ScalarPanelTextAbstract, since no longer has any use.

Posted by da...@apache.org.
ISIS-1603: deletes ScalarPanelTextAbstract, since no longer has any use.

Instead, ScalarPanelTextFieldAbstract inherits directly from ScalarPanelAbstract.


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

Branch: refs/heads/master
Commit: 0f1bfc4fd68a478c71855adb8fc068aefd76660e
Parents: 49013d0
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Tue Apr 25 23:40:43 2017 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Apr 27 13:26:40 2017 +0100

----------------------------------------------------------------------
 .../components/scalars/ScalarPanelAbstract.java |  4 +--
 .../scalars/ScalarPanelTextAbstract.html        |  0
 .../scalars/ScalarPanelTextAbstract.java        | 35 --------------------
 .../scalars/ScalarPanelTextFieldAbstract.java   |  2 +-
 4 files changed, 3 insertions(+), 38 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/0f1bfc4f/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
index 71d9bd8..30ba801 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
@@ -104,7 +104,7 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
     private WebMarkupContainer scalarTypeContainer;
 
     /**
-     * Used by most subclasses ({@link ScalarPanelTextAbstract}, {@link ReferencePanel}, {@link ValueChoicesSelect2Panel}) but not all ({@link IsisBlobOrClobPanelAbstract}, {@link BooleanPanel})
+     * Used by most subclasses ({@link ScalarPanelAbstract}, {@link ReferencePanel}, {@link ValueChoicesSelect2Panel}) but not all ({@link IsisBlobOrClobPanelAbstract}, {@link BooleanPanel})
      */
     protected WebMarkupContainer scalarIfRegularInlinePromptForm;
 
@@ -272,7 +272,7 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
     // ///////////////////////////////////////////////////////////////////
 
     /**
-     * For convenience of subclasses that support inline prompts ({@link ScalarPanelTextAbstract}, {@link ReferencePanel}, {@link ValueChoicesSelect2Panel}).
+     * For convenience of subclasses that support inline prompts ({@link ScalarPanelAbstract}, {@link ReferencePanel}, {@link ValueChoicesSelect2Panel}).
      */
     protected void configureInlinePromptCallback() {
 

http://git-wip-us.apache.org/repos/asf/isis/blob/0f1bfc4f/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextAbstract.html
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextAbstract.html b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextAbstract.html
deleted file mode 100644
index e69de29..0000000

http://git-wip-us.apache.org/repos/asf/isis/blob/0f1bfc4f/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextAbstract.java
deleted file mode 100644
index 7bfaf33..0000000
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextAbstract.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- *  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.scalars;
-
-import org.apache.isis.viewer.wicket.model.models.ScalarModel;
-
-public abstract class ScalarPanelTextAbstract extends ScalarPanelAbstract  {
-
-    private static final long serialVersionUID = 1L;
-
-
-    public ScalarPanelTextAbstract(final String id, final ScalarModel scalarModel) {
-        super(id, scalarModel);
-    }
-
-
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/0f1bfc4f/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
index 8e28819..3e72251 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
@@ -67,7 +67,7 @@ import org.apache.isis.viewer.wicket.ui.util.CssClassAppender;
  * This implementation is for panels that use a textfield/text area.
  * </p>
  */
-public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> extends ScalarPanelTextAbstract {
+public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> extends ScalarPanelAbstract {
 
     private static final long serialVersionUID = 1L;
 


[22/43] isis git commit: ISIS-1603: provides first-cut impl of rendering property inline edit form for ScalarPanelTextFieldAbstract.

Posted by da...@apache.org.
ISIS-1603: provides first-cut impl of rendering property inline edit form for ScalarPanelTextFieldAbstract.

Main (obvious in retrospect) insight is that the edit Link and the inline edit form are not together in the markup

Also:
- renamed HasExecutingPanel to HasFormExecutor, and simplified way that this is setup

Still need to:
- handle the cancel button
- get focus handling working correctly
- style textarea correctly
- do the other subtypes of ScalarPanelAbstract (ReferencePanel, ValueChoicesSelect2Panel, BooleanPanel, IsisBlobOrClobPanelAbstract)
  - need to figure out how to render reference...


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

Branch: refs/heads/master
Commit: ddd55cd1eef544168c78dde8cd5a43c0501a9393
Parents: 6a5c6f6
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Sun Apr 23 14:48:03 2017 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Apr 27 13:26:39 2017 +0100

----------------------------------------------------------------------
 .../viewer/wicket/model/models/ActionModel.java |   2 +-
 .../wicket/model/models/HasExecutingPanel.java  |  24 ----
 .../wicket/model/models/HasFormExecutor.java    |  24 ++++
 .../viewer/wicket/model/models/ScalarModel.java |   2 +-
 .../components/actions/ActionPanelFactory.java  |   3 +-
 .../actions/ActionParametersFormPanel.java      |   9 +-
 .../property/PropertyEditFormPanel.java         |  12 +-
 .../components/property/PropertyEditPanel.java  |  31 +----
 .../components/scalars/ScalarPanelAbstract.html |  34 ++---
 .../components/scalars/ScalarPanelAbstract.java |  61 ++++++---
 .../scalars/ScalarPanelTextFieldAbstract.java   | 128 ++++++++++---------
 .../isisapplib/IsisBlobOrClobPanelAbstract.java |   2 +-
 .../scalars/primitive/BooleanPanel.java         |   2 +-
 .../scalars/reference/ReferencePanel.java       |   2 +-
 .../valuechoices/ValueChoicesSelect2Panel.java  |   2 +-
 .../wicket/ui/pages/bootstrap-overrides.css     |   9 +-
 .../ui/panels/PromptFormPanelAbstract.java      |  60 +++++----
 17 files changed, 216 insertions(+), 191 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/ddd55cd1/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
index 981026b..d4f46b4 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
@@ -79,7 +79,7 @@ import org.apache.isis.viewer.wicket.model.mementos.PageParameterNames;
  * action's {@link Mode#PARAMETERS parameters}, or the handling of the
  * {@link Mode#RESULTS results} once invoked.
  */
-public class ActionModel extends BookmarkableModel<ObjectAdapter> implements HasExecutingPanel {
+public class ActionModel extends BookmarkableModel<ObjectAdapter> implements HasFormExecutor {
 
     private static final long serialVersionUID = 1L;
     

http://git-wip-us.apache.org/repos/asf/isis/blob/ddd55cd1/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/HasExecutingPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/HasExecutingPanel.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/HasExecutingPanel.java
deleted file mode 100644
index 33b376d..0000000
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/HasExecutingPanel.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- *  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.model.models;
-
-public interface HasExecutingPanel  {
-    FormExecutor getFormExecutor();
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/ddd55cd1/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/HasFormExecutor.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/HasFormExecutor.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/HasFormExecutor.java
new file mode 100644
index 0000000..7d75e16
--- /dev/null
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/HasFormExecutor.java
@@ -0,0 +1,24 @@
+/*
+ *  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.model.models;
+
+public interface HasFormExecutor {
+    FormExecutor getFormExecutor();
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/ddd55cd1/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
index 18e2830..17c32be 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
@@ -68,7 +68,7 @@ import org.apache.isis.viewer.wicket.model.mementos.SpecUtils;
  * Is the backing model to each of the fields that appear in forms (for entities
  * or action dialogs).
  */
-public class ScalarModel extends EntityModel implements LinksProvider,HasExecutingPanel, ActionArgumentModel {
+public class ScalarModel extends EntityModel implements LinksProvider,HasFormExecutor, ActionArgumentModel {
 
     private static final long serialVersionUID = 1L;
 

http://git-wip-us.apache.org/repos/asf/isis/blob/ddd55cd1/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionPanelFactory.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionPanelFactory.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionPanelFactory.java
index 30af5e9..5d33fea 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionPanelFactory.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionPanelFactory.java
@@ -46,7 +46,8 @@ public class ActionPanelFactory extends ComponentFactoryAbstract {
     @Override
     public Component createComponent(final String id, final IModel<?> model) {
         final ActionModel actionModel = (ActionModel) model;
-        return new ActionPanel(id, actionModel);
+        final ActionPanel actionPanel = new ActionPanel(id, actionModel);
+        return actionPanel;
     }
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/ddd55cd1/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java
index 833ce07..7a7d16c 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java
@@ -33,6 +33,7 @@ import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.version.ConcurrencyException;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.viewer.wicket.model.hints.IsisActionCompletedEvent;
+import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
 import org.apache.isis.viewer.wicket.model.mementos.ActionParameterMemento;
 import org.apache.isis.viewer.wicket.model.models.ActionModel;
 import org.apache.isis.viewer.wicket.model.models.ActionArgumentModel;
@@ -65,19 +66,19 @@ public class ActionParametersFormPanel extends PromptFormPanelAbstract<ActionMod
     private void buildGui() {
         ActionModel model = getModel();
         model.clearArguments();  // in case previously used, eg prompt displayed then cancelled
-        add(new ActionParameterForm("inputForm", this, model));
+        add(new ActionParameterForm("inputForm", this, this.getSettings(), model));
     }
 
     class ActionParameterForm extends PropertyEditFormPanel.FormAbstract<ActionModel> implements ScalarModelSubscriber  {
 
         private static final long serialVersionUID = 1L;
 
-
         public ActionParameterForm(
                 final String id,
-                final PromptFormPanelAbstract<?> parentPanel,
+                final Component parentPanel,
+                final WicketViewerSettings settings,
                 final ActionModel actionModel) {
-            super(id, parentPanel, actionModel);
+            super(id, parentPanel, settings, actionModel);
         }
 
         private ActionModel getActionModel() {

http://git-wip-us.apache.org/repos/asf/isis/blob/ddd55cd1/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditFormPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditFormPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditFormPanel.java
index 107b7e0..6b94d41 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditFormPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditFormPanel.java
@@ -25,6 +25,7 @@ import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.form.Form;
 
 import org.apache.isis.viewer.wicket.model.hints.IsisPropertyEditCompletedEvent;
+import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.ComponentType;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarModelSubscriber;
@@ -50,7 +51,7 @@ public class PropertyEditFormPanel extends PromptFormPanelAbstract<ScalarModel>
 
     private void buildGui() {
         ScalarModel model = getModel();
-        add(new PropertyEditForm("inputForm", this, model));
+        add(new PropertyEditForm("inputForm", this, this.getSettings(), model));
     }
 
     class PropertyEditForm extends FormAbstract<ScalarModel> implements ScalarModelSubscriber  {
@@ -59,9 +60,10 @@ public class PropertyEditFormPanel extends PromptFormPanelAbstract<ScalarModel>
 
         public PropertyEditForm(
                 final String id,
-                final PromptFormPanelAbstract<?> parentPanel,
+                final Component parentPanel,
+                final WicketViewerSettings settings,
                 final ScalarModel propertyModel) {
-            super(id, parentPanel, propertyModel);
+            super(id, parentPanel, settings, propertyModel);
         }
 
         private ScalarModel getScalarModel() {
@@ -75,7 +77,8 @@ public class PropertyEditFormPanel extends PromptFormPanelAbstract<ScalarModel>
             final WebMarkupContainer container = new WebMarkupContainer(ID_PROPERTY);
             add(container);
 
-            final Component component = getComponentFactoryRegistry().addOrReplaceComponent(container, ComponentType.SCALAR_NAME_AND_VALUE, scalarModel);
+            final Component component =
+                    getComponentFactoryRegistry().addOrReplaceComponent(container, ComponentType.SCALAR_NAME_AND_VALUE, scalarModel);
             final ScalarPanelAbstract paramPanel = component instanceof ScalarPanelAbstract ? (ScalarPanelAbstract) component : null;
             if(paramPanel != null) {
                 paramPanel.setOutputMarkupId(true);
@@ -94,7 +97,6 @@ public class PropertyEditFormPanel extends PromptFormPanelAbstract<ScalarModel>
                 final AjaxRequestTarget target, final ScalarModelProvider provider) {
 
         }
-
     }
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/ddd55cd1/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditPanel.java
index 146b4d0..f4804ad 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditPanel.java
@@ -19,10 +19,8 @@
 
 package org.apache.isis.viewer.wicket.ui.components.property;
 
-import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.model.Model;
 
 import org.apache.isis.core.commons.authentication.MessageBroker;
@@ -31,16 +29,13 @@ import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.adapter.version.ConcurrencyException;
 import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
 import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
-import org.apache.isis.core.runtime.system.transaction.IsisTransactionManager;
 import org.apache.isis.viewer.wicket.model.models.EntityModel;
-import org.apache.isis.viewer.wicket.model.models.FormExecutor;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.ComponentType;
 import org.apache.isis.viewer.wicket.ui.pages.entity.EntityPage;
 import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
 
-public class PropertyEditPanel extends PanelAbstract<ScalarModel>
-        implements FormExecutor {
+public class PropertyEditPanel extends PanelAbstract<ScalarModel> {
 
     private static final long serialVersionUID = 1L;
 
@@ -55,7 +50,7 @@ public class PropertyEditPanel extends PanelAbstract<ScalarModel>
 
     public PropertyEditPanel(final String id, final ScalarModel scalarModel) {
         super(id, new ScalarModel(scalarModel.getParentObjectAdapterMemento(), scalarModel.getPropertyMemento()));
-        getScalarModel().setFormExecutor(this);
+        getScalarModel().setFormExecutor(new PropertyEditFormExecutor(this, getModel()));
         buildGui(getScalarModel());
     }
 
@@ -63,7 +58,7 @@ public class PropertyEditPanel extends PanelAbstract<ScalarModel>
     protected void onConfigure() {
         super.onConfigure();
 
-        buildGui(getModel());
+        buildGui(getScalarModel());
     }
 
     private void buildGui(final ScalarModel scalarModel) {
@@ -136,32 +131,12 @@ public class PropertyEditPanel extends PanelAbstract<ScalarModel>
         return header;
     }
 
-    /**
-     * @param feedbackForm - for feedback messages.
-     * @return
-     */
-    @Override
-    public boolean executeAndProcessResults(AjaxRequestTarget target, Form<?> feedbackForm) {
-
-        return new PropertyEditFormExecutor(this, getModel()).executeAndProcessResults(target, feedbackForm);
-
-
-    }
-
-
-
-
-
 
 
     ///////////////////////////////////////////////////////
     // Dependencies (from context)
     ///////////////////////////////////////////////////////
     
-    protected IsisTransactionManager getTransactionManager() {
-        return getPersistenceSession().getTransactionManager();
-    }
-
     protected MessageBroker getMessageBroker() {
         return getAuthenticationSession().getMessageBroker();
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/ddd55cd1/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.html
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.html b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.html
index 8029649..6238772 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.html
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.html
@@ -26,11 +26,14 @@
         <wicket:panel>
             <div wicket:id="scalarTypeContainer"
                  class="scalarNameAndValueComponentType" >
+
                 <div wicket:id="scalarIfRegular"
                      class="form-group" >
+
                     <label wicket:id="scalarName"
                            class="scalarName control-label"
                     >[Label text]</label>
+
                     <span class="scalarValueWrapper">
                         <div class="scalarPlaceholder">
                             <span class="scalarValueInput">
@@ -38,22 +41,17 @@
                                     <wicket:child/>
                                     <a wicket:id="editProperty"
                                        href="#"
-                                       class="edit fa fa-pencil-square-o"/>
-                                    <div wicket:id="scalarValueEditInlineContainer">
-                                        <a
-                                                href="#"
-                                                name="scalarValueEditInline"
-                                                class="form-control input-sm scalarValueEditInline"
-                                                wicket:id="scalarValueEditInline">
-                                            <span wicket:id="scalarValueEditInlineLabel"></span>
-                                        </a>
-
-                                        <div wicket:id="propertyEditForm">
-                                            <div><span>property edit form</span></div>
-                                        </div>
-                                    </div>
+                                       class="edit fa fa-pencil-square-o"></a>
+                                    <a
+                                            href="#"
+                                            name="scalarValueEditInline"
+                                            class="form-control input-sm scalarValueEditInline"
+                                            wicket:id="scalarValueEditInline">
+                                        <span wicket:id="scalarValueEditInlineLabel"></span>
+                                    </a>
                                 </span>
                             </span>
+
                             <span wicket:id="associatedActionLinksRight"
                                   class="associatedActionLinksRight"
                             >[drop down]</span>
@@ -61,8 +59,14 @@
                         <span wicket:id="feedback" class="help-block"></span>
                         <span wicket:id="associatedActionLinksBelow"></span>
                     </span>
-                    <div class="clearfix"/>
+                    <div class="clearfix"></div>
+
+                </div>
+
+                <div wicket:id="scalarIfRegularInlineEditForm" class="inlineEditForm" >
+                    <div><span>property edit form</span></div>
                 </div>
+
                 <wicket:container wicket:id="scalarIfCompact"></wicket:container>
             </div>
 

http://git-wip-us.apache.org/repos/asf/isis/blob/ddd55cd1/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
index 135e9a2..cfde571 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
@@ -51,6 +51,7 @@ 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.ComponentType;
 import org.apache.isis.viewer.wicket.ui.components.actionmenu.entityactions.AdditionalLinksPanel;
+import org.apache.isis.viewer.wicket.ui.components.property.PropertyEditFormExecutor;
 import org.apache.isis.viewer.wicket.ui.components.property.PropertyEditPanel;
 import org.apache.isis.viewer.wicket.ui.components.property.PropertyEditPromptHeaderPanel;
 import org.apache.isis.viewer.wicket.ui.components.scalars.TextFieldValueModel.ScalarModelProvider;
@@ -77,9 +78,12 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
     protected static final String ID_SCALAR_IF_REGULAR = "scalarIfRegular";
     protected static final String ID_SCALAR_NAME = "scalarName";
     protected static final String ID_SCALAR_VALUE = "scalarValue";
+
     protected static final String ID_SCALAR_VALUE_EDIT_INLINE = "scalarValueEditInline";
     protected static final String ID_SCALAR_VALUE_EDIT_INLINE_LABEL = "scalarValueEditInlineLabel";
 
+    protected static final String ID_SCALAR_IF_REGULAR_INLINE_EDIT_FORM = "scalarIfRegularInlineEditForm";
+
     protected static final String ID_SCALAR_IF_COMPACT = "scalarIfCompact";
 
     private static final String ID_ASSOCIATED_ACTION_LINKS_BELOW = "associatedActionLinksBelow";
@@ -144,10 +148,16 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
         }
     }
 
-    protected Component componentIfCompact;
-    private Component componentIfRegular;
     protected final ScalarModel scalarModel;
 
+    protected WebMarkupContainer scalarTypeContainer;
+
+    protected Component scalarIfCompact;
+    protected Component scalarIfRegular;
+    protected WebMarkupContainer scalarIfRegularInlineEditForm;
+
+    protected WebMarkupContainer editInlineLink;
+
 
     public ScalarPanelAbstract(final String id, final ScalarModel scalarModel) {
         super(id, scalarModel);
@@ -173,11 +183,11 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
     }
 
     protected Component getLabelForCompact() {
-        return componentIfCompact;
+        return scalarIfCompact;
     }
 
     public Component getComponentForRegular() {
-        return componentIfRegular;
+        return scalarIfRegular;
     }
 
     @Override
@@ -225,8 +235,8 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
         
         // REVIEW: this is nasty, both write to the same entityLink field
         // even though only one is used
-        componentIfCompact = addComponentForCompact();
-        componentIfRegular = addComponentForRegular();
+        scalarIfCompact = addComponentForCompact();
+        scalarIfRegular = addComponentForRegular();
         
         getRendering().buildGui(this);
         addCssForMetaModel();
@@ -297,17 +307,13 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
     }
 
     protected void addEditPropertyTo(
-            final MarkupContainer markupContainer,
-            final WebMarkupContainer editInlineLink,
-            final Component scalarValueEditInlineContainer,
-            final Component propertyEditForm) {
+            final MarkupContainer scalarIfRegularFormGroup) {
 
-        final PropertyEditStyle editStyle = this.scalarModel.getEditStyle();
-        if(editStyle == PropertyEditStyle.DIALOG) {
+        if(scalarModel.isEditable() && scalarModel.getEditStyle() == PropertyEditStyle.DIALOG) {
 
             final WebMarkupContainer editProperty = new WebMarkupContainer(ID_EDIT_PROPERTY);
-
             editProperty.setOutputMarkupId(true);
+            scalarIfRegularFormGroup.addOrReplace(editProperty);
 
             editProperty.add(new AjaxEventBehavior("click") {
                 protected void onEvent(AjaxRequestTarget target) {
@@ -331,18 +337,36 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
 
                 }
             });
+        } else {
+            Components.permanentlyHide(scalarIfRegularFormGroup, ID_EDIT_PROPERTY);
+        }
 
-            markupContainer.addOrReplace(editProperty);
+    }
 
-        } else {
+    protected void configureInlineEditCallback() {
+
+        final PropertyEditStyle editStyle = this.scalarModel.getEditStyle();
+        if(editStyle == PropertyEditStyle.INLINE) {
 
             if(editInlineLink != null) {
                 editInlineLink.add(new AjaxEventBehavior("click") {
                     @Override
                     protected void onEvent(final AjaxRequestTarget target) {
+
+                        scalarModel.toEditMode();
                         editInlineLink.setVisible(false);
-                        propertyEditForm.setVisible(true);
-                        target.add(scalarValueEditInlineContainer);
+
+                        // dynamically update the edit form.
+                        final PropertyEditFormExecutor formExecutor =
+                                new PropertyEditFormExecutor(ScalarPanelAbstract.this, scalarModel);
+                        scalarModel.setFormExecutor(formExecutor);
+                        scalarIfRegularInlineEditForm = (WebMarkupContainer) getComponentFactoryRegistry().addOrReplaceComponent(
+                                scalarTypeContainer, ID_SCALAR_IF_REGULAR_INLINE_EDIT_FORM, ComponentType.PROPERTY_EDIT_FORM, scalarModel);
+
+                        scalarIfRegular.setVisible(false);
+                        scalarIfRegularInlineEditForm.setVisible(true);
+
+                        target.add(scalarTypeContainer);
                     }
 
                     @Override
@@ -351,9 +375,6 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
                     }
                 });
             }
-
-
-            Components.permanentlyHide(markupContainer, ID_EDIT_PROPERTY);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/ddd55cd1/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
index 7e91968..ba6f4d2 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
@@ -74,12 +74,8 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
         }
     }
 
-    protected WebMarkupContainer scalarTypeContainer;
     private AbstractTextComponent<T> textField;
 
-    private WebMarkupContainer scalarValueEditInlineContainer;
-    private WebMarkupContainer editInlineLink;
-    private Component propertyEditForm;
 
     public ScalarPanelTextFieldAbstract(final String id, final ScalarModel scalarModel, final Class<T> cls) {
         super(id, scalarModel);
@@ -91,26 +87,12 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
         super.onInitialize();
 
         scalarTypeContainer = new WebMarkupContainer(ID_SCALAR_TYPE_CONTAINER);
+        scalarTypeContainer.setOutputMarkupId(true);
         scalarTypeContainer.add(new CssClassAppender(getScalarPanelType()));
         addOrReplace(scalarTypeContainer);
 
     }
 
-    private Component getEditComponent() {
-        return scalarModel.getEditStyle() == PropertyEditStyle.INLINE
-                ? scalarValueEditInlineContainer
-                : textField;
-    }
-
-    /**
-     * Opposite of {@link #getEditComponent()}.
-     */
-    private Component getOtherComponent() {
-        return scalarModel.getEditStyle() == PropertyEditStyle.INLINE
-                ? textField
-                : scalarValueEditInlineContainer;
-    }
-
 
     AbstractTextComponent<T> getTextField() {
         return textField;
@@ -143,69 +125,80 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
         final IModel<T> textFieldModel = textField.getModel();
 
 
-        this.scalarValueEditInlineContainer = new WebMarkupContainer("scalarValueEditInlineContainer");
-        scalarValueEditInlineContainer.setOutputMarkupId(true);
-        this.editInlineLink = new WebMarkupContainer(ID_SCALAR_VALUE_EDIT_INLINE);
-        editInlineLink.setOutputMarkupId(true);
-        scalarValueEditInlineContainer.add(editInlineLink);
 
-        propertyEditForm = new WebMarkupContainer("propertyEditForm");
-        //propertyEditForm = getComponentFactoryRegistry().addOrReplaceComponent(this, ComponentType.PROPERTY_EDIT_FORM, scalarModel);
 
-        scalarValueEditInlineContainer.add(propertyEditForm);
-
-        final Label editInlineLinkLabel = new Label(ID_SCALAR_VALUE_EDIT_INLINE_LABEL, textFieldModel);
-        editInlineLink.add(editInlineLinkLabel);
-
-        propertyEditForm.setVisible(false);
+        //
+        // read-only/dialog edit
+        //
 
         final MarkupContainer scalarIfRegularFormGroup = createScalarIfRegularFormGroup();
 
-        scalarTypeContainer.add(scalarIfRegularFormGroup);
-
-        final Label scalarName = new Label(ID_SCALAR_NAME, getRendering().getLabelCaption(textField));
-        NamedFacet namedFacet = getModel().getFacet(NamedFacet.class);
-        if (namedFacet != null) {
-            scalarName.setEscapeModelStrings(namedFacet.escaped());
-        }
 
         // find the links...
-
-        final List<LinkAndLabel> entityActions = EntityActionUtil.getEntityActionLinksForAssociation(this.scalarModel, getDeploymentCategory());
+        final List<LinkAndLabel> entityActions =
+                EntityActionUtil.getEntityActionLinksForAssociation(this.scalarModel, getDeploymentCategory());
 
         addPositioningCssTo(scalarIfRegularFormGroup, entityActions);
 
-        if(getModel().isRequired()) {
-            final String label = scalarName.getDefaultModelObjectAsString();
-            if(!Strings.isNullOrEmpty(label)) {
-                scalarName.add(new CssClassAppender("mandatory"));
-            }
-        }
-
-        scalarIfRegularFormGroup.add(scalarName);
 
         final String describedAs = getModel().getDescribedAs();
         if(describedAs != null) {
             scalarIfRegularFormGroup.add(new AttributeModifier("title", Model.of(describedAs)));
         }
 
-        addFeedbackOnlyTo(scalarIfRegularFormGroup, getEditComponent());
-        addEditPropertyTo(scalarIfRegularFormGroup, editInlineLink, scalarValueEditInlineContainer, propertyEditForm);
+        addFeedbackOnlyTo(scalarIfRegularFormGroup, textField);
 
         // ... add entity links to panel (below and to right)
         addEntityActionLinksBelowAndRight(scalarIfRegularFormGroup, entityActions);
 
+        scalarTypeContainer.add(scalarIfRegularFormGroup);
 
 
 
-        getOtherComponent().setVisibilityAllowed(false);
 
+        //
+        // inline edit
+        //
+
+        this.editInlineLink = new WebMarkupContainer(ID_SCALAR_VALUE_EDIT_INLINE);
+        editInlineLink.setOutputMarkupId(true);
+
+        final Label editInlineLinkLabel = new Label(ID_SCALAR_VALUE_EDIT_INLINE_LABEL, textFieldModel);
+        editInlineLink.add(editInlineLinkLabel);
+
+
+        scalarIfRegularFormGroup.add(editInlineLink);
+
+
+
+        //
+        // inline edit form
+        // (placeholder initially, create dynamically when needed - otherwise infinite loop because form references regular)
+        //
+
+        scalarIfRegularInlineEditForm = new WebMarkupContainer(ID_SCALAR_IF_REGULAR_INLINE_EDIT_FORM);
+        scalarIfRegularInlineEditForm.setOutputMarkupId(true);
+        scalarTypeContainer.add(scalarIfRegularInlineEditForm);
 
-        return scalarIfRegularFormGroup;
-    }
 
-    private String asString(final IModel<T> textFieldModel) {
-        return textFieldModel != null && textFieldModel.getObject() != null ? textFieldModel.getObject().toString() : null;
+
+
+
+        //
+        // configure dialog edit vs inline edit
+        //
+
+        addEditPropertyTo(scalarIfRegularFormGroup);
+        configureInlineEditCallback();
+
+        if (scalarModel.isEditable() && scalarModel.getEditStyle() == PropertyEditStyle.INLINE) {
+            textField.setVisibilityAllowed(false);
+        } else {
+            editInlineLink.setVisibilityAllowed(false);
+        }
+        scalarIfRegularInlineEditForm.setVisible(false);
+
+        return scalarIfRegularFormGroup;
     }
 
     protected abstract IModel<String> getScalarPanelType();
@@ -227,13 +220,25 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
         Fragment textFieldFragment = createTextFieldFragment("scalarValueContainer");
         final String name = getModel().getName();
         textField.setLabel(Model.of(name));
-        
-        final FormGroup formGroup = new FormGroup(ID_SCALAR_IF_REGULAR, this.textField);
 
+        final FormGroup formGroup = new FormGroup(ID_SCALAR_IF_REGULAR, this.textField);
         textFieldFragment.add(this.textField);
         formGroup.add(textFieldFragment);
 
-        formGroup.add(this.scalarValueEditInlineContainer);
+        final Label scalarName = new Label(ID_SCALAR_NAME, getRendering().getLabelCaption(textField));
+        NamedFacet namedFacet = getModel().getFacet(NamedFacet.class);
+        if (namedFacet != null) {
+            scalarName.setEscapeModelStrings(namedFacet.escaped());
+        }
+
+        if(getModel().isRequired()) {
+            final String label = scalarName.getDefaultModelObjectAsString();
+            if(!Strings.isNullOrEmpty(label)) {
+                scalarName.add(new CssClassAppender("mandatory"));
+            }
+        }
+
+        formGroup.add(scalarName);
 
         return formGroup;
     }
@@ -351,9 +356,8 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
     @Override
     protected void addFormComponentBehavior(Behavior behavior) {
 
-        // some behaviours can only be attached to one component
-        // so we check as to which will actually be visible.
-        getEditComponent().add(behavior);
+        textField.add(behavior);
+
     }
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/ddd55cd1/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java
index ba54edf..0c69b8f 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java
@@ -116,7 +116,7 @@ public abstract class IsisBlobOrClobPanelAbstract<T extends NamedWithMimeType> e
         
         addOrReplace(scalarIfRegularFormGroup);
         addFeedbackOnlyTo(scalarIfRegularFormGroup, fileUploadField);
-        addEditPropertyTo(scalarIfRegularFormGroup, null, null, null);
+        addEditPropertyTo(scalarIfRegularFormGroup);
 
         // ... add entity links to panel (below and to right)
         addEntityActionLinksBelowAndRight(scalarIfRegularFormGroup, entityActions);

http://git-wip-us.apache.org/repos/asf/isis/blob/ddd55cd1/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java
index 1e27073..78e2a21 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java
@@ -96,7 +96,7 @@ public class BooleanPanel extends ScalarPanelAbstract {
 
         addOrReplace(scalarIfRegularFormGroup);
         addFeedbackOnlyTo(scalarIfRegularFormGroup, checkBox);
-        addEditPropertyTo(scalarIfRegularFormGroup, null, null, null);
+        addEditPropertyTo(scalarIfRegularFormGroup);
 
         // ... add entity links to panel (below and to right)
         addEntityActionLinksBelowAndRight(scalarIfRegularFormGroup, entityActions);

http://git-wip-us.apache.org/repos/asf/isis/blob/ddd55cd1/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
index 114f3dd..3b5fa18 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
@@ -160,7 +160,7 @@ public class ReferencePanel extends ScalarPanelAbstract {
 
         addOrReplace(scalarIfRegularFormGroup);
         addFeedbackOnlyTo(scalarIfRegularFormGroup, select2.component()); // this is a placeholder; when select2.component() is available, we use that instead
-        addEditPropertyTo(scalarIfRegularFormGroup, null, null, null);
+        addEditPropertyTo(scalarIfRegularFormGroup);
 
         // ... add entity links to panel (below and to right)
         addEntityActionLinksBelowAndRight(scalarIfRegularFormGroup, entityActions);

http://git-wip-us.apache.org/repos/asf/isis/blob/ddd55cd1/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
index 75d8ed7..7fb8a56 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
@@ -106,7 +106,7 @@ public class ValueChoicesSelect2Panel extends ScalarPanelAbstract implements Sca
         addPositioningCssTo(scalarIfRegularFormGroup, entityActions);
 
         addFeedbackOnlyTo(scalarIfRegularFormGroup, select2.component());
-        addEditPropertyTo(scalarIfRegularFormGroup, null, null, null);
+        addEditPropertyTo(scalarIfRegularFormGroup);
 
         // ... add entity links to panel (below and to right)
         addEntityActionLinksBelowAndRight(scalarIfRegularFormGroup, entityActions);

http://git-wip-us.apache.org/repos/asf/isis/blob/ddd55cd1/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap-overrides.css
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap-overrides.css b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap-overrides.css
index b3465b3..a4c1881 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap-overrides.css
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap-overrides.css
@@ -869,4 +869,11 @@ tr.headers th form input {
 
 .select2-container-multi.input-sm {
     height: inherit;
-}
\ No newline at end of file
+}
+
+.scalarNameAndValueComponentType .inlineEditForm {
+    border: 2px solid;
+    padding: 10px;
+    margin-bottom: 20px
+}
+

http://git-wip-us.apache.org/repos/asf/isis/blob/ddd55cd1/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormPanelAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormPanelAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormPanelAbstract.java
index 6447940..762baa3 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormPanelAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormPanelAbstract.java
@@ -33,13 +33,16 @@ import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.ResourceModel;
 
-import org.apache.isis.core.commons.ensure.Ensure;
+import org.apache.isis.core.commons.authentication.AuthenticationSession;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.runtime.system.context.IsisContext;
+import org.apache.isis.core.runtime.system.session.IsisSessionFactory;
 import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
 import org.apache.isis.viewer.wicket.model.models.ActionPrompt;
 import org.apache.isis.viewer.wicket.model.models.ActionPromptProvider;
 import org.apache.isis.viewer.wicket.model.models.FormExecutor;
-import org.apache.isis.viewer.wicket.model.models.HasExecutingPanel;
+import org.apache.isis.viewer.wicket.model.models.HasFormExecutor;
+import org.apache.isis.viewer.wicket.ui.components.property.PropertyEditFormExecutor;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarModelSubscriber;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelAbstract;
 import org.apache.isis.viewer.wicket.ui.components.scalars.TextFieldValueModel;
@@ -47,39 +50,40 @@ import org.apache.isis.viewer.wicket.ui.components.widgets.formcomponent.FormFee
 import org.apache.isis.viewer.wicket.ui.errors.JGrowlBehaviour;
 import org.apache.isis.viewer.wicket.ui.errors.JGrowlUtil;
 
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.CoreMatchers.not;
-import static org.hamcrest.CoreMatchers.nullValue;
-
 /**
  * {@link PanelAbstract Panel} to capture the arguments for an action
  * invocation.
  */
-public abstract class PromptFormPanelAbstract<T extends IModel<?> & HasExecutingPanel> extends PanelAbstract<T> {
-
-    protected final FormExecutor formExecutor;
+public abstract class PromptFormPanelAbstract<T extends IModel<?> & HasFormExecutor> extends PanelAbstract<T> {
 
     private static final String ID_OK_BUTTON = "okButton";
     private static final String ID_CANCEL_BUTTON = "cancelButton";
 
 
+
     public PromptFormPanelAbstract(final String id, final T model) {
         super(id, model);
-        Ensure.ensureThatArg(model.getFormExecutor(), is(not(nullValue())));
-        this.formExecutor = model.getFormExecutor();
     }
 
-    public static abstract class FormAbstract<T extends IModel<?>> extends Form<ObjectAdapter>
+    public static abstract class FormAbstract<T extends IModel<ObjectAdapter> & HasFormExecutor> extends Form<ObjectAdapter>
             implements ScalarModelSubscriber {
 
         protected static final String ID_FEEDBACK = "feedback";
 
         protected final List<ScalarPanelAbstract> paramPanels = Lists.newArrayList();
-        protected final PromptFormPanelAbstract<?> parentPanel;
-
-        public FormAbstract(final String id, final PromptFormPanelAbstract<?> parentPanel, final IModel<ObjectAdapter> model) {
+        protected final Component parentPanel;
+        private final WicketViewerSettings settings;
+        private final FormExecutor formExecutor;
+
+        public FormAbstract(
+                final String id,
+                final Component parentPanel,
+                final WicketViewerSettings settings,
+                final T model) {
             super(id, model);
             this.parentPanel = parentPanel;
+            this.settings = settings;
+            this.formExecutor = model.getFormExecutor();
 
             setOutputMarkupId(true); // for ajax button
             addParameters();
@@ -95,19 +99,19 @@ public abstract class PromptFormPanelAbstract<T extends IModel<?> & HasExecuting
         protected abstract void addParameters();
 
         protected AjaxButton addOkButton() {
-            AjaxButton okButton = parentPanel.getSettings().isUseIndicatorForFormSubmit()
+            AjaxButton okButton = settings.isUseIndicatorForFormSubmit()
                     ? new IndicatingAjaxButton(ID_OK_BUTTON, new ResourceModel("okLabel")) {
                         private static final long serialVersionUID = 1L;
 
                         @Override
                         public void onSubmit(AjaxRequestTarget target, Form<?> form) {
-                            onSubmitOf(target, form, this, FormAbstract.this.parentPanel);
+                            onSubmitOf(target, form, this);
                         }
 
                         @Override
                         protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
                             super.updateAjaxAttributes(attributes);
-                            if(parentPanel.getSettings().isPreventDoubleClickForFormSubmit()) {
+                            if(settings.isPreventDoubleClickForFormSubmit()) {
                                 PanelUtil.disableBeforeReenableOnComplete(attributes, this);
                             }
                         }
@@ -123,13 +127,13 @@ public abstract class PromptFormPanelAbstract<T extends IModel<?> & HasExecuting
 
                         @Override
                         public void onSubmit(AjaxRequestTarget target, Form<?> form) {
-                            onSubmitOf(target, form, this, FormAbstract.this.parentPanel);
+                            onSubmitOf(target, form, this);
                         }
 
                         @Override
                         protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
                             super.updateAjaxAttributes(attributes);
-                            if(parentPanel.getSettings().isPreventDoubleClickForFormSubmit()) {
+                            if(settings.isPreventDoubleClickForFormSubmit()) {
                                 PanelUtil.disableBeforeReenableOnComplete(attributes, this);
                             }
                         }
@@ -171,9 +175,8 @@ public abstract class PromptFormPanelAbstract<T extends IModel<?> & HasExecuting
         private void onSubmitOf(
                 final AjaxRequestTarget target,
                 final Form<?> form,
-                final AjaxButton ajaxButton,
-                final PromptFormPanelAbstract<?> parentPanel) {
-            boolean succeeded = parentPanel.formExecutor.executeAndProcessResults(target, form);
+                final AjaxButton ajaxButton) {
+            boolean succeeded = formExecutor.executeAndProcessResults(target, form);
             if(succeeded) {
                 // the Wicket ajax callbacks will have just started to hide the veil
                 // we now show it once more, so that a veil continues to be shown until the
@@ -189,7 +192,7 @@ public abstract class PromptFormPanelAbstract<T extends IModel<?> & HasExecuting
 
                 // ensure any jGrowl errors are shown
                 // (normally would be flushed when traverse to next page).
-                String errorMessagesIfAny = JGrowlUtil.asJGrowlCalls(parentPanel.getAuthenticationSession().getMessageBroker());
+                String errorMessagesIfAny = JGrowlUtil.asJGrowlCalls(getAuthenticationSession().getMessageBroker());
                 builder.append(errorMessagesIfAny);
 
                 // append the JS to the response.
@@ -199,6 +202,14 @@ public abstract class PromptFormPanelAbstract<T extends IModel<?> & HasExecuting
             }
         }
 
+        private AuthenticationSession getAuthenticationSession() {
+            return getIsisSessionFactory().getCurrentSession().getAuthenticationSession();
+        }
+
+        protected IsisSessionFactory getIsisSessionFactory() {
+            return IsisContext.getSessionFactory();
+        }
+
 
         protected abstract Object newCompletedEvent(
                 final AjaxRequestTarget target,
@@ -211,7 +222,6 @@ public abstract class PromptFormPanelAbstract<T extends IModel<?> & HasExecuting
                 target.add((Component)provider);
             }
         }
-
     }
 
     //region > dependencies


[21/43] isis git commit: ISIS-1603: further rationalization of subclasses of ScalarPanelAbstract.

Posted by da...@apache.org.
ISIS-1603: further rationalization of subclasses of ScalarPanelAbstract.

Specifically:
- move the responsibility for adding components for regular/compact to the owning scalarTypeContainer into ScalarPanelAbstract
- remove special casing of adding CSS class to scalarTypeContainer's div
- simplify the signature of mandatory hook method that supports the above


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

Branch: refs/heads/master
Commit: a8f018ed7b65c8df7c42e2879014ce0dbfd80181
Parents: 6a9e95a
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Tue Apr 25 20:51:58 2017 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Apr 27 13:26:39 2017 +0100

----------------------------------------------------------------------
 .../components/scalars/ScalarPanelAbstract.java | 37 +++++++++++++++++---
 .../scalars/ScalarPanelTextAbstract.java        | 14 +-------
 .../scalars/ScalarPanelTextFieldAbstract.java   | 19 ++--------
 .../ScalarPanelTextFieldDatePickerAbstract.java |  2 +-
 .../scalars/ScalarPanelTextFieldNumeric.java    |  2 +-
 .../isisapplib/IsisBlobOrClobPanelAbstract.html |  2 +-
 .../isisapplib/IsisBlobOrClobPanelAbstract.java | 17 +++++----
 .../scalars/isisapplib/IsisColorPanel.java      |  6 ++--
 .../scalars/isisapplib/IsisDatePanel.java       |  6 ++--
 .../scalars/isisapplib/IsisDateTimePanel.java   |  6 ++--
 .../scalars/isisapplib/IsisMoneyPanel.java      |  6 ++--
 .../scalars/isisapplib/IsisPasswordPanel.java   |  6 ++--
 .../scalars/isisapplib/IsisPercentagePanel.java |  6 ++--
 .../scalars/isisapplib/IsisTimePanel.java       |  5 ++-
 .../scalars/isisapplib/IsisTimeStampPanel.java  |  6 ++--
 .../scalars/jdkdates/JavaSqlDatePanel.java      |  6 ++--
 .../scalars/jdkdates/JavaSqlTimePanel.java      |  6 ++--
 .../scalars/jdkdates/JavaSqlTimestampPanel.java |  7 ++--
 .../scalars/jdkdates/JavaUtilDatePanel.java     |  6 ++--
 .../jdkmath/JavaMathBigDecimalPanel.java        |  6 ++--
 .../jdkmath/JavaMathBigIntegerPanel.java        |  6 ++--
 .../scalars/jodatime/JodaDateTimePanel.java     |  6 ++--
 .../scalars/jodatime/JodaLocalDatePanel.java    |  6 ++--
 .../jodatime/JodaLocalDateTimePanel.java        |  6 ++--
 .../scalars/primitive/BooleanPanel.html         |  2 +-
 .../scalars/primitive/BooleanPanel.java         | 16 +++++----
 .../BooleanPanel_labelRightPosition.html        |  2 +-
 .../components/scalars/primitive/BytePanel.java |  6 ++--
 .../scalars/primitive/CharacterPanel.java       |  6 ++--
 .../scalars/primitive/DoublePanel.java          |  6 ++--
 .../scalars/primitive/FloatPanel.java           |  6 ++--
 .../scalars/primitive/IntegerPanel.java         |  6 ++--
 .../components/scalars/primitive/LongPanel.java |  6 ++--
 .../scalars/primitive/ShortPanel.java           |  6 ++--
 .../scalars/reference/ReferencePanel.html       |  4 +--
 .../scalars/reference/ReferencePanel.java       | 28 +++++++--------
 .../scalars/string/MultiLineStringPanel.java    |  6 ++--
 .../components/scalars/string/StringPanel.java  |  6 ++--
 .../ui/components/scalars/value/ValuePanel.java |  5 ++-
 .../valuechoices/ValueChoicesSelect2Panel.html  |  2 +-
 .../valuechoices/ValueChoicesSelect2Panel.java  | 16 +++++----
 41 files changed, 141 insertions(+), 183 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/a8f018ed/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
index db7e5c2..b7f3cc3 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
@@ -52,6 +52,10 @@ import org.apache.isis.viewer.wicket.ui.components.actionmenu.entityactions.Addi
 import org.apache.isis.viewer.wicket.ui.components.property.PropertyEditPanel;
 import org.apache.isis.viewer.wicket.ui.components.property.PropertyEditPromptHeaderPanel;
 import org.apache.isis.viewer.wicket.ui.components.scalars.TextFieldValueModel.ScalarModelProvider;
+import org.apache.isis.viewer.wicket.ui.components.scalars.isisapplib.IsisBlobOrClobPanelAbstract;
+import org.apache.isis.viewer.wicket.ui.components.scalars.primitive.BooleanPanel;
+import org.apache.isis.viewer.wicket.ui.components.scalars.reference.ReferencePanel;
+import org.apache.isis.viewer.wicket.ui.components.scalars.valuechoices.ValueChoicesSelect2Panel;
 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;
@@ -70,6 +74,19 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
     protected static final String ID_SCALAR_VALUE = "scalarValue";
 
 
+    /**
+     * as per {@link #editInlineLink}
+     */
+    protected static final String ID_SCALAR_VALUE_EDIT_INLINE = "scalarValueEditInline";
+    protected static final String ID_SCALAR_VALUE_EDIT_INLINE_LABEL = "scalarValueEditInlineLabel";
+
+    /**
+     * as per {@link #scalarIfRegularInlineEditForm}.
+     */
+    protected static final String ID_SCALAR_IF_REGULAR_INLINE_EDIT_FORM = "scalarIfRegularInlineEditForm";
+
+
+
     private static final String ID_EDIT_PROPERTY = "editProperty";
     private static final String ID_FEEDBACK = "feedback";
     private static final String ID_ASSOCIATED_ACTION_LINKS_BELOW = "associatedActionLinksBelow";
@@ -84,6 +101,12 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
 
     protected WebMarkupContainer scalarTypeContainer;
 
+    /**
+     * Used by most subclasses ({@link ScalarPanelTextAbstract}, {@link ReferencePanel}, {@link ValueChoicesSelect2Panel}) but not all ({@link IsisBlobOrClobPanelAbstract}, {@link BooleanPanel})
+     */
+    protected WebMarkupContainer scalarIfRegularInlineEditForm;
+    protected WebMarkupContainer editInlineLink;
+
     public ScalarPanelAbstract(final String id, final ScalarModel scalarModel) {
         super(id, scalarModel);
         this.scalarModel = scalarModel;
@@ -99,10 +122,14 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
 
         scalarTypeContainer = new WebMarkupContainer(ID_SCALAR_TYPE_CONTAINER);
         scalarTypeContainer.setOutputMarkupId(true);
+        scalarTypeContainer.add(new CssClassAppender(Model.of(getScalarPanelType())));
         addOrReplace(scalarTypeContainer);
 
     }
 
+    protected abstract String getScalarPanelType();
+
+
     @Override
     protected void onBeforeRender() {
 
@@ -149,8 +176,10 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
 
         // REVIEW: this is nasty, both write to the same entityLink field
         // even though only one is used
-        scalarIfCompact = addComponentForCompact();
-        scalarIfRegular = addComponentForRegular();
+        scalarIfCompact = createComponentForCompact();
+        scalarIfRegular = createComponentForRegular();
+
+        scalarTypeContainer.addOrReplace(scalarIfCompact, scalarIfRegular);
 
         getRendering().buildGui(this);
         addCssForMetaModel();
@@ -306,9 +335,9 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
      * Mandatory hook method to build the component to render the model when in
      * {@link Rendering#REGULAR regular} format.
      */
-    protected abstract MarkupContainer addComponentForRegular();
+    protected abstract MarkupContainer createComponentForRegular();
 
-    protected abstract Component addComponentForCompact();
+    protected abstract Component createComponentForCompact();
 
     protected Component getLabelForCompact() {
         return scalarIfCompact;

http://git-wip-us.apache.org/repos/asf/isis/blob/a8f018ed/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextAbstract.java
index b310d49..f115c1e 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextAbstract.java
@@ -22,7 +22,6 @@ package org.apache.isis.viewer.wicket.ui.components.scalars;
 import org.apache.wicket.Component;
 import org.apache.wicket.ajax.AjaxEventBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.panel.Fragment;
 
 import org.apache.isis.applib.annotation.PromptStyle;
@@ -44,26 +43,18 @@ public abstract class ScalarPanelTextAbstract extends ScalarPanelAbstract  {
 
     private static final long serialVersionUID = 1L;
 
-    protected static final String ID_SCALAR_VALUE_EDIT_INLINE = "scalarValueEditInline";
-    protected static final String ID_SCALAR_VALUE_EDIT_INLINE_LABEL = "scalarValueEditInlineLabel";
-
-    protected static final String ID_SCALAR_IF_REGULAR_INLINE_EDIT_FORM = "scalarIfRegularInlineEditForm";
-
-
     public enum CompactType {
         INPUT_CHECKBOX,
         SPAN
     }
 
 
-    protected WebMarkupContainer scalarIfRegularInlineEditForm;
-    protected WebMarkupContainer editInlineLink;
-
 
     public ScalarPanelTextAbstract(final String id, final ScalarModel scalarModel) {
         super(id, scalarModel);
     }
 
+
     protected Fragment getCompactFragment(CompactType type) {
         Fragment compactFragment;
         switch (type) {
@@ -120,7 +111,4 @@ public abstract class ScalarPanelTextAbstract extends ScalarPanelAbstract  {
     }
 
 
-
-
-
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/a8f018ed/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
index eb427c7..7735e0e 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
@@ -84,17 +84,6 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
 
     // ///////////////////////////////////////////////////////////////////
 
-    @Override
-    protected void onInitialize() {
-        super.onInitialize();
-
-        scalarTypeContainer.add(new CssClassAppender(getScalarPanelType()));
-    }
-
-    protected abstract IModel<String> getScalarPanelType();
-
-    // ///////////////////////////////////////////////////////////////////
-
 
     AbstractTextComponent<T> getTextField() {
         return textField;
@@ -113,7 +102,7 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
     }
 
     @Override
-    protected MarkupContainer addComponentForRegular() {
+    protected MarkupContainer createComponentForRegular() {
 
         // even though only one of textField and scalarValueEditInlineContainer will ever be visible,
         // am instantiating both to avoid NPEs
@@ -153,9 +142,6 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
         // ... add entity links to panel (below and to right)
         addEntityActionLinksBelowAndRight(scalarIfRegularFormGroup, entityActions);
 
-        scalarTypeContainer.add(scalarIfRegularFormGroup);
-
-
 
 
         //
@@ -308,11 +294,10 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
      * This default implementation uses a {@link Label}, however it may be overridden if required.
      */
     @Override
-    protected Component addComponentForCompact() {
+    protected Component createComponentForCompact() {
         Fragment compactFragment = getCompactFragment(CompactType.SPAN);
         final Label labelIfCompact = new Label(ID_SCALAR_IF_COMPACT, getModel().getObjectAsString());
         compactFragment.add(labelIfCompact);
-        scalarTypeContainer.addOrReplace(compactFragment);
         return labelIfCompact;
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/a8f018ed/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldDatePickerAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldDatePickerAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldDatePickerAbstract.java
index fd947bc..06c8489 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldDatePickerAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldDatePickerAbstract.java
@@ -77,7 +77,7 @@ public abstract class ScalarPanelTextFieldDatePickerAbstract<T extends Serializa
     }
 
 
-    protected Component addComponentForCompact() {
+    protected Component createComponentForCompact() {
         Fragment compactFragment = getCompactFragment(CompactType.SPAN);
         final Label label = new Label(ID_SCALAR_IF_COMPACT, newTextFieldValueModel()) {
             @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/a8f018ed/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldNumeric.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldNumeric.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldNumeric.java
index 0410d8a..17e91bf 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldNumeric.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldNumeric.java
@@ -48,7 +48,7 @@ public abstract class ScalarPanelTextFieldNumeric<T extends Serializable> extend
         this.converter = converter;
     }
 
-    protected Component addComponentForCompact() {
+    protected Component createComponentForCompact() {
         Fragment compactFragment = getCompactFragment(CompactType.SPAN);
         final Label label = new Label(ID_SCALAR_IF_COMPACT, newTextFieldValueModel()) {
             @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/a8f018ed/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.html
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.html b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.html
index 48ae678..cf96290 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.html
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.html
@@ -21,7 +21,7 @@
     <body>
         <wicket:panel>
 
-            <div class="scalarNameAndValueComponentType isisBlobPanel"
+            <div class="scalarNameAndValueComponentType"
                  wicket:id="scalarTypeContainer"
             >
 

http://git-wip-us.apache.org/repos/asf/isis/blob/a8f018ed/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java
index 2ec3fb8..6994722 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java
@@ -88,7 +88,7 @@ public abstract class IsisBlobOrClobPanelAbstract<T extends NamedWithMimeType> e
         }
 
     @Override
-    protected FormGroup addComponentForRegular() {
+    protected FormGroup createComponentForRegular() {
         fileUploadField = createFileUploadField(ID_SCALAR_VALUE);
         fileUploadField.setLabel(Model.of(getModel().getName()));
         
@@ -114,7 +114,6 @@ public abstract class IsisBlobOrClobPanelAbstract<T extends NamedWithMimeType> e
         updateFileNameLabel(ID_FILE_NAME, scalarIfRegularFormGroup);
         updateDownloadLink(ID_SCALAR_IF_REGULAR_DOWNLOAD, scalarIfRegularFormGroup);
         
-        scalarTypeContainer.addOrReplace(scalarIfRegularFormGroup);
         addFeedbackOnlyTo(scalarIfRegularFormGroup, fileUploadField);
         addEditPropertyTo(scalarIfRegularFormGroup);
 
@@ -150,9 +149,8 @@ public abstract class IsisBlobOrClobPanelAbstract<T extends NamedWithMimeType> e
         final BufferedDynamicImageResource imageResource = new BufferedDynamicImageResource();
         imageResource.setImage(image);
         final ThumbnailImageResource thumbnailImageResource = new ThumbnailImageResource(imageResource, 300);
-        
-        final NonCachingImage wicketImage = new NonCachingImage(id, thumbnailImageResource);
-        return wicketImage;
+
+        return new NonCachingImage(id, thumbnailImageResource);
     }
 
     private BufferedImage asBufferedImage(final Blob blob) {
@@ -172,14 +170,13 @@ public abstract class IsisBlobOrClobPanelAbstract<T extends NamedWithMimeType> e
     }
 
     @Override
-    protected Component addComponentForCompact() {
+    protected Component createComponentForCompact() {
         final MarkupContainer scalarIfCompact = new WebMarkupContainer(ID_SCALAR_IF_COMPACT);
         MarkupContainer downloadLink = updateDownloadLink(ID_SCALAR_IF_COMPACT_DOWNLOAD, scalarIfCompact);
         if(downloadLink != null) {
             updateFileNameLabel("fileNameIfCompact", downloadLink);
         }
 
-        scalarTypeContainer.addOrReplace(scalarIfCompact);
         return scalarIfCompact;
     }
 
@@ -352,4 +349,10 @@ public abstract class IsisBlobOrClobPanelAbstract<T extends NamedWithMimeType> e
     protected abstract IResource newResource(final T namedWithMimeType);
 
 
+    @Override
+    protected String getScalarPanelType() {
+        return "isisBlobPanel";
+    }
+
+
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/a8f018ed/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisColorPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisColorPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisColorPanel.java
index 3e13257..e8f4aff 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisColorPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisColorPanel.java
@@ -19,8 +19,6 @@
 
 package org.apache.isis.viewer.wicket.ui.components.scalars.isisapplib;
 
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.Model;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldParseableAbstract;
 
@@ -36,8 +34,8 @@ public class IsisColorPanel extends ScalarPanelTextFieldParseableAbstract {
     }
 
     @Override
-    protected IModel<String> getScalarPanelType() {
-        return Model.of("isisColorPanel");
+    protected String getScalarPanelType() {
+        return "isisColorPanel";
     }
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/a8f018ed/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisDatePanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisDatePanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisDatePanel.java
index f3edc00..217793e 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisDatePanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisDatePanel.java
@@ -19,8 +19,6 @@
 
 package org.apache.isis.viewer.wicket.ui.components.scalars.isisapplib;
 
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.Model;
 import org.apache.isis.applib.value.Date;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldDatePickerAbstract;
@@ -38,7 +36,7 @@ public class IsisDatePanel extends ScalarPanelTextFieldDatePickerAbstract<org.ap
     }
 
     @Override
-    protected IModel<String> getScalarPanelType() {
-        return Model.of("isisDatePanel");
+    protected String getScalarPanelType() {
+        return "isisDatePanel";
     }
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/a8f018ed/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisDateTimePanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisDateTimePanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisDateTimePanel.java
index 5eec2d4..2e7ef73 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisDateTimePanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisDateTimePanel.java
@@ -20,8 +20,6 @@
 package org.apache.isis.viewer.wicket.ui.components.scalars.isisapplib;
 
 import org.apache.wicket.markup.html.form.AbstractTextComponent;
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.Model;
 
 import org.apache.isis.applib.value.DateTime;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
@@ -47,7 +45,7 @@ public class IsisDateTimePanel extends ScalarPanelTextFieldDatePickerAbstract<or
     }
 
     @Override
-    protected IModel<String> getScalarPanelType() {
-        return Model.of("isisDateTimePanel");
+    protected String getScalarPanelType() {
+        return "isisDateTimePanel";
     }
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/a8f018ed/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisMoneyPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisMoneyPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisMoneyPanel.java
index d1eeb31..a92204f 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisMoneyPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisMoneyPanel.java
@@ -19,8 +19,6 @@
 
 package org.apache.isis.viewer.wicket.ui.components.scalars.isisapplib;
 
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.Model;
 import org.apache.isis.applib.value.Money;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldParseableAbstract;
@@ -37,8 +35,8 @@ public class IsisMoneyPanel extends ScalarPanelTextFieldParseableAbstract {
     }
 
     @Override
-    protected IModel<String> getScalarPanelType() {
-        return Model.of("isisMoneyPanel");
+    protected String getScalarPanelType() {
+        return "isisMoneyPanel";
     }
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/a8f018ed/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisPasswordPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisPasswordPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisPasswordPanel.java
index 28e4ad7..18e20da 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisPasswordPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisPasswordPanel.java
@@ -22,8 +22,6 @@ package org.apache.isis.viewer.wicket.ui.components.scalars.isisapplib;
 import org.apache.wicket.markup.ComponentTag;
 import org.apache.wicket.markup.html.form.AbstractTextComponent;
 import org.apache.wicket.markup.html.form.PasswordTextField;
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.Model;
 
 import org.apache.isis.applib.value.Password;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
@@ -61,7 +59,7 @@ public class IsisPasswordPanel extends ScalarPanelTextFieldParseableAbstract {
     }
 
     @Override
-    protected IModel<String> getScalarPanelType() {
-        return Model.of("isisPasswordPanel");
+    protected String getScalarPanelType() {
+        return "isisPasswordPanel";
     }
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/a8f018ed/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisPercentagePanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisPercentagePanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisPercentagePanel.java
index 88ef7f2..1513531 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisPercentagePanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisPercentagePanel.java
@@ -19,8 +19,6 @@
 
 package org.apache.isis.viewer.wicket.ui.components.scalars.isisapplib;
 
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.Model;
 import org.apache.isis.applib.value.Percentage;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldParseableAbstract;
@@ -38,8 +36,8 @@ public class IsisPercentagePanel extends ScalarPanelTextFieldParseableAbstract {
     }
 
     @Override
-    protected IModel<String> getScalarPanelType() {
-        return Model.of("isisPercentagePanel");
+    protected String getScalarPanelType() {
+        return "isisPercentagePanel";
     }
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/a8f018ed/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisTimePanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisTimePanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisTimePanel.java
index ce86fdf..de3dcc1 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisTimePanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisTimePanel.java
@@ -19,7 +19,6 @@
 
 package org.apache.isis.viewer.wicket.ui.components.scalars.isisapplib;
 
-import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldParseableAbstract;
@@ -36,8 +35,8 @@ public class IsisTimePanel extends ScalarPanelTextFieldParseableAbstract {
     }
 
     @Override
-    protected IModel<String> getScalarPanelType() {
-        return Model.of("isisTimePanel");
+    protected String getScalarPanelType() {
+        return "isisTimePanel";
     }
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/a8f018ed/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisTimeStampPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisTimeStampPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisTimeStampPanel.java
index 384cc03..208f8c7 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisTimeStampPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisTimeStampPanel.java
@@ -19,8 +19,6 @@
 
 package org.apache.isis.viewer.wicket.ui.components.scalars.isisapplib;
 
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.Model;
 import org.apache.isis.applib.value.TimeStamp;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldParseableAbstract;
@@ -37,8 +35,8 @@ public class IsisTimeStampPanel extends ScalarPanelTextFieldParseableAbstract {
     }
 
     @Override
-    protected IModel<String> getScalarPanelType() {
-        return Model.of("isisTimeStampPanel");
+    protected String getScalarPanelType() {
+        return "isisTimeStampPanel";
     }
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/a8f018ed/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaSqlDatePanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaSqlDatePanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaSqlDatePanel.java
index 9e69ffa..e8a977a 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaSqlDatePanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaSqlDatePanel.java
@@ -21,8 +21,6 @@ package org.apache.isis.viewer.wicket.ui.components.scalars.jdkdates;
 
 import java.sql.Date;
 
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.Model;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldDatePickerAbstract;
 
@@ -39,7 +37,7 @@ public class JavaSqlDatePanel extends ScalarPanelTextFieldDatePickerAbstract<jav
     }
 
     @Override
-    protected IModel<String> getScalarPanelType() {
-        return Model.of("javaSqlDatePanel");
+    protected String getScalarPanelType() {
+        return "javaSqlDatePanel";
     }
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/a8f018ed/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaSqlTimePanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaSqlTimePanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaSqlTimePanel.java
index 6dcaa70..3a78334 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaSqlTimePanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaSqlTimePanel.java
@@ -21,8 +21,6 @@ package org.apache.isis.viewer.wicket.ui.components.scalars.jdkdates;
 
 import java.sql.Time;
 
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.Model;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldParseableAbstract;
 
@@ -38,8 +36,8 @@ public class JavaSqlTimePanel extends ScalarPanelTextFieldParseableAbstract {
     }
 
     @Override
-    protected IModel<String> getScalarPanelType() {
-        return Model.of("javaSqlTimePanel");
+    protected String getScalarPanelType() {
+        return "javaSqlTimePanel";
     }
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/a8f018ed/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaSqlTimestampPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaSqlTimestampPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaSqlTimestampPanel.java
index 8e3c379..76b832d 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaSqlTimestampPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaSqlTimestampPanel.java
@@ -22,9 +22,6 @@ package org.apache.isis.viewer.wicket.ui.components.scalars.jdkdates;
 
 import java.sql.Timestamp;
 
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.Model;
-
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldDatePickerAbstract;
 
@@ -46,8 +43,8 @@ public class JavaSqlTimestampPanel extends ScalarPanelTextFieldDatePickerAbstrac
     }
 
     @Override
-    protected IModel<String> getScalarPanelType() {
-        return Model.of("javaSqlTimestampPanel");
+    protected String getScalarPanelType() {
+        return "javaSqlTimestampPanel";
     }
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/a8f018ed/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaUtilDatePanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaUtilDatePanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaUtilDatePanel.java
index 1cfef94..e430835 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaUtilDatePanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaUtilDatePanel.java
@@ -21,8 +21,6 @@ package org.apache.isis.viewer.wicket.ui.components.scalars.jdkdates;
 
 
 
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.Model;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldDatePickerAbstract;
 
@@ -39,7 +37,7 @@ public class JavaUtilDatePanel extends ScalarPanelTextFieldDatePickerAbstract<ja
     }
 
     @Override
-    protected IModel<String> getScalarPanelType() {
-        return Model.of("javaUtilDatePanel");
+    protected String getScalarPanelType() {
+        return "javaUtilDatePanel";
     }
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/a8f018ed/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigDecimalPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigDecimalPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigDecimalPanel.java
index a6bc29b..af21ffa 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigDecimalPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigDecimalPanel.java
@@ -22,8 +22,6 @@ package org.apache.isis.viewer.wicket.ui.components.scalars.jdkmath;
 import java.math.BigDecimal;
 
 import org.apache.wicket.markup.html.form.AbstractTextComponent;
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.Model;
 
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldNumeric;
@@ -50,8 +48,8 @@ public class JavaMathBigDecimalPanel extends ScalarPanelTextFieldNumeric<BigDeci
     }
 
     @Override
-    protected IModel<String> getScalarPanelType() {
-        return Model.of("javaMathBigDecimalPanel");
+    protected String getScalarPanelType() {
+        return "javaMathBigDecimalPanel";
     }
 }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/a8f018ed/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigIntegerPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigIntegerPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigIntegerPanel.java
index f992a64..26d326e 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigIntegerPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigIntegerPanel.java
@@ -23,8 +23,6 @@ import java.math.BigInteger;
 
 import org.apache.wicket.markup.html.form.AbstractTextComponent;
 import org.apache.wicket.markup.html.form.TextField;
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.Model;
 import org.apache.wicket.util.convert.IConverter;
 import org.apache.wicket.util.convert.converter.BigIntegerConverter;
 
@@ -59,8 +57,8 @@ public class JavaMathBigIntegerPanel extends ScalarPanelTextFieldNumeric<BigInte
     }
 
     @Override
-    protected IModel<String> getScalarPanelType() {
-        return Model.of("javaMathBigIntegerPanel");
+    protected String getScalarPanelType() {
+        return "javaMathBigIntegerPanel";
     }
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/a8f018ed/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaDateTimePanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaDateTimePanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaDateTimePanel.java
index 54834a3..e4b90ae 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaDateTimePanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaDateTimePanel.java
@@ -20,8 +20,6 @@
 package org.apache.isis.viewer.wicket.ui.components.scalars.jodatime;
 
 import org.apache.wicket.markup.html.form.AbstractTextComponent;
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.Model;
 import org.joda.time.DateTime;
 import org.joda.time.LocalDateTime;
 
@@ -48,7 +46,7 @@ public class JodaDateTimePanel extends ScalarPanelTextFieldDatePickerAbstract<Da
     }
 
     @Override
-    protected IModel<String> getScalarPanelType() {
-        return Model.of("jodaDateTimePanel");
+    protected String getScalarPanelType() {
+        return "jodaDateTimePanel";
     }
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/a8f018ed/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaLocalDatePanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaLocalDatePanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaLocalDatePanel.java
index 8d33bae..37473e8 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaLocalDatePanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaLocalDatePanel.java
@@ -19,8 +19,6 @@
 
 package org.apache.isis.viewer.wicket.ui.components.scalars.jodatime;
 
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.Model;
 import org.joda.time.LocalDate;
 
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
@@ -39,7 +37,7 @@ public class JodaLocalDatePanel extends ScalarPanelTextFieldDatePickerAbstract<L
     }
 
     @Override
-    protected IModel<String> getScalarPanelType() {
-        return Model.of("jodaDateTimePanel");
+    protected String getScalarPanelType() {
+        return "jodaDateTimePanel";
     }
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/a8f018ed/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaLocalDateTimePanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaLocalDateTimePanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaLocalDateTimePanel.java
index 2435625..e3d7f5c 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaLocalDateTimePanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaLocalDateTimePanel.java
@@ -20,8 +20,6 @@
 package org.apache.isis.viewer.wicket.ui.components.scalars.jodatime;
 
 import org.apache.wicket.markup.html.form.AbstractTextComponent;
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.Model;
 import org.joda.time.LocalDateTime;
 
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
@@ -48,7 +46,7 @@ public class JodaLocalDateTimePanel extends ScalarPanelTextFieldDatePickerAbstra
     }
 
     @Override
-    protected IModel<String> getScalarPanelType() {
-        return Model.of("jodaLocalDateTimePanel");
+    protected String getScalarPanelType() {
+        return "jodaLocalDateTimePanel";
     }
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/a8f018ed/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.html
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.html b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.html
index f2f3586..9aa6403 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.html
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.html
@@ -24,7 +24,7 @@
       lang="en">
     <body>
         <wicket:panel>
-            <div class="scalarNameAndValueComponentType booleanPanel"
+            <div class="scalarNameAndValueComponentType"
                  wicket:id="scalarTypeContainer"
             >
                 <div class="form-group"

http://git-wip-us.apache.org/repos/asf/isis/blob/a8f018ed/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java
index c461786..a36adc4 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java
@@ -65,7 +65,7 @@ public class BooleanPanel extends ScalarPanelAbstract {
     }
 
     @Override
-    protected MarkupContainer addComponentForRegular() {
+    protected MarkupContainer createComponentForRegular() {
         final String name = getModel().getName();
 
         checkBox = createCheckBox(ID_SCALAR_VALUE);
@@ -94,7 +94,6 @@ public class BooleanPanel extends ScalarPanelAbstract {
 
         addPositioningCssTo(scalarIfRegularFormGroup, entityActions);
 
-        scalarTypeContainer.addOrReplace(scalarIfRegularFormGroup);
         addFeedbackOnlyTo(scalarIfRegularFormGroup, checkBox);
         addEditPropertyTo(scalarIfRegularFormGroup);
 
@@ -111,10 +110,8 @@ public class BooleanPanel extends ScalarPanelAbstract {
      * {@link Rendering#COMPACT compact} format.
      */
     @Override
-    protected Component addComponentForCompact() {
-        final CheckBoxX component = createCheckBox(ID_SCALAR_IF_COMPACT);
-        scalarTypeContainer.addOrReplace(component);
-        return component;
+    protected Component createComponentForCompact() {
+        return createCheckBox(ID_SCALAR_IF_COMPACT);
     }
 
     private CheckBoxX createCheckBox(final String id) {
@@ -190,4 +187,11 @@ public class BooleanPanel extends ScalarPanelAbstract {
         }
         return variation;
     }
+
+    @Override
+    protected String getScalarPanelType() {
+        return "booleanPanel";
+    }
+
+
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/a8f018ed/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel_labelRightPosition.html
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel_labelRightPosition.html b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel_labelRightPosition.html
index fcc06b1..9e0baf2 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel_labelRightPosition.html
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel_labelRightPosition.html
@@ -24,7 +24,7 @@
       lang="en">
     <body>
         <wicket:panel>
-            <div class="scalarNameAndValueComponentType booleanPanel"
+            <div class="scalarNameAndValueComponentType"
                  wicket:id="scalarTypeContainer"
             >
 

http://git-wip-us.apache.org/repos/asf/isis/blob/a8f018ed/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BytePanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BytePanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BytePanel.java
index e64f763..7658247 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BytePanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BytePanel.java
@@ -21,8 +21,6 @@ package org.apache.isis.viewer.wicket.ui.components.scalars.primitive;
 
 import org.apache.wicket.markup.html.form.AbstractTextComponent;
 import org.apache.wicket.markup.html.form.TextField;
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.Model;
 import org.apache.wicket.util.convert.IConverter;
 import org.apache.wicket.util.convert.converter.ByteConverter;
 
@@ -56,7 +54,7 @@ public class BytePanel extends ScalarPanelTextFieldNumeric<Byte> {
     }
 
     @Override
-    protected IModel<String> getScalarPanelType() {
-        return Model.of("bytePanel");
+    protected String getScalarPanelType() {
+        return "bytePanel";
     }
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/a8f018ed/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/CharacterPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/CharacterPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/CharacterPanel.java
index d44bd1b..8640937 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/CharacterPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/CharacterPanel.java
@@ -19,8 +19,6 @@
 
 package org.apache.isis.viewer.wicket.ui.components.scalars.primitive;
 
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.Model;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldParseableAbstract;
 
@@ -36,7 +34,7 @@ public class CharacterPanel extends ScalarPanelTextFieldParseableAbstract {
     }
 
     @Override
-    protected IModel<String> getScalarPanelType() {
-        return Model.of("characterPanel");
+    protected String getScalarPanelType() {
+        return "characterPanel";
     }
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/a8f018ed/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/DoublePanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/DoublePanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/DoublePanel.java
index 6c038e5..61d5bbd 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/DoublePanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/DoublePanel.java
@@ -21,8 +21,6 @@ package org.apache.isis.viewer.wicket.ui.components.scalars.primitive;
 
 import org.apache.wicket.markup.html.form.AbstractTextComponent;
 import org.apache.wicket.markup.html.form.TextField;
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.Model;
 import org.apache.wicket.util.convert.IConverter;
 import org.apache.wicket.util.convert.converter.DoubleConverter;
 
@@ -56,8 +54,8 @@ public class DoublePanel extends ScalarPanelTextFieldNumeric<Double> {
     }
 
     @Override
-    protected IModel<String> getScalarPanelType() {
-        return Model.of("doublePanel");
+    protected String getScalarPanelType() {
+        return "doublePanel";
     }
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/a8f018ed/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/FloatPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/FloatPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/FloatPanel.java
index 0e590ef..e0fb2ce 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/FloatPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/FloatPanel.java
@@ -21,8 +21,6 @@ package org.apache.isis.viewer.wicket.ui.components.scalars.primitive;
 
 import org.apache.wicket.markup.html.form.AbstractTextComponent;
 import org.apache.wicket.markup.html.form.TextField;
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.Model;
 import org.apache.wicket.util.convert.IConverter;
 import org.apache.wicket.util.convert.converter.FloatConverter;
 
@@ -56,8 +54,8 @@ public class FloatPanel extends ScalarPanelTextFieldNumeric<Float> {
     }
 
     @Override
-    protected IModel<String> getScalarPanelType() {
-        return Model.of("floatPanel");
+    protected String getScalarPanelType() {
+        return "floatPanel";
     }
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/a8f018ed/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/IntegerPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/IntegerPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/IntegerPanel.java
index aefd822..c07a9cc 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/IntegerPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/IntegerPanel.java
@@ -21,8 +21,6 @@ package org.apache.isis.viewer.wicket.ui.components.scalars.primitive;
 
 import org.apache.wicket.markup.html.form.AbstractTextComponent;
 import org.apache.wicket.markup.html.form.TextField;
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.Model;
 import org.apache.wicket.util.convert.IConverter;
 import org.apache.wicket.util.convert.converter.IntegerConverter;
 
@@ -56,8 +54,8 @@ public class IntegerPanel extends ScalarPanelTextFieldNumeric<Integer> {
     }
 
     @Override
-    protected IModel<String> getScalarPanelType() {
-        return Model.of("integerPanel");
+    protected String getScalarPanelType() {
+        return "integerPanel";
     }
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/a8f018ed/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/LongPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/LongPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/LongPanel.java
index 0282240..d1869db 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/LongPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/LongPanel.java
@@ -21,8 +21,6 @@ package org.apache.isis.viewer.wicket.ui.components.scalars.primitive;
 
 import org.apache.wicket.markup.html.form.AbstractTextComponent;
 import org.apache.wicket.markup.html.form.TextField;
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.Model;
 import org.apache.wicket.util.convert.IConverter;
 import org.apache.wicket.util.convert.converter.LongConverter;
 
@@ -56,8 +54,8 @@ public class LongPanel extends ScalarPanelTextFieldNumeric<Long> {
     }
 
     @Override
-    protected IModel<String> getScalarPanelType() {
-        return Model.of("longPanel");
+    protected String getScalarPanelType() {
+        return "longPanel";
     }
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/a8f018ed/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/ShortPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/ShortPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/ShortPanel.java
index 9f5ec09..9620b48 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/ShortPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/ShortPanel.java
@@ -21,8 +21,6 @@ package org.apache.isis.viewer.wicket.ui.components.scalars.primitive;
 
 import org.apache.wicket.markup.html.form.AbstractTextComponent;
 import org.apache.wicket.markup.html.form.TextField;
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.Model;
 import org.apache.wicket.util.convert.IConverter;
 import org.apache.wicket.util.convert.converter.ShortConverter;
 
@@ -56,7 +54,7 @@ public class ShortPanel extends ScalarPanelTextFieldNumeric<Short> {
     }
 
     @Override
-    protected IModel<String> getScalarPanelType() {
-        return Model.of("shortPanel");
+    protected String getScalarPanelType() {
+        return "shortPanel";
     }
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/a8f018ed/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.html
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.html b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.html
index d6ffdad..44757cf 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.html
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.html
@@ -24,7 +24,7 @@
       lang="en">
     <body>
         <wicket:panel>
-            <div class="scalarNameAndValueComponentType referencePanel"
+            <div class="scalarNameAndValueComponentType"
                  wicket:id="scalarTypeContainer"
             >
 
@@ -36,7 +36,7 @@
                     >[Label text]</label>
 
                     <span class="scalarValueWrapper">
-                        
+
                         <div class="scalarPlaceholder entityLinkSelect2Panel entityLinkComponentType">
 
                             <span class="entityLink wrapper">

http://git-wip-us.apache.org/repos/asf/isis/blob/a8f018ed/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
index d600e78..5b9fbe8 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
@@ -77,10 +77,6 @@ public class ReferencePanel extends ScalarPanelAbstract implements PanelWithChoi
     private static final String ID_AUTO_COMPLETE = "autoComplete";
     private static final String ID_ENTITY_ICON_TITLE = "entityIconAndTitle";
 
-    private static final String ID_SCALAR_VALUE_EDIT_INLINE = "scalarValueEditInline";
-    private static final String ID_SCALAR_VALUE_EDIT_INLINE_LABEL = "scalarValueEditInlineLabel";
-
-    private static final String ID_SCALAR_IF_REGULAR_INLINE_EDIT_FORM = "scalarIfRegularInlineEditForm";
 
     /**
      * Determines the behaviour of dependent choices for the dependent; either to autoselect the first available choice, or to select none.
@@ -94,21 +90,18 @@ public class ReferencePanel extends ScalarPanelAbstract implements PanelWithChoi
 
     private EntityLinkSimplePanel entitySimpleLink;
 
-    protected WebMarkupContainer scalarIfRegularInlineEditForm;
-    protected WebMarkupContainer editInlineLink;
 
     public ReferencePanel(final String id, final ScalarModel scalarModel) {
         super(id, scalarModel);
     }
 
-    
     // //////////////////////////////////////
     // addComponentFor{Compact/Regular}
     // //////////////////////////////////////
 
     // First called as a side-effect of {@link #beforeRender()}
     @Override
-    protected Component addComponentForCompact() {
+    protected Component createComponentForCompact() {
 
         final ScalarModel scalarModel = getModel();
         final String name = scalarModel.getName();
@@ -121,14 +114,12 @@ public class ReferencePanel extends ScalarPanelAbstract implements PanelWithChoi
         final WebMarkupContainer labelIfCompact = new WebMarkupContainer(ID_SCALAR_IF_COMPACT);
         labelIfCompact.add(entitySimpleLink);
 
-        scalarTypeContainer.addOrReplace(labelIfCompact);
-
         return labelIfCompact;
     }
 
     // First called as a side-effect of {@link #beforeRender()}
     @Override
-    protected FormGroup addComponentForRegular() {
+    protected FormGroup createComponentForRegular() {
         final ScalarModel scalarModel = getModel();
         final String name = scalarModel.getName();
         
@@ -159,6 +150,9 @@ public class ReferencePanel extends ScalarPanelAbstract implements PanelWithChoi
         if (namedFacet != null) {
             scalarName.setEscapeModelStrings(namedFacet.escaped());
         }
+        if(getModel().isRequired()) {
+            scalarName.add(new CssClassAppender("mandatory"));
+        }
 
 
         // find the links...
@@ -167,7 +161,6 @@ public class ReferencePanel extends ScalarPanelAbstract implements PanelWithChoi
 
         addPositioningCssTo(scalarIfRegularFormGroup, entityActions);
 
-        scalarTypeContainer.addOrReplace(scalarIfRegularFormGroup);
         addFeedbackOnlyTo(scalarIfRegularFormGroup, select2.component()); // this is a placeholder; when select2.component() is available, we use that instead
         addEditPropertyTo(scalarIfRegularFormGroup);
 
@@ -192,9 +185,7 @@ public class ReferencePanel extends ScalarPanelAbstract implements PanelWithChoi
             }
         });
 
-        if(getModel().isRequired()) {
-            scalarName.add(new CssClassAppender("mandatory"));
-        }
+
         return scalarIfRegularFormGroup;
     }
 
@@ -539,4 +530,11 @@ public class ReferencePanel extends ScalarPanelAbstract implements PanelWithChoi
     public void repaint(AjaxRequestTarget target) {
         target.add(select2.component());
     }
+
+    @Override
+    protected String getScalarPanelType() {
+        return "referencePanel";
+    }
+
+
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/a8f018ed/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/string/MultiLineStringPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/string/MultiLineStringPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/string/MultiLineStringPanel.java
index 772eea8..e6f06b3 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/string/MultiLineStringPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/string/MultiLineStringPanel.java
@@ -24,8 +24,6 @@ import org.apache.wicket.Component;
 import org.apache.wicket.markup.html.form.AbstractTextComponent;
 import org.apache.wicket.markup.html.form.TextArea;
 import org.apache.wicket.markup.html.panel.Fragment;
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.Model;
 
 import org.apache.isis.core.metamodel.facets.SingleIntValueFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxLengthFacet;
@@ -71,8 +69,8 @@ public class MultiLineStringPanel extends ScalarPanelTextFieldParseableAbstract
     }
 
     @Override
-    protected IModel<String> getScalarPanelType() {
-        return Model.of("multiLineStringPanel");
+    protected String getScalarPanelType() {
+        return "multiLineStringPanel";
     }
 
     private Component setAttribute(final TextArea<String> textField, final String attributeName, final int i) {

http://git-wip-us.apache.org/repos/asf/isis/blob/a8f018ed/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/string/StringPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/string/StringPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/string/StringPanel.java
index 5991877..c5a600e 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/string/StringPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/string/StringPanel.java
@@ -19,8 +19,6 @@
 
 package org.apache.isis.viewer.wicket.ui.components.scalars.string;
 
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.Model;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldParseableAbstract;
 
@@ -37,8 +35,8 @@ public class StringPanel extends ScalarPanelTextFieldParseableAbstract {
     }
 
     @Override
-    protected IModel<String> getScalarPanelType() {
-        return Model.of("stringPanel");
+    protected String getScalarPanelType() {
+        return "stringPanel";
     }
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/a8f018ed/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/value/ValuePanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/value/ValuePanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/value/ValuePanel.java
index 667e20f..2b3b225 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/value/ValuePanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/value/ValuePanel.java
@@ -19,7 +19,6 @@
 
 package org.apache.isis.viewer.wicket.ui.components.scalars.value;
 
-import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
 import org.apache.isis.applib.annotation.Value;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
@@ -44,7 +43,7 @@ public class ValuePanel extends ScalarPanelTextFieldParseableAbstract {
 
 
     @Override
-    protected IModel<String> getScalarPanelType() {
-        return Model.of("valuePanel");
+    protected String getScalarPanelType() {
+        return "valuePanel";
     }
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/a8f018ed/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.html
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.html b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.html
index c102463..3b61826 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.html
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.html
@@ -24,7 +24,7 @@
       lang="en">
     <body>
         <wicket:panel>
-            <div class="scalarNameAndValueComponentType valueChoicesSelect2Panel "
+            <div class="scalarNameAndValueComponentType"
                  wicket:id="scalarTypeContainer"
             >
                 <div class="form-group"

http://git-wip-us.apache.org/repos/asf/isis/blob/a8f018ed/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
index 429df19..d8c559c 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
@@ -66,7 +66,7 @@ public class ValueChoicesSelect2Panel extends ScalarPanelAbstract implements Sca
     }
 
     @Override
-    protected MarkupContainer addComponentForRegular() {
+    protected MarkupContainer createComponentForRegular() {
 
         // same pattern as in ReferencePanel
         if(select2 == null) {
@@ -91,7 +91,6 @@ public class ValueChoicesSelect2Panel extends ScalarPanelAbstract implements Sca
             scalarIfRegularFormGroup.add(new CssClassAppender("mandatory"));
         }
         
-        scalarTypeContainer.addOrReplace(scalarIfRegularFormGroup);
 
         final Label scalarName = new Label(ID_SCALAR_NAME, getRendering().getLabelCaption(select2.component()));
         if(getModel().isRequired()) {
@@ -155,10 +154,8 @@ public class ValueChoicesSelect2Panel extends ScalarPanelAbstract implements Sca
     }
 
     @Override
-    protected Component addComponentForCompact() {
-        final Label labelIfCompact = new Label(ID_SCALAR_IF_COMPACT, getModel().getObjectAsString());
-        scalarTypeContainer.addOrReplace(labelIfCompact);
-        return labelIfCompact;
+    protected Component createComponentForCompact() {
+        return new Label(ID_SCALAR_IF_COMPACT, getModel().getObjectAsString());
     }
 
     
@@ -306,4 +303,11 @@ public class ValueChoicesSelect2Panel extends ScalarPanelAbstract implements Sca
 
     @com.google.inject.Inject
     private WicketViewerSettings wicketViewerSettings;
+
+    @Override
+    protected String getScalarPanelType() {
+        return "valueChoicesSelect2Panel";
+    }
+
+
 }


[36/43] isis git commit: ISIS-1603: removes some debug code.

Posted by da...@apache.org.
ISIS-1603: removes some debug code.


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

Branch: refs/heads/master
Commit: bf3c5a797d9d488feef5285d810540aca4c5b705
Parents: 0d95f41
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Thu Apr 27 16:42:21 2017 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Apr 27 16:42:21 2017 +0100

----------------------------------------------------------------------
 .../components/scalars/reference/ReferencePanel.java  | 14 ++------------
 1 file changed, 2 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/bf3c5a79/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
index 92e3fb2..ee29561 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
@@ -464,23 +464,13 @@ public class ReferencePanel extends ScalarPanelSelect2Abstract implements PanelW
     public void onUpdate(
             final AjaxRequestTarget target, final ScalarPanelAbstract scalarPanel) {
 
+        super.onUpdate(target, scalarPanel);
+
         target.appendJavaScript(
                 String.format("Wicket.Event.publish(Isis.Topic.CLOSE_SELECT2, '%s')", getMarkupId()));
 
-
-        // super.onUpdate(target, scalarPanel);
-//        target.appendJavaScript("console.log(\"ReferencePanel : changed\")");
-//        target.appendJavaScript("console.log(" + jQuery(scalarPanel) + ".find(\"select\"));");
-//        target.appendJavaScript("" + jQuery(scalarPanel) + ".find(\"select\").focus();");
     }
 
-    private static String jQuery(final ScalarPanelAbstract scalarPanel) {
-        return "$(" + markupId(scalarPanel) + ")";
-    }
-
-    private static String markupId(final ScalarPanelAbstract scalarPanel) {
-        return "\"#" + scalarPanel.getMarkupId() + "\"";
-    }
 
     // //////////////////////////////////////
     // helpers querying model state


[11/43] isis git commit: ISIS-1603: further fix for unit tests

Posted by da...@apache.org.
ISIS-1603: further fix for unit tests


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

Branch: refs/heads/master
Commit: 4bdfb86991f35a02309f784eeb47cf33c2626783
Parents: 20d442c
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Sun Apr 23 17:59:37 2017 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Apr 27 13:26:39 2017 +0100

----------------------------------------------------------------------
 .../PropertyLayoutFacetFactory.java             |  4 +-
 ...tForPropertyLayoutAnnotationFactoryTest.java | 60 ---------------
 ...tForPropertyLayoutAnnotationFactoryTest.java | 80 --------------------
 3 files changed, 2 insertions(+), 142 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/4bdfb869/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PropertyLayoutFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PropertyLayoutFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PropertyLayoutFacetFactory.java
index f7365b7..985395e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PropertyLayoutFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PropertyLayoutFacetFactory.java
@@ -57,7 +57,7 @@ public class PropertyLayoutFacetFactory extends FacetFactoryAbstract implements
 
         processDescribedAs(holder, properties, propertyLayout);
 
-        processEditStyle(holder, properties, propertyLayout);
+        processPromptStyle(holder, properties, propertyLayout);
 
         processHidden(holder, properties, propertyLayout);
 
@@ -91,7 +91,7 @@ public class PropertyLayoutFacetFactory extends FacetFactoryAbstract implements
         FacetUtil.addFacet(describedAsFacet);
     }
 
-    void processEditStyle(final FacetHolder holder, final Properties properties, final PropertyLayout propertyLayout) {
+    void processPromptStyle(final FacetHolder holder, final Properties properties, final PropertyLayout propertyLayout) {
         PromptStyleFacet promptStyleFacet = PromptStyleFacetOnPropertyFromLayoutProperties
                 .create(properties, holder);
         if(promptStyleFacet == null) {

http://git-wip-us.apache.org/repos/asf/isis/blob/4bdfb869/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/layout/annotation/LabelAtFacetForPropertyLayoutAnnotationFactoryTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/layout/annotation/LabelAtFacetForPropertyLayoutAnnotationFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/layout/annotation/LabelAtFacetForPropertyLayoutAnnotationFactoryTest.java
deleted file mode 100644
index e798dbf..0000000
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/layout/annotation/LabelAtFacetForPropertyLayoutAnnotationFactoryTest.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- *  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.core.metamodel.facets.properties.layout.annotation;
-
-import java.lang.reflect.Method;
-import org.apache.isis.applib.annotation.LabelPosition;
-import org.apache.isis.applib.annotation.PropertyLayout;
-import org.apache.isis.core.metamodel.facetapi.Facet;
-import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryTest;
-import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessMethodContext;
-import org.apache.isis.core.metamodel.facets.properties.propertylayout.LabelAtFacetForPropertyLayoutAnnotation;
-import org.apache.isis.core.metamodel.facets.properties.propertylayout.PropertyLayoutFacetFactory;
-import org.apache.isis.core.metamodel.facets.objectvalue.labelat.LabelAtFacet;
-
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.instanceOf;
-import static org.hamcrest.Matchers.is;
-import static org.hamcrest.Matchers.notNullValue;
-import static org.junit.Assert.assertThat;
-
-public class LabelAtFacetForPropertyLayoutAnnotationFactoryTest extends AbstractFacetFactoryTest {
-
-    public void testPropertyLayoutAnnotationPickedUp() {
-        final PropertyLayoutFacetFactory facetFactory = new PropertyLayoutFacetFactory();
-
-        class Customer {
-            @SuppressWarnings("unused")
-            @PropertyLayout(labelPosition = LabelPosition.LEFT)
-            public String getFirstName() {
-                return null;
-            }
-        }
-        final Method method = findMethod(Customer.class, "getFirstName");
-
-        facetFactory.process(new ProcessMethodContext(Customer.class, null, null, method, methodRemover, facetedMethod));
-
-        final Facet facet = facetedMethod.getFacet(LabelAtFacet.class);
-        assertThat(facet, is(notNullValue()));
-        assertThat(facet, is(instanceOf(LabelAtFacetForPropertyLayoutAnnotation.class)));
-        final LabelAtFacetForPropertyLayoutAnnotation layoutAnnotation = (LabelAtFacetForPropertyLayoutAnnotation) facet;
-        assertThat(layoutAnnotation.label(), is(equalTo(LabelPosition.LEFT)));
-    }
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/4bdfb869/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/layout/annotation/NamedFacetForPropertyLayoutAnnotationFactoryTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/layout/annotation/NamedFacetForPropertyLayoutAnnotationFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/layout/annotation/NamedFacetForPropertyLayoutAnnotationFactoryTest.java
deleted file mode 100644
index f0acd1b..0000000
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/layout/annotation/NamedFacetForPropertyLayoutAnnotationFactoryTest.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- *  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.core.metamodel.facets.properties.layout.annotation;
-
-import java.lang.reflect.Method;
-import org.apache.isis.applib.annotation.PropertyLayout;
-import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryTest;
-import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessMethodContext;
-import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
-import org.apache.isis.core.metamodel.facets.properties.propertylayout.NamedFacetForPropertyLayoutAnnotation;
-import org.apache.isis.core.metamodel.facets.properties.propertylayout.PropertyLayoutFacetFactory;
-
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.instanceOf;
-import static org.hamcrest.Matchers.is;
-import static org.hamcrest.Matchers.notNullValue;
-import static org.junit.Assert.assertThat;
-
-public class NamedFacetForPropertyLayoutAnnotationFactoryTest extends AbstractFacetFactoryTest {
-
-    public void testPropertyLayoutAnnotationNamed() {
-        final PropertyLayoutFacetFactory facetFactory = new PropertyLayoutFacetFactory();
-
-        class Customer {
-            @SuppressWarnings("unused")
-            @PropertyLayout(named = "1st name")
-            public String getFirstName() {
-                return null;
-            }
-        }
-        final Method method = findMethod(Customer.class, "getFirstName");
-
-        facetFactory.process(new ProcessMethodContext(Customer.class, null, null, method, methodRemover, facetedMethod));
-
-        final NamedFacet facet = facetedMethod.getFacet(NamedFacet.class);
-        assertThat(facet, is(notNullValue()));
-        assertThat(facet, is(instanceOf(NamedFacetForPropertyLayoutAnnotation.class)));
-        assertThat(facet.value(), is(equalTo("1st name")));
-        assertThat(facet.escaped(), is(true));
-    }
-
-    public void testPropertyLayoutAnnotationNamedEscapedFalse() {
-        final PropertyLayoutFacetFactory facetFactory = new PropertyLayoutFacetFactory();
-
-        class Customer {
-            @SuppressWarnings("unused")
-            @PropertyLayout(named = "1st name", namedEscaped = false)
-            public String getFirstName() {
-                return null;
-            }
-        }
-        final Method method = findMethod(Customer.class, "getFirstName");
-
-        facetFactory.process(new ProcessMethodContext(Customer.class, null, null, method, methodRemover, facetedMethod));
-
-        final NamedFacet facet = facetedMethod.getFacet(NamedFacet.class);
-        assertThat(facet, is(notNullValue()));
-        assertThat(facet, is(instanceOf(NamedFacetForPropertyLayoutAnnotation.class)));
-        assertThat(facet.value(), is(equalTo("1st name")));
-        assertThat(facet.escaped(), is(false));
-    }
-
-}


[33/43] isis git commit: ISIS-1603: value choices and reference panel now working adequately with inline prompt.

Posted by da...@apache.org.
ISIS-1603: value choices and reference panel now working adequately with inline prompt.

Need to improve the layout of reference panel.


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

Branch: refs/heads/master
Commit: 47334e3a8937a64f1bccb6fe29bc379486f82baf
Parents: 8784196
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Wed Apr 26 23:16:59 2017 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Apr 27 13:26:40 2017 +0100

----------------------------------------------------------------------
 .../components/scalars/ScalarPanelAbstract.java | 194 ++++++++++++-------
 .../scalars/ScalarPanelTextFieldAbstract.html   |   2 -
 .../scalars/ScalarPanelTextFieldAbstract.java   |  89 ++++-----
 .../isisapplib/IsisBlobOrClobPanelAbstract.java |  61 +++---
 .../scalars/primitive/BooleanPanel.java         |  20 +-
 .../scalars/reference/ReferencePanel.java       |  53 +++--
 .../valuechoices/ValueChoicesSelect2Panel.java  |  39 ++--
 .../ui/components/widgets/select2/Select2.java  |   2 +-
 8 files changed, 257 insertions(+), 203 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/47334e3a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
index 8fe1a7b..75c493e 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
@@ -51,6 +51,7 @@ import org.apache.isis.viewer.wicket.model.models.EntityModel;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.ComponentType;
 import org.apache.isis.viewer.wicket.ui.components.actionmenu.entityactions.AdditionalLinksPanel;
+import org.apache.isis.viewer.wicket.ui.components.actionmenu.entityactions.EntityActionUtil;
 import org.apache.isis.viewer.wicket.ui.components.property.PropertyEditFormExecutor;
 import org.apache.isis.viewer.wicket.ui.components.property.PropertyEditFormPanel;
 import org.apache.isis.viewer.wicket.ui.components.property.PropertyEditPanel;
@@ -95,6 +96,36 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
     private static final String ID_ASSOCIATED_ACTION_LINKS_BELOW = "associatedActionLinksBelow";
     private static final String ID_ASSOCIATED_ACTION_LINKS_RIGHT = "associatedActionLinksRight";
 
+    public static class InlinePromptConfig {
+        private final boolean supported;
+        private final Component componentToHideIfAny;
+
+        public static InlinePromptConfig supported() {
+            return new InlinePromptConfig(true, null);
+        }
+
+        public static InlinePromptConfig notSupported() {
+            return new InlinePromptConfig(false, null);
+        }
+
+        public static InlinePromptConfig supportedAndHide(final Component componentToHideIfAny) {
+            return new InlinePromptConfig(true, componentToHideIfAny);
+        }
+
+        private InlinePromptConfig(final boolean supported, final Component componentToHideIfAny) {
+            this.supported = supported;
+            this.componentToHideIfAny = componentToHideIfAny;
+        }
+
+        boolean isSupported() {
+            return supported;
+        }
+
+        Component getComponentToHideIfAny() {
+            return componentToHideIfAny;
+        }
+    }
+
     // ///////////////////////////////////////////////////////////////////
 
     protected final ScalarModel scalarModel;
@@ -105,6 +136,7 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
     private WebMarkupContainer scalarTypeContainer;
 
     /**
+     * Populated
      * Used by most subclasses ({@link ScalarPanelAbstract}, {@link ReferencePanel}, {@link ValueChoicesSelect2Panel}) but not all ({@link IsisBlobOrClobPanelAbstract}, {@link BooleanPanel})
      */
     private WebMarkupContainer scalarIfRegularInlinePromptForm;
@@ -131,8 +163,27 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
 
     }
 
+    /**
+     * Mandatory hook; simply determines the CSS that is added to the outermost 'scalarTypeContainer' div.
+     */
     protected abstract String getScalarPanelType();
 
+    /**
+     * Mandatory hook for implementations to indicate whether it supports the {@link PromptStyle#INLINE} inline prompt,
+     * and if so, how.
+     *
+     * <p>
+     *     For those that do, both {@link #createInlinePromptForm()} and
+     *     {@link #createInlinePromptLink()} must return non-null values (and their corresponding markup
+     *     must define the corresponding elements).
+     * </p>
+     *
+     * <p>
+     *     Implementations that support inline prompts are: ({@link ScalarPanelAbstract}, {@link ReferencePanel} and
+     *     {@link ValueChoicesSelect2Panel}; those that don't are {@link IsisBlobOrClobPanelAbstract} and {@link BooleanPanel}.
+     * </p>
+     */
+    protected abstract InlinePromptConfig getInlinePromptConfig();
 
     @Override
     protected void onBeforeRender() {
@@ -180,20 +231,38 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
 
         this.scalarIfCompact = createComponentForCompact();
         this.scalarIfRegular = createComponentForRegular();
-        this.scalarIfRegularInlinePromptForm = createInlinePromptFormIfRequired();
-
         scalarTypeContainer.addOrReplace(scalarIfCompact, scalarIfRegular);
-        if(scalarIfRegularInlinePromptForm != null) {
-            scalarTypeContainer.addOrReplace(scalarIfRegularInlinePromptForm);
-        }
 
-        inlinePromptLink = createInlinePromptLinkIfRequired();
-        if(this.inlinePromptLink != null) {
+        final List<LinkAndLabel> entityActions =
+                EntityActionUtil.getEntityActionLinksForAssociation(this.scalarModel, getDeploymentCategory());
+        addPositioningCssTo(scalarIfRegular, entityActions);
+        addEntityActionLinksBelowAndRight(scalarIfRegular, entityActions);
+
+        addEditPropertyTo(scalarIfRegular);
+        addFeedbackOnlyTo(scalarIfRegular, getScalarValueComponent());
+
+        final InlinePromptConfig inlinePromptConfig = getInlinePromptConfig();
+
+        if(inlinePromptConfig.isSupported()) {
+            this.scalarIfRegularInlinePromptForm = createInlinePromptForm();
+            scalarTypeContainer.addOrReplace(scalarIfRegularInlinePromptForm);
+            inlinePromptLink = createInlinePromptLink();
             scalarIfRegular.add(inlinePromptLink);
-            configureInlinePromptLinkCallback();
-            configureEditVisibility(scalarIfRegular, inlinePromptLink);
-        }
 
+            final PromptStyle promptStyle = this.scalarModel.getPromptStyle();
+            if(promptStyle == PromptStyle.INLINE) {
+                configureInlinePromptLinkCallback(inlinePromptLink);
+            }
+
+            Component componentToHideIfAny = inlinePromptConfig.getComponentToHideIfAny();
+            if (componentToHideIfAny != null || promptStyle == PromptStyle.DIALOG) {
+                if (scalarModel.canEnterEditMode() && scalarModel.getPromptStyle() == PromptStyle.INLINE) {
+                    componentToHideIfAny.setVisibilityAllowed(false);
+                } else {
+                    inlinePromptLink.setVisibilityAllowed(false);
+                }
+            }
+        }
 
         getRendering().buildGui(this);
         addCssForMetaModel();
@@ -204,6 +273,7 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
     }
 
 
+
     /**
      * Optional hook.
      */
@@ -372,16 +442,9 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
 
 
     /**
-     * Optional hook method to return a container holding an empty form.  This can be switched out using {@link #switchFormForInlinePrompt()}.
-     *
-     * <p>
-     *     Implementations that don't support inline prompts can override and return <tt>null</tt>.
-     * </p>
-     * <p>
-     *     If non-null, is added to {@link #scalarTypeContainer}.
-     * </p>
+     * Returns a container holding an empty form.  This can be switched out using {@link #switchFormForInlinePrompt()}.
      */
-    protected WebMarkupContainer createInlinePromptFormIfRequired() {
+    private WebMarkupContainer createInlinePromptForm() {
 
         // (placeholder initially, create dynamically when needed - otherwise infinite loop because form references regular)
 
@@ -393,78 +456,61 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
         return scalarIfRegularInlinePromptForm;
     }
 
-    private WebMarkupContainer createInlinePromptLinkIfRequired() {
-        final IModel<?> textFieldModel = obtainPromptInlineLinkModelIfAvailable();
-        if(textFieldModel == null) {
-            return null;
+    private WebMarkupContainer createInlinePromptLink() {
+        final IModel<?> inlineLinkModel = obtainPromptInlineLinkModel();
+        if(inlineLinkModel == null) {
+            throw new IllegalStateException(this.getClass().getName() + ": obtainPromptInlineLinkModel() returning null is not compatible with supportsInlinePrompt() returning true ");
         }
 
         final WebMarkupContainer inlinePromptLink = new WebMarkupContainer(ID_SCALAR_VALUE_INLINE_PROMPT_LINK);
         inlinePromptLink.setOutputMarkupId(true);
 
-        final Label editInlineLinkLabel = new Label(ID_SCALAR_VALUE_INLINE_PROMPT_LABEL, textFieldModel);
+        final Label editInlineLinkLabel = new Label(ID_SCALAR_VALUE_INLINE_PROMPT_LABEL, inlineLinkModel);
         inlinePromptLink.add(editInlineLinkLabel);
 
         return inlinePromptLink;
     }
 
-    /**
-     * Optional hook; if returns non null then the model will be used to set up a link representing the
-     * component for inline prompt.
-     */
-    protected IModel<?> obtainPromptInlineLinkModelIfAvailable() {
-        return null;
-    }
-
+    // ///////////////////////////////////////////////////////////////////
 
     /**
-     * Optional hook to set the visibility of subfields according to editability.
-     *
-     * <p>
-     * Only implementations that support inline prompts need override.
-     * </p>
+     * Components returning true for {@link #getInlinePromptConfig()} are required to override and return a non-null value.
      */
-    protected void configureEditVisibility(
-            final MarkupContainer scalarIfRegularFormGroup,
-            final WebMarkupContainer inlinePromptLink) {
+    protected IModel<?> obtainPromptInlineLinkModel() {
+        return null;
     }
 
-    private void configureInlinePromptLinkCallback() {
 
-        final PromptStyle promptStyle = this.scalarModel.getPromptStyle();
-        if(promptStyle == PromptStyle.INLINE) {
+    private void configureInlinePromptLinkCallback(final WebMarkupContainer inlinePromptLink) {
 
-            if(inlinePromptLink != null) {
-                inlinePromptLink.add(new AjaxEventBehavior("click") {
-                    @Override
-                    protected void onEvent(final AjaxRequestTarget target) {
+        inlinePromptLink.add(new AjaxEventBehavior("click") {
+            @Override
+            protected void onEvent(final AjaxRequestTarget target) {
 
-                        scalarModel.toEditMode();
+                scalarModel.toEditMode();
 
-                        // dynamically update the edit form.
-                        final PropertyEditFormExecutor formExecutor =
-                                new PropertyEditFormExecutor(ScalarPanelAbstract.this, scalarModel);
-                        scalarModel.setFormExecutor(formExecutor);
-                        scalarModel.setInlinePromptContext(
-                                new ScalarModel.InlinePromptContext(
-                                        getComponentForRegular(),
-                                        scalarIfRegularInlinePromptForm));
+                // dynamically update the edit form.
+                final PropertyEditFormExecutor formExecutor =
+                        new PropertyEditFormExecutor(ScalarPanelAbstract.this, scalarModel);
+                scalarModel.setFormExecutor(formExecutor);
+                scalarModel.setInlinePromptContext(
+                        new ScalarModel.InlinePromptContext(
+                                getComponentForRegular(),
+                                scalarIfRegularInlinePromptForm));
 
-                        switchFormForInlinePrompt();
+                switchFormForInlinePrompt();
 
-                        getComponentForRegular().setVisible(false);
-                        scalarIfRegularInlinePromptForm.setVisible(true);
+                getComponentForRegular().setVisible(false);
+                scalarIfRegularInlinePromptForm.setVisible(true);
 
-                        target.add(scalarTypeContainer);
-                    }
+                target.add(scalarTypeContainer);
+            }
 
-                    @Override
-                    public boolean isEnabled(final Component component) {
-                        return true;
-                    }
-                });
+            @Override
+            public boolean isEnabled(final Component component) {
+                return true;
             }
-        }
+        });
     }
 
     private void switchFormForInlinePrompt() {
@@ -512,13 +558,19 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
 
     }
 
+    /**
+     * Mandatory hook, used to determine which component to attach feedback to.
+     * @return
+     */
+    protected abstract Component getScalarValueComponent();
 
-    protected void addFeedbackOnlyTo(final MarkupContainer markupContainer, final Component component) {
+    private void addFeedbackOnlyTo(final MarkupContainer markupContainer, final Component component) {
         markupContainer.addOrReplace(new NotificationPanel(ID_FEEDBACK, component, new ComponentFeedbackMessageFilter(component)));
     }
 
-
-    protected void addEntityActionLinksBelowAndRight(final MarkupContainer labelIfRegular, final List<LinkAndLabel> entityActions) {
+    private void addEntityActionLinksBelowAndRight(
+            final MarkupContainer labelIfRegular,
+            final List<LinkAndLabel> entityActions) {
         final List<LinkAndLabel> entityActionsBelow = LinkAndLabel.positioned(entityActions, ActionLayout.Position.BELOW);
         AdditionalLinksPanel.addAdditionalLinks(labelIfRegular, ID_ASSOCIATED_ACTION_LINKS_BELOW, entityActionsBelow, AdditionalLinksPanel.Style.INLINE_LIST);
 
@@ -534,7 +586,7 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
      * @param markupContainer The form group element
      * @param entityActionLinks
      */
-    protected void addPositioningCssTo(final MarkupContainer markupContainer, final List<LinkAndLabel> entityActionLinks) {
+    private void addPositioningCssTo(final MarkupContainer markupContainer, final List<LinkAndLabel> entityActionLinks) {
         CssClassAppender.appendCssClassTo(markupContainer, determinePropParamLayoutCss(getModel()));
         CssClassAppender.appendCssClassTo(markupContainer, determineActionLayoutPositioningCss(entityActionLinks));
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/47334e3a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.html
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.html b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.html
index 77ce949..c827e7f 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.html
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.html
@@ -49,8 +49,6 @@
 
                                 <wicket:container wicket:id="scalarValueContainer"/>
 
-
-
                                 <a href="#"
                                    class="edit fa fa-pencil-square-o"
                                    wicket:id="editProperty"></a>

http://git-wip-us.apache.org/repos/asf/isis/blob/47334e3a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
index c3bdcc6..a0066d9 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
@@ -20,7 +20,6 @@
 package org.apache.isis.viewer.wicket.ui.components.scalars;
 
 import java.io.Serializable;
-import java.util.List;
 
 import com.google.common.base.Strings;
 
@@ -29,7 +28,6 @@ import org.apache.wicket.Component;
 import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.behavior.Behavior;
 import org.apache.wicket.markup.ComponentTag;
-import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.form.AbstractTextComponent;
 import org.apache.wicket.markup.html.form.TextField;
@@ -40,16 +38,13 @@ import org.apache.wicket.validation.IValidatable;
 import org.apache.wicket.validation.IValidator;
 import org.apache.wicket.validation.ValidationError;
 
-import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.facets.SingleIntValueFacet;
 import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxLengthFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.typicallen.TypicalLengthFacet;
 import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
-import org.apache.isis.viewer.wicket.model.links.LinkAndLabel;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
-import org.apache.isis.viewer.wicket.ui.components.actionmenu.entityactions.EntityActionUtil;
 import org.apache.isis.viewer.wicket.ui.components.widgets.bootstrap.FormGroup;
 import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
 import org.apache.isis.viewer.wicket.ui.util.CssClassAppender;
@@ -99,17 +94,23 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
         return textField;
     }
 
+    /**
+     * Optional hook for subclasses to override
+     */
     protected AbstractTextComponent<T> createTextFieldForRegular(final String id) {
         return createTextField(id);
     }
 
+    protected TextField<T> createTextField(final String id) {
+        return new TextField<>(id, newTextFieldValueModel(), cls);
+    }
+
     TextFieldValueModel<T> newTextFieldValueModel() {
         return new TextFieldValueModel<>(this);
     }
 
-    protected TextField<T> createTextField(final String id) {
-        return new TextField<>(id, newTextFieldValueModel(), cls);
-    }
+    // ///////////////////////////////////////////////////////////////////
+
 
     @Override
     protected MarkupContainer createComponentForRegular() {
@@ -131,50 +132,16 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
 
         final MarkupContainer scalarIfRegularFormGroup = createScalarIfRegularFormGroup();
 
-
-        // find the links...
-        final List<LinkAndLabel> entityActions =
-                EntityActionUtil.getEntityActionLinksForAssociation(this.scalarModel, getDeploymentCategory());
-
-        addPositioningCssTo(scalarIfRegularFormGroup, entityActions);
-
-
         final String describedAs = getModel().getDescribedAs();
         if(describedAs != null) {
             scalarIfRegularFormGroup.add(new AttributeModifier("title", Model.of(describedAs)));
         }
 
-        addFeedbackOnlyTo(scalarIfRegularFormGroup, textField);
-
-        // ... add entity links to panel (below and to right)
-        addEntityActionLinksBelowAndRight(scalarIfRegularFormGroup, entityActions);
-
-
         return scalarIfRegularFormGroup;
     }
 
-    @Override
-    protected void configureEditVisibility(
-            final MarkupContainer scalarIfRegularFormGroup,
-            final WebMarkupContainer inlinePromptLink) {
-
-        addEditPropertyTo(scalarIfRegularFormGroup);
-
-        if (scalarModel.canEnterEditMode() && scalarModel.getPromptStyle() == PromptStyle.INLINE) {
-            textField.setVisibilityAllowed(false);
-        } else {
-            inlinePromptLink.setVisibilityAllowed(false);
-        }
-    }
-
-    @Override
-    protected WebMarkupContainer createInlinePromptFormIfRequired() {
-        return super.createInlinePromptFormIfRequired();
-    }
-
-    @Override
-    protected IModel<T> obtainPromptInlineLinkModelIfAvailable() {
-        return textField.getModel();
+    protected Component getScalarValueComponent() {
+        return textField;
     }
 
     private void addReplaceDisabledTagWithReadonlyTagBehaviourIfRequired(final Component component) {
@@ -269,11 +236,9 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
     }
 
 
-    private static Integer getValueOf(ScalarModel model, Class<? extends SingleIntValueFacet> facetType) {
-        final SingleIntValueFacet facet = model.getFacet(facetType);
-        return facet != null ? facet.value() : null;
-    }
-    
+    // //////////////////////////////////////
+
+
     /**
      * Mandatory hook method to build the component to render the model when in
      * {@link Rendering#COMPACT compact} format.
@@ -310,6 +275,22 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
     }
 
 
+    // //////////////////////////////////////
+
+    @Override
+    protected InlinePromptConfig getInlinePromptConfig() {
+        return InlinePromptConfig.supportedAndHide(textField);
+    }
+
+    @Override
+    protected IModel<T> obtainPromptInlineLinkModel() {
+        return textField.getModel();
+    }
+
+
+    // //////////////////////////////////////
+
+
     @Override
     protected void onBeforeRenderWhenViewMode() {
         super.onBeforeRenderWhenViewMode();
@@ -348,15 +329,19 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
 
     @Override
     protected void addFormComponentBehavior(Behavior behavior) {
-
         textField.add(behavior);
-
     }
 
 
+    // //////////////////////////////////////
+
+    private static Integer getValueOf(ScalarModel model, Class<? extends SingleIntValueFacet> facetType) {
+        final SingleIntValueFacet facet = model.getFacet(facetType);
+        return facet != null ? facet.value() : null;
+    }
 
     @com.google.inject.Inject
-    private WicketViewerSettings settings;
+    WicketViewerSettings settings;
     protected WicketViewerSettings getSettings() {
         return settings;
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/47334e3a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java
index becdc3b..79d5957 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java
@@ -98,10 +98,6 @@ public abstract class IsisBlobOrClobPanelAbstract<T extends NamedWithMimeType> e
         final Label scalarName = new Label(ID_SCALAR_NAME, getModel().getName());
         scalarIfRegularFormGroup.add(scalarName);
 
-        // find the links...
-        final List<LinkAndLabel> entityActions = EntityActionUtil.getEntityActionLinksForAssociation(this.scalarModel, getDeploymentCategory());
-
-        addPositioningCssTo(scalarIfRegularFormGroup, entityActions);
 
         wicketImage = asWicketImage(ID_IMAGE);
         if(wicketImage != null) {
@@ -113,48 +109,65 @@ public abstract class IsisBlobOrClobPanelAbstract<T extends NamedWithMimeType> e
         
         updateFileNameLabel(ID_FILE_NAME, scalarIfRegularFormGroup);
         updateDownloadLink(ID_SCALAR_IF_REGULAR_DOWNLOAD, scalarIfRegularFormGroup);
-        
-        addFeedbackOnlyTo(scalarIfRegularFormGroup, fileUploadField);
-        addEditPropertyTo(scalarIfRegularFormGroup);
 
-        // ... add entity links to panel (below and to right)
-        addEntityActionLinksBelowAndRight(scalarIfRegularFormGroup, entityActions);
 
         return scalarIfRegularFormGroup;
     }
 
+    protected Component getScalarValueComponent() {
+        return fileUploadField;
+    }
+
+    // //////////////////////////////////////
+
     /**
      * Inline prompts are <i>not</i> supported by this component.
      */
     @Override
-    protected WebMarkupContainer createInlinePromptFormIfRequired() {
-        return null;
+    protected InlinePromptConfig getInlinePromptConfig() {
+        return InlinePromptConfig.notSupported();
+    }
+
+
+    // //////////////////////////////////////
+
+    @Override
+    protected Component createComponentForCompact() {
+        final MarkupContainer scalarIfCompact = new WebMarkupContainer(ID_SCALAR_IF_COMPACT);
+        MarkupContainer downloadLink = updateDownloadLink(ID_SCALAR_IF_COMPACT_DOWNLOAD, scalarIfCompact);
+        if(downloadLink != null) {
+            updateFileNameLabel("fileNameIfCompact", downloadLink);
+        }
+
+        return scalarIfCompact;
     }
 
 
+    // //////////////////////////////////////
+
     private Image asWicketImage(String id) {
-        
+
         final ObjectAdapter adapter = getModel().getObject();
         if(adapter == null) {
             return null;
         }
-        
+
         final Object object = adapter.getObject();
         if(!(object instanceof Blob)) {
             return null;
-        } 
-        
+        }
+
         final Blob blob = (Blob)object;
         final MimeType mimeType = blob.getMimeType();
         if(mimeType == null || !mimeType.getPrimaryType().equals("image")) {
             return null;
-        } 
-        
+        }
+
         final BufferedImage image = asBufferedImage(blob);
         if(image == null) {
             return null;
         }
-        
+
         final BufferedDynamicImageResource imageResource = new BufferedDynamicImageResource();
         imageResource.setImage(image);
         final ThumbnailImageResource thumbnailImageResource = new ThumbnailImageResource(imageResource, 300);
@@ -167,7 +180,7 @@ public abstract class IsisBlobOrClobPanelAbstract<T extends NamedWithMimeType> e
         if(bytes == null) {
             return null;
         }
-        
+
         final ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
         try {
             return ImageIO.read(bais);
@@ -178,16 +191,8 @@ public abstract class IsisBlobOrClobPanelAbstract<T extends NamedWithMimeType> e
         }
     }
 
-    @Override
-    protected Component createComponentForCompact() {
-        final MarkupContainer scalarIfCompact = new WebMarkupContainer(ID_SCALAR_IF_COMPACT);
-        MarkupContainer downloadLink = updateDownloadLink(ID_SCALAR_IF_COMPACT_DOWNLOAD, scalarIfCompact);
-        if(downloadLink != null) {
-            updateFileNameLabel("fileNameIfCompact", downloadLink);
-        }
 
-        return scalarIfCompact;
-    }
+    // //////////////////////////////////////
 
     protected void onBeforeRenderWhenViewMode() {
         updateRegularFormComponents(InputFieldVisibility.NOT_VISIBLE);

http://git-wip-us.apache.org/repos/asf/isis/blob/47334e3a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java
index 63348b1..ca21a39 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java
@@ -25,7 +25,6 @@ import org.apache.wicket.AttributeModifier;
 import org.apache.wicket.Component;
 import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.behavior.Behavior;
-import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.model.Model;
 
@@ -91,20 +90,12 @@ public class BooleanPanel extends ScalarPanelAbstract {
             scalarName.setEscapeModelStrings(namedFacet.escaped());
         }
 
-        final List<LinkAndLabel> entityActions = EntityActionUtil.getEntityActionLinksForAssociation(this.scalarModel, getDeploymentCategory());
-
-        addPositioningCssTo(scalarIfRegularFormGroup, entityActions);
-
-        addFeedbackOnlyTo(scalarIfRegularFormGroup, checkBox);
-        addEditPropertyTo(scalarIfRegularFormGroup);
-
-        // ... add entity links to panel (below and to right)
-        addEntityActionLinksBelowAndRight(scalarIfRegularFormGroup, entityActions);
-
         return scalarIfRegularFormGroup;
     }
 
-
+    protected Component getScalarValueComponent() {
+        return checkBox;
+    }
 
     /**
      * Mandatory hook method to build the component to render the model when in
@@ -115,12 +106,13 @@ public class BooleanPanel extends ScalarPanelAbstract {
         return createCheckBox(ID_SCALAR_IF_COMPACT);
     }
 
+
     /**
      * Inline prompts are <i>not</i> supported by this component.
      */
     @Override
-    protected WebMarkupContainer createInlinePromptFormIfRequired() {
-        return null;
+    protected InlinePromptConfig getInlinePromptConfig() {
+        return InlinePromptConfig.notSupported();
     }
 
     private CheckBoxX createCheckBox(final String id) {

http://git-wip-us.apache.org/repos/asf/isis/blob/47334e3a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
index bc624ce..01568f6 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
@@ -46,7 +46,6 @@ import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
 import org.apache.isis.core.metamodel.facets.object.autocomplete.AutoCompleteFacet;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
-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;
@@ -54,7 +53,6 @@ import org.apache.isis.viewer.wicket.model.models.ScalarModelWithMultiPending;
 import org.apache.isis.viewer.wicket.model.models.ScalarModelWithPending;
 import org.apache.isis.viewer.wicket.ui.ComponentFactory;
 import org.apache.isis.viewer.wicket.ui.ComponentType;
-import org.apache.isis.viewer.wicket.ui.components.actionmenu.entityactions.EntityActionUtil;
 import org.apache.isis.viewer.wicket.ui.components.scalars.PanelWithChoices;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelAbstract;
 import org.apache.isis.viewer.wicket.ui.components.widgets.bootstrap.FormGroup;
@@ -152,17 +150,7 @@ public class ReferencePanel extends ScalarPanelAbstract implements PanelWithChoi
         }
 
 
-        // find the links...
-        final List<LinkAndLabel> entityActions =
-                EntityActionUtil.getEntityActionLinksForAssociation(this.scalarModel, getDeploymentCategory());
 
-        addPositioningCssTo(scalarIfRegularFormGroup, entityActions);
-
-        addFeedbackOnlyTo(scalarIfRegularFormGroup, select2.component()); // this is a placeholder; when select2.component() is available, we use that instead
-        addEditPropertyTo(scalarIfRegularFormGroup);
-
-        // ... add entity links to panel (below and to right)
-        addEntityActionLinksBelowAndRight(scalarIfRegularFormGroup, entityActions);
 
         // add semantics
         entityLink.setRequired(getModel().isRequired());
@@ -186,6 +174,11 @@ public class ReferencePanel extends ScalarPanelAbstract implements PanelWithChoi
         return scalarIfRegularFormGroup;
     }
 
+    @Override
+    protected Component getScalarValueComponent() {
+        return select2.component();
+    }
+
     private Select2 createSelect2() {
 
         final Select2 select2;
@@ -225,17 +218,43 @@ public class ReferencePanel extends ScalarPanelAbstract implements PanelWithChoi
         return select2;
     }
 
+    // //////////////////////////////////////
+
     @Override
-    protected WebMarkupContainer createInlinePromptFormIfRequired() {
-        return super.createInlinePromptFormIfRequired();
+    protected InlinePromptConfig getInlinePromptConfig() {
+        return InlinePromptConfig.supported();
     }
 
     @Override
-    protected IModel<?> obtainPromptInlineLinkModelIfAvailable() {
-        return select2.getModel();
-//        return new TextFieldValueModel<>(this);
+    protected IModel<?> obtainPromptInlineLinkModel() {
+        final IModel<ObjectAdapterMemento> model = select2.getModel();
+        return new IModel<String>() {
+            @Override
+            public String getObject() {
+                final ObjectAdapterMemento oam = model.getObject();
+                if(oam == null) {
+                    return null;
+                }
+                ObjectAdapter objectAdapter = oam
+                        .getObjectAdapter(ConcurrencyChecking.NO_CHECK, getPersistenceSession(),
+                                getSpecificationLoader());
+                return objectAdapter != null ? objectAdapter.titleString(null) : null;
+            }
+
+            @Override
+            public void setObject(final String s) {
+                // gnore
+            }
+
+            @Override
+            public void detach() {
+                // ignore
+            }
+        };
     }
 
+
+
     // //////////////////////////////////////
 
     // called from buildGui

http://git-wip-us.apache.org/repos/asf/isis/blob/47334e3a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
index 0e7bc20..0522d8f 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
@@ -27,7 +27,6 @@ import org.apache.wicket.Component;
 import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.behavior.Behavior;
-import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
@@ -52,6 +51,7 @@ import org.apache.isis.viewer.wicket.ui.util.CssClassAppender;
 public class ValueChoicesSelect2Panel extends ScalarPanelAbstract implements ScalarModelWithPending, ScalarModelWithMultiPending,
         PanelWithChoices {
 
+
     private static final long serialVersionUID = 1L;
 
     private Select2 select2;
@@ -62,6 +62,9 @@ public class ValueChoicesSelect2Panel extends ScalarPanelAbstract implements Sca
         pending = scalarModel.getObjectAdapterMemento();
     }
 
+
+    // ///////////////////////////////////////////////////////////////////
+
     @Override
     protected MarkupContainer createComponentForRegular() {
 
@@ -102,20 +105,14 @@ public class ValueChoicesSelect2Panel extends ScalarPanelAbstract implements Sca
             scalarName.setEscapeModelStrings(namedFacet.escaped());
         }
 
-        // find the links...
-        final List<LinkAndLabel> entityActions = EntityActionUtil.getEntityActionLinksForAssociation(this.scalarModel, getDeploymentCategory());
-
-        addPositioningCssTo(scalarIfRegularFormGroup, entityActions);
-
-        addFeedbackOnlyTo(scalarIfRegularFormGroup, select2.component());
-        addEditPropertyTo(scalarIfRegularFormGroup);
-
-        // ... add entity links to panel (below and to right)
-        addEntityActionLinksBelowAndRight(scalarIfRegularFormGroup, entityActions);
 
         return scalarIfRegularFormGroup;
     }
 
+    protected Component getScalarValueComponent() {
+        return select2.component();
+    }
+
     private List<ObjectAdapterMemento> getChoiceMementos(final ObjectAdapter[] argumentsIfAvailable) {
         final List<ObjectAdapter> choices =
                 scalarModel.getChoices(argumentsIfAvailable, getAuthenticationSession(), getDeploymentCategory());
@@ -150,26 +147,28 @@ public class ValueChoicesSelect2Panel extends ScalarPanelAbstract implements Sca
         return formGroup;
     }
 
+    // ///////////////////////////////////////////////////////////////////
+
     @Override
     protected Component createComponentForCompact() {
         return new Label(ID_SCALAR_IF_COMPACT, getModel().getObjectAsString());
     }
 
+    // ///////////////////////////////////////////////////////////////////
+
     @Override
-    protected WebMarkupContainer createInlinePromptFormIfRequired() {
-        return super.createInlinePromptFormIfRequired();
+    protected InlinePromptConfig getInlinePromptConfig() {
+        return InlinePromptConfig.supportedAndHide(select2.component());
     }
 
     @Override
-    protected IModel<?> obtainPromptInlineLinkModelIfAvailable() {
+    protected IModel<?> obtainPromptInlineLinkModel() {
         return select2.getModel();
-//        return new TextFieldValueModel<>(this);
     }
 
 
-    private ChoiceProvider<ObjectAdapterMemento> newChoiceProvider(final List<ObjectAdapterMemento> choicesMementos) {
-        return new ObjectAdapterMementoProviderForValueChoices(scalarModel, choicesMementos, wicketViewerSettings);
-    }
+
+    // ///////////////////////////////////////////////////////////////////
 
     @Override
     protected boolean alwaysRebuildGui() {
@@ -254,6 +253,10 @@ public class ValueChoicesSelect2Panel extends ScalarPanelAbstract implements Sca
         }
     }
 
+    private ChoiceProvider<ObjectAdapterMemento> newChoiceProvider(final List<ObjectAdapterMemento> choicesMementos) {
+        return new ObjectAdapterMementoProviderForValueChoices(scalarModel, choicesMementos, wicketViewerSettings);
+    }
+
     private void resetIfCurrentNotInChoices(final Select2 select2, final List<ObjectAdapterMemento> choicesMementos) {
         final ObjectAdapterMemento objectAdapterMemento = getModel().getObjectAdapterMemento();
         if(objectAdapterMemento == null) {

http://git-wip-us.apache.org/repos/asf/isis/blob/47334e3a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/Select2.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/Select2.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/Select2.java
index c49e4d4..b2c89fe 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/Select2.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/Select2.java
@@ -92,7 +92,7 @@ public class Select2 implements Serializable {
     }
 
     public void setRequired(final boolean required) {
-        // causing a more severe orphaned drop-down when triggered...
+        // REVIEW: causing a more severe orphaned drop-down when triggered...
         // component().setRequired(required);
     }
     public boolean checkRequired() {


[12/43] isis git commit: ISIS-1603: now has the cancel button working for property edit inline forms

Posted by da...@apache.org.
ISIS-1603: now has the cancel button working for property edit inline forms


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

Branch: refs/heads/master
Commit: a24a91b7641844ceb1cb942ffe8df1d7d883f499
Parents: 8a4f6d6
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Sun Apr 23 16:05:24 2017 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Apr 27 13:26:39 2017 +0100

----------------------------------------------------------------------
 .../viewer/wicket/model/models/ActionModel.java | 12 ++++
 .../wicket/model/models/HasFormExecutor.java    |  9 +++
 .../viewer/wicket/model/models/ScalarModel.java | 69 ++++++++++++++++----
 .../property/PropertyEditFormPanel.java         | 39 ++++++++++-
 .../components/scalars/ScalarPanelAbstract.java |  9 ++-
 .../scalars/ScalarPanelTextFieldAbstract.java   |  2 +-
 .../ui/panels/PromptFormPanelAbstract.java      | 12 +++-
 7 files changed, 131 insertions(+), 21 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/a24a91b7/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
index d4f46b4..245d31a 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
@@ -47,6 +47,7 @@ import org.apache.wicket.util.resource.StringResourceStream;
 import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.RecoverableException;
 import org.apache.isis.applib.annotation.BookmarkPolicy;
+import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.services.routing.RoutingService;
 import org.apache.isis.applib.value.Blob;
@@ -679,6 +680,17 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> implements Has
 
     private FormExecutor formExecutor;
 
+    @Override
+    public PromptStyle getPromptStyle() {
+        // for now, at least..
+        return PromptStyle.DIALOG;
+    }
+
+    @Override
+    public ScalarModel.InlinePromptContext getInlinePromptContext() {
+        throw new IllegalStateException("should not be called when getPromptStyle() returns DIALOG");
+    }
+
     /**
      * A hint passed from one Wicket UI component to another.
      *

http://git-wip-us.apache.org/repos/asf/isis/blob/a24a91b7/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/HasFormExecutor.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/HasFormExecutor.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/HasFormExecutor.java
index 7d75e16..7c2c933 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/HasFormExecutor.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/HasFormExecutor.java
@@ -19,6 +19,15 @@
 
 package org.apache.isis.viewer.wicket.model.models;
 
+import org.apache.isis.applib.annotation.PromptStyle;
+
 public interface HasFormExecutor {
+    PromptStyle getPromptStyle();
+
+    /**
+     * Only applicable if {@link #getPromptStyle()} is {@link PromptStyle#INLINE}.
+     */
+    ScalarModel.InlinePromptContext getInlinePromptContext();
+
     FormExecutor getFormExecutor();
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/a24a91b7/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
index 918056f..6958feb 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
@@ -19,6 +19,7 @@
 
 package org.apache.isis.viewer.wicket.model.models;
 
+import java.io.Serializable;
 import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -28,6 +29,9 @@ import java.util.List;
 import com.google.common.collect.FluentIterable;
 import com.google.common.collect.Lists;
 
+import org.apache.wicket.Component;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
@@ -42,11 +46,11 @@ import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.facets.object.parseable.ParseableFacet;
+import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet;
 import org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.fileaccept.FileAcceptFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.mandatory.MandatoryFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.typicallen.TypicalLengthFacet;
-import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet;
 import org.apache.isis.core.metamodel.facets.value.bigdecimal.BigDecimalValueFacet;
 import org.apache.isis.core.metamodel.facets.value.string.StringValueSemanticsProvider;
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
@@ -919,24 +923,25 @@ public class ScalarModel extends EntityModel implements LinksProvider,HasFormExe
 
 
 
-    public PromptStyle getEditStyle() {
-        if (isEditable()) {
-            PromptStyleFacet facet = getFacet(PromptStyleFacet.class);
-            return facet != null && facet.value() == PromptStyle.INLINE
-                    ? PromptStyle.INLINE
-                    : PromptStyle.DIALOG;
-        } else {
-            // not editable
+    public PromptStyle getPromptStyle() {
+        final PromptStyleFacet facet = getFacet(PromptStyleFacet.class);
+        if(facet == null) {
             return null;
         }
+        return facet.value() == PromptStyle.INLINE
+                ? PromptStyle.INLINE
+                : PromptStyle.DIALOG;
     }
 
-    public boolean isEditable() {
-        Where where = getRenderingHint().isInTable() ? Where.PARENTED_TABLES : Where.OBJECT_FORMS;
-        boolean editable = disable(where) == null;
+    public boolean canEnterEditMode() {
+        boolean editable = isEnabled();
         return editable && isViewMode();
     }
 
+    boolean isEnabled() {
+        Where where = getRenderingHint().isInTable() ? Where.PARENTED_TABLES : Where.OBJECT_FORMS;
+        return disable(where) == null;
+    }
 
     public String getReasonInvalidIfAny() {
         final OneToOneAssociation property = getPropertyMemento().getProperty(getSpecificationLoader());
@@ -1010,6 +1015,7 @@ public class ScalarModel extends EntityModel implements LinksProvider,HasFormExe
 
     private FormExecutor formExecutor;
 
+
     /**
      * A hint passed from one Wicket UI component to another.
      *
@@ -1023,6 +1029,44 @@ public class ScalarModel extends EntityModel implements LinksProvider,HasFormExe
     }
 
 
+
+    // //////////////////////////////////////
+
+
+    private InlinePromptContext inlinePromptContext;
+
+    /**
+     * Further hint, to support inline edits...
+     */
+    public InlinePromptContext getInlinePromptContext() {
+        return inlinePromptContext;
+    }
+
+    public void setInlinePromptContext(InlinePromptContext inlinePromptContext) {
+        this.inlinePromptContext = inlinePromptContext;
+    }
+
+    public static class InlinePromptContext implements Serializable {
+
+        private static final long serialVersionUID = 1L;
+
+        private final Component scalarIfRegular;
+        private final WebMarkupContainer scalarIfRegularInlineEditForm;
+
+        public InlinePromptContext(
+                final Component scalarIfRegular,
+                final WebMarkupContainer scalarIfRegularInlineEditForm) {
+            this.scalarIfRegular = scalarIfRegular;
+            this.scalarIfRegularInlineEditForm = scalarIfRegularInlineEditForm;
+        }
+
+        public void onCancel() {
+
+            scalarIfRegular.setVisible(true);
+            scalarIfRegularInlineEditForm.setVisible(false);
+        }
+    }
+
     // //////////////////////////////////////
 
     /**
@@ -1043,4 +1087,5 @@ public class ScalarModel extends EntityModel implements LinksProvider,HasFormExe
     }
 
 
+
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/a24a91b7/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditFormPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditFormPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditFormPanel.java
index 6b94d41..4e7b456 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditFormPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditFormPanel.java
@@ -20,10 +20,12 @@
 package org.apache.isis.viewer.wicket.ui.components.property;
 
 import org.apache.wicket.Component;
+import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.form.Form;
 
+import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.viewer.wicket.model.hints.IsisPropertyEditCompletedEvent;
 import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
@@ -31,8 +33,8 @@ import org.apache.isis.viewer.wicket.ui.ComponentType;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarModelSubscriber;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelAbstract;
 import org.apache.isis.viewer.wicket.ui.components.scalars.TextFieldValueModel.ScalarModelProvider;
-import org.apache.isis.viewer.wicket.ui.panels.PromptFormPanelAbstract;
 import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
+import org.apache.isis.viewer.wicket.ui.panels.PromptFormPanelAbstract;
 
 /**
  * {@link PanelAbstract Panel} to capture the arguments for an action
@@ -58,12 +60,15 @@ public class PropertyEditFormPanel extends PromptFormPanelAbstract<ScalarModel>
 
         private static final long serialVersionUID = 1L;
 
+        private final PropertyEditFormPanel propertyEditFormPanel;
+
         public PropertyEditForm(
                 final String id,
-                final Component parentPanel,
+                final PropertyEditFormPanel propertyEditFormPanel,
                 final WicketViewerSettings settings,
                 final ScalarModel propertyModel) {
-            super(id, parentPanel, settings, propertyModel);
+            super(id, propertyEditFormPanel, settings, propertyModel);
+            this.propertyEditFormPanel = propertyEditFormPanel;
         }
 
         private ScalarModel getScalarModel() {
@@ -97,6 +102,34 @@ public class PropertyEditFormPanel extends PromptFormPanelAbstract<ScalarModel>
                 final AjaxRequestTarget target, final ScalarModelProvider provider) {
 
         }
+
+        public void onCancel(
+                final AjaxRequestTarget target) {
+
+            final PromptStyle promptStyle = getScalarModel().getPromptStyle();
+
+            if(promptStyle == PromptStyle.INLINE) {
+
+                getScalarModel().toViewMode();
+
+                // replace
+                final String id = propertyEditFormPanel.getId();
+                final MarkupContainer parent = propertyEditFormPanel.getParent();
+
+                final WebMarkupContainer replacementPropertyEditFormPanel = new WebMarkupContainer(id);
+                replacementPropertyEditFormPanel.setVisible(false);
+
+                parent.addOrReplace(replacementPropertyEditFormPanel);
+
+
+                // change visibility of inline components
+                getScalarModel().getInlinePromptContext().onCancel();
+
+                // redraw
+                target.add(parent);
+            }
+
+        }
     }
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/a24a91b7/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
index 984b3ee..32d53e7 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
@@ -310,7 +310,7 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
     protected void addEditPropertyTo(
             final MarkupContainer scalarIfRegularFormGroup) {
 
-        if(scalarModel.isEditable() && scalarModel.getEditStyle() == PromptStyle.DIALOG) {
+        if(scalarModel.canEnterEditMode() && scalarModel.getPromptStyle() == PromptStyle.DIALOG) {
 
             final WebMarkupContainer editProperty = new WebMarkupContainer(ID_EDIT_PROPERTY);
             editProperty.setOutputMarkupId(true);
@@ -346,7 +346,7 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
 
     protected void configureInlineEditCallback() {
 
-        final PromptStyle editStyle = this.scalarModel.getEditStyle();
+        final PromptStyle editStyle = this.scalarModel.getPromptStyle();
         if(editStyle == PromptStyle.INLINE) {
 
             if(editInlineLink != null) {
@@ -355,15 +355,18 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
                     protected void onEvent(final AjaxRequestTarget target) {
 
                         scalarModel.toEditMode();
-                        editInlineLink.setVisible(false);
 
                         // dynamically update the edit form.
                         final PropertyEditFormExecutor formExecutor =
                                 new PropertyEditFormExecutor(ScalarPanelAbstract.this, scalarModel);
                         scalarModel.setFormExecutor(formExecutor);
+                        scalarModel.setInlinePromptContext(
+                                new ScalarModel.InlinePromptContext(scalarIfRegular, scalarIfRegularInlineEditForm));
+
                         scalarIfRegularInlineEditForm = (PropertyEditFormPanel) getComponentFactoryRegistry().addOrReplaceComponent(
                                 scalarTypeContainer, ID_SCALAR_IF_REGULAR_INLINE_EDIT_FORM, ComponentType.PROPERTY_EDIT_FORM, scalarModel);
 
+
                         scalarIfRegular.setVisible(false);
                         scalarIfRegularInlineEditForm.setVisible(true);
 

http://git-wip-us.apache.org/repos/asf/isis/blob/a24a91b7/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
index e751380..4009df4 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
@@ -191,7 +191,7 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
         addEditPropertyTo(scalarIfRegularFormGroup);
         configureInlineEditCallback();
 
-        if (scalarModel.isEditable() && scalarModel.getEditStyle() == PromptStyle.INLINE) {
+        if (scalarModel.canEnterEditMode() && scalarModel.getPromptStyle() == PromptStyle.INLINE) {
             textField.setVisibilityAllowed(false);
         } else {
             editInlineLink.setVisibilityAllowed(false);

http://git-wip-us.apache.org/repos/asf/isis/blob/a24a91b7/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormPanelAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormPanelAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormPanelAbstract.java
index 3350f91..c4edc5a 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormPanelAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormPanelAbstract.java
@@ -160,8 +160,9 @@ public abstract class PromptFormPanelAbstract<T extends IModel<?> & HasFormExecu
                     if(actionPromptIfAny != null) {
                         actionPromptIfAny.closePrompt(target);
                     }
-                    // HACK: redraw the entire page...
-                    target.add(parentPanel.getPage());
+
+                    onCancel(target);
+
                 }
             };
             // so can submit with invalid content (eg mandatory params missing)
@@ -223,8 +224,15 @@ public abstract class PromptFormPanelAbstract<T extends IModel<?> & HasFormExecu
                 target.add((Component)provider);
             }
         }
+
+        public void onCancel(
+                final AjaxRequestTarget target) {
+
+        }
+
     }
 
+
     //region > dependencies
     @com.google.inject.Inject
     private WicketViewerSettings settings;


[15/43] isis git commit: ISIS-1603: fixes some unit tests

Posted by da...@apache.org.
ISIS-1603: fixes some unit tests


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

Branch: refs/heads/master
Commit: 20d442c45e98fc7cf287713372d74c128613ae85
Parents: a24a91b
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Sun Apr 23 17:31:22 2017 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Apr 27 13:26:39 2017 +0100

----------------------------------------------------------------------
 .../editstyle/PromptStyleConfiguration_Test.java          | 10 +++++-----
 ...PropertyEditStyleFacetFromPropertyAnnotation_Test.java |  2 +-
 2 files changed, 6 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/20d442c4/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/editstyle/PromptStyleConfiguration_Test.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/editstyle/PromptStyleConfiguration_Test.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/editstyle/PromptStyleConfiguration_Test.java
index d366697..479e113 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/editstyle/PromptStyleConfiguration_Test.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/editstyle/PromptStyleConfiguration_Test.java
@@ -24,7 +24,7 @@ public class PromptStyleConfiguration_Test {
     @Test
     public void when_none() throws Exception {
         context.checking(new Expectations() {{
-            oneOf(mockIsisConfiguration).getString("isis.properties.editStyle");
+            oneOf(mockIsisConfiguration).getString("isis.objects.promptStyle");
             will(returnValue(null));
         }});
         PromptStyle editStyle = PromptStyleConfiguration.parse(mockIsisConfiguration);
@@ -34,7 +34,7 @@ public class PromptStyleConfiguration_Test {
     @Test
     public void when_inline() throws Exception {
         context.checking(new Expectations() {{
-            oneOf(mockIsisConfiguration).getString("isis.properties.editStyle");
+            oneOf(mockIsisConfiguration).getString("isis.objects.promptStyle");
             will(returnValue("inline"));
         }});
         PromptStyle editStyle = PromptStyleConfiguration.parse(mockIsisConfiguration);
@@ -44,7 +44,7 @@ public class PromptStyleConfiguration_Test {
     @Test
     public void when_inline_mixed_case_and_superfluous_characters() throws Exception {
         context.checking(new Expectations() {{
-            oneOf(mockIsisConfiguration).getString("isis.properties.editStyle");
+            oneOf(mockIsisConfiguration).getString("isis.objects.promptStyle");
             will(returnValue(" inLIne "));
         }});
         PromptStyle editStyle = PromptStyleConfiguration.parse(mockIsisConfiguration);
@@ -54,7 +54,7 @@ public class PromptStyleConfiguration_Test {
     @Test
     public void when_dialog() throws Exception {
         context.checking(new Expectations() {{
-            oneOf(mockIsisConfiguration).getString("isis.properties.editStyle");
+            oneOf(mockIsisConfiguration).getString("isis.objects.promptStyle");
             will(returnValue("dialog"));
         }});
         PromptStyle editStyle = PromptStyleConfiguration.parse(mockIsisConfiguration);
@@ -64,7 +64,7 @@ public class PromptStyleConfiguration_Test {
     @Test
     public void when_invalid() throws Exception {
         context.checking(new Expectations() {{
-            oneOf(mockIsisConfiguration).getString("isis.properties.editStyle");
+            oneOf(mockIsisConfiguration).getString("isis.objects.promptStyle");
             will(returnValue("garbage"));
         }});
         PromptStyle editStyle = PromptStyleConfiguration.parse(mockIsisConfiguration);

http://git-wip-us.apache.org/repos/asf/isis/blob/20d442c4/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/editstyle/PropertyEditStyleFacetFromPropertyAnnotation_Test.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/editstyle/PropertyEditStyleFacetFromPropertyAnnotation_Test.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/editstyle/PropertyEditStyleFacetFromPropertyAnnotation_Test.java
index b6db5cf..f52091d 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/editstyle/PropertyEditStyleFacetFromPropertyAnnotation_Test.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/editstyle/PropertyEditStyleFacetFromPropertyAnnotation_Test.java
@@ -80,7 +80,7 @@ public class PropertyEditStyleFacetFromPropertyAnnotation_Test {
                 allowing(mockPropertyLayout).promptStyle();
                 will(returnValue(PromptStyle.AS_CONFIGURED));
 
-                oneOf(mockConfiguration).getString("isis.properties.editStyle");
+                oneOf(mockConfiguration).getString("isis.objects.promptStyle");
                 will(returnValue(PromptStyle.INLINE.name()));
 
                 allowing(mockFacetHolder).containsDoOpFacet(PromptStyleFacet.class);


[14/43] isis git commit: ISIS-1603: renames PropertyEditStyle to PromptStyle

Posted by da...@apache.org.
ISIS-1603: renames PropertyEditStyle to PromptStyle


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

Branch: refs/heads/master
Commit: 8a4f6d682e1f1564deed87344dc454e3d41b60e9
Parents: ddd55cd
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Sun Apr 23 15:05:42 2017 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Apr 27 13:26:39 2017 +0100

----------------------------------------------------------------------
 .../applib/layout/component/component.xsd       |  4 +-
 .../guides/rgant/_rgant-PropertyLayout.adoc     | 16 ++--
 .../rgant/_rgant-PropertyLayout_editStyle.adoc  | 25 ------
 .../_rgant-PropertyLayout_promptStyle.adoc      | 25 ++++++
 .../guides/rgcfg/_rgcfg_configuring-core.adoc   |  8 +-
 .../isis/applib/annotation/PromptStyle.java     | 41 +++++++++
 .../applib/annotation/PropertyEditStyle.java    | 45 ----------
 .../isis/applib/annotation/PropertyLayout.java  |  4 +-
 .../layout/component/PropertyLayoutData.java    | 12 +--
 .../promptStyle/PromptStyleConfiguration.java   | 42 +++++++++
 .../object/promptStyle/PromptStyleFacet.java    | 32 +++++++
 .../promptStyle/PromptStyleFacetAbstract.java   | 38 +++++++++
 .../PromptStyleFacetAsConfigured.java           | 37 ++++++++
 .../promptStyle/PromptStyleFacetFallBack.java   | 35 ++++++++
 .../PropertyEditStyleConfiguration.java         | 42 ---------
 .../editStyle/PropertyEditStyleFacet.java       | 32 -------
 .../PropertyEditStyleFacetAbstract.java         | 38 ---------
 .../PropertyEditStyleFacetAsConfigured.java     | 37 --------
 .../PropertyEditStyleFacetFallBack.java         | 35 --------
 ...ptStyleFacetForPropertyLayoutAnnotation.java | 90 ++++++++++++++++++++
 .../PromptStyleFacetForPropertyLayoutXml.java   | 49 +++++++++++
 ...tyleFacetOnPropertyFromLayoutProperties.java | 57 +++++++++++++
 ...itStyleFacetForPropertyLayoutAnnotation.java | 81 ------------------
 .../PropertyEditStyleFacetForPropertyXml.java   | 49 -----------
 ...tyleFacetOnPropertyFromLayoutProperties.java | 57 -------------
 .../PropertyLayoutFacetFactory.java             | 10 +--
 .../layoutmetadata/PropertyLayoutFacetRepr.java |  4 +-
 .../grid/GridSystemServiceAbstract.java         |  4 +-
 .../PromptStyleConfiguration_Test.java          | 74 ++++++++++++++++
 .../PropertyEditStyleConfiguration_Test.java    | 74 ----------------
 ...itStyleFacetFromPropertyAnnotation_Test.java | 68 +++++++--------
 .../wicket/model/models/FormExecutor.java       |  2 +
 .../viewer/wicket/model/models/ScalarModel.java | 14 +--
 .../components/scalars/ScalarPanelAbstract.java | 11 +--
 .../scalars/ScalarPanelTextFieldAbstract.java   |  4 +-
 .../ui/panels/PromptFormPanelAbstract.java      |  3 +-
 36 files changed, 604 insertions(+), 595 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/8a4f6d68/adocs/documentation/src/main/asciidoc/applib/layout/component/component.xsd
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/applib/layout/component/component.xsd b/adocs/documentation/src/main/asciidoc/applib/layout/component/component.xsd
index e0498ef..cd1d56f 100644
--- a/adocs/documentation/src/main/asciidoc/applib/layout/component/component.xsd
+++ b/adocs/documentation/src/main/asciidoc/applib/layout/component/component.xsd
@@ -60,7 +60,7 @@
       <xs:element minOccurs="0" name="metadataError" type="xs:string"/>
     </xs:sequence>
     <xs:attribute name="cssClass" type="xs:string"/>
-    <xs:attribute name="editStyle" type="tns:propertyEditStyle"/>
+    <xs:attribute name="promptStyle" type="tns:promptStyle"/>
     <xs:attribute name="hidden" type="tns:where"/>
     <xs:attribute name="id" type="xs:string" use="required"/>
     <xs:attribute name="labelPosition" type="tns:labelPosition"/>
@@ -101,7 +101,7 @@
     </xs:restriction>
   </xs:simpleType>
 
-  <xs:simpleType name="propertyEditStyle">
+  <xs:simpleType name="promptStyle">
     <xs:restriction base="xs:string">
       <xs:enumeration value="DIALOG"/>
       <xs:enumeration value="INLINE"/>

http://git-wip-us.apache.org/repos/asf/isis/blob/8a4f6d68/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout.adoc
index af66e3d..541694a 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout.adoc
@@ -29,13 +29,6 @@ The table below summarizes the annotation's attributes.
 |description of this property, eg to be rendered in a tooltip.
 
 
-|xref:../rgant/rgant.adoc#_rgant-PropertyLayout_editStyle[`editStyle()`]
-|`DIALOG`, `INLINE`, `AS_CONFIGURED` +
-(`AS_CONFIGURED`)
-|(`1.15.0-SNAPSHOT`) how a property should be edited within the UI
-
-
-
 |xref:../rgant/rgant.adoc#_rgant-PropertyLayout_hidden[`hidden()`]
 |`EVERYWHERE`, `OBJECT_FORMS`, `PARENTED_TABLES`, `STANDALONE_TABLES`, `ALL_TABLES`, `NOWHERE` +
 (`NOWHERE`)
@@ -72,6 +65,13 @@ A typical use case is if the desired name is a reserved Java keyword, such as `d
 |whether to HTML escape the name of this property.
 
 
+|xref:../rgant/rgant.adoc#_rgant-PropertyLayout_promptStyle[`promptStyle()`]
+|`DIALOG`, `INLINE`, `AS_CONFIGURED` +
+(`AS_CONFIGURED`)
+|(`1.15.0-SNAPSHOT`) how a property prompt should be displayed within the UI
+
+
+
 |xref:../rgant/rgant.adoc#_rgant-PropertyLayout_renderedAsDayBefore[`renderedAsDayBefore()`]
 |`true`, `false` +
 (`false`)
@@ -128,10 +128,10 @@ so that boilerplate-busting tools such as link:https://projectlombok.org/[Projec
 
 include::_rgant-PropertyLayout_cssClass.adoc[leveloffset=+1]
 include::_rgant-PropertyLayout_describedAs.adoc[leveloffset=+1]
-include::_rgant-PropertyLayout_editStyle.adoc[leveloffset=+1]
 include::_rgant-PropertyLayout_labelPosition.adoc[leveloffset=+1]
 include::_rgant-PropertyLayout_multiLine.adoc[leveloffset=+1]
 include::_rgant-PropertyLayout_named.adoc[leveloffset=+1]
+include::_rgant-PropertyLayout_promptStyle.adoc[leveloffset=+1]
 include::_rgant-PropertyLayout_renderedAsDayBefore.adoc[leveloffset=+1]
 include::_rgant-PropertyLayout_typicalLength.adoc[leveloffset=+1]
 

http://git-wip-us.apache.org/repos/asf/isis/blob/8a4f6d68/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_editStyle.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_editStyle.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_editStyle.adoc
deleted file mode 100644
index c5de7a0..0000000
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_editStyle.adoc
+++ /dev/null
@@ -1,25 +0,0 @@
-[[_rgant-PropertyLayout_editStyle]]
-= `editStyle()` (`1.15.0-SNAPSHOT`)
-:Notice: 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.
-:_basedir: ../../
-:_imagesdir: images/
-
-
-The `editStyle()` attribute is used to specify whether a domain object property is edited through a dialog box (similar to an action parameter form) or using an inline edit.
-
-If the attribute is not set, then thevalue of the xref:../rgcfg/rgcfg.adoc#_rgcfg_configuring-core[configuration property] `isis.properties.editStyle` is used.
-If this is itself not set, then a dialog box is used.
-
-For example:
-
-[source,java]
-----
-public class Customer {
-    @Property(
-        editStyle=PropertyEditStyle.INLINE
-    )
-    public int getNotes(){ ... }
-    public void setNotes(String notes) { ... }
-}
-----
-

http://git-wip-us.apache.org/repos/asf/isis/blob/8a4f6d68/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_promptStyle.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_promptStyle.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_promptStyle.adoc
new file mode 100644
index 0000000..8d780c4
--- /dev/null
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_promptStyle.adoc
@@ -0,0 +1,25 @@
+[[_rgant-PropertyLayout_promptStyle]]
+= `promptStyle()` (`1.15.0-SNAPSHOT`)
+:Notice: 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.
+:_basedir: ../../
+:_imagesdir: images/
+
+
+The `promptStyle()` attribute is used to specify whether a domain object property is edited through a dialog box (similar to an action parameter form) or using an inline edit.
+
+If the attribute is not set, then thevalue of the xref:../rgcfg/rgcfg.adoc#_rgcfg_configuring-core[configuration property] `isis.objects.promptStyle` is used.
+If this is itself not set, then a dialog box is used.
+
+For example:
+
+[source,java]
+----
+public class Customer {
+    @Property(
+        promptStyle=PromptStyle.INLINE
+    )
+    public int getNotes(){ ... }
+    public void setNotes(String notes) { ... }
+}
+----
+

http://git-wip-us.apache.org/repos/asf/isis/blob/8a4f6d68/adocs/documentation/src/main/asciidoc/guides/rgcfg/_rgcfg_configuring-core.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgcfg/_rgcfg_configuring-core.adoc b/adocs/documentation/src/main/asciidoc/guides/rgcfg/_rgcfg_configuring-core.adoc
index cd7bc9a..030fad7 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgcfg/_rgcfg_configuring-core.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgcfg/_rgcfg_configuring-core.adoc
@@ -582,12 +582,12 @@ If enabled, this configuration property will ensure that domain services only de
 |Whether objects' properties and collections can be edited directly (for objects annotated with xref:../rgant/rgant.adoc#_rgant-DomainObject_editing[`@DomainObject#editing()`]); see xref:../rgcfg/rgcfg.adoc#__rgcfg_configuring-core_isis-objects-editing[below] for further discussion.
 
 
-|`isis.properties.` +
-`editStyle`
+|`isis.objects.` +
+`promptStyle`
 |`dialog`,`inline` +
 (`dialog`)
-|(`1.15.0-SNAPSHOT`) whether a domain object property is edited through a dialog box (similar to an action parameter form) or using an inline edit.
-Can be overridden on a property-by-property basis using xref:../rgant/rgant.adoc#_rgant-PropertyLayout_editStyle[`@Property#editStyle()`]).
+|(`1.15.0-SNAPSHOT`) whether the prompt for editing a domain object property is shown in a dialog box or inline within the form.
+Can be overridden on a property-by-property basis using xref:../rgant/rgant.adoc#_rgant-PropertyLayout_promptStyle[`@Property#promptStyle()`]).
 
 
 |`isis.persistor.` +

http://git-wip-us.apache.org/repos/asf/isis/blob/8a4f6d68/core/applib/src/main/java/org/apache/isis/applib/annotation/PromptStyle.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/PromptStyle.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/PromptStyle.java
new file mode 100644
index 0000000..bcfd188
--- /dev/null
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/PromptStyle.java
@@ -0,0 +1,41 @@
+/*
+ *  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.applib.annotation;
+
+/**
+ * How prompting for new values (property edit) should be performed
+ */
+public enum PromptStyle {
+    /**
+     * Edit the property according to the default edit style policy configured in <tt>isis.properties</tt>.
+     *
+     * <p>
+     *      If no editing style is configured, then {@link #DIALOG} is assumed.
+     * </p>
+     */
+    AS_CONFIGURED,
+    /**
+     * Use a dialog for the prompt
+     */
+    DIALOG,
+    /**
+     * Show the form inline, replacing the rendering of the property.
+     */
+    INLINE
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/8a4f6d68/core/applib/src/main/java/org/apache/isis/applib/annotation/PropertyEditStyle.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/PropertyEditStyle.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/PropertyEditStyle.java
deleted file mode 100644
index e059cdb..0000000
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/PropertyEditStyle.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- *  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.applib.annotation;
-
-/**
- * How editing of properties should be performed
- */
-public enum PropertyEditStyle {
-    /**
-     * Edit the property according to the default edit style policy configured in <tt>isis.properties</tt>.
-     *
-     * <p>
-     *      If no editing style is configured, then {@link #DIALOG} is assumed.
-     * </p>
-     */
-    AS_CONFIGURED,
-    /**
-     * Edit the property using a dialog (similar to action parameter, but just a single property being changed)
-     */
-    DIALOG,
-    /**
-     * Edit the property inline.
-     *
-     * <p>
-     *     In the Wicket viewer this is implemented using the <code>x-editable</code> library
-     * </p>
-     */
-    INLINE
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/8a4f6d68/core/applib/src/main/java/org/apache/isis/applib/annotation/PropertyLayout.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/PropertyLayout.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/PropertyLayout.java
index a744219..1594a76 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/PropertyLayout.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/PropertyLayout.java
@@ -43,9 +43,9 @@ public @interface PropertyLayout {
 
 
     /**
-     * How the properties of this domain object are be edited, either {@link PropertyEditStyle#DIALOG dialog} or {@link PropertyEditStyle#INLINE inline}.
+     * How the properties of this domain object are be edited, either {@link PromptStyle#DIALOG dialog} or {@link PromptStyle#INLINE inline}.
      */
-    PropertyEditStyle editStyle() default PropertyEditStyle.AS_CONFIGURED;
+    PromptStyle promptStyle() default PromptStyle.AS_CONFIGURED;
 
     /**
      * Indicates where in the UI the property should <i>not</i>not be visible.

http://git-wip-us.apache.org/repos/asf/isis/blob/8a4f6d68/core/applib/src/main/java/org/apache/isis/applib/layout/component/PropertyLayoutData.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/layout/component/PropertyLayoutData.java b/core/applib/src/main/java/org/apache/isis/applib/layout/component/PropertyLayoutData.java
index 23b32e2..0485ffd 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/layout/component/PropertyLayoutData.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/layout/component/PropertyLayoutData.java
@@ -30,7 +30,7 @@ import javax.xml.bind.annotation.XmlType;
 import com.google.common.collect.Lists;
 
 import org.apache.isis.applib.annotation.LabelPosition;
-import org.apache.isis.applib.annotation.PropertyEditStyle;
+import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.Where;
 
 /**
@@ -107,15 +107,15 @@ public class PropertyLayoutData
     }
 
 
-    private PropertyEditStyle editStyle;
+    private PromptStyle promptStyle;
 
     @XmlAttribute(required = false)
-    public PropertyEditStyle getEditStyle() {
-        return editStyle;
+    public PromptStyle getPromptStyle() {
+        return promptStyle;
     }
 
-    public void setEditStyle(PropertyEditStyle editStyle) {
-        this.editStyle = editStyle;
+    public void setPromptStyle(PromptStyle promptStyle) {
+        this.promptStyle = promptStyle;
     }
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/8a4f6d68/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/promptStyle/PromptStyleConfiguration.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/promptStyle/PromptStyleConfiguration.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/promptStyle/PromptStyleConfiguration.java
new file mode 100644
index 0000000..f833a64
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/promptStyle/PromptStyleConfiguration.java
@@ -0,0 +1,42 @@
+/*
+ *  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.core.metamodel.facets.object.promptStyle;
+
+import org.apache.isis.applib.annotation.PromptStyle;
+import org.apache.isis.core.commons.config.IsisConfiguration;
+
+
+public class PromptStyleConfiguration {
+
+    private PromptStyleConfiguration() {}
+
+    public static final String PROMPT_STYLE_KEY = "isis.objects.promptStyle";
+
+    public static PromptStyle parse(final IsisConfiguration configuration) {
+        final String configuredValue = configuration.getString(PROMPT_STYLE_KEY);
+        return PromptStyleConfiguration.parse(configuredValue);
+    }
+
+    private static PromptStyle parse(final String value) {
+        return value != null && value.trim().equalsIgnoreCase(PromptStyle.INLINE.name())
+                ? PromptStyle.INLINE
+                : PromptStyle.DIALOG;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/8a4f6d68/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/promptStyle/PromptStyleFacet.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/promptStyle/PromptStyleFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/promptStyle/PromptStyleFacet.java
new file mode 100644
index 0000000..aef5a4d
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/promptStyle/PromptStyleFacet.java
@@ -0,0 +1,32 @@
+/*
+ *  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.core.metamodel.facets.object.promptStyle;
+
+import org.apache.isis.applib.annotation.PromptStyle;
+import org.apache.isis.core.metamodel.facets.SingleValueFacet;
+
+/**
+ * Indicates that the editing of the property should be published.
+ */
+public interface PromptStyleFacet extends SingleValueFacet<PromptStyle> {
+
+    PromptStyle value();
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/8a4f6d68/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/promptStyle/PromptStyleFacetAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/promptStyle/PromptStyleFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/promptStyle/PromptStyleFacetAbstract.java
new file mode 100644
index 0000000..9d1e3b7
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/promptStyle/PromptStyleFacetAbstract.java
@@ -0,0 +1,38 @@
+/*
+ *  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.core.metamodel.facets.object.promptStyle;
+
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+
+public abstract class PromptStyleFacetAbstract extends FacetAbstract
+        implements PromptStyleFacet {
+
+
+    public static Class<? extends Facet> type() {
+        return PromptStyleFacet.class;
+    }
+
+    public PromptStyleFacetAbstract(final FacetHolder holder) {
+        super( type(), holder, Derivation.NOT_DERIVED);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/8a4f6d68/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/promptStyle/PromptStyleFacetAsConfigured.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/promptStyle/PromptStyleFacetAsConfigured.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/promptStyle/PromptStyleFacetAsConfigured.java
new file mode 100644
index 0000000..722bc1d
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/promptStyle/PromptStyleFacetAsConfigured.java
@@ -0,0 +1,37 @@
+/*
+ *  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.core.metamodel.facets.object.promptStyle;
+
+import org.apache.isis.applib.annotation.PromptStyle;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+
+public class PromptStyleFacetAsConfigured extends PromptStyleFacetAbstract {
+
+    private final PromptStyle editStyle;
+
+    public PromptStyleFacetAsConfigured(final PromptStyle editStyle, final FacetHolder holder) {
+        super(holder);
+        this.editStyle = editStyle;
+    }
+
+    @Override public PromptStyle value() {
+        return editStyle;
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/8a4f6d68/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/promptStyle/PromptStyleFacetFallBack.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/promptStyle/PromptStyleFacetFallBack.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/promptStyle/PromptStyleFacetFallBack.java
new file mode 100644
index 0000000..29f6074
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/promptStyle/PromptStyleFacetFallBack.java
@@ -0,0 +1,35 @@
+/*
+ *  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.core.metamodel.facets.object.promptStyle;
+
+import org.apache.isis.applib.annotation.PromptStyle;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+
+public class PromptStyleFacetFallBack extends PromptStyleFacetAbstract {
+
+    public PromptStyleFacetFallBack(final FacetHolder holder) {
+        super(holder);
+    }
+
+    @Override
+    public PromptStyle value() {
+        return PromptStyle.DIALOG;
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/8a4f6d68/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/editStyle/PropertyEditStyleConfiguration.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/editStyle/PropertyEditStyleConfiguration.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/editStyle/PropertyEditStyleConfiguration.java
deleted file mode 100644
index 921c94f..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/editStyle/PropertyEditStyleConfiguration.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- *  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.core.metamodel.facets.properties.property.editStyle;
-
-import org.apache.isis.applib.annotation.PropertyEditStyle;
-import org.apache.isis.core.commons.config.IsisConfiguration;
-
-
-public class PropertyEditStyleConfiguration {
-
-    private PropertyEditStyleConfiguration() {}
-
-    public static final String EDIT_STYLE_KEY = "isis.properties.editStyle";
-
-    public static PropertyEditStyle parse(final IsisConfiguration configuration) {
-        final String configuredValue = configuration.getString(EDIT_STYLE_KEY);
-        return PropertyEditStyleConfiguration.parse(configuredValue);
-    }
-
-    private static PropertyEditStyle parse(final String value) {
-        return value != null && value.trim().equalsIgnoreCase(PropertyEditStyle.INLINE.name())
-                ? PropertyEditStyle.INLINE
-                : PropertyEditStyle.DIALOG;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/8a4f6d68/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/editStyle/PropertyEditStyleFacet.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/editStyle/PropertyEditStyleFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/editStyle/PropertyEditStyleFacet.java
deleted file mode 100644
index 9bdd252..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/editStyle/PropertyEditStyleFacet.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- *  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.core.metamodel.facets.properties.property.editStyle;
-
-import org.apache.isis.applib.annotation.PropertyEditStyle;
-import org.apache.isis.core.metamodel.facets.SingleValueFacet;
-
-/**
- * Indicates that the editing of the property should be published.
- */
-public interface PropertyEditStyleFacet extends SingleValueFacet<PropertyEditStyle> {
-
-    PropertyEditStyle value();
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/8a4f6d68/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/editStyle/PropertyEditStyleFacetAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/editStyle/PropertyEditStyleFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/editStyle/PropertyEditStyleFacetAbstract.java
deleted file mode 100644
index 80348c2..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/editStyle/PropertyEditStyleFacetAbstract.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- *  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.core.metamodel.facets.properties.property.editStyle;
-
-import org.apache.isis.core.metamodel.facetapi.Facet;
-import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-
-public abstract class PropertyEditStyleFacetAbstract extends FacetAbstract
-        implements PropertyEditStyleFacet {
-
-
-    public static Class<? extends Facet> type() {
-        return PropertyEditStyleFacet.class;
-    }
-
-    public PropertyEditStyleFacetAbstract(final FacetHolder holder) {
-        super( type(), holder, Derivation.NOT_DERIVED);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/8a4f6d68/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/editStyle/PropertyEditStyleFacetAsConfigured.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/editStyle/PropertyEditStyleFacetAsConfigured.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/editStyle/PropertyEditStyleFacetAsConfigured.java
deleted file mode 100644
index 6f6ff7e..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/editStyle/PropertyEditStyleFacetAsConfigured.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- *  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.core.metamodel.facets.properties.property.editStyle;
-
-import org.apache.isis.applib.annotation.PropertyEditStyle;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-
-public class PropertyEditStyleFacetAsConfigured extends PropertyEditStyleFacetAbstract {
-
-    private final PropertyEditStyle editStyle;
-
-    public PropertyEditStyleFacetAsConfigured(final PropertyEditStyle editStyle, final FacetHolder holder) {
-        super(holder);
-        this.editStyle = editStyle;
-    }
-
-    @Override public PropertyEditStyle value() {
-        return editStyle;
-    }
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/8a4f6d68/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/editStyle/PropertyEditStyleFacetFallBack.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/editStyle/PropertyEditStyleFacetFallBack.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/editStyle/PropertyEditStyleFacetFallBack.java
deleted file mode 100644
index b4e0bdb..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/editStyle/PropertyEditStyleFacetFallBack.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- *  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.core.metamodel.facets.properties.property.editStyle;
-
-import org.apache.isis.applib.annotation.PropertyEditStyle;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-
-public class PropertyEditStyleFacetFallBack extends PropertyEditStyleFacetAbstract {
-
-    public PropertyEditStyleFacetFallBack(final FacetHolder holder) {
-        super(holder);
-    }
-
-    @Override
-    public PropertyEditStyle value() {
-        return PropertyEditStyle.DIALOG;
-    }
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/8a4f6d68/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PromptStyleFacetForPropertyLayoutAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PromptStyleFacetForPropertyLayoutAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PromptStyleFacetForPropertyLayoutAnnotation.java
new file mode 100644
index 0000000..68bbb14
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PromptStyleFacetForPropertyLayoutAnnotation.java
@@ -0,0 +1,90 @@
+/*
+ *  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.core.metamodel.facets.properties.propertylayout;
+
+import org.apache.isis.applib.annotation.PromptStyle;
+import org.apache.isis.applib.annotation.PropertyLayout;
+import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleConfiguration;
+import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet;
+import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacetAbstract;
+import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacetAsConfigured;
+import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacetFallBack;
+
+public class PromptStyleFacetForPropertyLayoutAnnotation extends PromptStyleFacetAbstract {
+
+    private final PromptStyle promptStyle;
+
+    public PromptStyleFacetForPropertyLayoutAnnotation(final PromptStyle promptStyle, final FacetHolder holder) {
+        super( holder );
+        this.promptStyle = promptStyle;
+    }
+
+    public static PromptStyleFacet create(
+            final PropertyLayout propertyLayout,
+            final IsisConfiguration configuration,
+            final FacetHolder holder) {
+
+        PromptStyle promptStyle = propertyLayout != null? propertyLayout.promptStyle() : null;
+
+        if(promptStyle == null) {
+            if (holder.containsDoOpFacet(PromptStyleFacet.class)) {
+                // do not replace
+                return null;
+            }
+
+            return new PromptStyleFacetFallBack(holder);
+        } else {
+
+            switch (promptStyle) {
+                case DIALOG:
+                case INLINE:
+                    return new PromptStyleFacetForPropertyLayoutAnnotation(promptStyle, holder);
+
+                case AS_CONFIGURED:
+
+                    // do not replace
+                    if (holder.containsDoOpFacet(PromptStyleFacet.class)) {
+                        return null;
+                    }
+
+                    promptStyle = PromptStyleConfiguration.parse(configuration);
+                    return new PromptStyleFacetAsConfigured(promptStyle, holder);
+
+                default:
+
+                    // do not replace
+                    if (holder.containsDoOpFacet(PromptStyleFacet.class)) {
+                        return null;
+                    }
+
+                    promptStyle = PromptStyleConfiguration.parse(configuration);
+                    return new PromptStyleFacetAsConfigured(promptStyle, holder);
+            }
+        }
+
+    }
+
+    @Override
+    public PromptStyle value() {
+        return promptStyle;
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/8a4f6d68/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PromptStyleFacetForPropertyLayoutXml.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PromptStyleFacetForPropertyLayoutXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PromptStyleFacetForPropertyLayoutXml.java
new file mode 100644
index 0000000..5df1ffd
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PromptStyleFacetForPropertyLayoutXml.java
@@ -0,0 +1,49 @@
+/*
+ *  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.core.metamodel.facets.properties.propertylayout;
+
+import org.apache.isis.applib.annotation.PromptStyle;
+import org.apache.isis.applib.layout.component.PropertyLayoutData;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet;
+import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacetAbstract;
+
+public class PromptStyleFacetForPropertyLayoutXml extends PromptStyleFacetAbstract {
+
+    public static PromptStyleFacet create(PropertyLayoutData propertyLayout, FacetHolder holder) {
+        if(propertyLayout == null) {
+            return null;
+        }
+        final PromptStyle promptStyle = propertyLayout.getPromptStyle();
+        return promptStyle != null ? new PromptStyleFacetForPropertyLayoutXml(promptStyle, holder) : null;
+    }
+
+    private final PromptStyle promptStyle;
+
+    private PromptStyleFacetForPropertyLayoutXml(PromptStyle promptStyle, FacetHolder holder) {
+        super(holder);
+        this.promptStyle = promptStyle;
+    }
+
+    @Override
+    public PromptStyle value() {
+        return promptStyle;
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/8a4f6d68/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PromptStyleFacetOnPropertyFromLayoutProperties.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PromptStyleFacetOnPropertyFromLayoutProperties.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PromptStyleFacetOnPropertyFromLayoutProperties.java
new file mode 100644
index 0000000..0f11ff4
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PromptStyleFacetOnPropertyFromLayoutProperties.java
@@ -0,0 +1,57 @@
+/*
+ *  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.core.metamodel.facets.properties.propertylayout;
+
+import java.util.Properties;
+
+import com.google.common.base.Strings;
+
+import org.apache.isis.applib.annotation.PromptStyle;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet;
+import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacetAbstract;
+
+public class PromptStyleFacetOnPropertyFromLayoutProperties extends PromptStyleFacetAbstract {
+
+    private final PromptStyle promptStyle;
+
+    public static PromptStyleFacet create(Properties properties, FacetHolder holder) {
+        final PromptStyle promptStyle = promptStyle(properties);
+        return promptStyle != null? new PromptStyleFacetOnPropertyFromLayoutProperties(promptStyle, holder): null;
+    }
+
+    private PromptStyleFacetOnPropertyFromLayoutProperties(PromptStyle promptStyle, FacetHolder holder) {
+        super(holder);
+        this.promptStyle = promptStyle;
+    }
+
+    private static PromptStyle promptStyle(Properties properties) {
+        if(properties == null) {
+            return null;
+        }
+        String propertyEditStyle = Strings.emptyToNull(properties.getProperty("promptStyle"));
+        return PromptStyle.valueOf(propertyEditStyle);
+    }
+
+    @Override
+    public PromptStyle value() {
+        return promptStyle;
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/8a4f6d68/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PropertyEditStyleFacetForPropertyLayoutAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PropertyEditStyleFacetForPropertyLayoutAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PropertyEditStyleFacetForPropertyLayoutAnnotation.java
deleted file mode 100644
index 6ae9ef9..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PropertyEditStyleFacetForPropertyLayoutAnnotation.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- *  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.core.metamodel.facets.properties.propertylayout;
-
-import org.apache.isis.applib.annotation.PropertyEditStyle;
-import org.apache.isis.applib.annotation.PropertyLayout;
-import org.apache.isis.core.commons.config.IsisConfiguration;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.properties.property.editStyle.PropertyEditStyleConfiguration;
-import org.apache.isis.core.metamodel.facets.properties.property.editStyle.PropertyEditStyleFacet;
-import org.apache.isis.core.metamodel.facets.properties.property.editStyle.PropertyEditStyleFacetAbstract;
-import org.apache.isis.core.metamodel.facets.properties.property.editStyle.PropertyEditStyleFacetAsConfigured;
-import org.apache.isis.core.metamodel.facets.properties.property.editStyle.PropertyEditStyleFacetFallBack;
-
-public class PropertyEditStyleFacetForPropertyLayoutAnnotation extends PropertyEditStyleFacetAbstract {
-
-    private final PropertyEditStyle editStyle;
-
-    public PropertyEditStyleFacetForPropertyLayoutAnnotation(final PropertyEditStyle editStyle, final FacetHolder holder) {
-        super( holder );
-        this.editStyle = editStyle;
-    }
-
-    public static PropertyEditStyleFacet create(
-            final PropertyLayout propertyLayout,
-            final IsisConfiguration configuration,
-            final FacetHolder holder) {
-
-        PropertyEditStyle editStyle = propertyLayout != null? propertyLayout.editStyle() : null;
-
-        if(editStyle == null) {
-                if (holder.containsDoOpFacet(PropertyEditStyleFacet.class)) {
-                    // do not replace
-                    return null;
-                }
-
-                return new PropertyEditStyleFacetFallBack(holder);
-        } else {
-
-            switch (editStyle) {
-                case DIALOG:
-                case INLINE:
-                    return new PropertyEditStyleFacetForPropertyLayoutAnnotation(editStyle, holder);
-
-                case AS_CONFIGURED:
-                default:
-
-                    // do not replace
-                    if (holder.containsDoOpFacet(PropertyEditStyleFacet.class)) {
-                        return null;
-                    }
-
-                    editStyle = PropertyEditStyleConfiguration.parse(configuration);
-                    return new PropertyEditStyleFacetAsConfigured(editStyle, holder);
-            }
-        }
-
-    }
-
-    @Override
-    public PropertyEditStyle value() {
-        return editStyle;
-    }
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/8a4f6d68/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PropertyEditStyleFacetForPropertyXml.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PropertyEditStyleFacetForPropertyXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PropertyEditStyleFacetForPropertyXml.java
deleted file mode 100644
index c37190c..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PropertyEditStyleFacetForPropertyXml.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- *  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.core.metamodel.facets.properties.propertylayout;
-
-import org.apache.isis.applib.annotation.PropertyEditStyle;
-import org.apache.isis.applib.layout.component.PropertyLayoutData;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.properties.property.editStyle.PropertyEditStyleFacet;
-import org.apache.isis.core.metamodel.facets.properties.property.editStyle.PropertyEditStyleFacetAbstract;
-
-public class PropertyEditStyleFacetForPropertyXml extends PropertyEditStyleFacetAbstract {
-
-    public static PropertyEditStyleFacet create(PropertyLayoutData propertyLayout, FacetHolder holder) {
-        if(propertyLayout == null) {
-            return null;
-        }
-        final PropertyEditStyle propertyEditStyle = propertyLayout.getEditStyle();
-        return propertyEditStyle != null ? new PropertyEditStyleFacetForPropertyXml(propertyEditStyle, holder) : null;
-    }
-
-    private final PropertyEditStyle propertyEditStyle;
-
-    private PropertyEditStyleFacetForPropertyXml(PropertyEditStyle propertyEditStyle, FacetHolder holder) {
-        super(holder);
-        this.propertyEditStyle = propertyEditStyle;
-    }
-
-    @Override
-    public PropertyEditStyle value() {
-        return propertyEditStyle;
-    }
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/8a4f6d68/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PropertyEditStyleFacetOnPropertyFromLayoutProperties.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PropertyEditStyleFacetOnPropertyFromLayoutProperties.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PropertyEditStyleFacetOnPropertyFromLayoutProperties.java
deleted file mode 100644
index ca8fe5c..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PropertyEditStyleFacetOnPropertyFromLayoutProperties.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- *  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.core.metamodel.facets.properties.propertylayout;
-
-import java.util.Properties;
-
-import com.google.common.base.Strings;
-
-import org.apache.isis.applib.annotation.PropertyEditStyle;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.properties.property.editStyle.PropertyEditStyleFacet;
-import org.apache.isis.core.metamodel.facets.properties.property.editStyle.PropertyEditStyleFacetAbstract;
-
-public class PropertyEditStyleFacetOnPropertyFromLayoutProperties extends PropertyEditStyleFacetAbstract {
-
-    private final PropertyEditStyle propertyEditStyle;
-
-    public static PropertyEditStyleFacet create(Properties properties, FacetHolder holder) {
-        final PropertyEditStyle propertyEditStyle = propertyEditStyle(properties);
-        return propertyEditStyle != null? new PropertyEditStyleFacetOnPropertyFromLayoutProperties(propertyEditStyle, holder): null;
-    }
-
-    private PropertyEditStyleFacetOnPropertyFromLayoutProperties(PropertyEditStyle propertyEditStyle, FacetHolder holder) {
-        super(holder);
-        this.propertyEditStyle = propertyEditStyle;
-    }
-
-    private static PropertyEditStyle propertyEditStyle(Properties properties) {
-        if(properties == null) {
-            return null;
-        }
-        String propertyEditStyle = Strings.emptyToNull(properties.getProperty("editStyle"));
-        return PropertyEditStyle.valueOf(propertyEditStyle);
-    }
-
-    @Override
-    public PropertyEditStyle value() {
-        return propertyEditStyle;
-    }
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/8a4f6d68/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PropertyLayoutFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PropertyLayoutFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PropertyLayoutFacetFactory.java
index 8439de2..f7365b7 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PropertyLayoutFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PropertyLayoutFacetFactory.java
@@ -38,7 +38,7 @@ import org.apache.isis.core.metamodel.facets.objectvalue.labelat.LabelAtFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.multiline.MultiLineFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.renderedadjusted.RenderedAdjustedFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.typicallen.TypicalLengthFacet;
-import org.apache.isis.core.metamodel.facets.properties.property.editStyle.PropertyEditStyleFacet;
+import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet;
 
 public class PropertyLayoutFacetFactory extends FacetFactoryAbstract implements ContributeeMemberFacetFactory {
 
@@ -92,14 +92,14 @@ public class PropertyLayoutFacetFactory extends FacetFactoryAbstract implements
     }
 
     void processEditStyle(final FacetHolder holder, final Properties properties, final PropertyLayout propertyLayout) {
-        PropertyEditStyleFacet propertyEditStyleFacet = PropertyEditStyleFacetOnPropertyFromLayoutProperties
+        PromptStyleFacet promptStyleFacet = PromptStyleFacetOnPropertyFromLayoutProperties
                 .create(properties, holder);
-        if(propertyEditStyleFacet == null) {
-            propertyEditStyleFacet = PropertyEditStyleFacetForPropertyLayoutAnnotation
+        if(promptStyleFacet == null) {
+            promptStyleFacet = PromptStyleFacetForPropertyLayoutAnnotation
                     .create(propertyLayout, getConfiguration(), holder);
         }
 
-        FacetUtil.addFacet(propertyEditStyleFacet);
+        FacetUtil.addFacet(promptStyleFacet);
     }
 
     void processHidden(final FacetHolder holder, final Properties properties, final PropertyLayout propertyLayout) {

http://git-wip-us.apache.org/repos/asf/isis/blob/8a4f6d68/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/PropertyLayoutFacetRepr.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/PropertyLayoutFacetRepr.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/PropertyLayoutFacetRepr.java
index 2c0d333..e96f744 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/PropertyLayoutFacetRepr.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/PropertyLayoutFacetRepr.java
@@ -18,14 +18,14 @@ package org.apache.isis.core.metamodel.layoutmetadata;
 
 
 import org.apache.isis.applib.annotation.LabelPosition;
-import org.apache.isis.applib.annotation.PropertyEditStyle;
+import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.Where;
 
 public class PropertyLayoutFacetRepr {
 
     public String cssClass;
     public String describedAs;
-    public PropertyEditStyle editStyle;
+    public PromptStyle editStyle;
     public Where hidden;
     public LabelPosition labelPosition;
     public int multiLine;

http://git-wip-us.apache.org/repos/asf/isis/blob/8a4f6d68/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridSystemServiceAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridSystemServiceAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridSystemServiceAbstract.java
index 4056300..2a3db3a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridSystemServiceAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridSystemServiceAbstract.java
@@ -99,7 +99,7 @@ import org.apache.isis.core.metamodel.facets.properties.propertylayout.HiddenFac
 import org.apache.isis.core.metamodel.facets.properties.propertylayout.LabelAtFacetForPropertyXml;
 import org.apache.isis.core.metamodel.facets.properties.propertylayout.MultiLineFacetForPropertyXml;
 import org.apache.isis.core.metamodel.facets.properties.propertylayout.NamedFacetForPropertyXml;
-import org.apache.isis.core.metamodel.facets.properties.propertylayout.PropertyEditStyleFacetForPropertyXml;
+import org.apache.isis.core.metamodel.facets.properties.propertylayout.PromptStyleFacetForPropertyLayoutXml;
 import org.apache.isis.core.metamodel.facets.properties.propertylayout.RenderedAdjustedFacetForPropertyXml;
 import org.apache.isis.core.metamodel.facets.properties.propertylayout.TypicalLengthFacetForPropertyXml;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -307,7 +307,7 @@ public abstract class GridSystemServiceAbstract<G extends Grid> implements GridS
                 FacetUtil.addOrReplaceFacet(CssClassFacetForPropertyXml.create(propertyLayoutData, oneToOneAssociation));
                 FacetUtil.addOrReplaceFacet(DescribedAsFacetForPropertyXml.create(propertyLayoutData, oneToOneAssociation));
                 FacetUtil.addOrReplaceFacet(
-                        PropertyEditStyleFacetForPropertyXml.create(propertyLayoutData, oneToOneAssociation));
+                        PromptStyleFacetForPropertyLayoutXml.create(propertyLayoutData, oneToOneAssociation));
                 FacetUtil.addOrReplaceFacet(HiddenFacetForPropertyXml.create(propertyLayoutData, oneToOneAssociation));
                 FacetUtil.addOrReplaceFacet(LabelAtFacetForPropertyXml.create(propertyLayoutData, oneToOneAssociation));
                 FacetUtil.addOrReplaceFacet(MultiLineFacetForPropertyXml.create(propertyLayoutData, oneToOneAssociation));

http://git-wip-us.apache.org/repos/asf/isis/blob/8a4f6d68/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/editstyle/PromptStyleConfiguration_Test.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/editstyle/PromptStyleConfiguration_Test.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/editstyle/PromptStyleConfiguration_Test.java
new file mode 100644
index 0000000..d366697
--- /dev/null
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/editstyle/PromptStyleConfiguration_Test.java
@@ -0,0 +1,74 @@
+package org.apache.isis.core.metamodel.facets.properties.editstyle;
+
+import org.jmock.Expectations;
+import org.jmock.auto.Mock;
+import org.junit.Assert;
+import org.junit.Rule;
+import org.junit.Test;
+
+import org.apache.isis.applib.annotation.PromptStyle;
+import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleConfiguration;
+import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
+
+import static org.hamcrest.CoreMatchers.is;
+
+public class PromptStyleConfiguration_Test {
+
+    @Rule
+    public JUnitRuleMockery2 context = JUnitRuleMockery2.createFor(JUnitRuleMockery2.Mode.INTERFACES_AND_CLASSES);
+
+    @Mock
+    IsisConfiguration mockIsisConfiguration;
+
+    @Test
+    public void when_none() throws Exception {
+        context.checking(new Expectations() {{
+            oneOf(mockIsisConfiguration).getString("isis.properties.editStyle");
+            will(returnValue(null));
+        }});
+        PromptStyle editStyle = PromptStyleConfiguration.parse(mockIsisConfiguration);
+        Assert.assertThat(editStyle, is(PromptStyle.DIALOG));
+    }
+
+    @Test
+    public void when_inline() throws Exception {
+        context.checking(new Expectations() {{
+            oneOf(mockIsisConfiguration).getString("isis.properties.editStyle");
+            will(returnValue("inline"));
+        }});
+        PromptStyle editStyle = PromptStyleConfiguration.parse(mockIsisConfiguration);
+        Assert.assertThat(editStyle, is(PromptStyle.INLINE));
+    }
+
+    @Test
+    public void when_inline_mixed_case_and_superfluous_characters() throws Exception {
+        context.checking(new Expectations() {{
+            oneOf(mockIsisConfiguration).getString("isis.properties.editStyle");
+            will(returnValue(" inLIne "));
+        }});
+        PromptStyle editStyle = PromptStyleConfiguration.parse(mockIsisConfiguration);
+        Assert.assertThat(editStyle, is(PromptStyle.INLINE));
+    }
+
+    @Test
+    public void when_dialog() throws Exception {
+        context.checking(new Expectations() {{
+            oneOf(mockIsisConfiguration).getString("isis.properties.editStyle");
+            will(returnValue("dialog"));
+        }});
+        PromptStyle editStyle = PromptStyleConfiguration.parse(mockIsisConfiguration);
+        Assert.assertThat(editStyle, is(PromptStyle.DIALOG));
+    }
+
+    @Test
+    public void when_invalid() throws Exception {
+        context.checking(new Expectations() {{
+            oneOf(mockIsisConfiguration).getString("isis.properties.editStyle");
+            will(returnValue("garbage"));
+        }});
+        PromptStyle editStyle = PromptStyleConfiguration.parse(mockIsisConfiguration);
+        Assert.assertThat(editStyle, is(PromptStyle.DIALOG));
+    }
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/8a4f6d68/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/editstyle/PropertyEditStyleConfiguration_Test.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/editstyle/PropertyEditStyleConfiguration_Test.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/editstyle/PropertyEditStyleConfiguration_Test.java
deleted file mode 100644
index 95a12ce..0000000
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/editstyle/PropertyEditStyleConfiguration_Test.java
+++ /dev/null
@@ -1,74 +0,0 @@
-package org.apache.isis.core.metamodel.facets.properties.editstyle;
-
-import org.jmock.Expectations;
-import org.jmock.auto.Mock;
-import org.junit.Assert;
-import org.junit.Rule;
-import org.junit.Test;
-
-import org.apache.isis.applib.annotation.PropertyEditStyle;
-import org.apache.isis.core.commons.config.IsisConfiguration;
-import org.apache.isis.core.metamodel.facets.properties.property.editStyle.PropertyEditStyleConfiguration;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
-
-import static org.hamcrest.CoreMatchers.is;
-
-public class PropertyEditStyleConfiguration_Test {
-
-    @Rule
-    public JUnitRuleMockery2 context = JUnitRuleMockery2.createFor(JUnitRuleMockery2.Mode.INTERFACES_AND_CLASSES);
-
-    @Mock
-    IsisConfiguration mockIsisConfiguration;
-
-    @Test
-    public void when_none() throws Exception {
-        context.checking(new Expectations() {{
-            oneOf(mockIsisConfiguration).getString("isis.properties.editStyle");
-            will(returnValue(null));
-        }});
-        PropertyEditStyle editStyle = PropertyEditStyleConfiguration.parse(mockIsisConfiguration);
-        Assert.assertThat(editStyle, is(PropertyEditStyle.DIALOG));
-    }
-
-    @Test
-    public void when_inline() throws Exception {
-        context.checking(new Expectations() {{
-            oneOf(mockIsisConfiguration).getString("isis.properties.editStyle");
-            will(returnValue("inline"));
-        }});
-        PropertyEditStyle editStyle = PropertyEditStyleConfiguration.parse(mockIsisConfiguration);
-        Assert.assertThat(editStyle, is(PropertyEditStyle.INLINE));
-    }
-
-    @Test
-    public void when_inline_mixed_case_and_superfluous_characters() throws Exception {
-        context.checking(new Expectations() {{
-            oneOf(mockIsisConfiguration).getString("isis.properties.editStyle");
-            will(returnValue(" inLIne "));
-        }});
-        PropertyEditStyle editStyle = PropertyEditStyleConfiguration.parse(mockIsisConfiguration);
-        Assert.assertThat(editStyle, is(PropertyEditStyle.INLINE));
-    }
-
-    @Test
-    public void when_dialog() throws Exception {
-        context.checking(new Expectations() {{
-            oneOf(mockIsisConfiguration).getString("isis.properties.editStyle");
-            will(returnValue("dialog"));
-        }});
-        PropertyEditStyle editStyle = PropertyEditStyleConfiguration.parse(mockIsisConfiguration);
-        Assert.assertThat(editStyle, is(PropertyEditStyle.DIALOG));
-    }
-
-    @Test
-    public void when_invalid() throws Exception {
-        context.checking(new Expectations() {{
-            oneOf(mockIsisConfiguration).getString("isis.properties.editStyle");
-            will(returnValue("garbage"));
-        }});
-        PropertyEditStyle editStyle = PropertyEditStyleConfiguration.parse(mockIsisConfiguration);
-        Assert.assertThat(editStyle, is(PropertyEditStyle.DIALOG));
-    }
-
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/8a4f6d68/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/editstyle/PropertyEditStyleFacetFromPropertyAnnotation_Test.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/editstyle/PropertyEditStyleFacetFromPropertyAnnotation_Test.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/editstyle/PropertyEditStyleFacetFromPropertyAnnotation_Test.java
index 854b8a0..b6db5cf 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/editstyle/PropertyEditStyleFacetFromPropertyAnnotation_Test.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/editstyle/PropertyEditStyleFacetFromPropertyAnnotation_Test.java
@@ -7,15 +7,15 @@ import org.junit.Assert;
 import org.junit.Rule;
 import org.junit.Test;
 
-import org.apache.isis.applib.annotation.PropertyEditStyle;
+import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.commons.matchers.IsisMatchers;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.properties.property.editStyle.PropertyEditStyleFacet;
-import org.apache.isis.core.metamodel.facets.properties.property.editStyle.PropertyEditStyleFacetAsConfigured;
-import org.apache.isis.core.metamodel.facets.properties.property.editStyle.PropertyEditStyleFacetFallBack;
-import org.apache.isis.core.metamodel.facets.properties.propertylayout.PropertyEditStyleFacetForPropertyLayoutAnnotation;
+import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet;
+import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacetAsConfigured;
+import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacetFallBack;
+import org.apache.isis.core.metamodel.facets.properties.propertylayout.PromptStyleFacetForPropertyLayoutAnnotation;
 import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
 
 import static org.hamcrest.CoreMatchers.is;
@@ -42,72 +42,72 @@ public class PropertyEditStyleFacetFromPropertyAnnotation_Test {
         public void when_annotated_with_dialog() throws Exception {
 
             context.checking(new Expectations() {{
-                allowing(mockPropertyLayout).editStyle();
-                will(returnValue(PropertyEditStyle.DIALOG));
+                allowing(mockPropertyLayout).promptStyle();
+                will(returnValue(PromptStyle.DIALOG));
 
                 never(mockConfiguration);
             }});
 
-            PropertyEditStyleFacet facet = PropertyEditStyleFacetForPropertyLayoutAnnotation
+            PromptStyleFacet facet = PromptStyleFacetForPropertyLayoutAnnotation
                     .create(mockPropertyLayout, mockConfiguration, mockFacetHolder);
 
-            Assert.assertThat(facet, is((Matcher) IsisMatchers.anInstanceOf(PropertyEditStyleFacetForPropertyLayoutAnnotation.class)));
-            Assert.assertThat(facet.value(), is(PropertyEditStyle.DIALOG));
+            Assert.assertThat(facet, is((Matcher) IsisMatchers.anInstanceOf(PromptStyleFacetForPropertyLayoutAnnotation.class)));
+            Assert.assertThat(facet.value(), is(PromptStyle.DIALOG));
         }
 
         @Test
         public void when_annotated_with_inline() throws Exception {
 
             context.checking(new Expectations() {{
-                allowing(mockPropertyLayout).editStyle();
-                will(returnValue(PropertyEditStyle.INLINE));
+                allowing(mockPropertyLayout).promptStyle();
+                will(returnValue(PromptStyle.INLINE));
 
                 never(mockConfiguration);
             }});
 
 
-            PropertyEditStyleFacet facet = PropertyEditStyleFacetForPropertyLayoutAnnotation
+            PromptStyleFacet facet = PromptStyleFacetForPropertyLayoutAnnotation
                     .create(mockPropertyLayout, mockConfiguration, mockFacetHolder);
 
-            Assert.assertThat(facet, is((Matcher) IsisMatchers.anInstanceOf(PropertyEditStyleFacetForPropertyLayoutAnnotation.class)));
-            Assert.assertThat(facet.value(), is(PropertyEditStyle.INLINE));
+            Assert.assertThat(facet, is((Matcher) IsisMatchers.anInstanceOf(PromptStyleFacetForPropertyLayoutAnnotation.class)));
+            Assert.assertThat(facet.value(), is(PromptStyle.INLINE));
         }
 
         @Test
         public void when_annotated_with_as_configured() throws Exception {
 
             context.checking(new Expectations() {{
-                allowing(mockPropertyLayout).editStyle();
-                will(returnValue(PropertyEditStyle.AS_CONFIGURED));
+                allowing(mockPropertyLayout).promptStyle();
+                will(returnValue(PromptStyle.AS_CONFIGURED));
 
                 oneOf(mockConfiguration).getString("isis.properties.editStyle");
-                will(returnValue(PropertyEditStyle.INLINE.name()));
+                will(returnValue(PromptStyle.INLINE.name()));
 
-                allowing(mockFacetHolder).containsDoOpFacet(PropertyEditStyleFacet.class);
+                allowing(mockFacetHolder).containsDoOpFacet(PromptStyleFacet.class);
                 will(returnValue(false));
             }});
 
-            PropertyEditStyleFacet facet = PropertyEditStyleFacetForPropertyLayoutAnnotation
+            PromptStyleFacet facet = PromptStyleFacetForPropertyLayoutAnnotation
                     .create(mockPropertyLayout, mockConfiguration, mockFacetHolder);
 
-            Assert.assertThat(facet, is((Matcher) IsisMatchers.anInstanceOf(PropertyEditStyleFacetAsConfigured.class)));
-            Assert.assertThat(facet.value(), is(PropertyEditStyle.INLINE));
+            Assert.assertThat(facet, is((Matcher) IsisMatchers.anInstanceOf(PromptStyleFacetAsConfigured.class)));
+            Assert.assertThat(facet.value(), is(PromptStyle.INLINE));
         }
 
         @Test
         public void when_annotated_with_as_configured_but_already_has_doop_facet() throws Exception {
 
             context.checking(new Expectations() {{
-                allowing(mockPropertyLayout).editStyle();
-                will(returnValue(PropertyEditStyle.AS_CONFIGURED));
+                allowing(mockPropertyLayout).promptStyle();
+                will(returnValue(PromptStyle.AS_CONFIGURED));
 
-                oneOf(mockFacetHolder).containsDoOpFacet(PropertyEditStyleFacet.class);
+                oneOf(mockFacetHolder).containsDoOpFacet(PromptStyleFacet.class);
                 will(returnValue(true));
 
                 never(mockConfiguration);
             }});
 
-            PropertyEditStyleFacet facet = PropertyEditStyleFacetForPropertyLayoutAnnotation
+            PromptStyleFacet facet = PromptStyleFacetForPropertyLayoutAnnotation
                     .create(mockPropertyLayout, mockConfiguration, mockFacetHolder);
 
             Assert.assertThat(facet, is(nullValue()));
@@ -117,36 +117,36 @@ public class PropertyEditStyleFacetFromPropertyAnnotation_Test {
         public void when_not_annotated() throws Exception {
 
             context.checking(new Expectations() {{
-                allowing(mockPropertyLayout).editStyle();
+                allowing(mockPropertyLayout).promptStyle();
                 will(returnValue(null));
 
-                allowing(mockFacetHolder).containsDoOpFacet(PropertyEditStyleFacet.class);
+                allowing(mockFacetHolder).containsDoOpFacet(PromptStyleFacet.class);
                 will(returnValue(false));
 
                 never(mockConfiguration);
             }});
 
-            PropertyEditStyleFacet facet = PropertyEditStyleFacetForPropertyLayoutAnnotation
+            PromptStyleFacet facet = PromptStyleFacetForPropertyLayoutAnnotation
                     .create(mockPropertyLayout, mockConfiguration, mockFacetHolder);
 
-            Assert.assertThat(facet.value(), is(PropertyEditStyle.DIALOG));
-            Assert.assertThat(facet, is((Matcher) IsisMatchers.anInstanceOf(PropertyEditStyleFacetFallBack.class)));
+            Assert.assertThat(facet.value(), is(PromptStyle.DIALOG));
+            Assert.assertThat(facet, is((Matcher) IsisMatchers.anInstanceOf(PromptStyleFacetFallBack.class)));
         }
 
         @Test
         public void when_not_annotated_but_already_has_doop_facet() throws Exception {
 
             context.checking(new Expectations() {{
-                allowing(mockPropertyLayout).editStyle();
+                allowing(mockPropertyLayout).promptStyle();
                 will(returnValue(null));
 
-                allowing(mockFacetHolder).containsDoOpFacet(PropertyEditStyleFacet.class);
+                allowing(mockFacetHolder).containsDoOpFacet(PromptStyleFacet.class);
                 will(returnValue(true));
 
                 never(mockConfiguration);
             }});
 
-            PropertyEditStyleFacet facet = PropertyEditStyleFacetForPropertyLayoutAnnotation
+            PromptStyleFacet facet = PromptStyleFacetForPropertyLayoutAnnotation
                     .create(mockPropertyLayout, mockConfiguration, mockFacetHolder);
 
             Assert.assertThat(facet, is(nullValue()));

http://git-wip-us.apache.org/repos/asf/isis/blob/8a4f6d68/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/FormExecutor.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/FormExecutor.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/FormExecutor.java
index 43802b7..a04c1d1 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/FormExecutor.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/FormExecutor.java
@@ -24,6 +24,8 @@ import java.io.Serializable;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.markup.html.form.Form;
 
+import org.apache.isis.applib.annotation.PromptStyle;
+
 /**
  * Passed through the {@link ActionModel} or {@link ScalarModel}, allowing
  * two different Wicket UI components (eg owning <code>ActionPanel</code> and

http://git-wip-us.apache.org/repos/asf/isis/blob/8a4f6d68/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
index 17c32be..918056f 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
@@ -28,7 +28,7 @@ import java.util.List;
 import com.google.common.collect.FluentIterable;
 import com.google.common.collect.Lists;
 
-import org.apache.isis.applib.annotation.PropertyEditStyle;
+import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
 import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
@@ -46,7 +46,7 @@ import org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.fileaccept.FileAcceptFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.mandatory.MandatoryFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.typicallen.TypicalLengthFacet;
-import org.apache.isis.core.metamodel.facets.properties.property.editStyle.PropertyEditStyleFacet;
+import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet;
 import org.apache.isis.core.metamodel.facets.value.bigdecimal.BigDecimalValueFacet;
 import org.apache.isis.core.metamodel.facets.value.string.StringValueSemanticsProvider;
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
@@ -919,12 +919,12 @@ public class ScalarModel extends EntityModel implements LinksProvider,HasFormExe
 
 
 
-    public PropertyEditStyle getEditStyle() {
+    public PromptStyle getEditStyle() {
         if (isEditable()) {
-            PropertyEditStyleFacet facet = getFacet(PropertyEditStyleFacet.class);
-            return facet != null && facet.value() == PropertyEditStyle.INLINE
-                    ? PropertyEditStyle.INLINE
-                    : PropertyEditStyle.DIALOG;
+            PromptStyleFacet facet = getFacet(PromptStyleFacet.class);
+            return facet != null && facet.value() == PromptStyle.INLINE
+                    ? PromptStyle.INLINE
+                    : PromptStyle.DIALOG;
         } else {
             // not editable
             return null;


[27/43] isis git commit: ISIS-1603: ValueChoicesSelect2Panel no longer implements ScalarModelWith{Multi}Pending, instead use the ScalarModel

Posted by da...@apache.org.
ISIS-1603: ValueChoicesSelect2Panel no longer implements ScalarModelWith{Multi}Pending, instead use the ScalarModel


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

Branch: refs/heads/master
Commit: 715e8767f3665538f39922116f5cc958ad9bea09
Parents: e1e28f9
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Thu Apr 27 11:23:48 2017 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Apr 27 13:26:40 2017 +0100

----------------------------------------------------------------------
 .../components/scalars/ScalarPanelAbstract.java | 14 ---------
 .../scalars/reference/ReferencePanel.java       | 16 ++++++----
 .../valuechoices/ValueChoicesSelect2Panel.java  | 32 ++------------------
 3 files changed, 12 insertions(+), 50 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/715e8767/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
index 76109cb..d2e71a1 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
@@ -363,20 +363,6 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
         return select2;
     }
 
-    // the implementation pulled up from ValueChoicesSelect2Panel.
-    // however, uses an overloaded version that relies on VCSP implementing ScalarModlWith{Multi}Pending.  Experimenting as to whether that's actually required...
-//    protected Select2 createSelect2(final String id) {
-//        final Select2 select2;
-//        if(getModel().isCollection()) {
-//            final IModel<ArrayList<ObjectAdapterMemento>> model = ScalarModelWithMultiPending.Util.createModel(this);
-//            select2 = Select2.newSelect2MultiChoice(id, model, scalarModel);
-//        } else {
-//            final IModel<ObjectAdapterMemento> modelObject = ScalarModelWithPending.Util.createModel(this);
-//            select2 = Select2.newSelect2Choice(ID_SCALAR_VALUE, modelObject, scalarModel);
-//        }
-//        return select2;
-//    }
-
 
 
     // //////////////////////////////////////

http://git-wip-us.apache.org/repos/asf/isis/blob/715e8767/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
index c8c8a3f..17be714 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
@@ -532,12 +532,6 @@ public class ReferencePanel extends ScalarPanelAbstract implements PanelWithChoi
         return autoCompleteFacet != null;
     }
 
-    @com.google.inject.Inject
-    private WicketViewerSettings wicketViewerSettings;
-
-    IsisConfiguration getConfiguration() {
-        return getIsisSessionFactory().getConfiguration();
-    }
 
     /**
      * Repaints just the Select2 component
@@ -555,4 +549,14 @@ public class ReferencePanel extends ScalarPanelAbstract implements PanelWithChoi
     }
 
 
+
+    // //////////////////////////////////////
+
+    @com.google.inject.Inject
+    WicketViewerSettings wicketViewerSettings;
+
+    IsisConfiguration getConfiguration() {
+        return getIsisSessionFactory().getConfiguration();
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/715e8767/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
index 7ddf536..fe823ec 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
@@ -16,7 +16,6 @@
  */
 package org.apache.isis.viewer.wicket.ui.components.scalars.valuechoices;
 
-import java.util.ArrayList;
 import java.util.List;
 
 import com.google.common.base.Strings;
@@ -37,8 +36,6 @@ import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
 import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
 import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
-import org.apache.isis.viewer.wicket.model.models.ScalarModelWithMultiPending;
-import org.apache.isis.viewer.wicket.model.models.ScalarModelWithPending;
 import org.apache.isis.viewer.wicket.ui.components.scalars.PanelWithChoices;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelAbstract;
 import org.apache.isis.viewer.wicket.ui.components.widgets.bootstrap.FormGroup;
@@ -46,18 +43,15 @@ import org.apache.isis.viewer.wicket.ui.components.widgets.select2.Select2;
 import org.apache.isis.viewer.wicket.ui.components.widgets.select2.providers.ObjectAdapterMementoProviderForValueChoices;
 import org.apache.isis.viewer.wicket.ui.util.CssClassAppender;
 
-public class ValueChoicesSelect2Panel extends ScalarPanelAbstract implements ScalarModelWithPending, ScalarModelWithMultiPending,
-        PanelWithChoices {
+public class ValueChoicesSelect2Panel extends ScalarPanelAbstract implements PanelWithChoices {
 
 
     private static final long serialVersionUID = 1L;
 
     private Select2 select2;
-    private ObjectAdapterMemento pending;
 
     public ValueChoicesSelect2Panel(final String id, final ScalarModel scalarModel) {
         super(id, scalarModel);
-        pending = scalarModel.getObjectAdapterMemento();
     }
 
 
@@ -283,36 +277,14 @@ public class ValueChoicesSelect2Panel extends ScalarPanelAbstract implements Sca
         }
     }
 
-    // //////////////////////////////////////
-
-    @Override
-    public ObjectAdapterMemento getPending() {
-        return pending;
-    }
-
-    public void setPending(ObjectAdapterMemento pending) {
-        this.pending = pending;
-    }
-
-    @Override
-    public ArrayList<ObjectAdapterMemento> getMultiPending() {
-        final ArrayList<ObjectAdapterMemento> mementos = pending != null ? pending.getList() : null;
-        return mementos == null || mementos.isEmpty() ? null : mementos;
-    }
-
-    @Override
-    public void setMultiPending(final ArrayList<ObjectAdapterMemento> pending) {
-        this.pending = ObjectAdapterMemento.createForList(pending, scalarModel.getTypeOfSpecification().getSpecId());
-    }
 
     public ScalarModel getScalarModel() {
         return scalarModel;
     }
 
-    // //////////////////////////////////////
 
     @com.google.inject.Inject
-    private WicketViewerSettings wicketViewerSettings;
+    WicketViewerSettings wicketViewerSettings;
 
     @Override
     protected String getScalarPanelType() {


[26/43] isis git commit: ISIS-1603: removes some of the duplication between ReferencesPanel and ValueChoicesSelect2Panel (introduces new ScalarPanelSelect2Abstract superclass to hold this stuff).

Posted by da...@apache.org.
ISIS-1603: removes some of the duplication between ReferencesPanel and ValueChoicesSelect2Panel (introduces new ScalarPanelSelect2Abstract superclass to hold this stuff).


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

Branch: refs/heads/master
Commit: 8f8abeabf772423dcfca3c476cdba29091b26450
Parents: 715e876
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Thu Apr 27 12:24:19 2017 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Apr 27 13:26:40 2017 +0100

----------------------------------------------------------------------
 .../components/scalars/ScalarPanelAbstract.java |  25 ----
 .../scalars/ScalarPanelSelect2Abstract.java     | 121 +++++++++++++++++++
 .../reference/EntityLinkSelect2Panel.java       |   2 +-
 .../scalars/reference/ReferencePanel.java       |  90 +++++---------
 .../valuechoices/ValueChoicesSelect2Panel.java  | 113 ++++-------------
 .../ui/components/widgets/select2/Select2.java  |  29 ++---
 .../ObjectAdapterMementoProviderForChoices.java |  48 ++++++++
 ...apterMementoProviderForReferenceChoices.java |   2 +-
 ...ctAdapterMementoProviderForValueChoices.java |   5 +-
 9 files changed, 239 insertions(+), 196 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/8f8abeab/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
index d2e71a1..221e327 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
@@ -19,7 +19,6 @@
 
 package org.apache.isis.viewer.wicket.ui.components.scalars;
 
-import java.util.ArrayList;
 import java.util.List;
 
 import com.google.common.collect.Lists;
@@ -46,13 +45,10 @@ import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.labelat.LabelAtFacet;
 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.ActionPrompt;
 import org.apache.isis.viewer.wicket.model.models.ActionPromptProvider;
 import org.apache.isis.viewer.wicket.model.models.EntityModel;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
-import org.apache.isis.viewer.wicket.model.models.ScalarModelWithMultiPending;
-import org.apache.isis.viewer.wicket.model.models.ScalarModelWithPending;
 import org.apache.isis.viewer.wicket.ui.ComponentType;
 import org.apache.isis.viewer.wicket.ui.components.actionmenu.entityactions.AdditionalLinksPanel;
 import org.apache.isis.viewer.wicket.ui.components.actionmenu.entityactions.EntityActionUtil;
@@ -65,7 +61,6 @@ import org.apache.isis.viewer.wicket.ui.components.scalars.isisapplib.IsisBlobOr
 import org.apache.isis.viewer.wicket.ui.components.scalars.primitive.BooleanPanel;
 import org.apache.isis.viewer.wicket.ui.components.scalars.reference.ReferencePanel;
 import org.apache.isis.viewer.wicket.ui.components.scalars.valuechoices.ValueChoicesSelect2Panel;
-import org.apache.isis.viewer.wicket.ui.components.widgets.select2.Select2;
 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;
@@ -344,28 +339,8 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
     }
 
 
-
-
     // //////////////////////////////////////
 
-    /**
-     * For convenience of implementations that use a select2 dropdown ({@link ReferencePanel} and {@link ValueChoicesSelect2Panel}).
-     */
-    protected Select2 createSelect2(final String id) {
-        final Select2 select2;
-        if(getModel().isCollection()) {
-            final IModel<ArrayList<ObjectAdapterMemento>> model = ScalarModelWithMultiPending.Util.createModel(scalarModel);
-            select2 = Select2.newSelect2MultiChoice(id, model, scalarModel);
-        } else {
-            final IModel<ObjectAdapterMemento> model = ScalarModelWithPending.Util.createModel(scalarModel);
-            select2 = Select2.newSelect2Choice(id, model, scalarModel);
-        }
-        return select2;
-    }
-
-
-
-    // //////////////////////////////////////
 
     private final List<ScalarModelSubscriber> subscribers = Lists.newArrayList();
 

http://git-wip-us.apache.org/repos/asf/isis/blob/8f8abeab/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelSelect2Abstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelSelect2Abstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelSelect2Abstract.java
new file mode 100644
index 0000000..5597368
--- /dev/null
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelSelect2Abstract.java
@@ -0,0 +1,121 @@
+/*
+ *  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.scalars;
+
+import java.util.List;
+
+import com.google.common.base.Strings;
+
+import org.apache.wicket.AttributeModifier;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.FormComponent;
+import org.apache.wicket.model.Model;
+import org.wicketstuff.select2.ChoiceProvider;
+
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
+import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
+import org.apache.isis.viewer.wicket.model.models.ScalarModel;
+import org.apache.isis.viewer.wicket.ui.components.widgets.bootstrap.FormGroup;
+import org.apache.isis.viewer.wicket.ui.components.widgets.select2.Select2;
+import org.apache.isis.viewer.wicket.ui.components.widgets.select2.providers.ObjectAdapterMementoProviderForChoices;
+import org.apache.isis.viewer.wicket.ui.util.CssClassAppender;
+
+public abstract class ScalarPanelSelect2Abstract extends ScalarPanelAbstract {
+
+    private static final long serialVersionUID = 1L;
+
+    protected Select2 select2;
+
+    public ScalarPanelSelect2Abstract(final String id, final ScalarModel scalarModel) {
+        super(id, scalarModel);
+    }
+
+
+    protected Select2 createSelect2(final String id) {
+        final Select2 select2 = Select2.createSelect2(id, scalarModel);
+        setProviderAndCurrAndPending(select2, scalarModel.getActionArgsHint());
+        select2.setRequired(scalarModel.isRequired());
+        return select2;
+    }
+
+    protected Label createScalarName(final String id) {
+        final Label scalarName = new Label(id, getRendering().getLabelCaption(select2.component()));
+        if(getModel().isRequired()) {
+            final String label = scalarName.getDefaultModelObjectAsString();
+            if(!Strings.isNullOrEmpty(label)) {
+                scalarName.add(new CssClassAppender("mandatory"));
+            }
+        }
+        NamedFacet namedFacet = getModel().getFacet(NamedFacet.class);
+        if (namedFacet != null) {
+            scalarName.setEscapeModelStrings(namedFacet.escaped());
+        }
+        return scalarName;
+    }
+
+    protected FormGroup createFormGroupAndName(
+            final FormComponent<?> component,
+            final String formGroupId, final String nameId) {
+        final FormGroup formGroup = new FormGroup(formGroupId, component);
+        final String describedAs = getModel().getDescribedAs();
+        if(describedAs != null) {
+            formGroup.add(new AttributeModifier("title", Model.of(describedAs)));
+        }
+        formGroup.add(component);
+
+        final Label scalarName = createScalarName(nameId);
+        formGroup.addOrReplace(scalarName);
+        return formGroup;
+    }
+
+    /**
+     * sets up the choices, also ensuring that any currently held value is compatible.
+     *
+     * <p>
+     *     For convenience of subclasses using a select2.
+     * </p>
+     */
+    protected void setProviderAndCurrAndPending(final Select2 select2, ObjectAdapter[] argsIfAvailable) {
+
+        final ChoiceProvider<ObjectAdapterMemento> choiceProvider;
+        choiceProvider = buildChoiceProvider(argsIfAvailable);
+
+        select2.setProvider(choiceProvider);
+        getModel().clearPending();
+
+        if(choiceProvider instanceof ObjectAdapterMementoProviderForChoices) {
+            final ObjectAdapterMementoProviderForChoices providerForChoices = (ObjectAdapterMementoProviderForChoices) choiceProvider;
+            resetIfCurrentNotInChoices(select2, providerForChoices.getChoiceMementos());
+        }
+    }
+
+    /**
+     * Mandatory hook (is called by {@link #setProviderAndCurrAndPending(Select2, ObjectAdapter[])})
+     */
+    protected abstract ChoiceProvider<ObjectAdapterMemento> buildChoiceProvider(final ObjectAdapter[] argsIfAvailable);
+
+    /**
+     * Mandatory hook (is called by {@link #setProviderAndCurrAndPending(Select2, ObjectAdapter[])})
+     */
+    protected abstract void resetIfCurrentNotInChoices(final Select2 select2, final List<ObjectAdapterMemento> choicesMementos);
+
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/8f8abeab/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/EntityLinkSelect2Panel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/EntityLinkSelect2Panel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/EntityLinkSelect2Panel.java
index 6aa26c9..6ebab43 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/EntityLinkSelect2Panel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/EntityLinkSelect2Panel.java
@@ -46,7 +46,7 @@ class EntityLinkSelect2Panel extends FormComponentPanelAbstract<ObjectAdapter> i
      */
     @Override
     public boolean checkRequired() {
-        return owningPanel.select2.checkRequired();
+        return owningPanel.getSelect2().checkRequired();
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/isis/blob/8f8abeab/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
index 17be714..bc26781 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
@@ -41,7 +41,6 @@ import org.wicketstuff.select2.Settings;
 import org.apache.isis.core.commons.config.IsisConfiguration;
 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.all.named.NamedFacet;
 import org.apache.isis.core.metamodel.facets.object.autocomplete.AutoCompleteFacet;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
@@ -51,7 +50,7 @@ import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.ComponentFactory;
 import org.apache.isis.viewer.wicket.ui.ComponentType;
 import org.apache.isis.viewer.wicket.ui.components.scalars.PanelWithChoices;
-import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelAbstract;
+import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelSelect2Abstract;
 import org.apache.isis.viewer.wicket.ui.components.widgets.bootstrap.FormGroup;
 import org.apache.isis.viewer.wicket.ui.components.widgets.entitysimplelink.EntityLinkSimplePanel;
 import org.apache.isis.viewer.wicket.ui.components.widgets.select2.Select2;
@@ -59,13 +58,12 @@ import org.apache.isis.viewer.wicket.ui.components.widgets.select2.providers.Obj
 import org.apache.isis.viewer.wicket.ui.components.widgets.select2.providers.ObjectAdapterMementoProviderForReferenceObjectAutoComplete;
 import org.apache.isis.viewer.wicket.ui.components.widgets.select2.providers.ObjectAdapterMementoProviderForReferenceParamOrPropertyAutoComplete;
 import org.apache.isis.viewer.wicket.ui.util.Components;
-import org.apache.isis.viewer.wicket.ui.util.CssClassAppender;
 
 /**
  * Panel for rendering scalars which of are of reference type (as opposed to
  * value types).
  */
-public class ReferencePanel extends ScalarPanelAbstract implements PanelWithChoices {
+public class ReferencePanel extends ScalarPanelSelect2Abstract implements PanelWithChoices {
 
     private static final long serialVersionUID = 1L;
 
@@ -79,8 +77,6 @@ public class ReferencePanel extends ScalarPanelAbstract implements PanelWithChoi
     private static final String KEY_DISABLE_DEPENDENT_CHOICE_AUTO_SELECTION = "isis.viewer.wicket.disableDependentChoiceAutoSelection";
 
     private EntityLinkSelect2Panel entityLink;
-    Select2 select2;
-
 
     private EntityLinkSimplePanel entitySimpleLink;
 
@@ -89,6 +85,11 @@ public class ReferencePanel extends ScalarPanelAbstract implements PanelWithChoi
         super(id, scalarModel);
     }
 
+
+    Select2 getSelect2() {
+        return select2;
+    }
+
     // //////////////////////////////////////
 
     // First called as a side-effect of {@link #beforeRender()}
@@ -112,9 +113,7 @@ public class ReferencePanel extends ScalarPanelAbstract implements PanelWithChoi
     // First called as a side-effect of {@link #beforeRender()}
     @Override
     protected FormGroup createComponentForRegular() {
-        final ScalarModel scalarModel = getModel();
-        final String name = scalarModel.getName();
-        
+
         entityLink = new EntityLinkSelect2Panel(ComponentType.ENTITY_LINK.getWicketId(), this);
 
         entityLink.setRequired(getModel().isRequired());
@@ -126,35 +125,19 @@ public class ReferencePanel extends ScalarPanelAbstract implements PanelWithChoi
         setOutputMarkupId(true);
         entityLink.setOutputMarkupId(true);
         select2.component().setOutputMarkupId(true);
-        select2.component().setLabel(Model.of(name));
-
-        final FormGroup scalarIfRegularFormGroup = new FormGroup(ID_SCALAR_IF_REGULAR, entityLink);
-        scalarIfRegularFormGroup.add(entityLink);
-
-        final String describedAs = getModel().getDescribedAs();
-        if(describedAs != null) {
-            scalarIfRegularFormGroup.add(new AttributeModifier("title", Model.of(describedAs)));
-        }
-
-        final Label scalarName = new Label(ID_SCALAR_NAME, getRendering().getLabelCaption(select2.component()));
-        scalarIfRegularFormGroup.add(scalarName);
-        NamedFacet namedFacet = getModel().getFacet(NamedFacet.class);
-        if (namedFacet != null) {
-            scalarName.setEscapeModelStrings(namedFacet.escaped());
-        }
-        if(getModel().isRequired()) {
-            scalarName.add(new CssClassAppender("mandatory"));
-        }
 
+        final String name = scalarModel.getName();
+        select2.setLabel(Model.of(name));
 
+        final FormGroup formGroup = createFormGroupAndName(this.entityLink, ID_SCALAR_IF_REGULAR, ID_SCALAR_NAME);
 
 
         // add semantics
-        entityLink.setRequired(getModel().isRequired());
-        entityLink.add(new IValidator<ObjectAdapter>() {
-        
+        this.entityLink.setRequired(getModel().isRequired());
+        this.entityLink.add(new IValidator<ObjectAdapter>() {
+
             private static final long serialVersionUID = 1L;
-        
+
             @Override
             public void validate(final IValidatable<ObjectAdapter> validatable) {
                 final ObjectAdapter proposedAdapter = validatable.getValue();
@@ -167,8 +150,7 @@ public class ReferencePanel extends ScalarPanelAbstract implements PanelWithChoi
             }
         });
 
-
-        return scalarIfRegularFormGroup;
+        return formGroup;
     }
 
     @Override
@@ -180,7 +162,6 @@ public class ReferencePanel extends ScalarPanelAbstract implements PanelWithChoi
 
         final Select2 select2 = createSelect2(ID_AUTO_COMPLETE);
 
-        setProviderAndCurrAndPending(select2, getModel().getActionArgsHint());
 
         final Settings settings = select2.getSettings();
 
@@ -206,6 +187,8 @@ public class ReferencePanel extends ScalarPanelAbstract implements PanelWithChoi
         return select2;
     }
 
+
+
     // //////////////////////////////////////
 
     @Override
@@ -378,32 +361,19 @@ public class ReferencePanel extends ScalarPanelAbstract implements PanelWithChoi
     // setProviderAndCurrAndPending
     // //////////////////////////////////////
     
-    // called by syncWithInput, updateChoices
-    private void setProviderAndCurrAndPending(
-            final Select2 select2,
-            final ObjectAdapter[] argsIfAvailable) {
+    @Override
+    protected ChoiceProvider<ObjectAdapterMemento> buildChoiceProvider(final ObjectAdapter[] argsIfAvailable) {
 
-        ChoiceProvider<ObjectAdapterMemento> providerForChoices;
         if (getModel().hasChoices()) {
             List<ObjectAdapterMemento> choiceMementos = obtainChoiceMementos(argsIfAvailable);
-            providerForChoices =
-                    new ObjectAdapterMementoProviderForReferenceChoices(getModel(), wicketViewerSettings, choiceMementos);
-
-        } else if(getModel().hasAutoComplete()) {
-            providerForChoices =
-                    new ObjectAdapterMementoProviderForReferenceParamOrPropertyAutoComplete(getModel(), wicketViewerSettings);
-        } else {
-            providerForChoices =
-                    new ObjectAdapterMementoProviderForReferenceObjectAutoComplete(getModel(), wicketViewerSettings);
+            return new ObjectAdapterMementoProviderForReferenceChoices(getModel(), wicketViewerSettings, choiceMementos);
         }
 
-        select2.setProvider(providerForChoices);
-        getModel().clearPending();
-
-        if(providerForChoices instanceof ObjectAdapterMementoProviderForReferenceChoices) {
-            final ObjectAdapterMementoProviderForReferenceChoices provider = (ObjectAdapterMementoProviderForReferenceChoices) providerForChoices;
-            resetIfCurrentNotInChoices(select2, provider.getChoiceMementos());
+        if(getModel().hasAutoComplete()) {
+            return new ObjectAdapterMementoProviderForReferenceParamOrPropertyAutoComplete(getModel(), wicketViewerSettings);
         }
+
+        return new ObjectAdapterMementoProviderForReferenceObjectAutoComplete(getModel(), wicketViewerSettings);
     }
 
     // called by setProviderAndCurrAndPending
@@ -417,7 +387,8 @@ public class ReferencePanel extends ScalarPanelAbstract implements PanelWithChoi
     }
 
     // called by setProviderAndCurrAndPending
-    private void resetIfCurrentNotInChoices(final Select2 select2, final List<ObjectAdapterMemento> choiceMementos) {
+    @Override
+    protected void resetIfCurrentNotInChoices(final Select2 select2, final List<ObjectAdapterMemento> choiceMementos) {
         final ObjectAdapterMemento curr = select2.getModelObject();
 
         if(!getModel().isCollection()) {
@@ -499,12 +470,11 @@ public class ReferencePanel extends ScalarPanelAbstract implements PanelWithChoi
      */
     @Override
     public boolean updateChoices(ObjectAdapter[] argsIfAvailable) {
-        if(select2 != null) {
-            setProviderAndCurrAndPending(select2, argsIfAvailable);
-            return true;
-        } else {
+        if (select2 == null) {
             return false;
         }
+        setProviderAndCurrAndPending(select2, argsIfAvailable);
+        return true;
     }
 
     

http://git-wip-us.apache.org/repos/asf/isis/blob/8f8abeab/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
index fe823ec..b64b6cc 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
@@ -18,7 +18,6 @@ package org.apache.isis.viewer.wicket.ui.components.scalars.valuechoices;
 
 import java.util.List;
 
-import com.google.common.base.Strings;
 import com.google.common.collect.Lists;
 
 import org.apache.wicket.AttributeModifier;
@@ -32,23 +31,21 @@ import org.apache.wicket.model.Model;
 import org.wicketstuff.select2.ChoiceProvider;
 
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
 import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
 import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.components.scalars.PanelWithChoices;
-import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelAbstract;
+import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelSelect2Abstract;
 import org.apache.isis.viewer.wicket.ui.components.widgets.bootstrap.FormGroup;
 import org.apache.isis.viewer.wicket.ui.components.widgets.select2.Select2;
 import org.apache.isis.viewer.wicket.ui.components.widgets.select2.providers.ObjectAdapterMementoProviderForValueChoices;
 import org.apache.isis.viewer.wicket.ui.util.CssClassAppender;
 
-public class ValueChoicesSelect2Panel extends ScalarPanelAbstract implements PanelWithChoices {
+public class ValueChoicesSelect2Panel extends ScalarPanelSelect2Abstract implements PanelWithChoices {
 
 
     private static final long serialVersionUID = 1L;
 
-    private Select2 select2;
 
     public ValueChoicesSelect2Panel(final String id, final ScalarModel scalarModel) {
         super(id, scalarModel);
@@ -62,45 +59,24 @@ public class ValueChoicesSelect2Panel extends ScalarPanelAbstract implements Pan
 
         // same pattern as in ReferencePanel
         if(select2 == null) {
-            this.select2 = createSelect2AndSemantics();
-
-            final ObjectAdapter[] actionArgsHint = scalarModel.getActionArgsHint();
-            setProviderAndCurrAndPending(select2, actionArgsHint);
-            addStandardSemantics(select2);
+            this.select2 = createSelect2(ID_SCALAR_VALUE);
         } else {
             select2.clearInput();
         }
 
-        final MarkupContainer scalarIfRegularFormGroup = createScalarIfRegularFormGroup();
-        if(getModel().isRequired()) {
-            scalarIfRegularFormGroup.add(new CssClassAppender("mandatory"));
-        }
+        final String name = getModel().getName();
+        select2.setLabel(Model.of(name));
+
+        final FormGroup formGroup = createFormGroupAndName(select2.component(), ID_SCALAR_IF_REGULAR, ID_SCALAR_NAME);
 
-        final Label scalarName = new Label(ID_SCALAR_NAME, getRendering().getLabelCaption(select2.component()));
         if(getModel().isRequired()) {
-            final String label = scalarName.getDefaultModelObjectAsString();
-            if(!Strings.isNullOrEmpty(label)) {
-                scalarName.add(new CssClassAppender("mandatory"));
-            }
-        }
-        scalarIfRegularFormGroup.addOrReplace(scalarName);
-        NamedFacet namedFacet = getModel().getFacet(NamedFacet.class);
-        if (namedFacet != null) {
-            scalarName.setEscapeModelStrings(namedFacet.escaped());
+            formGroup.add(new CssClassAppender("mandatory"));
         }
 
 
-        return scalarIfRegularFormGroup;
+        return formGroup;
     }
 
-    private Select2 createSelect2AndSemantics() {
-        final Select2 select2 = createSelect2(ID_SCALAR_VALUE);
-
-        final ObjectAdapter[] actionArgsHint = scalarModel.getActionArgsHint();
-        setProviderAndCurrAndPending(select2, actionArgsHint);
-        addStandardSemantics(select2);
-        return select2;
-    }
 
     protected Component getScalarValueComponent() {
         return select2.component();
@@ -114,32 +90,6 @@ public class ValueChoicesSelect2Panel extends ScalarPanelAbstract implements Pan
         return Lists.newArrayList(Lists.transform(choices, ObjectAdapterMemento.Functions.fromAdapter()));
     }
 
-    protected void addStandardSemantics(final Select2 select2) {
-        setRequiredIfSpecified(select2);
-    }
-
-    private void setRequiredIfSpecified(final Select2 select2) {
-        final ScalarModel scalarModel = getModel();
-        final boolean required = scalarModel.isRequired();
-        select2.setRequired(required);
-    }
-
-    protected MarkupContainer createScalarIfRegularFormGroup() {
-        final String name = getModel().getName();
-        select2.setLabel(Model.of(name));
-
-        final FormGroup formGroup = new FormGroup(ID_SCALAR_IF_REGULAR, select2.component());
-
-        final String describedAs = getModel().getDescribedAs();
-        if(describedAs != null) {
-            formGroup.add(new AttributeModifier("title", Model.of(describedAs)));
-        }
-
-        formGroup.add(select2.component());
-
-        return formGroup;
-    }
-
     // ///////////////////////////////////////////////////////////////////
 
     @Override
@@ -160,7 +110,6 @@ public class ValueChoicesSelect2Panel extends ScalarPanelAbstract implements Pan
     }
 
 
-
     // ///////////////////////////////////////////////////////////////////
 
     @Override
@@ -206,12 +155,11 @@ public class ValueChoicesSelect2Panel extends ScalarPanelAbstract implements Pan
 
     @Override
     public boolean updateChoices(ObjectAdapter[] argsIfAvailable) {
-        if(select2 != null) {
-            setProviderAndCurrAndPending(select2, argsIfAvailable);
-            return true;
-        } else {
+        if (select2 == null) {
             return false;
         }
+        setProviderAndCurrAndPending(select2, argsIfAvailable);
+        return true;
     }
 
     /**
@@ -224,42 +172,29 @@ public class ValueChoicesSelect2Panel extends ScalarPanelAbstract implements Pan
         target.add(select2.component());
     }
 
-    /**
-     * sets up the choices, also ensuring that any currently held value is compatible.
-     */
-    private void setProviderAndCurrAndPending(final Select2 select2, ObjectAdapter[] argsIfAvailable) {
-
-        final ChoiceProvider<ObjectAdapterMemento> provider;
 
-        // in corresponding code in ReferencePanelFactory, these is a branch for different types of providers
-        // (choice vs autoComplete).  Here though - because values don't currently support autoComplete - no branch is required
+    // in corresponding code in ReferencePanelFactory, these is a branch for different types of providers
+    // (choice vs autoComplete).  Here though - because values don't currently support autoComplete - no branch is required
+    @Override
+    protected ChoiceProvider<ObjectAdapterMemento> buildChoiceProvider(final ObjectAdapter[] argsIfAvailable) {
         final List<ObjectAdapterMemento> choicesMementos = getChoiceMementos(argsIfAvailable);
-        provider = newChoiceProvider(choicesMementos);
-
-        select2.setProvider(provider);
-        getModel().clearPending();
-
-        if(provider instanceof ObjectAdapterMementoProviderForValueChoices) {
-            final ObjectAdapterMementoProviderForValueChoices providerFixed = (ObjectAdapterMementoProviderForValueChoices) provider;
-            final List<ObjectAdapterMemento> choicesMementos1 = providerFixed.getChoicesMementos();
-            resetIfCurrentNotInChoices(select2, choicesMementos1);
-        }
-    }
-
-    private ChoiceProvider<ObjectAdapterMemento> newChoiceProvider(final List<ObjectAdapterMemento> choicesMementos) {
         return new ObjectAdapterMementoProviderForValueChoices(scalarModel, choicesMementos, wicketViewerSettings);
     }
 
-    private void resetIfCurrentNotInChoices(final Select2 select2, final List<ObjectAdapterMemento> choicesMementos) {
-        final ObjectAdapterMemento objectAdapterMemento = getModel().getObjectAdapterMemento();
-        if(objectAdapterMemento == null) {
+    @Override
+    protected void resetIfCurrentNotInChoices(final Select2 select2, final List<ObjectAdapterMemento> choicesMementos) {
+        final ObjectAdapterMemento curr = getModel().getObjectAdapterMemento();
+
+        if(curr == null) {
+
             select2.getModel().setObject(null);
+
         } else {
 
             if(!getModel().isCollection()) {
 
                 // if currently held value is not compatible with choices, then replace with the first choice
-                if(!choicesMementos.contains(objectAdapterMemento)) {
+                if(!choicesMementos.contains(curr)) {
 
                     final ObjectAdapterMemento newAdapterMemento =
                             choicesMementos.isEmpty()

http://git-wip-us.apache.org/repos/asf/isis/blob/8f8abeab/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/Select2.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/Select2.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/Select2.java
index b2c89fe..5bfa8ee 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/Select2.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/Select2.java
@@ -34,6 +34,8 @@ import org.wicketstuff.select2.Settings;
 
 import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
+import org.apache.isis.viewer.wicket.model.models.ScalarModelWithMultiPending;
+import org.apache.isis.viewer.wicket.model.models.ScalarModelWithPending;
 
 /**
  * Wrapper around either a {@link Select2Choice} or a {@link Select2MultiChoice}.
@@ -45,23 +47,16 @@ public class Select2 implements Serializable {
     final Select2ChoiceExt select2Choice;
     final Select2MultiChoiceExt select2MultiChoice;
 
-    public static Select2 newSelect2Choice(
-            final String id,
-            final IModel<ObjectAdapterMemento> singleModel, final ScalarModel parentModel) {
-        return new Select2(
-                Select2ChoiceExt.create(id, singleModel, parentModel),
-                null
-        );
-    }
-
-    public static Select2 newSelect2MultiChoice(
-            final String id,
-            final IModel<ArrayList<ObjectAdapterMemento>> multiModel,
-            final ScalarModel parentModel) {
-        return new Select2(
-                null,
-                Select2MultiChoiceExt.create(id, multiModel, parentModel)
-        );
+    public static Select2 createSelect2(final String id, final ScalarModel scalarModel) {
+        return scalarModel.isCollection()
+                ? new Select2(
+                        null,
+                        Select2MultiChoiceExt.create(id,
+                                ScalarModelWithMultiPending.Util.createModel(scalarModel), scalarModel))
+                : new Select2(
+                        Select2ChoiceExt.create(id,
+                                ScalarModelWithPending.Util.createModel(scalarModel), scalarModel),
+                        null);
     }
 
     private Select2(

http://git-wip-us.apache.org/repos/asf/isis/blob/8f8abeab/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForChoices.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForChoices.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForChoices.java
new file mode 100644
index 0000000..36213eb
--- /dev/null
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForChoices.java
@@ -0,0 +1,48 @@
+/*
+ *  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.
+ */
+/*
+ *  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.widgets.select2.providers;
+
+import java.util.List;
+
+import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
+
+public interface ObjectAdapterMementoProviderForChoices {
+
+    List<ObjectAdapterMemento> getChoiceMementos();
+
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/8f8abeab/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForReferenceChoices.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForReferenceChoices.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForReferenceChoices.java
index 3459fdb..361b1ca 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForReferenceChoices.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForReferenceChoices.java
@@ -48,7 +48,7 @@ import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 
 public class ObjectAdapterMementoProviderForReferenceChoices
-        extends ObjectAdapterMementoProviderAbstract {
+        extends ObjectAdapterMementoProviderAbstract implements ObjectAdapterMementoProviderForChoices {
 
     private static final long serialVersionUID = 1L;
     private final List<ObjectAdapterMemento> choiceMementos;

http://git-wip-us.apache.org/repos/asf/isis/blob/8f8abeab/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForValueChoices.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForValueChoices.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForValueChoices.java
index e17a202..2dcd0ae 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForValueChoices.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForValueChoices.java
@@ -48,7 +48,7 @@ import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 
 public class ObjectAdapterMementoProviderForValueChoices
-        extends ObjectAdapterMementoProviderAbstract {
+        extends ObjectAdapterMementoProviderAbstract implements ObjectAdapterMementoProviderForChoices {
 
     private static final long serialVersionUID = 1L;
     private final List<ObjectAdapterMemento> choicesMementos;
@@ -66,7 +66,7 @@ public class ObjectAdapterMementoProviderForValueChoices
         return obtainMementos(term, choicesMementos);
     }
 
-    public List<ObjectAdapterMemento> getChoicesMementos() {
+    public List<ObjectAdapterMemento> getChoiceMementos() {
         return choicesMementos;
     }
 
@@ -84,5 +84,4 @@ public class ObjectAdapterMementoProviderForValueChoices
         return Lists.newArrayList(FluentIterable.from(mementos).filter(lookupOam).toList());
     }
 
-
 }


[39/43] isis git commit: ISIS-1603: working towards action prompts inline

Posted by da...@apache.org.
http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionPanel.java
index aa0b8d5..a5a53b6 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionPanel.java
@@ -19,36 +19,19 @@
 
 package org.apache.isis.viewer.wicket.ui.components.actions;
 
-import java.util.List;
-
-import com.google.common.base.Throwables;
-
-import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.model.Model;
 
-import org.apache.isis.applib.services.command.Command;
-import org.apache.isis.applib.services.command.Command.Executor;
-import org.apache.isis.applib.services.command.CommandContext;
-import org.apache.isis.applib.services.exceprecog.ExceptionRecognizer;
-import org.apache.isis.applib.services.exceprecog.ExceptionRecognizerComposite;
 import org.apache.isis.core.commons.authentication.MessageBroker;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.version.ConcurrencyException;
-import org.apache.isis.core.runtime.system.transaction.IsisTransactionManager;
 import org.apache.isis.viewer.wicket.model.models.ActionModel;
 import org.apache.isis.viewer.wicket.model.models.ActionPrompt;
-import org.apache.isis.viewer.wicket.model.models.BookmarkableModel;
-import org.apache.isis.viewer.wicket.model.models.BookmarkedPagesModel;
 import org.apache.isis.viewer.wicket.model.models.EntityModel;
-import org.apache.isis.viewer.wicket.model.models.FormExecutor;
 import org.apache.isis.viewer.wicket.ui.ComponentType;
 import org.apache.isis.viewer.wicket.ui.actionresponse.ActionResultResponse;
-import org.apache.isis.viewer.wicket.ui.actionresponse.ActionResultResponseHandlingStrategy;
 import org.apache.isis.viewer.wicket.ui.actionresponse.ActionResultResponseType;
-import org.apache.isis.viewer.wicket.ui.pages.BookmarkedPagesModelProvider;
 import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
 
 /**
@@ -62,7 +45,7 @@ import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
  * <p>
  * TODO: on results panel, have a button to resubmit?
  */
-public class ActionPanel extends PanelAbstract<ActionModel> implements FormExecutor {
+public class ActionPanel extends PanelAbstract<ActionModel> {
 
     private static final long serialVersionUID = 1L;
 
@@ -70,7 +53,6 @@ public class ActionPanel extends PanelAbstract<ActionModel> implements FormExecu
 
     static final String ID_ACTION_NAME = "actionName";
 
-    private ActionPrompt actionPrompt;
 
     /**
      * Gives a chance to hide the header part of this action panel, e.g. when shown in an action prompt
@@ -79,7 +61,7 @@ public class ActionPanel extends PanelAbstract<ActionModel> implements FormExecu
 
     public ActionPanel(final String id, final ActionModel actionModel) {
         super(id, actionModel);
-        actionModel.setFormExecutor(this);
+        actionModel.setFormExecutor(new ActionParametersFormExecutor(this, actionModel));
         buildGui(getActionModel());
     }
 
@@ -87,7 +69,9 @@ public class ActionPanel extends PanelAbstract<ActionModel> implements FormExecu
      * Sets the owning action prompt (modal window), if any.
      */
     public void setActionPrompt(ActionPrompt actionPrompt) {
-        this.actionPrompt = actionPrompt;
+        ActionParametersFormExecutor formExecutor =
+                (ActionParametersFormExecutor) getActionModel().getFormExecutor();
+        formExecutor.setActionPrompt(actionPrompt);
     }
 
     @Override
@@ -149,7 +133,6 @@ public class ActionPanel extends PanelAbstract<ActionModel> implements FormExecu
             @Override
             protected void onConfigure() {
                 super.onConfigure();
-
                 setVisible(showHeader);
             }
         };
@@ -159,7 +142,7 @@ public class ActionPanel extends PanelAbstract<ActionModel> implements FormExecu
 
     private void buildGuiForNoParameters(final ActionModel actionModel) {
 
-        boolean succeeded = executeAndProcessResults(null, null);
+        boolean succeeded = actionModel.getFormExecutor().executeAndProcessResults(null, null);
         if(succeeded) {
             // nothing to do
         } else {
@@ -177,171 +160,10 @@ public class ActionPanel extends PanelAbstract<ActionModel> implements FormExecu
     }
 
 
-    protected void bookmarkPage(BookmarkableModel<?> model) {
-        getBookmarkedPagesModel().bookmarkPage(model);
-    }
-
-    private BookmarkedPagesModel getBookmarkedPagesModel() {
-        BookmarkedPagesModelProvider application = (BookmarkedPagesModelProvider) getSession();
-        return application.getBookmarkedPagesModel();
-    }
-
-    
-    /**
-     * @param feedbackForm - for feedback messages.
-     * @return 
-     */
-    @Override
-    public boolean executeAndProcessResults(AjaxRequestTarget target, Form<?> feedbackForm) {
-
-        permanentlyHide(ComponentType.ENTITY_ICON_AND_TITLE);
-
-        ObjectAdapter targetAdapter = null;
-        try {
-            targetAdapter = getModel().getTargetAdapter();
-
-            // no concurrency exception, so continue...
-            return executeActionOnTargetAndProcessResults(target, feedbackForm);
-
-        } catch (ConcurrencyException ex) {
-
-            // second attempt should succeed, because the Oid would have
-            // been updated in the attempt
-            if (targetAdapter == null) {
-                targetAdapter = getModel().getTargetAdapter();
-            }
-
-            // forward onto the target page with the concurrency exception
-            ActionResultResponse resultResponse = ActionResultResponseType.OBJECT.interpretResult(this.getActionModel(), targetAdapter, ex);
-            resultResponse.getHandlingStrategy().handleResults(this, resultResponse, getIsisSessionFactory());
-
-            getMessageBroker().addWarning(ex.getMessage());
-            return false;
-        }
-    }
-
-    /**
-     * @param target 
-     * @return whether to clear args or not (they aren't if there was a validation exception)
-     */
-    private boolean executeActionOnTargetAndProcessResults(
-            final AjaxRequestTarget target,
-            final Form<?> feedbackForm) {
-        
-        final ActionModel actionModel = getActionModel();
-        
-        // validate the action parameters (if any)
-        final String invalidReasonIfAny = actionModel.getReasonInvalidIfAny();
-        
-        if (invalidReasonIfAny != null) {
-            raiseWarning(target, feedbackForm, invalidReasonIfAny);
-            return false;
-        }
-        
-        final CommandContext commandContext = getServicesInjector().lookupService(CommandContext.class);
-        final Command command;
-        if (commandContext != null) {
-            command = commandContext.getCommand();
-            command.setExecutor(Executor.USER);
-        } else {
-            command = null;
-        }
-        
-        
-        // the object store could raise an exception (eg uniqueness constraint)
-        // so we handle it here.
-        try {
-            // could be programmatic flushing, so must include in the try... finally
-            final ObjectAdapter resultAdapter = getActionModel().executeHandlingApplicationExceptions();
-      
-            // flush any queued changes, so concurrency or violation exceptions (if any)
-            // will be thrown here
-            getTransactionManager().flushTransaction();
-            
-            ActionResultResponse resultResponse = ActionResultResponseType.determineAndInterpretResult(this.getActionModel(), target, resultAdapter);
-            resultResponse.getHandlingStrategy().handleResults(this, resultResponse, getIsisSessionFactory());
-
-            if (actionModel.isBookmarkable()) {
-                bookmarkPage(actionModel);
-            }
-            
-            if(actionPrompt != null) {
-                actionPrompt.closePrompt(target);
-                // cos will be reused next time, so mustn't cache em.
-                actionModel.clearArguments();
-            }
-
-            return true;
-
-        } catch (RuntimeException ex) {
-
-            String message = recognizeException(ex, target, feedbackForm);
-            
-            if (message != null) {
-                // no need to add to message broker, should already have been added...
-                
-                if(feedbackForm == null) {
-                    // forward on instead to void page
-                    // (otherwise, we'll have rendered an action parameters page 
-                    // and so we'll be staying on that page)
-                    ActionResultResponseHandlingStrategy.REDIRECT_TO_VOID.handleResults(this, null, getIsisSessionFactory());
-                }
-
-                return false;
-            }
-            
-            // not handled, so capture and propagate
-            if(command != null) {
-                command.setException(Throwables.getStackTraceAsString(ex));
-            }
-
-            throw ex;
-        }
-    }
-
-
-    private String recognizeException(RuntimeException ex, AjaxRequestTarget target, Form<?> feedbackForm) {
-        
-        // REVIEW: this code is similar to stuff in EntityPropertiesForm, perhaps move up to superclass?
-        // REVIEW: similar code also in WebRequestCycleForIsis; combine?
-        
-        // see if the exception is recognized as being a non-serious error
-        // (nb: similar code in WebRequestCycleForIsis, as a fallback)
-        List<ExceptionRecognizer> exceptionRecognizers = getServicesInjector().lookupServices(ExceptionRecognizer.class);
-        String recognizedErrorIfAny = new ExceptionRecognizerComposite(exceptionRecognizers).recognize(ex);
-        if(recognizedErrorIfAny != null) {
-
-            // recognized
-            raiseWarning(target, feedbackForm, recognizedErrorIfAny);
-
-            getTransactionManager().getCurrentTransaction().clearAbortCause();
-            
-            // there's no need to abort the transaction, it will have already been done
-            // (in IsisTransactionManager#executeWithinTransaction(...)).
-        }
-        return recognizedErrorIfAny;
-    }
 
-    public void raiseWarning(AjaxRequestTarget target, Form<?> feedbackForm, String error) {
-        if(target != null && feedbackForm != null) {
-            target.add(feedbackForm);
-            feedbackForm.error(error);
-        } else {
-            getMessageBroker().addWarning(error);
-        }
-    }
-
-
-    ///////////////////////////////////////////////////////
-    // Dependencies (from context)
-    ///////////////////////////////////////////////////////
-    
-    protected IsisTransactionManager getTransactionManager() {
-        return getPersistenceSession().getTransactionManager();
-    }
-
-    protected MessageBroker getMessageBroker() {
+    private MessageBroker getMessageBroker() {
         return getAuthenticationSession().getMessageBroker();
     }
 
+
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionPanelFactory.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionPanelFactory.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionPanelFactory.java
index 5d33fea..30af5e9 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionPanelFactory.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionPanelFactory.java
@@ -46,8 +46,7 @@ public class ActionPanelFactory extends ComponentFactoryAbstract {
     @Override
     public Component createComponent(final String id, final IModel<?> model) {
         final ActionModel actionModel = (ActionModel) model;
-        final ActionPanel actionPanel = new ActionPanel(id, actionModel);
-        return actionPanel;
+        return new ActionPanel(id, actionModel);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormExecutor.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormExecutor.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormExecutor.java
new file mode 100644
index 0000000..d74cb1d
--- /dev/null
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormExecutor.java
@@ -0,0 +1,247 @@
+package org.apache.isis.viewer.wicket.ui.components.actions;
+
+import java.util.List;
+
+import com.google.common.base.Throwables;
+
+import org.apache.wicket.MarkupContainer;
+import org.apache.wicket.Session;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.markup.html.form.Form;
+
+import org.apache.isis.applib.services.command.Command;
+import org.apache.isis.applib.services.command.CommandContext;
+import org.apache.isis.applib.services.exceprecog.ExceptionRecognizer;
+import org.apache.isis.applib.services.exceprecog.ExceptionRecognizerComposite;
+import org.apache.isis.core.commons.authentication.AuthenticationSession;
+import org.apache.isis.core.commons.authentication.MessageBroker;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.adapter.version.ConcurrencyException;
+import org.apache.isis.core.metamodel.services.ServicesInjector;
+import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
+import org.apache.isis.core.runtime.system.context.IsisContext;
+import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
+import org.apache.isis.core.runtime.system.session.IsisSessionFactory;
+import org.apache.isis.core.runtime.system.transaction.IsisTransactionManager;
+import org.apache.isis.viewer.wicket.model.models.ActionModel;
+import org.apache.isis.viewer.wicket.model.models.ActionPrompt;
+import org.apache.isis.viewer.wicket.model.models.BookmarkableModel;
+import org.apache.isis.viewer.wicket.model.models.BookmarkedPagesModel;
+import org.apache.isis.viewer.wicket.model.models.FormExecutor;
+import org.apache.isis.viewer.wicket.ui.ComponentType;
+import org.apache.isis.viewer.wicket.ui.actionresponse.ActionResultResponse;
+import org.apache.isis.viewer.wicket.ui.actionresponse.ActionResultResponseHandlingStrategy;
+import org.apache.isis.viewer.wicket.ui.actionresponse.ActionResultResponseType;
+import org.apache.isis.viewer.wicket.ui.pages.BookmarkedPagesModelProvider;
+import org.apache.isis.viewer.wicket.ui.util.Components;
+
+public class ActionParametersFormExecutor implements FormExecutor {
+
+    private final MarkupContainer panel;
+    private final ActionModel actionModel;
+
+    public ActionParametersFormExecutor(final MarkupContainer panel, final ActionModel actionModel) {
+        this.panel = panel;
+        this.actionModel = actionModel;
+    }
+
+    private ActionPrompt actionPrompt;
+
+    /**
+     * @param feedbackForm - for feedback messages.
+     * @return
+     */
+    @Override
+    public boolean executeAndProcessResults(AjaxRequestTarget target, Form<?> feedbackForm) {
+
+        Components.permanentlyHide(panel, ComponentType.ENTITY_ICON_AND_TITLE);
+
+        ObjectAdapter targetAdapter = null;
+        try {
+            targetAdapter = actionModel.getTargetAdapter();
+
+            // no concurrency exception, so continue...
+            return executeActionOnTargetAndProcessResults(target, feedbackForm);
+
+        } catch (ConcurrencyException ex) {
+
+            // second attempt should succeed, because the Oid would have
+            // been updated in the attempt
+            if (targetAdapter == null) {
+                targetAdapter = actionModel.getTargetAdapter();
+            }
+
+            // forward onto the target page with the concurrency exception
+            ActionResultResponse resultResponse = ActionResultResponseType.OBJECT
+                    .interpretResult(actionModel, targetAdapter, ex);
+            resultResponse.getHandlingStrategy().handleResults(panel, resultResponse, getIsisSessionFactory());
+
+            getMessageBroker().addWarning(ex.getMessage());
+            return false;
+        }
+    }
+
+    /**
+     * @param target
+     * @return whether to clear args or not (they aren't if there was a validation exception)
+     */
+    private boolean executeActionOnTargetAndProcessResults(
+            final AjaxRequestTarget target,
+            final Form<?> feedbackForm) {
+
+        // validate the action parameters (if any)
+        final String invalidReasonIfAny = actionModel.getReasonInvalidIfAny();
+
+        if (invalidReasonIfAny != null) {
+            raiseWarning(target, feedbackForm, invalidReasonIfAny);
+            return false;
+        }
+
+        final CommandContext commandContext = getServicesInjector().lookupService(CommandContext.class);
+        final Command command;
+        if (commandContext != null) {
+            command = commandContext.getCommand();
+            command.setExecutor(Command.Executor.USER);
+        } else {
+            command = null;
+        }
+
+        // the object store could raise an exception (eg uniqueness constraint)
+        // so we handle it here.
+        try {
+            // could be programmatic flushing, so must include in the try... finally
+            final ObjectAdapter resultAdapter = actionModel.executeHandlingApplicationExceptions();
+
+            // flush any queued changes, so concurrency or violation exceptions (if any)
+            // will be thrown here
+            getTransactionManager().flushTransaction();
+
+            ActionResultResponse resultResponse = ActionResultResponseType
+                    .determineAndInterpretResult(actionModel, target, resultAdapter);
+            resultResponse.getHandlingStrategy().handleResults(panel, resultResponse, getIsisSessionFactory());
+
+            if (actionModel.isBookmarkable()) {
+                bookmarkPage(actionModel);
+            }
+
+            if (actionPrompt != null) {
+                actionPrompt.closePrompt(target);
+                // cos will be reused next time, so mustn't cache em.
+                actionModel.clearArguments();
+            }
+
+            return true;
+
+        } catch (RuntimeException ex) {
+
+            String message = recognizeException(ex, target, feedbackForm);
+
+            if (message != null) {
+                // no need to add to message broker, should already have been added...
+
+                if (feedbackForm == null) {
+                    // forward on instead to void page
+                    // (otherwise, we'll have rendered an action parameters page
+                    // and so we'll be staying on that page)
+                    ActionResultResponseHandlingStrategy.REDIRECT_TO_VOID
+                            .handleResults(panel, null, getIsisSessionFactory());
+                }
+
+                return false;
+            }
+
+            // not handled, so capture and propagate
+            if (command != null) {
+                command.setException(Throwables.getStackTraceAsString(ex));
+            }
+
+            throw ex;
+        }
+    }
+
+    private String recognizeException(RuntimeException ex, AjaxRequestTarget target, Form<?> feedbackForm) {
+
+        // REVIEW: this code is similar to stuff in EntityPropertiesForm, perhaps move up to superclass?
+        // REVIEW: similar code also in WebRequestCycleForIsis; combine?
+
+        // see if the exception is recognized as being a non-serious error
+        // (nb: similar code in WebRequestCycleForIsis, as a fallback)
+        List<ExceptionRecognizer> exceptionRecognizers = getServicesInjector()
+                .lookupServices(ExceptionRecognizer.class);
+        String recognizedErrorIfAny = new ExceptionRecognizerComposite(exceptionRecognizers).recognize(ex);
+        if (recognizedErrorIfAny != null) {
+
+            // recognized
+            raiseWarning(target, feedbackForm, recognizedErrorIfAny);
+
+            getTransactionManager().getCurrentTransaction().clearAbortCause();
+
+            // there's no need to abort the transaction, it will have already been done
+            // (in IsisTransactionManager#executeWithinTransaction(...)).
+        }
+        return recognizedErrorIfAny;
+    }
+
+    public void raiseWarning(AjaxRequestTarget target, Form<?> feedbackForm, String error) {
+        if (target != null && feedbackForm != null) {
+            target.add(feedbackForm);
+            feedbackForm.error(error);
+        } else {
+            getMessageBroker().addWarning(error);
+        }
+    }
+
+    void setActionPrompt(final ActionPrompt actionPrompt) {
+        this.actionPrompt = actionPrompt;
+    }
+
+    ///////////////////////////////////////////////////////
+    // Dependencies (from context)
+    ///////////////////////////////////////////////////////
+
+    protected void bookmarkPage(BookmarkableModel<?> model) {
+        getBookmarkedPagesModel().bookmarkPage(model);
+    }
+
+    // ///////////////////////////////////////////////////////////////////
+    // Dependencies (from IsisContext)
+    // ///////////////////////////////////////////////////////////////////
+
+    protected PersistenceSession getPersistenceSession() {
+        return getIsisSessionFactory().getCurrentSession().getPersistenceSession();
+    }
+
+    protected ServicesInjector getServicesInjector() {
+        return getIsisSessionFactory().getServicesInjector();
+    }
+
+    protected SpecificationLoader getSpecificationLoader() {
+        return getIsisSessionFactory().getSpecificationLoader();
+    }
+
+    private IsisTransactionManager getTransactionManager() {
+        return getPersistenceSession().getTransactionManager();
+    }
+
+    private MessageBroker getMessageBroker() {
+        return getAuthenticationSession().getMessageBroker();
+    }
+
+    protected IsisSessionFactory getIsisSessionFactory() {
+        return IsisContext.getSessionFactory();
+    }
+
+    protected AuthenticationSession getAuthenticationSession() {
+        return getIsisSessionFactory().getCurrentSession().getAuthenticationSession();
+    }
+
+    private BookmarkedPagesModel getBookmarkedPagesModel() {
+        BookmarkedPagesModelProvider application = (BookmarkedPagesModelProvider) getSession();
+        return application.getBookmarkedPagesModel();
+    }
+
+    Session getSession() {
+        return Session.get();
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/CollectionPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/CollectionPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/CollectionPanel.java
index 636236d..c613ac9 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/CollectionPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/CollectionPanel.java
@@ -27,13 +27,15 @@ import org.apache.wicket.Component;
 import org.apache.wicket.feedback.ComponentFeedbackMessageFilter;
 import org.apache.wicket.markup.html.basic.Label;
 
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 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.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.actionmenu.entityactions.EntityActionUtil;
+import org.apache.isis.viewer.wicket.ui.components.actionmenu.entityactions.LinkAndLabelUtil;
 import org.apache.isis.viewer.wicket.ui.components.collection.selector.CollectionSelectorPanel;
 import org.apache.isis.viewer.wicket.ui.components.collection.selector.CollectionSelectorProvider;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelAbstract;
@@ -64,12 +66,13 @@ public class CollectionPanel extends PanelAbstract<EntityCollectionModel> implem
 
         final OneToManyAssociation otma = collectionModel.getCollectionMemento().getCollection(collectionModel.getSpecificationLoader());
         final EntityModel entityModel = collectionModel.getEntityModel();
-
+        final ObjectAdapter adapter = entityModel.load(AdapterManager.ConcurrencyChecking.NO_CHECK);
+        
         final List<ObjectAction> associatedActions =
-                EntityActionUtil.getObjectActionsForAssociation(entityModel, otma, getDeploymentCategory());
+                ObjectAction.Util.findForAssociation(adapter, otma, getDeploymentCategory());
 
         entityActionLinks.addAll(
-                EntityActionUtil.asLinkAndLabelsForAdditionalLinksPanel(entityModel, associatedActions));
+                LinkAndLabelUtil.asActionLinksForAdditionalLinksPanel(entityModel, associatedActions, null));
 
         collectionModel.addEntityActions(entityActionLinks);
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/fieldset/PropertyGroup.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/fieldset/PropertyGroup.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/fieldset/PropertyGroup.java
index 9dfe29b..c758b8d 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/fieldset/PropertyGroup.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/fieldset/PropertyGroup.java
@@ -51,7 +51,7 @@ import org.apache.isis.viewer.wicket.model.models.EntityModel;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.ComponentType;
 import org.apache.isis.viewer.wicket.ui.components.actionmenu.entityactions.AdditionalLinksPanel;
-import org.apache.isis.viewer.wicket.ui.components.actionmenu.entityactions.EntityActionUtil;
+import org.apache.isis.viewer.wicket.ui.components.actionmenu.entityactions.LinkAndLabelUtil;
 import org.apache.isis.viewer.wicket.ui.panels.HasDynamicallyVisibleContent;
 import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
 import org.apache.isis.viewer.wicket.ui.util.Components;
@@ -164,20 +164,20 @@ public class PropertyGroup extends PanelAbstract<EntityModel> implements HasDyna
             final OneToOneAssociation otoa,
             final WebMarkupContainer container,
             final List<LinkAndLabel> entityActions) {
-        final PropertyMemento pm = new PropertyMemento(otoa, entityModel.getIsisSessionFactory());
 
+        final PropertyMemento pm = new PropertyMemento(otoa, entityModel.getIsisSessionFactory());
         final ScalarModel scalarModel = entityModel.getPropertyModel(pm);
         getComponentFactoryRegistry()
                 .addOrReplaceComponent(container, ID_PROPERTY, ComponentType.SCALAR_NAME_AND_VALUE, scalarModel);
 
+        final ObjectAdapter adapter = entityModel.load(AdapterManager.ConcurrencyChecking.NO_CHECK);
         final List<ObjectAction> associatedActions =
-                EntityActionUtil.getObjectActionsForAssociation(entityModel, otoa, getDeploymentCategory());
+                ObjectAction.Util.findForAssociation(adapter, otoa, getDeploymentCategory());
 
         entityActions.addAll(
-                EntityActionUtil.asLinkAndLabelsForAdditionalLinksPanel(entityModel, associatedActions));
+                LinkAndLabelUtil.asActionLinksForAdditionalLinksPanel(entityModel, associatedActions, null));
     }
 
-
     private boolean visible = false;
     @Override
     public boolean isVisible() {

http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/header/EntityHeaderPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/header/EntityHeaderPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/header/EntityHeaderPanel.java
index 02408e3..594d353 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/header/EntityHeaderPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/header/EntityHeaderPanel.java
@@ -31,7 +31,7 @@ import org.apache.isis.viewer.wicket.ui.ComponentFactory;
 import org.apache.isis.viewer.wicket.ui.ComponentType;
 import org.apache.isis.viewer.wicket.ui.components.actionmenu.entityactions.AdditionalLinksPanel;
 import org.apache.isis.viewer.wicket.ui.components.actionmenu.entityactions.EntityActionLinkFactory;
-import org.apache.isis.viewer.wicket.ui.components.actionmenu.entityactions.EntityActionUtil;
+import org.apache.isis.viewer.wicket.ui.components.actionmenu.entityactions.LinkAndLabelUtil;
 import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
 
 /**
@@ -44,12 +44,10 @@ public class EntityHeaderPanel extends PanelAbstract<EntityModel> {
 
     private static final String ID_ENTITY_ACTIONS = "entityActions";
 
-    private final EntityActionLinkFactory linkFactory;
 
 
     public EntityHeaderPanel(final String id, final EntityModel entityModel) {
         super(id, entityModel);
-        linkFactory = new EntityActionLinkFactory(getEntityModel());
     }
 
     /**
@@ -81,9 +79,11 @@ public class EntityHeaderPanel extends PanelAbstract<EntityModel> {
         final EntityModel model = getModel();
         final ObjectAdapter adapter = model.getObject();
         if (adapter != null) {
-            final List<ObjectAction> topLevelActions = EntityActionUtil.getTopLevelActions(adapter, getDeploymentCategory());
+            final List<ObjectAction> topLevelActions = ObjectAction.Util
+                    .findTopLevel(adapter, getDeploymentCategory());
 
-            final List<LinkAndLabel> entityActionLinks = EntityActionUtil.asLinkAndLabelsForAdditionalLinksPanel(model, topLevelActions);
+            final List<LinkAndLabel> entityActionLinks = LinkAndLabelUtil
+                    .asActionLinksForAdditionalLinksPanel(model, topLevelActions, null);
 
             AdditionalLinksPanel.addAdditionalLinks(this, ID_ENTITY_ACTIONS, entityActionLinks, AdditionalLinksPanel.Style.INLINE_LIST);
         } else {

http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/layout/bs3/col/Col.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/layout/bs3/col/Col.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/layout/bs3/col/Col.java
index 282fab7..928aed7 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/layout/bs3/col/Col.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/layout/bs3/col/Col.java
@@ -18,11 +18,19 @@
  */
 package org.apache.isis.viewer.wicket.ui.components.layout.bs3.col;
 
+import java.util.List;
+
+import javax.annotation.Nullable;
+
 import com.google.common.base.Function;
 import com.google.common.base.Predicate;
 import com.google.common.base.Predicates;
 import com.google.common.collect.FluentIterable;
 import com.google.common.collect.Lists;
+
+import org.apache.wicket.Component;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.layout.component.ActionLayoutData;
 import org.apache.isis.applib.layout.component.CollectionLayoutData;
@@ -40,7 +48,7 @@ import org.apache.isis.viewer.wicket.model.models.EntityModel;
 import org.apache.isis.viewer.wicket.ui.ComponentFactory;
 import org.apache.isis.viewer.wicket.ui.ComponentType;
 import org.apache.isis.viewer.wicket.ui.components.actionmenu.entityactions.AdditionalLinksPanel;
-import org.apache.isis.viewer.wicket.ui.components.actionmenu.entityactions.EntityActionUtil;
+import org.apache.isis.viewer.wicket.ui.components.actionmenu.entityactions.LinkAndLabelUtil;
 import org.apache.isis.viewer.wicket.ui.components.entity.fieldset.PropertyGroup;
 import org.apache.isis.viewer.wicket.ui.components.layout.bs3.Util;
 import org.apache.isis.viewer.wicket.ui.components.layout.bs3.row.Row;
@@ -49,11 +57,6 @@ import org.apache.isis.viewer.wicket.ui.panels.HasDynamicallyVisibleContent;
 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;
-import org.apache.wicket.Component;
-import org.apache.wicket.markup.html.WebMarkupContainer;
-
-import javax.annotation.Nullable;
-import java.util.List;
 
 public class Col extends PanelAbstract<EntityModel> implements HasDynamicallyVisibleContent {
 
@@ -145,9 +148,9 @@ public class Col extends PanelAbstract<EntityModel> implements HasDynamicallyVis
                     })
                     .toList();
         final List<LinkAndLabel> entityActionLinks =
-                EntityActionUtil.asLinkAndLabelsForAdditionalLinksPanel(getModel(), visibleActions);
+                LinkAndLabelUtil.asActionLinksForAdditionalLinksPanel(getModel(), visibleActions, null);
 
-        if(!entityActionLinks.isEmpty()) {
+        if (!entityActionLinks.isEmpty()) {
             AdditionalLinksPanel.addAdditionalLinks(actionOwner, actionIdToUse, entityActionLinks, AdditionalLinksPanel.Style.INLINE_LIST);
             visible = true;
         } else {

http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditFormExecutor.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditFormExecutor.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditFormExecutor.java
index ac26554..7f96831 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditFormExecutor.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditFormExecutor.java
@@ -33,7 +33,7 @@ import org.apache.isis.viewer.wicket.ui.util.Components;
 
 public class PropertyEditFormExecutor implements FormExecutor {
 
-    private MarkupContainer panel;
+    private final MarkupContainer panel;
     private final ScalarModel scalarModel;
 
     public PropertyEditFormExecutor(final MarkupContainer panel, final ScalarModel scalarModel) {
@@ -211,11 +211,11 @@ public class PropertyEditFormExecutor implements FormExecutor {
         return getIsisSessionFactory().getSpecificationLoader();
     }
 
-    protected IsisTransactionManager getTransactionManager() {
+    private IsisTransactionManager getTransactionManager() {
         return getPersistenceSession().getTransactionManager();
     }
 
-    protected MessageBroker getMessageBroker() {
+    private MessageBroker getMessageBroker() {
         return getAuthenticationSession().getMessageBroker();
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
index 50a6a36..d57dabe 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
@@ -51,7 +51,7 @@ import org.apache.isis.viewer.wicket.model.models.EntityModel;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.ComponentType;
 import org.apache.isis.viewer.wicket.ui.components.actionmenu.entityactions.AdditionalLinksPanel;
-import org.apache.isis.viewer.wicket.ui.components.actionmenu.entityactions.EntityActionUtil;
+import org.apache.isis.viewer.wicket.ui.components.actionmenu.entityactions.LinkAndLabelUtil;
 import org.apache.isis.viewer.wicket.ui.components.property.PropertyEditFormExecutor;
 import org.apache.isis.viewer.wicket.ui.components.property.PropertyEditFormPanel;
 import org.apache.isis.viewer.wicket.ui.components.property.PropertyEditPanel;
@@ -87,7 +87,7 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
     /**
      * as per {@link #scalarIfRegularInlinePromptForm}.
      */
-    protected static final String ID_SCALAR_IF_REGULAR_INLINE_PROMPT_FORM = "scalarIfRegularInlinePromptForm";
+    public static final String ID_SCALAR_IF_REGULAR_INLINE_PROMPT_FORM = "scalarIfRegularInlinePromptForm";
 
 
     private static final String ID_EDIT_PROPERTY = "editProperty";
@@ -232,22 +232,21 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
         this.scalarIfRegular = createComponentForRegular();
         scalarTypeContainer.addOrReplace(scalarIfCompact, scalarIfRegular);
 
-        final List<LinkAndLabel> entityActions =
-                EntityActionUtil.getEntityActionLinksForAssociation(this.scalarModel, getDeploymentCategory());
-        addPositioningCssTo(scalarIfRegular, entityActions);
-        addEntityActionLinksBelowAndRight(scalarIfRegular, entityActions);
-
-        addEditPropertyTo(scalarIfRegular);
-        addFeedbackOnlyTo(scalarIfRegular, getScalarValueComponent());
-
         final InlinePromptConfig inlinePromptConfig = getInlinePromptConfig();
-
         if(inlinePromptConfig.isSupported()) {
             this.scalarIfRegularInlinePromptForm = createInlinePromptForm();
             scalarTypeContainer.addOrReplace(scalarIfRegularInlinePromptForm);
             inlinePromptLink = createInlinePromptLink();
             scalarIfRegular.add(inlinePromptLink);
 
+            // even if this particular scalarModel (property) is not configured for inline edits, it's possible that
+            // one of the associated actions is.  Thus we set the prompt context
+            scalarModel.setInlinePromptContext(
+                    new ScalarModel.InlinePromptContext(
+                            getComponentForRegular(),
+                            scalarIfRegularInlinePromptForm, scalarTypeContainer));
+
+            // and we configure the prompt link if _this_ property is configured for inline edits...
             final PromptStyle promptStyle = this.scalarModel.getPromptStyle();
             if(promptStyle == PromptStyle.INLINE) {
                 configureInlinePromptLinkCallback(inlinePromptLink);
@@ -266,8 +265,17 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
             getScalarValueComponent().add(new AttributeAppender("tabindex", "-1"));
         }
 
+        final List<LinkAndLabel> actionLinks =
+                LinkAndLabelUtil.asActionLinksForAssociation(this.scalarModel, getDeploymentCategory());
+        addPositioningCssTo(scalarIfRegular, actionLinks);
+        addActionLinksBelowAndRight(scalarIfRegular, actionLinks);
+
+        addEditPropertyTo(scalarIfRegular);
+        addFeedbackOnlyTo(scalarIfRegular, getScalarValueComponent());
+
+
         getRendering().buildGui(this);
-        addCssForMetaModel();
+        addCssFromMetaModel();
 
         notifyOnChange(this);
         addFormComponentBehaviourToUpdateSubscribers();
@@ -293,7 +301,7 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
     }
 
 
-    private void addCssForMetaModel() {
+    private void addCssFromMetaModel() {
         final String cssForMetaModel = getModel().getLongName();
         if (cssForMetaModel != null) {
             add(new AttributeAppender("class", Model.of(cssForMetaModel), " "));
@@ -513,10 +521,6 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
                 final PropertyEditFormExecutor formExecutor =
                         new PropertyEditFormExecutor(ScalarPanelAbstract.this, scalarModel);
                 scalarModel.setFormExecutor(formExecutor);
-                scalarModel.setInlinePromptContext(
-                        new ScalarModel.InlinePromptContext(
-                                getComponentForRegular(),
-                                scalarIfRegularInlinePromptForm));
 
                 switchFormForInlinePrompt(target);
 
@@ -600,14 +604,14 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
         markupContainer.addOrReplace(new NotificationPanel(ID_FEEDBACK, component, new ComponentFeedbackMessageFilter(component)));
     }
 
-    private void addEntityActionLinksBelowAndRight(
+    private void addActionLinksBelowAndRight(
             final MarkupContainer labelIfRegular,
-            final List<LinkAndLabel> entityActions) {
-        final List<LinkAndLabel> entityActionsBelow = LinkAndLabel.positioned(entityActions, ActionLayout.Position.BELOW);
-        AdditionalLinksPanel.addAdditionalLinks(labelIfRegular, ID_ASSOCIATED_ACTION_LINKS_BELOW, entityActionsBelow, AdditionalLinksPanel.Style.INLINE_LIST);
+            final List<LinkAndLabel> linkAndLabels) {
+        final List<LinkAndLabel> linksBelow = LinkAndLabel.positioned(linkAndLabels, ActionLayout.Position.BELOW);
+        AdditionalLinksPanel.addAdditionalLinks(labelIfRegular, ID_ASSOCIATED_ACTION_LINKS_BELOW, linksBelow, AdditionalLinksPanel.Style.INLINE_LIST);
 
-        final List<LinkAndLabel> entityActionsRight = LinkAndLabel.positioned(entityActions, ActionLayout.Position.RIGHT);
-        AdditionalLinksPanel.addAdditionalLinks(labelIfRegular, ID_ASSOCIATED_ACTION_LINKS_RIGHT, entityActionsRight, AdditionalLinksPanel.Style.DROPDOWN);
+        final List<LinkAndLabel> linksRight = LinkAndLabel.positioned(linkAndLabels, ActionLayout.Position.RIGHT);
+        AdditionalLinksPanel.addAdditionalLinks(labelIfRegular, ID_ASSOCIATED_ACTION_LINKS_RIGHT, linksRight, AdditionalLinksPanel.Style.DROPDOWN);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLinkFactoryAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLinkFactoryAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLinkFactoryAbstract.java
index 421ce86..e108ec5 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLinkFactoryAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLinkFactoryAbstract.java
@@ -20,6 +20,7 @@ package org.apache.isis.viewer.wicket.ui.components.widgets.linkandlabel;
 import java.util.concurrent.Callable;
 
 import org.apache.wicket.Application;
+import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
 import org.apache.wicket.ajax.markup.html.AjaxLink;
@@ -28,6 +29,7 @@ import org.apache.wicket.markup.ComponentTag;
 import org.apache.wicket.markup.html.link.AbstractLink;
 import org.apache.wicket.request.IRequestHandler;
 
+import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
@@ -37,11 +39,14 @@ import org.apache.isis.viewer.wicket.model.links.LinkAndLabel;
 import org.apache.isis.viewer.wicket.model.models.ActionModel;
 import org.apache.isis.viewer.wicket.model.models.ActionPrompt;
 import org.apache.isis.viewer.wicket.model.models.ActionPromptProvider;
+import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.ComponentType;
 import org.apache.isis.viewer.wicket.ui.app.registry.ComponentFactoryRegistry;
 import org.apache.isis.viewer.wicket.ui.app.registry.ComponentFactoryRegistryAccessor;
 import org.apache.isis.viewer.wicket.ui.components.actionprompt.ActionPromptHeaderPanel;
 import org.apache.isis.viewer.wicket.ui.components.actions.ActionPanel;
+import org.apache.isis.viewer.wicket.ui.components.actions.ActionParametersFormExecutor;
+import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelAbstract;
 import org.apache.isis.viewer.wicket.ui.pages.PageClassRegistry;
 import org.apache.isis.viewer.wicket.ui.pages.PageClassRegistryAccessor;
 import org.apache.isis.viewer.wicket.ui.panels.PanelUtil;
@@ -53,6 +58,12 @@ public abstract class ActionLinkFactoryAbstract implements ActionLinkFactory {
 
     private static final long serialVersionUID = 1L;
 
+    private final ScalarModel scalarModelForAssociationIfAny;
+
+    protected ActionLinkFactoryAbstract(final ScalarModel scalarModelForAssociationIfAny) {
+        this.scalarModelForAssociationIfAny = scalarModelForAssociationIfAny;
+    }
+
     protected AbstractLink newLink(
             final String linkId,
             final ObjectAdapter objectAdapter,
@@ -65,112 +76,47 @@ public abstract class ActionLinkFactoryAbstract implements ActionLinkFactory {
         // TODO: see https://issues.apache.org/jira/browse/ISIS-1264 for further detail.
         final AjaxDeferredBehaviour ajaxDeferredBehaviour = determineDeferredBehaviour(action, actionModel);
 
-        // TODO: could remove some of the copy-n-paste between IndicatingAjaxLink and AjaxLink
         final AbstractLink link = getSettings().isUseIndicatorForNoArgAction()
                 ? new IndicatingAjaxLink<Object>(linkId) {
                     private static final long serialVersionUID = 1L;
 
                     @Override
                     public void onClick(AjaxRequestTarget target) {
-
-                        if (ajaxDeferredBehaviour != null) {
-                            ajaxDeferredBehaviour.initiate(target);
-                        }
-                        else {
-                            final ActionPromptProvider promptProvider = ActionPromptProvider.Util.getFrom(getPage());
-                            final ActionPrompt actionPrompt = promptProvider.getActionPrompt();
-                            final ActionPromptHeaderPanel titlePanel =
-                                    PersistenceSession.ConcurrencyChecking.executeWithConcurrencyCheckingDisabled(
-                                    new Callable<ActionPromptHeaderPanel>() {
-                                        @Override
-                                        public ActionPromptHeaderPanel call() throws Exception {
-                                            final String titleId = actionPrompt.getTitleId();
-                                            return new ActionPromptHeaderPanel(titleId, actionModel);
-                                        }
-                                    });
-                            final ActionPanel actionPanel =
-                                    (ActionPanel) getComponentFactoryRegistry().createComponent(
-                                            ComponentType.ACTION_PROMPT, actionPrompt.getContentId(), actionModel);
-
-                            actionPanel.setShowHeader(false);
-
-                            actionPrompt.setTitle(titlePanel, target);
-                            actionPrompt.setPanel(actionPanel, target);
-                            actionPanel.setActionPrompt(actionPrompt);
-                            actionPrompt.showPrompt(target);
-                        }
+                        ActionLinkFactoryAbstract.this.onClick(target, ajaxDeferredBehaviour, actionModel, this);
                     }
 
                     @Override
                     protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
                         super.updateAjaxAttributes(attributes);
-                        if(getSettings().isPreventDoubleClickForNoArgAction()) {
-                            PanelUtil.disableBeforeReenableOnComplete(attributes, this);
-                        }
-
-                        // allow the event to bubble so the menu is hidden after click on an item
-                        attributes.setEventPropagation(AjaxRequestAttributes.EventPropagation.BUBBLE);
+                        ActionLinkFactoryAbstract.this.updateAjaxAttributes(attributes, this);
                     }
 
                     @Override
                     protected void onComponentTag(ComponentTag tag) {
                         super.onComponentTag(tag);
-
                         Buttons.fixDisabledState(this, tag);
                     }
                 } :
                 new AjaxLink<Object>(linkId) {
-            private static final long serialVersionUID = 1L;
-
-            @Override
-            public void onClick(AjaxRequestTarget target) {
-
-                if (ajaxDeferredBehaviour != null) {
-                    ajaxDeferredBehaviour.initiate(target);
-                }
-                else {
-                    final ActionPromptProvider promptProvider = ActionPromptProvider.Util.getFrom(getPage());
-                    final ActionPrompt actionPrompt = promptProvider.getActionPrompt();
-                    final ActionPromptHeaderPanel titlePanel =
-                            PersistenceSession.ConcurrencyChecking.executeWithConcurrencyCheckingDisabled(
-                            new Callable<ActionPromptHeaderPanel>() {
-                                @Override
-                                public ActionPromptHeaderPanel call() throws Exception {
-                                    final String titleId = actionPrompt.getTitleId();
-                                    return new ActionPromptHeaderPanel(titleId, actionModel);
-                                }
-                            });
-                    final ActionPanel actionPanel =
-                            (ActionPanel) getComponentFactoryRegistry().createComponent(
-                                    ComponentType.ACTION_PROMPT, actionPrompt.getContentId(), actionModel);
-
-                    actionPanel.setShowHeader(false);
-
-                    actionPrompt.setTitle(titlePanel, target);
-                    actionPrompt.setPanel(actionPanel, target);
-                    actionPanel.setActionPrompt(actionPrompt);
-                    actionPrompt.showPrompt(target);
-                }
-            }
-
-            @Override
-            protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
-                super.updateAjaxAttributes(attributes);
-                if(getSettings().isPreventDoubleClickForNoArgAction()) {
-                    PanelUtil.disableBeforeReenableOnComplete(attributes, this);
-                }
+                    private static final long serialVersionUID = 1L;
 
-                // allow the event to bubble so the menu is hidden after click on an item
-                attributes.setEventPropagation(AjaxRequestAttributes.EventPropagation.BUBBLE);
-            }
+                    @Override
+                    public void onClick(AjaxRequestTarget target) {
+                        ActionLinkFactoryAbstract.this.onClick(target, ajaxDeferredBehaviour, actionModel, this);
+                    }
 
-            @Override
-            protected void onComponentTag(ComponentTag tag) {
-                super.onComponentTag(tag);
+                    @Override
+                    protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
+                        super.updateAjaxAttributes(attributes);
+                        ActionLinkFactoryAbstract.this.updateAjaxAttributes(attributes, this);
+                    }
 
-                Buttons.fixDisabledState(this, tag);
-            }
-        };
+                    @Override
+                    protected void onComponentTag(ComponentTag tag) {
+                        super.onComponentTag(tag);
+                        Buttons.fixDisabledState(this, tag);
+                    }
+                };
 
         if (ajaxDeferredBehaviour != null) {
             link.add(ajaxDeferredBehaviour);
@@ -238,15 +184,89 @@ public abstract class ActionLinkFactoryAbstract implements ActionLinkFactory {
                 action.getReturnType().getCorrespondingClass() == org.apache.isis.applib.value.Clob.class);
     }
 
+    private void onClick(
+            final AjaxRequestTarget target,
+            final AjaxDeferredBehaviour ajaxDeferredBehaviourIfAny,
+            final ActionModel actionModel,
+            final AjaxLink<Object> ajaxLink) {
+
+        if (ajaxDeferredBehaviourIfAny != null) {
+            ajaxDeferredBehaviourIfAny.initiate(target);
+            return;
+        }
+
+
+
+        ScalarModel.InlinePromptContext inlinePromptContext = determineInlinePromptContext();
+        PromptStyle promptStyle = actionModel.getPromptStyle();
+
+        if(inlinePromptContext == null || promptStyle != PromptStyle.INLINE) {
+            final ActionPromptProvider promptProvider = ActionPromptProvider.Util.getFrom(ajaxLink.getPage());
+            final ActionPrompt prompt = promptProvider.getActionPrompt();
+
+            final ActionPromptHeaderPanel titlePanel =
+                    PersistenceSession.ConcurrencyChecking.executeWithConcurrencyCheckingDisabled(
+                            new Callable<ActionPromptHeaderPanel>() {
+                                @Override
+                                public ActionPromptHeaderPanel call() throws Exception {
+                                    final String titleId = prompt.getTitleId();
+                                    return new ActionPromptHeaderPanel(titleId, actionModel);
+                                }
+                            });
+            final ActionPanel actionPanel =
+                    (ActionPanel) getComponentFactoryRegistry().createComponent(
+                            ComponentType.ACTION_PROMPT, prompt.getContentId(), actionModel);
+
+            actionPanel.setShowHeader(false);
+
+            prompt.setTitle(titlePanel, target);
+            prompt.setPanel(actionPanel, target);
+            actionPanel.setActionPrompt(prompt);
+            prompt.showPrompt(target);
+
+        } else {
+
+            MarkupContainer scalarTypeContainer = inlinePromptContext.getScalarTypeContainer();
+            actionModel.setFormExecutor(new ActionParametersFormExecutor(scalarTypeContainer, actionModel));
+            actionModel.setInlinePromptContext(inlinePromptContext);
+            getComponentFactoryRegistry().addOrReplaceComponent(scalarTypeContainer,
+                    ScalarPanelAbstract.ID_SCALAR_IF_REGULAR_INLINE_PROMPT_FORM, ComponentType.PARAMETERS, actionModel);
+
+            // TODO: probably needs to be like the switchXxx, and update the parent of the placeholder editform
+            inlinePromptContext.getScalarIfRegular().setVisible(false);
+            inlinePromptContext.getScalarIfRegularInlinePromptForm().setVisible(true);
+
+            target.add(scalarTypeContainer);
+        }
+
+    }
+
+    private void updateAjaxAttributes(
+            final AjaxRequestAttributes attributes,
+            final AjaxLink<Object> ajaxLink) {
+        if(getSettings().isPreventDoubleClickForNoArgAction()) {
+            PanelUtil.disableBeforeReenableOnComplete(attributes, ajaxLink);
+        }
+
+        // allow the event to bubble so the menu is hidden after click on an item
+        attributes.setEventPropagation(AjaxRequestAttributes.EventPropagation.BUBBLE);
+    }
+
     protected LinkAndLabel newLinkAndLabel(
             final ObjectAdapter objectAdapter,
             final ObjectAction objectAction,
             final AbstractLink link,
             final String disabledReasonIfAny) {
 
-        final boolean blobOrClob = ObjectAction.Utils.returnsBlobOrClob(objectAction);
+        final boolean whetherReturnsBlobOrClob = ObjectAction.Util.returnsBlobOrClob(objectAction);
+
+        return LinkAndLabel.newLinkAndLabel(objectAdapter, objectAction, link, disabledReasonIfAny, whetherReturnsBlobOrClob);
+    }
 
-        return LinkAndLabel.newLinkAndLabel(objectAdapter, objectAction, link, disabledReasonIfAny, blobOrClob);
+    private ScalarModel.InlinePromptContext determineInlinePromptContext() {
+        return scalarModelForAssociationIfAny != null
+                ? scalarModelForAssociationIfAny.getInlinePromptContext()
+                : null;
     }
 
 


[07/43] isis git commit: ISIS-1603: trivial refactoring of password panel, date picker panel (remove duplicate validation)

Posted by da...@apache.org.
ISIS-1603: trivial refactoring of password panel, date picker panel (remove duplicate validation)


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

Branch: refs/heads/master
Commit: 4d79170dad239e8ddbfc2b1f11de66daae942ebb
Parents: cf9ad00
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Fri Apr 21 14:40:22 2017 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Apr 27 13:25:36 2017 +0100

----------------------------------------------------------------------
 .../scalars/ScalarPanelTextFieldAbstract.java   | 44 +++++++++-----------
 .../ScalarPanelTextFieldDatePickerAbstract.java | 29 -------------
 .../scalars/isisapplib/IsisPasswordPanel.java   |  5 ---
 3 files changed, 20 insertions(+), 58 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/4d79170d/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
index bb22641..fd371d6 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
@@ -39,12 +39,14 @@ import org.apache.wicket.model.Model;
 import org.apache.wicket.validation.IValidatable;
 import org.apache.wicket.validation.IValidator;
 import org.apache.wicket.validation.ValidationError;
+import org.apache.wicket.validation.validator.StringValidator;
 
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.facets.SingleIntValueFacet;
 import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxLengthFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.typicallen.TypicalLengthFacet;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
 import org.apache.isis.viewer.wicket.model.links.LinkAndLabel;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
@@ -93,7 +95,7 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
 
     }
 
-    protected AbstractTextComponent<T> getTextField() {
+    AbstractTextComponent<T> getTextField() {
         return textField;
     }
 
@@ -101,21 +103,20 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
         return createTextField(id);
     }
 
-    protected TextField<T> createTextField(final String id) {
-        return new TextField<>(id, newTextFieldValueModel(), cls);
-    }
-
     protected TextFieldValueModel<T> newTextFieldValueModel() {
         return new TextFieldValueModel<>(this);
     }
 
+    protected TextField<T> createTextField(final String id) {
+        return new TextField<>(id, newTextFieldValueModel(), cls);
+    }
+
     @Override
     protected MarkupContainer addComponentForRegular() {
         textField = createTextFieldForRegular(ID_SCALAR_VALUE);
         textField.setOutputMarkupId(true);
 
         addStandardSemantics();
-        addSemantics();
 
         final MarkupContainer labelIfRegular = createFormComponentLabel();
         scalarTypeContainer.add(labelIfRegular);
@@ -157,14 +158,6 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
 
     protected abstract IModel<String> getScalarPanelType();
 
-    /**
-     * Optional hook method
-     */
-    protected void addSemantics() {
-        // we don't call textField.setType(), since we want more control 
-        // over the parsing (using custom subclasses of TextField etc)
-    }
-
     private void addReplaceDisabledTagWithReadonlyTagBehaviourIfRequired(final Component component) {
         if(!getSettings().isReplaceDisabledTagWithReadonlyTag()) {
             return;
@@ -180,13 +173,12 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
 
     private MarkupContainer createFormComponentLabel() {
         Fragment textFieldFragment = createTextFieldFragment("scalarValueContainer");
-        final AbstractTextComponent<T> textField = getTextField();
         final String name = getModel().getName();
         textField.setLabel(Model.of(name));
         
-        final FormGroup scalarNameAndValue = new FormGroup(ID_SCALAR_IF_REGULAR, textField);
+        final FormGroup scalarNameAndValue = new FormGroup(ID_SCALAR_IF_REGULAR, this.textField);
 
-        textFieldFragment.add(textField);
+        textFieldFragment.add(this.textField);
         scalarNameAndValue.add(textFieldFragment);
 
         return scalarNameAndValue;
@@ -198,12 +190,13 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
 
     protected void addStandardSemantics() {
         textField.setRequired(getModel().isRequired());
-        setTextFieldSizeAndMaxLengthIfSpecified(textField);
+        setTextFieldSizeAndMaxLengthIfSpecified();
 
-        addValidator();
+        addValidatorForIsisValidation();
     }
 
-    protected void addValidator() {
+
+    private void addValidatorForIsisValidation() {
         final ScalarModel scalarModel = getModel();
 
         textField.add(new IValidator<T>() {
@@ -223,25 +216,26 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
         });
     }
 
-    protected void setTextFieldSizeAndMaxLengthIfSpecified(AbstractTextComponent<T> textField) {
+    private void setTextFieldSizeAndMaxLengthIfSpecified() {
 
         final Integer maxLength = getValueOf(getModel(), MaxLengthFacet.class);
         Integer typicalLength = getValueOf(getModel(), TypicalLengthFacet.class);
 
-        // doesn't make sense for typical length to be > maxLength 
+        // doesn't make sense for typical length to be > maxLength
         if(typicalLength != null && maxLength != null && typicalLength > maxLength) {
             typicalLength = maxLength;
         }
-        
+
         if (typicalLength != null) {
             textField.add(new AttributeModifier("size", Model.of("" + typicalLength)));
         }
-        
+
         if(maxLength != null) {
             textField.add(new AttributeModifier("maxlength", Model.of("" + maxLength)));
         }
     }
 
+
     private static Integer getValueOf(ScalarModel model, Class<? extends SingleIntValueFacet> facetType) {
         final SingleIntValueFacet facet = model.getFacet(facetType);
         return facet != null ? facet.value() : null;
@@ -263,9 +257,11 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
         return labelIfCompact;
     }
 
+
     @Override
     protected void onBeforeRenderWhenViewMode() {
         super.onBeforeRenderWhenViewMode();
+
         textField.setEnabled(false);
         addReplaceDisabledTagWithReadonlyTagBehaviourIfRequired(textField);
 

http://git-wip-us.apache.org/repos/asf/isis/blob/4d79170d/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldDatePickerAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldDatePickerAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldDatePickerAbstract.java
index 45c3c1b..fd947bc 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldDatePickerAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldDatePickerAbstract.java
@@ -76,14 +76,7 @@ public abstract class ScalarPanelTextFieldDatePickerAbstract<T extends Serializa
         return new Fragment(id, "date", ScalarPanelTextFieldDatePickerAbstract.this);
     }
 
-    @Override
-    protected void addSemantics() {
-        super.addSemantics();
-
-        addObjectAdapterValidator();
-    }
 
-    
     protected Component addComponentForCompact() {
         Fragment compactFragment = getCompactFragment(CompactType.SPAN);
         final Label label = new Label(ID_SCALAR_IF_COMPACT, newTextFieldValueModel()) {
@@ -114,25 +107,6 @@ public abstract class ScalarPanelTextFieldDatePickerAbstract<T extends Serializa
         return null;
     }
 
-    private void addObjectAdapterValidator() {
-        final AbstractTextComponent<T> textField = getTextField();
-
-        textField.add(new IValidator<T>() {
-            private static final long serialVersionUID = 1L;
-
-            @Override
-            public void validate(final IValidatable<T> validatable) {
-                final T proposed = validatable.getValue();
-                final ObjectAdapter proposedAdapter = adapterFor(proposed);
-                String reasonIfAny = scalarModel.validate(proposedAdapter);
-                if (reasonIfAny != null) {
-                    final ValidationError error = new ValidationError();
-                    error.setMessage(reasonIfAny);
-                    validatable.error(error);
-                }
-            }
-        });
-    }
 
     
     @com.google.inject.Inject
@@ -141,8 +115,5 @@ public abstract class ScalarPanelTextFieldDatePickerAbstract<T extends Serializa
         return settings;
     }
 
-    private ObjectAdapter adapterFor(final Object pojo) {
-        return getPersistenceSession().adapterFor(pojo);
-    }
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/4d79170d/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisPasswordPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisPasswordPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisPasswordPanel.java
index 3e549cd..28e4ad7 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisPasswordPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisPasswordPanel.java
@@ -43,10 +43,6 @@ public class IsisPasswordPanel extends ScalarPanelTextFieldParseableAbstract {
         super(id, scalarModel);
     }
 
-    @Override
-    protected void addSemantics() {
-        super.addSemantics();
-    }
 
     @Override
     protected AbstractTextComponent<String> createTextFieldForRegular(String id) {
@@ -68,5 +64,4 @@ public class IsisPasswordPanel extends ScalarPanelTextFieldParseableAbstract {
     protected IModel<String> getScalarPanelType() {
         return Model.of("isisPasswordPanel");
     }
-
 }


[42/43] isis git commit: ISIS-1603: fixes unit test

Posted by da...@apache.org.
ISIS-1603: fixes unit test


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

Branch: refs/heads/master
Commit: 04f980592fbb1395e0a167e868716f44b24c07da
Parents: b886b82
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Fri Apr 28 09:57:14 2017 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Fri Apr 28 09:57:14 2017 +0100

----------------------------------------------------------------------
 .../layout/ActionLayoutXmlLayoutAnnotationFacetFactoryTest.java  | 4 ++++
 1 file changed, 4 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/04f98059/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/layout/ActionLayoutXmlLayoutAnnotationFacetFactoryTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/layout/ActionLayoutXmlLayoutAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/layout/ActionLayoutXmlLayoutAnnotationFacetFactoryTest.java
index aa6a34e..79ca4a1 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/layout/ActionLayoutXmlLayoutAnnotationFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/layout/ActionLayoutXmlLayoutAnnotationFacetFactoryTest.java
@@ -73,6 +73,10 @@ public class ActionLayoutXmlLayoutAnnotationFacetFactoryTest extends AbstractFac
 
                 allowing(mockObjSpec).getFacet(DomainServiceFacet.class);
                 will(returnValue(null));
+
+                allowing(mockConfiguration).getString("isis.objects.promptStyle");
+                will(returnValue(null));
+
             }
         });
 


[28/43] isis git commit: ISIS-1603: fixes the rendering of the icon for reference panel which are editable.

Posted by da...@apache.org.
ISIS-1603: fixes the rendering of the icon for reference panel which are editable.


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

Branch: refs/heads/master
Commit: 4fdfc2519a49dbdf293475524f4694abeab653b2
Parents: ea613a9
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Thu Apr 27 13:03:43 2017 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Apr 27 13:26:40 2017 +0100

----------------------------------------------------------------------
 .../scalars/reference/ReferencePanel.html           | 16 +++++++++-------
 .../scalars/reference/ReferencePanel.java           |  7 ++++++-
 .../valuechoices/ValueChoicesSelect2Panel.java      |  1 -
 .../viewer/wicket/ui/pages/bootstrap-overrides.css  | 10 ++++++++--
 4 files changed, 23 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/4fdfc251/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.html
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.html b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.html
index 675ffab..a3e96eb 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.html
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.html
@@ -44,13 +44,6 @@
                                 <span class="scalarValueInput">
                                     <span class="editing">
 
-                                        <a href="#"
-                                           name="scalarValueInlinePromptLink"
-                                           class="form-control input-sm scalarValueInlinePromptLink"
-                                           wicket:id="scalarValueInlinePromptLink">
-                                            <span wicket:id="scalarValueInlinePromptLabel"></span>
-                                        </a>
-
                                         <span class="autoCompletePlaceholder">
                                             <span wicket:id="entityLink">link or drop down</span>
                                             <span wicket:id="entityIconAndTitle">[icon and title]</span>
@@ -60,6 +53,15 @@
                                         <a href="#"
                                            class="edit fa fa-pencil-square-o"
                                            wicket:id="editProperty"></a>
+
+                                        <a href="#"
+                                           name="scalarValueInlinePromptLink"
+                                           class="form-control input-sm scalarValueInlinePromptLink"
+                                           wicket:id="scalarValueInlinePromptLink">
+                                            <span wicket:id="scalarValueInlinePromptLabel"></span>
+                                        </a>
+
+
                                     </span>
                                 </span>
                             </span>

http://git-wip-us.apache.org/repos/asf/isis/blob/4fdfc251/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
index abe0f34..a600b68 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
@@ -26,7 +26,6 @@ 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.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.model.IModel;
@@ -37,6 +36,7 @@ import org.apache.wicket.validation.ValidationError;
 import org.wicketstuff.select2.ChoiceProvider;
 import org.wicketstuff.select2.Settings;
 
+import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager.ConcurrencyChecking;
@@ -57,6 +57,7 @@ import org.apache.isis.viewer.wicket.ui.components.widgets.select2.providers.Obj
 import org.apache.isis.viewer.wicket.ui.components.widgets.select2.providers.ObjectAdapterMementoProviderForReferenceObjectAutoComplete;
 import org.apache.isis.viewer.wicket.ui.components.widgets.select2.providers.ObjectAdapterMementoProviderForReferenceParamOrPropertyAutoComplete;
 import org.apache.isis.viewer.wicket.ui.util.Components;
+import org.apache.isis.viewer.wicket.ui.util.CssClassAppender;
 
 /**
  * Panel for rendering scalars which of are of reference type (as opposed to
@@ -280,6 +281,10 @@ public class ReferencePanel extends ScalarPanelSelect2Abstract implements PanelW
                 final ComponentFactory componentFactory = 
                         getComponentFactoryRegistry().findComponentFactory(ComponentType.ENTITY_ICON_AND_TITLE, entityModelForLink);
                 final Component component = componentFactory.createComponent(ComponentType.ENTITY_ICON_AND_TITLE.getWicketId(), entityModelForLink);
+                if(scalarModel.getPromptStyle() == PromptStyle.INLINE) {
+                    // bit of a hack... allows us to suppress the title using CSS
+                    component.add(new CssClassAppender("inlinePrompt"));
+                }
                 
                 componentForRegular.addOrReplace(component);
 

http://git-wip-us.apache.org/repos/asf/isis/blob/4fdfc251/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
index ea5ce37..6c46b4d 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
@@ -189,7 +189,6 @@ public class ValueChoicesSelect2Panel extends ScalarPanelSelect2Abstract impleme
         return scalarModel;
     }
 
-
     @com.google.inject.Inject
     WicketViewerSettings wicketViewerSettings;
 

http://git-wip-us.apache.org/repos/asf/isis/blob/4fdfc251/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap-overrides.css
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap-overrides.css b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap-overrides.css
index c307f05..7001b98 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap-overrides.css
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap-overrides.css
@@ -884,9 +884,15 @@ tr.headers th form input {
 
 .referencePanel .form-control.scalarValueInlinePromptLink {
     display: inline-block;
-    width: 50%;
+    width: 90%;
 }
 
 .referencePanel div.label-left .scalarValueWrapper .form-control.scalarValueInlinePromptLink {
-    width: 50%;
+    width: 90%;
+}
+.referencePanel .inlinePrompt .entityIconAndTitlePanel .entityImage {
+    margin-right: 10px;
+}
+.referencePanel .inlinePrompt .entityIconAndTitlePanel .entityTitle {
+    display: none;
 }


[06/43] isis git commit: ISIS-1603: working on validation, not there yet

Posted by da...@apache.org.
ISIS-1603: working on validation, not there yet


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

Branch: refs/heads/master
Commit: 6bd683d01155e79a25c6e74168025dd2be3f49fe
Parents: 4d79170
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Fri Apr 21 19:15:51 2017 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Apr 27 13:25:36 2017 +0100

----------------------------------------------------------------------
 .../scalars/ScalarPanelTextFieldAbstract.html   |  42 ++++-
 .../scalars/ScalarPanelTextFieldAbstract.java   | 173 +++++++++++++++++--
 .../components/scalars/XEditableBehavior2.java  |  84 +++++++++
 3 files changed, 285 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/6bd683d0/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.html
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.html b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.html
index 7bbfcf0..a05f536 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.html
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.html
@@ -27,16 +27,52 @@
             <wicket:container wicket:id="scalarValueContainer"/>
 
             <wicket:fragment wicket:id="text">
-                <input type="text" name="scalarValue" class="form-control input-sm scalarValue" wicket:id="scalarValue" />
+                <input
+                        type="text"
+                        name="scalarValue"
+                        class="form-control input-sm scalarValue"
+                        wicket:id="scalarValue" />
+                <a
+                        href="#"
+                        data-type="text"
+                        name="scalarValueEditInline"
+                        class="form-control input-sm scalarValueEditInline"
+                        wicket:id="scalarValueEditInline">
+                    <span wicket:id="scalarValueEditInlineLabel"></span>
+                </a>
             </wicket:fragment>
 
             <wicket:fragment wicket:id="textarea">
-                <textarea name="scalarValue" class="form-control scalarValue" wicket:id="scalarValue"></textarea>
+                <textarea
+                        name="scalarValue"
+                        class="form-control scalarValue"
+                        wicket:id="scalarValue">
+                </textarea>
+                <a
+                        href="#"
+                        data-type="textarea"
+                        name="scalarValueEditInline"
+                        class="form-control input-sm scalarValueEditInline"
+                        wicket:id="scalarValueEditInline"
+                        style="height: auto"
+                ><span wicket:id="scalarValueEditInlineLabel"></span></a>
             </wicket:fragment>
 
             <wicket:fragment wicket:id="date">
                 <div class="date">
-                    <input type="text" name="scalarValue" wicket:id="scalarValue" class="form-control input-sm scalarValue"/>
+                    <input
+                            type="text"
+                            name="scalarValue"
+                            class="form-control input-sm scalarValue"
+                            wicket:id="scalarValue"/>
+                    <a
+                            data-type="combodate"
+                            href="#"
+                            name="scalarValueEditInline"
+                            class="form-control input-sm scalarValueEditInline"
+                            wicket:id="scalarValueEditInline">
+                        <span wicket:id="scalarValueEditInlineLabel"></span>
+                    </a>
                 </div>
             </wicket:fragment>
 

http://git-wip-us.apache.org/repos/asf/isis/blob/6bd683d0/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
index fd371d6..7dea2c3 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
@@ -27,6 +27,10 @@ import com.google.common.base.Strings;
 import org.apache.wicket.AttributeModifier;
 import org.apache.wicket.Component;
 import org.apache.wicket.MarkupContainer;
+import org.apache.wicket.ajax.AjaxEventBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.attributes.AjaxCallListener;
+import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
 import org.apache.wicket.behavior.Behavior;
 import org.apache.wicket.markup.ComponentTag;
 import org.apache.wicket.markup.html.WebMarkupContainer;
@@ -36,17 +40,19 @@ import org.apache.wicket.markup.html.form.TextField;
 import org.apache.wicket.markup.html.panel.Fragment;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
+import org.apache.wicket.request.cycle.RequestCycle;
+import org.apache.wicket.util.string.StringValue;
 import org.apache.wicket.validation.IValidatable;
 import org.apache.wicket.validation.IValidator;
 import org.apache.wicket.validation.ValidationError;
-import org.apache.wicket.validation.validator.StringValidator;
 
+import org.apache.isis.applib.annotation.PropertyEditStyle;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.facets.SingleIntValueFacet;
 import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxLengthFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.typicallen.TypicalLengthFacet;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
 import org.apache.isis.viewer.wicket.model.links.LinkAndLabel;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
@@ -54,6 +60,11 @@ import org.apache.isis.viewer.wicket.ui.components.actionmenu.entityactions.Enti
 import org.apache.isis.viewer.wicket.ui.components.widgets.bootstrap.FormGroup;
 import org.apache.isis.viewer.wicket.ui.util.CssClassAppender;
 
+import de.agilecoders.wicket.extensions.markup.html.bootstrap.xeditable.XEditableBehavior;
+import de.agilecoders.wicket.extensions.markup.html.bootstrap.xeditable.XEditableOptions;
+import de.agilecoders.wicket.jquery.Key;
+import de.agilecoders.wicket.jquery.util.Json;
+
 /**
  * Adapter for {@link ScalarPanelAbstract scalar panel}s that are implemented
  * using a simple {@link TextField}.
@@ -79,6 +90,7 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
 
     protected WebMarkupContainer scalarTypeContainer;
     private AbstractTextComponent<T> textField;
+    private WebMarkupContainer editInlineLink;
 
     public ScalarPanelTextFieldAbstract(final String id, final ScalarModel scalarModel, final Class<T> cls) {
         super(id, scalarModel);
@@ -95,6 +107,13 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
 
     }
 
+    private Component getEditComponent() {
+        return textField.isVisibilityAllowed()
+                ? textField
+                : editInlineLink;
+    }
+
+
     AbstractTextComponent<T> getTextField() {
         return textField;
     }
@@ -113,8 +132,132 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
 
     @Override
     protected MarkupContainer addComponentForRegular() {
+
+        // even though only one of textField and editInlineLink will ever be visible,
+        // am instantiating both to avoid NPEs
+        // elsewhere can use Component#isVisibilityAllowed or ScalarModel.getEditStyle() to check whichis visible.
+
         textField = createTextFieldForRegular(ID_SCALAR_VALUE);
         textField.setOutputMarkupId(true);
+        editInlineLink = new WebMarkupContainer(ID_SCALAR_VALUE_EDIT_INLINE);
+        editInlineLink.setOutputMarkupId(true);
+
+        final IModel<T> textFieldModel = textField.getModel();
+
+        final Label editInlineLinkLabel = new Label(ID_SCALAR_VALUE_EDIT_INLINE_LABEL, textFieldModel);
+        editInlineLink.add(editInlineLinkLabel);
+
+        if(scalarModel.getEditStyle() == PropertyEditStyle.INLINE) {
+            textField.setVisibilityAllowed(false);
+
+            final XEditableOptions options = new XEditableOptions() {
+                {
+                    put(new Key<String>("toggle"), "click");
+                    if(scalarModel.isRequired()) {
+                        put(new Key<Json.RawValue>("validate"), new Json.RawValue(
+                                "function (value) { if (value == '') { return 'Required field'; } }"));
+                    }
+//                    put(new Key<Json.RawValue>("error"), new Json.RawValue(
+//                            "function(response, newValue) {\n"
+//                                    + "    if(response.status === 500) {\n"
+//                                    + "        return 'Service unavailable. Please try later.';\n"
+//                                    + "    } else {\n"
+//                                    + "        return response.responseText;\n"
+//                                    + "    }\n"
+//                                    + "}"));
+
+                }
+            }.withMode("inline");
+
+            options.withDefaultValue(asString(textFieldModel));
+
+            XEditableBehavior xEditable = new XEditableBehavior(options) {
+                @Override
+                protected void onSave(final AjaxRequestTarget target, final String value) {
+
+                    scalarModel.setObjectAsString(value);
+
+                    ObjectAdapter adapter = scalarModel.getParentObjectAdapterMemento()
+                            .getObjectAdapter(AdapterManager.ConcurrencyChecking.NO_CHECK, getPersistenceSession(),
+                                    getSpecificationLoader());
+
+                    scalarModel.applyValue(adapter);
+
+                    target.add(editInlineLink);
+
+                    options.withDefaultValue(asString(textFieldModel));
+                }
+
+                protected AjaxEventBehavior newSaveListener() {
+                    return new AjaxEventBehavior("save") {
+                        @Override
+                        protected void onEvent(AjaxRequestTarget target) {
+
+                            final ObjectAdapter currentValue = scalarModel.getObject();
+                            StringValue newValue = RequestCycle.get().getRequest().getRequestParameters().getParameterValue("newValue");
+
+                            try {
+                                onSave(target, newValue.toString());
+                            } catch (Exception ex) {
+                                scalarModel.setObject(currentValue);
+
+                                final String value = asString(textFieldModel);
+                                options.withDefaultValue(value);
+
+                                //
+                                // hmmm... thought had this working, but turns out that can't rely on the .control-group to exist
+                                //
+                                // also: even if get going, still need to reset the value of the inline edit, and also
+                                // to handle updates to the title (eg Wicket event bus, I think)
+                                //
+                                final String message = ex.getMessage();
+                                target.appendJavaScript(
+                                        "( function() { "
+                                                + "var component = $(\"#" + editInlineLink.getMarkupId() + "\"); "
+                                                + "var parent = $(component).parent(); "
+
+                                                + "var controlGroup = $(parent).find(\".control-group\"); "
+                                                + "var errorBlock = $(parent).find(\".editable-error-block\"); "
+
+                                                + "$(component).editable(\"show\"); "
+                                                + "$(controlGroup).addClass(\"has-error\"); "
+                                                + "$(errorBlock).css(\"display\", \"block\"); "
+                                                + "$(errorBlock).text(\"" + message + "\"); "
+
+                                        + "} )();");
+                            }
+
+                        }
+
+                        @Override
+                        protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
+                            super.updateAjaxAttributes(attributes);
+                            attributes.getDynamicExtraParameters().add("return [{'name':'newValue', 'value': attrs.event.extraData.newValue}]");
+
+                            AjaxCallListener myAjaxCallListener = new AjaxCallListener() {
+
+                                @Override
+                                public CharSequence getBeforeHandler(Component component) {
+                                    return ""; // "var myEl = $(\"#" + component.getMarkupId() + "\"); console.log(myEl);";
+                                }
+
+                                @Override public CharSequence getFailureHandler(final Component component) {
+                                    return "alert(\"failure!!!\")";
+                                }
+                            };
+                            attributes.getAjaxCallListeners().add(myAjaxCallListener);
+
+                        }
+                    };
+                }
+
+            };
+
+
+            editInlineLink.add(xEditable);
+        } else {
+            editInlineLink.setVisibilityAllowed(false);
+        }
 
         addStandardSemantics();
 
@@ -147,7 +290,8 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
             labelIfRegular.add(new AttributeModifier("title", Model.of(describedAs)));
         }
 
-        addFeedbackOnlyTo(labelIfRegular, textField);
+        addFeedbackOnlyTo(labelIfRegular, getEditComponent());
+
         addEditPropertyTo(labelIfRegular);
 
         // ... add entity links to panel (below and to right)
@@ -156,6 +300,10 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
         return labelIfRegular;
     }
 
+    private String asString(final IModel<T> textFieldModel) {
+        return textFieldModel != null && textFieldModel.getObject() != null ? textFieldModel.getObject().toString() : null;
+    }
+
     protected abstract IModel<String> getScalarPanelType();
 
     private void addReplaceDisabledTagWithReadonlyTagBehaviourIfRequired(final Component component) {
@@ -181,6 +329,8 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
         textFieldFragment.add(this.textField);
         scalarNameAndValue.add(textFieldFragment);
 
+        textFieldFragment.add(this.editInlineLink);
+
         return scalarNameAndValue;
     }
 
@@ -265,12 +415,6 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
         textField.setEnabled(false);
         addReplaceDisabledTagWithReadonlyTagBehaviourIfRequired(textField);
 
-        final String disableReasonIfAny = scalarModel.disable(getRendering().getWhere());
-        if(disableReasonIfAny == null) {
-            CssClassAppender.appendCssClassTo(this, "editable");
-        }
-
-
         setTitleAttribute("");
     }
 
@@ -278,6 +422,7 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
     protected void onBeforeRenderWhenDisabled(final String disableReason) {
         super.onBeforeRenderWhenDisabled(disableReason);
         textField.setEnabled(false);
+        editInlineLink.setEnabled(false);
         addReplaceDisabledTagWithReadonlyTagBehaviourIfRequired(textField);
         setTitleAttribute(disableReason);
     }
@@ -286,16 +431,22 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
     protected void onBeforeRenderWhenEnabled() {
         super.onBeforeRenderWhenEnabled();
         textField.setEnabled(true);
+        editInlineLink.setEnabled(true);
         setTitleAttribute("");
     }
 
     private void setTitleAttribute(final String titleAttribute) {
-        textField.add(new AttributeModifier("title", Model.of(titleAttribute)));
+        AttributeModifier title = new AttributeModifier("title", Model.of(titleAttribute));
+        textField.add(title);
+        editInlineLink.add(title);
     }
 
     @Override
     protected void addFormComponentBehavior(Behavior behavior) {
-        textField.add(behavior);
+
+        // some behaviours can only be attached to one component
+        // so we check as to which will actually be visible.
+        getEditComponent().add(behavior);
     }
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/6bd683d0/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/XEditableBehavior2.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/XEditableBehavior2.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/XEditableBehavior2.java
new file mode 100644
index 0000000..d8bf40b
--- /dev/null
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/XEditableBehavior2.java
@@ -0,0 +1,84 @@
+/*
+ *  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.scalars;
+
+import org.apache.wicket.Component;
+import org.apache.wicket.ajax.AjaxEventBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
+import org.apache.wicket.request.cycle.RequestCycle;
+import org.apache.wicket.util.string.StringValue;
+
+import de.agilecoders.wicket.extensions.markup.html.bootstrap.xeditable.XEditableBehavior;
+
+public class XEditableBehavior2 extends XEditableBehavior {
+
+    private AjaxEventBehavior validateListener;
+
+    /**
+     * Fired when new value for validation.
+     */
+    protected void onValidate(AjaxRequestTarget target, String value) {
+
+    }
+
+
+    @Override
+    public void bind(Component component) {
+        super.bind(component);
+        validateListener = newSaveListener();
+        component.add(validateListener);
+    }
+
+    @Override
+    public void unbind(Component component) {
+        component.remove(validateListener);
+        validateListener = null;
+
+        super.unbind(component);
+    }
+
+    protected AjaxEventBehavior newValidateListener() {
+        return new AjaxEventBehavior("validate") {
+
+            /**
+             * what's bound to "validate" event in Javascript, and sent to the server
+             */
+            @Override
+            protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
+                super.updateAjaxAttributes(attributes);
+                attributes.getDynamicExtraParameters().add("return [{'name':'newValue', 'value': attrs.event.extraData.newValue}]");
+            }
+
+            /**
+             * What's received at the server
+             */
+            @Override
+            protected void onEvent(AjaxRequestTarget target) {
+                StringValue newValue = RequestCycle.get().getRequest().getRequestParameters().getParameterValue("newValue");
+                onValidate(target, newValue.toString());
+            }
+
+        };
+    }
+
+
+
+}


[38/43] isis git commit: ISIS-1603: automatically opens reference panel when enter inline prompt panel

Posted by da...@apache.org.
ISIS-1603: automatically opens reference panel when enter inline prompt panel


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

Branch: refs/heads/master
Commit: ae298df4bae9d7a8dc57c55abc17163c08121426
Parents: a5a1cd6
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Thu Apr 27 16:59:33 2017 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Apr 27 16:59:33 2017 +0100

----------------------------------------------------------------------
 .../ui/components/scalars/ScalarPanelAbstract.java | 17 ++++++++++++++---
 .../scalars/ScalarPanelSelect2Abstract.java        | 16 ++++++++++++++++
 .../scalars/reference/ReferencePanel.java          |  1 -
 .../wicket/ui/pages/jquery.isis.wicket.viewer.js   | 10 ++++++++++
 4 files changed, 40 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/ae298df4/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
index f334f01..50a6a36 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
@@ -462,7 +462,7 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
 
 
     /**
-     * Returns a container holding an empty form.  This can be switched out using {@link #switchFormForInlinePrompt()}.
+     * Returns a container holding an empty form.  This can be switched out using {@link #switchFormForInlinePrompt(AjaxRequestTarget)}.
      */
     private WebMarkupContainer createInlinePromptForm() {
 
@@ -518,7 +518,7 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
                                 getComponentForRegular(),
                                 scalarIfRegularInlinePromptForm));
 
-                switchFormForInlinePrompt();
+                switchFormForInlinePrompt(target);
 
                 getComponentForRegular().setVisible(false);
                 scalarIfRegularInlinePromptForm.setVisible(true);
@@ -533,9 +533,20 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
         });
     }
 
-    private void switchFormForInlinePrompt() {
+    private void switchFormForInlinePrompt(final AjaxRequestTarget target) {
         scalarIfRegularInlinePromptForm = (PropertyEditFormPanel) getComponentFactoryRegistry().addOrReplaceComponent(
                 scalarTypeContainer, ID_SCALAR_IF_REGULAR_INLINE_PROMPT_FORM, ComponentType.PROPERTY_EDIT_FORM, scalarModel);
+
+        onSwitchFormForInlinePrompt(scalarIfRegularInlinePromptForm, target);
+    }
+
+    /**
+     * Optional hook.
+     */
+    protected void onSwitchFormForInlinePrompt(
+            final WebMarkupContainer inlinePromptForm,
+            final AjaxRequestTarget target) {
+
     }
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/ae298df4/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelSelect2Abstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelSelect2Abstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelSelect2Abstract.java
index a9738e5..d9d41b6 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelSelect2Abstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelSelect2Abstract.java
@@ -25,6 +25,7 @@ import com.google.common.base.Strings;
 
 import org.apache.wicket.AttributeModifier;
 import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.form.FormComponent;
 import org.apache.wicket.model.Model;
@@ -120,6 +121,21 @@ public abstract class ScalarPanelSelect2Abstract extends ScalarPanelAbstract {
     // //////////////////////////////////////
 
     /**
+     * Automatically "opens" the select2.
+     */
+    @Override
+    protected void onSwitchFormForInlinePrompt(
+            final WebMarkupContainer inlinePromptForm,
+            final AjaxRequestTarget target) {
+
+        target.appendJavaScript(
+                String.format("Wicket.Event.publish(Isis.Topic.OPEN_SELECT2, '%s')", inlinePromptForm.getMarkupId()));
+
+    }
+
+    // //////////////////////////////////////
+
+    /**
      * Hook method to refresh choices when changing.
      *
      * <p>

http://git-wip-us.apache.org/repos/asf/isis/blob/ae298df4/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
index ee29561..639ddc7 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
@@ -503,7 +503,6 @@ public class ReferencePanel extends ScalarPanelSelect2Abstract implements PanelW
     }
 
 
-
     // //////////////////////////////////////
 
     @com.google.inject.Inject

http://git-wip-us.apache.org/repos/asf/isis/blob/ae298df4/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/jquery.isis.wicket.viewer.js
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/jquery.isis.wicket.viewer.js b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/jquery.isis.wicket.viewer.js
index 24b391e..1bd0c35 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/jquery.isis.wicket.viewer.js
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/jquery.isis.wicket.viewer.js
@@ -27,6 +27,7 @@ $(function() {
     window.Isis = {
         Topic: {
             OPEN_IN_NEW_TAB: 'openInNewTab',
+            OPEN_SELECT2: 'openSelect2',
             CLOSE_SELECT2: 'closeSelect2',
             FOCUS_FIRST_PARAMETER: 'focusFirstParameter',
             FOCUS_FIRST_PROPERTY: 'focusFirstProperty'
@@ -80,6 +81,15 @@ $(function() {
         if(win) { win.focus(); }
     });
 
+    Wicket.Event.subscribe(Isis.Topic.OPEN_SELECT2, function(jqEvent, panelId) {
+        setTimeout(function() {
+            var $panel = $('#'+panelId);
+             console.log($panel);
+            $($panel).find('select').select2('open');
+//            $($panel).find('select').filter(':visible:first').focus();
+        }, 0);
+    });
+
     Wicket.Event.subscribe(Isis.Topic.CLOSE_SELECT2, function(jqEvent, panelId) {
         setTimeout(function() {
             var $panel = $('#'+panelId);


[05/43] isis git commit: ISIS-1603: refactors the html for SclarPanelTextField, introduce a div and moves the a href into that div

Posted by da...@apache.org.
ISIS-1603: refactors the html for SclarPanelTextField, introduce a div and moves the a href into that div


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

Branch: refs/heads/master
Commit: 02c7e297e08a5bbfdcefaad4a9baa146ccb2b68d
Parents: 6bd683d
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Sat Apr 22 18:19:39 2017 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Apr 27 13:25:36 2017 +0100

----------------------------------------------------------------------
 .../components/scalars/ScalarPanelAbstract.html | 22 +++--
 .../components/scalars/ScalarPanelAbstract.java |  2 +
 .../scalars/ScalarPanelTextFieldAbstract.html   | 32 ++-----
 .../scalars/ScalarPanelTextFieldAbstract.java   | 94 ++++++++++++--------
 4 files changed, 83 insertions(+), 67 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/02c7e297/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.html
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.html b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.html
index effea6d..3e5887f 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.html
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.html
@@ -24,18 +24,26 @@
       lang="en">
     <body>
         <wicket:panel>
-            <div class="scalarNameAndValueComponentType" wicket:id="scalarTypeContainer">
-                <div class="form-group" wicket:id="scalarIfRegular">
-                    <label wicket:id="scalarName" class="scalarName control-label">[Label text]</label>
+            <div wicket:id="scalarTypeContainer"
+                 class="scalarNameAndValueComponentType" >
+                <div wicket:id="scalarIfRegular"
+                     class="form-group" >
+                    <label wicket:id="scalarName"
+                           class="scalarName control-label"
+                    >[Label text]</label>
                     <span class="scalarValueWrapper">
                         <div class="scalarPlaceholder">
                             <span class="scalarValueInput">
                                 <span class="editing">
                                     <wicket:child/>
-                                    <a wicket:id="editProperty" href="#" class="edit fa fa-pencil-square-o"/>
+                                    <a wicket:id="editProperty"
+                                       href="#"
+                                       class="edit fa fa-pencil-square-o"/>
                                 </span>
                             </span>
-                            <span wicket:id="associatedActionLinksRight" class="associatedActionLinksRight">[drop down]</span>
+                            <span wicket:id="associatedActionLinksRight"
+                                  class="associatedActionLinksRight"
+                            >[drop down]</span>
                         </div>
                         <span wicket:id="feedback" class="help-block"></span>
                         <span wicket:id="associatedActionLinksBelow"></span>
@@ -46,7 +54,9 @@
             </div>
 
             <wicket:fragment wicket:id="compactAsInputCheckbox">
-                <input type="checkbox" class="form-control" wicket:id="scalarIfCompact"/>
+                <input wicket:id="scalarIfCompact"
+                       type="checkbox"
+                       class="form-control" />
             </wicket:fragment>
 
             <wicket:fragment wicket:id="compactAsSpan">

http://git-wip-us.apache.org/repos/asf/isis/blob/02c7e297/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
index 3c6c74d..140a587 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
@@ -72,6 +72,8 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
 
     private static final long serialVersionUID = 1L;
 
+    protected static final String ID_SCALAR_TYPE_CONTAINER = "scalarTypeContainer";
+
     protected static final String ID_SCALAR_IF_REGULAR = "scalarIfRegular";
     protected static final String ID_SCALAR_NAME = "scalarName";
     protected static final String ID_SCALAR_VALUE = "scalarValue";

http://git-wip-us.apache.org/repos/asf/isis/blob/02c7e297/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.html
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.html b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.html
index a05f536..8126419 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.html
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.html
@@ -26,20 +26,22 @@
         <wicket:extend>
             <wicket:container wicket:id="scalarValueContainer"/>
 
-            <wicket:fragment wicket:id="text">
-                <input
-                        type="text"
-                        name="scalarValue"
-                        class="form-control input-sm scalarValue"
-                        wicket:id="scalarValue" />
+            <div wicket:id="scalarValueEditInlineContainer">
                 <a
                         href="#"
-                        data-type="text"
                         name="scalarValueEditInline"
                         class="form-control input-sm scalarValueEditInline"
                         wicket:id="scalarValueEditInline">
                     <span wicket:id="scalarValueEditInlineLabel"></span>
                 </a>
+            </div>
+
+            <wicket:fragment wicket:id="text">
+                <input
+                        type="text"
+                        name="scalarValue"
+                        class="form-control input-sm scalarValue"
+                        wicket:id="scalarValue" />
             </wicket:fragment>
 
             <wicket:fragment wicket:id="textarea">
@@ -48,14 +50,6 @@
                         class="form-control scalarValue"
                         wicket:id="scalarValue">
                 </textarea>
-                <a
-                        href="#"
-                        data-type="textarea"
-                        name="scalarValueEditInline"
-                        class="form-control input-sm scalarValueEditInline"
-                        wicket:id="scalarValueEditInline"
-                        style="height: auto"
-                ><span wicket:id="scalarValueEditInlineLabel"></span></a>
             </wicket:fragment>
 
             <wicket:fragment wicket:id="date">
@@ -65,14 +59,6 @@
                             name="scalarValue"
                             class="form-control input-sm scalarValue"
                             wicket:id="scalarValue"/>
-                    <a
-                            data-type="combodate"
-                            href="#"
-                            name="scalarValueEditInline"
-                            class="form-control input-sm scalarValueEditInline"
-                            wicket:id="scalarValueEditInline">
-                        <span wicket:id="scalarValueEditInlineLabel"></span>
-                    </a>
                 </div>
             </wicket:fragment>
 

http://git-wip-us.apache.org/repos/asf/isis/blob/02c7e297/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
index 7dea2c3..7fb331e 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
@@ -73,8 +73,6 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
 
     private static final long serialVersionUID = 1L;
 
-    private static final String ID_SCALAR_TYPE_CONTAINER = "scalarTypeContainer";
-
     protected final Class<T> cls;
 
     protected static class ReplaceDisabledTagWithReadonlyTagBehaviour extends Behavior {
@@ -90,6 +88,8 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
 
     protected WebMarkupContainer scalarTypeContainer;
     private AbstractTextComponent<T> textField;
+
+    private WebMarkupContainer scalarValueEditInlineContainer;
     private WebMarkupContainer editInlineLink;
 
     public ScalarPanelTextFieldAbstract(final String id, final ScalarModel scalarModel, final Class<T> cls) {
@@ -108,9 +108,18 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
     }
 
     private Component getEditComponent() {
-        return textField.isVisibilityAllowed()
+        return scalarModel.getEditStyle() == PropertyEditStyle.INLINE
+                ? scalarValueEditInlineContainer
+                : textField;
+    }
+
+    /**
+     * Opposite of {@link #getEditComponent()}.
+     */
+    private Component getOtherComponent() {
+        return scalarModel.getEditStyle() == PropertyEditStyle.INLINE
                 ? textField
-                : editInlineLink;
+                : scalarValueEditInlineContainer;
     }
 
 
@@ -133,22 +142,27 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
     @Override
     protected MarkupContainer addComponentForRegular() {
 
-        // even though only one of textField and editInlineLink will ever be visible,
+        // even though only one of textField and scalarValueEditInlineContainer will ever be visible,
         // am instantiating both to avoid NPEs
         // elsewhere can use Component#isVisibilityAllowed or ScalarModel.getEditStyle() to check whichis visible.
 
         textField = createTextFieldForRegular(ID_SCALAR_VALUE);
         textField.setOutputMarkupId(true);
-        editInlineLink = new WebMarkupContainer(ID_SCALAR_VALUE_EDIT_INLINE);
-        editInlineLink.setOutputMarkupId(true);
+
+        addStandardSemantics();
 
         final IModel<T> textFieldModel = textField.getModel();
 
+
+        this.scalarValueEditInlineContainer = new WebMarkupContainer("scalarValueEditInlineContainer");
+        editInlineLink = new WebMarkupContainer(ID_SCALAR_VALUE_EDIT_INLINE);
+        editInlineLink.setOutputMarkupId(true);
+        scalarValueEditInlineContainer.add(editInlineLink);
+
         final Label editInlineLinkLabel = new Label(ID_SCALAR_VALUE_EDIT_INLINE_LABEL, textFieldModel);
         editInlineLink.add(editInlineLinkLabel);
 
         if(scalarModel.getEditStyle() == PropertyEditStyle.INLINE) {
-            textField.setVisibilityAllowed(false);
 
             final XEditableOptions options = new XEditableOptions() {
                 {
@@ -157,14 +171,14 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
                         put(new Key<Json.RawValue>("validate"), new Json.RawValue(
                                 "function (value) { if (value == '') { return 'Required field'; } }"));
                     }
-//                    put(new Key<Json.RawValue>("error"), new Json.RawValue(
-//                            "function(response, newValue) {\n"
-//                                    + "    if(response.status === 500) {\n"
-//                                    + "        return 'Service unavailable. Please try later.';\n"
-//                                    + "    } else {\n"
-//                                    + "        return response.responseText;\n"
-//                                    + "    }\n"
-//                                    + "}"));
+                    //                    put(new Key<Json.RawValue>("error"), new Json.RawValue(
+                    //                            "function(response, newValue) {\n"
+                    //                                    + "    if(response.status === 500) {\n"
+                    //                                    + "        return 'Service unavailable. Please try later.';\n"
+                    //                                    + "    } else {\n"
+                    //                                    + "        return response.responseText;\n"
+                    //                                    + "    }\n"
+                    //                                    + "}"));
 
                 }
             }.withMode("inline");
@@ -224,7 +238,7 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
                                                 + "$(errorBlock).css(\"display\", \"block\"); "
                                                 + "$(errorBlock).text(\"" + message + "\"); "
 
-                                        + "} )();");
+                                                + "} )();");
                             }
 
                         }
@@ -255,14 +269,12 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
 
 
             editInlineLink.add(xEditable);
-        } else {
-            editInlineLink.setVisibilityAllowed(false);
         }
 
-        addStandardSemantics();
 
-        final MarkupContainer labelIfRegular = createFormComponentLabel();
-        scalarTypeContainer.add(labelIfRegular);
+        final MarkupContainer scalarIfRegularFormGroup = createScalarIfRegularFormGroup();
+
+        scalarTypeContainer.add(scalarIfRegularFormGroup);
 
         final Label scalarName = new Label(ID_SCALAR_NAME, getRendering().getLabelCaption(textField));
         NamedFacet namedFacet = getModel().getFacet(NamedFacet.class);
@@ -274,7 +286,7 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
 
         final List<LinkAndLabel> entityActions = EntityActionUtil.getEntityActionLinksForAssociation(this.scalarModel, getDeploymentCategory());
 
-        addPositioningCssTo(labelIfRegular, entityActions);
+        addPositioningCssTo(scalarIfRegularFormGroup, entityActions);
 
         if(getModel().isRequired()) {
             final String label = scalarName.getDefaultModelObjectAsString();
@@ -283,21 +295,26 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
             }
         }
 
-        labelIfRegular.add(scalarName);
+        scalarIfRegularFormGroup.add(scalarName);
 
         final String describedAs = getModel().getDescribedAs();
         if(describedAs != null) {
-            labelIfRegular.add(new AttributeModifier("title", Model.of(describedAs)));
+            scalarIfRegularFormGroup.add(new AttributeModifier("title", Model.of(describedAs)));
         }
 
-        addFeedbackOnlyTo(labelIfRegular, getEditComponent());
-
-        addEditPropertyTo(labelIfRegular);
+        addFeedbackOnlyTo(scalarIfRegularFormGroup, getEditComponent());
+        addEditPropertyTo(scalarIfRegularFormGroup);
 
         // ... add entity links to panel (below and to right)
-        addEntityActionLinksBelowAndRight(labelIfRegular, entityActions);
+        addEntityActionLinksBelowAndRight(scalarIfRegularFormGroup, entityActions);
+
+
+
+
+        getOtherComponent().setVisibilityAllowed(false);
 
-        return labelIfRegular;
+
+        return scalarIfRegularFormGroup;
     }
 
     private String asString(final IModel<T> textFieldModel) {
@@ -319,19 +336,19 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
         component.add(new ReplaceDisabledTagWithReadonlyTagBehaviour());
     }
 
-    private MarkupContainer createFormComponentLabel() {
+    private MarkupContainer createScalarIfRegularFormGroup() {
         Fragment textFieldFragment = createTextFieldFragment("scalarValueContainer");
         final String name = getModel().getName();
         textField.setLabel(Model.of(name));
         
-        final FormGroup scalarNameAndValue = new FormGroup(ID_SCALAR_IF_REGULAR, this.textField);
+        final FormGroup formGroup = new FormGroup(ID_SCALAR_IF_REGULAR, this.textField);
 
         textFieldFragment.add(this.textField);
-        scalarNameAndValue.add(textFieldFragment);
+        formGroup.add(textFieldFragment);
 
-        textFieldFragment.add(this.editInlineLink);
+        formGroup.add(this.scalarValueEditInlineContainer);
 
-        return scalarNameAndValue;
+        return formGroup;
     }
 
     protected Fragment createTextFieldFragment(String id) {
@@ -421,9 +438,12 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
     @Override
     protected void onBeforeRenderWhenDisabled(final String disableReason) {
         super.onBeforeRenderWhenDisabled(disableReason);
+
         textField.setEnabled(false);
-        editInlineLink.setEnabled(false);
         addReplaceDisabledTagWithReadonlyTagBehaviourIfRequired(textField);
+
+        editInlineLink.setEnabled(false);
+
         setTitleAttribute(disableReason);
     }
 
@@ -450,7 +470,6 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
     }
 
 
-    //region > dependencies
 
     @com.google.inject.Inject
     private WicketViewerSettings settings;
@@ -458,7 +477,6 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
         return settings;
     }
 
-    //endregion
 
 }
 


[08/43] isis git commit: ISIS-1603: minor refactoring of subclasses of ScalarPanelTextFieldAbstract, specifically the createTetFieldForRegular.

Posted by da...@apache.org.
ISIS-1603: minor refactoring of subclasses of ScalarPanelTextFieldAbstract, specifically the createTetFieldForRegular.

factored out TextFieldStringModel from MultiLineStringPanel, IsisPasswordPanel and ScalarPanelTextFieldParseableAbstract (cf StringPanel)


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

Branch: refs/heads/master
Commit: cf9ad00bf871f42701286f0e4b055720f5689f0a
Parents: a3a93c2
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Fri Apr 21 14:32:15 2017 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Apr 27 13:25:36 2017 +0100

----------------------------------------------------------------------
 .../scalars/ScalarPanelTextFieldAbstract.java   |  6 ++--
 .../ScalarPanelTextFieldParseableAbstract.java  | 27 +++-----------
 .../scalars/TextFieldStringModel.java           | 21 +++++++++--
 .../isisapplib/IsisBlobOrClobPanelAbstract.java | 37 +++++++++++---------
 .../scalars/isisapplib/IsisColorPanel.java      |  7 +---
 .../scalars/isisapplib/IsisDateTimePanel.java   | 11 +++---
 .../scalars/isisapplib/IsisMoneyPanel.java      |  7 +---
 .../scalars/isisapplib/IsisPasswordPanel.java   | 31 +++++-----------
 .../scalars/isisapplib/IsisPercentagePanel.java |  7 +---
 .../scalars/isisapplib/IsisTimePanel.java       |  7 +---
 .../scalars/isisapplib/IsisTimeStampPanel.java  |  7 +---
 .../scalars/jdkdates/JavaSqlTimePanel.java      |  7 +---
 .../jdkmath/JavaMathBigDecimalPanel.java        | 15 ++++----
 .../jdkmath/JavaMathBigIntegerPanel.java        |  5 +--
 .../scalars/jodatime/JodaDateTimePanel.java     | 11 +++---
 .../jodatime/JodaLocalDateTimePanel.java        | 11 +++---
 .../components/scalars/primitive/BytePanel.java |  5 +--
 .../scalars/primitive/CharacterPanel.java       |  3 +-
 .../scalars/primitive/DoublePanel.java          |  5 +--
 .../scalars/primitive/FloatPanel.java           |  5 +--
 .../scalars/primitive/IntegerPanel.java         | 12 ++++---
 .../components/scalars/primitive/LongPanel.java |  5 +--
 .../scalars/primitive/ShortPanel.java           |  5 +--
 .../scalars/reference/ReferencePanel.java       |  3 --
 .../scalars/string/MultiLineStringPanel.java    | 25 ++++---------
 .../components/scalars/string/StringPanel.java  |  9 ++---
 .../ui/components/scalars/value/ValuePanel.java |  7 +---
 27 files changed, 122 insertions(+), 179 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/cf9ad00b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
index e3dbe06..bb22641 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
@@ -97,8 +97,8 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
         return textField;
     }
 
-    protected AbstractTextComponent<T> createTextFieldForRegular() {
-        return createTextField(ID_SCALAR_VALUE);
+    protected AbstractTextComponent<T> createTextFieldForRegular(final String id) {
+        return createTextField(id);
     }
 
     protected TextField<T> createTextField(final String id) {
@@ -111,7 +111,7 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
 
     @Override
     protected MarkupContainer addComponentForRegular() {
-        textField = createTextFieldForRegular();
+        textField = createTextFieldForRegular(ID_SCALAR_VALUE);
         textField.setOutputMarkupId(true);
 
         addStandardSemantics();

http://git-wip-us.apache.org/repos/asf/isis/blob/cf9ad00b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldParseableAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldParseableAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldParseableAbstract.java
index 703a3f8..314b778 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldParseableAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldParseableAbstract.java
@@ -21,7 +21,6 @@ package org.apache.isis.viewer.wicket.ui.components.scalars;
 
 import org.apache.wicket.markup.html.form.AbstractTextComponent;
 import org.apache.wicket.markup.html.form.TextField;
-import org.apache.wicket.model.Model;
 import org.apache.wicket.validation.validator.StringValidator;
 
 import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxLengthFacet;
@@ -36,33 +35,15 @@ import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 public abstract class ScalarPanelTextFieldParseableAbstract extends ScalarPanelTextFieldAbstract<String> {
 
     private static final long serialVersionUID = 1L;
-    protected final String idTextField;
 
-    public ScalarPanelTextFieldParseableAbstract(final String id, final String idTextField, final ScalarModel scalarModel) {
+    public ScalarPanelTextFieldParseableAbstract(final String id, final ScalarModel scalarModel) {
         super(id, scalarModel, String.class);
-        this.idTextField = idTextField;
     }
 
     @Override
-    protected AbstractTextComponent<String> createTextFieldForRegular() {
-        final AbstractTextComponent<String> textField = new TextField<>(idTextField, new Model<String>() {
-            private static final long serialVersionUID = 1L;
-
-            @Override
-            public String getObject() {
-                return getModel().getObjectAsString();
-            }
-
-            @Override
-            public void setObject(final String object) {
-                if (object == null) {
-                    getModel().setObject(null);
-                } else {
-                    getModel().setObjectAsString(object);
-                }
-            }
-        });
-        return textField;
+    protected AbstractTextComponent<String> createTextFieldForRegular(final String id) {
+        final TextFieldStringModel model = new TextFieldStringModel(this);
+        return new TextField<>(id, model);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/cf9ad00b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/TextFieldStringModel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/TextFieldStringModel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/TextFieldStringModel.java
index 051969f..9c42f32 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/TextFieldStringModel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/TextFieldStringModel.java
@@ -1,11 +1,26 @@
 package org.apache.isis.viewer.wicket.ui.components.scalars;
 
-public class TextFieldStringModel extends TextFieldValueModel<String> {
+import org.apache.wicket.model.Model;
 
+public class TextFieldStringModel extends Model<String> {
     private static final long serialVersionUID = 1L;
+    private final TextFieldValueModel.ScalarModelProvider scalarModelProvider;
 
-    public TextFieldStringModel(final TextFieldValueModel.ScalarModelProvider parent) {
-        super(parent);
+    public TextFieldStringModel(final TextFieldValueModel.ScalarModelProvider scalarModelProvider) {
+        this.scalarModelProvider = scalarModelProvider;
     }
 
+    @Override
+    public String getObject() {
+        return scalarModelProvider.getModel().getObjectAsString();
+    }
+
+    @Override
+    public void setObject(final String object) {
+        if (object == null) {
+            scalarModelProvider.getModel().setObject(null);
+        } else {
+            scalarModelProvider.getModel().setObjectAsString(object);
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/cf9ad00b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java
index fc4cd38..4090730 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java
@@ -18,17 +18,14 @@
  */
 package org.apache.isis.viewer.wicket.ui.components.scalars.isisapplib;
 
-import de.agilecoders.wicket.extensions.markup.html.bootstrap.form.fileinput.BootstrapFileInputField;
-import org.apache.isis.applib.value.Blob;
-import org.apache.isis.applib.value.NamedWithMimeType;
-import org.apache.isis.core.commons.lang.CloseableExtensions;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.viewer.wicket.model.links.LinkAndLabel;
-import org.apache.isis.viewer.wicket.model.models.ScalarModel;
-import org.apache.isis.viewer.wicket.ui.components.actionmenu.entityactions.EntityActionUtil;
-import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelAbstract;
-import org.apache.isis.viewer.wicket.ui.components.widgets.bootstrap.FormGroup;
-import org.apache.isis.viewer.wicket.ui.util.Components;
+import java.awt.image.BufferedImage;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.util.List;
+
+import javax.activation.MimeType;
+import javax.imageio.ImageIO;
+
 import org.apache.wicket.AttributeModifier;
 import org.apache.wicket.Component;
 import org.apache.wicket.MarkupContainer;
@@ -50,12 +47,18 @@ import org.apache.wicket.request.resource.IResource;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import javax.activation.MimeType;
-import javax.imageio.ImageIO;
-import java.awt.image.BufferedImage;
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.util.List;
+import org.apache.isis.applib.value.Blob;
+import org.apache.isis.applib.value.NamedWithMimeType;
+import org.apache.isis.core.commons.lang.CloseableExtensions;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.viewer.wicket.model.links.LinkAndLabel;
+import org.apache.isis.viewer.wicket.model.models.ScalarModel;
+import org.apache.isis.viewer.wicket.ui.components.actionmenu.entityactions.EntityActionUtil;
+import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelAbstract;
+import org.apache.isis.viewer.wicket.ui.components.widgets.bootstrap.FormGroup;
+import org.apache.isis.viewer.wicket.ui.util.Components;
+
+import de.agilecoders.wicket.extensions.markup.html.bootstrap.form.fileinput.BootstrapFileInputField;
 
 public abstract class IsisBlobOrClobPanelAbstract<T extends NamedWithMimeType> extends ScalarPanelAbstract {
 

http://git-wip-us.apache.org/repos/asf/isis/blob/cf9ad00b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisColorPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisColorPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisColorPanel.java
index 382b521..3e13257 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisColorPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisColorPanel.java
@@ -30,10 +30,9 @@ import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldP
 public class IsisColorPanel extends ScalarPanelTextFieldParseableAbstract {
 
     private static final long serialVersionUID = 1L;
-    private static final String ID_SCALAR_VALUE = "scalarValue";
 
     public IsisColorPanel(final String id, final ScalarModel scalarModel) {
-        super(id, ID_SCALAR_VALUE, scalarModel);
+        super(id, scalarModel);
     }
 
     @Override
@@ -41,9 +40,5 @@ public class IsisColorPanel extends ScalarPanelTextFieldParseableAbstract {
         return Model.of("isisColorPanel");
     }
 
-    @Override
-    protected void addSemantics() {
-        super.addSemantics();
-    }
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/cf9ad00b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisDateTimePanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisDateTimePanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisDateTimePanel.java
index db5d6b8..5eec2d4 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisDateTimePanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisDateTimePanel.java
@@ -19,14 +19,15 @@
 
 package org.apache.isis.viewer.wicket.ui.components.scalars.isisapplib;
 
-import org.apache.isis.viewer.wicket.ui.components.scalars.datepicker.TextFieldWithDateTimePicker;
-import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.markup.html.form.AbstractTextComponent;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
+
 import org.apache.isis.applib.value.DateTime;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldDatePickerAbstract;
 import org.apache.isis.viewer.wicket.ui.components.scalars.TextFieldValueModel;
+import org.apache.isis.viewer.wicket.ui.components.scalars.datepicker.TextFieldWithDateTimePicker;
 
 /**
  * Panel for rendering scalars of type {@link DateTime Isis' applib.DateTime}.
@@ -40,9 +41,9 @@ public class IsisDateTimePanel extends ScalarPanelTextFieldDatePickerAbstract<or
         init(new DateConverterForApplibDateTime(getSettings(), getAdjustBy()));
     }
 
-    @Override
-    protected TextField<org.apache.isis.applib.value.DateTime> createTextField(final String id) {
-        return new TextFieldWithDateTimePicker<>(id, new TextFieldValueModel<org.apache.isis.applib.value.DateTime>(this), cls, converter);
+    protected AbstractTextComponent<DateTime> createTextFieldForRegular(final String id) {
+        final TextFieldValueModel<DateTime> textFieldValueModel = new TextFieldValueModel<>(this);
+        return new TextFieldWithDateTimePicker<>(id, textFieldValueModel, cls, converter);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/cf9ad00b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisMoneyPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisMoneyPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisMoneyPanel.java
index 7f677a7..d1eeb31 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisMoneyPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisMoneyPanel.java
@@ -31,10 +31,9 @@ import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldP
 public class IsisMoneyPanel extends ScalarPanelTextFieldParseableAbstract {
 
     private static final long serialVersionUID = 1L;
-    private static final String ID_SCALAR_VALUE = "scalarValue";
 
     public IsisMoneyPanel(final String id, final ScalarModel scalarModel) {
-        super(id, ID_SCALAR_VALUE, scalarModel);
+        super(id, scalarModel);
     }
 
     @Override
@@ -42,9 +41,5 @@ public class IsisMoneyPanel extends ScalarPanelTextFieldParseableAbstract {
         return Model.of("isisMoneyPanel");
     }
 
-    @Override
-    protected void addSemantics() {
-        super.addSemantics();
-    }
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/cf9ad00b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisPasswordPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisPasswordPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisPasswordPanel.java
index a9b5cda..3e549cd 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisPasswordPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisPasswordPanel.java
@@ -19,16 +19,18 @@
 
 package org.apache.isis.viewer.wicket.ui.components.scalars.isisapplib;
 
-import de.agilecoders.wicket.core.util.Attributes;
-
 import org.apache.wicket.markup.ComponentTag;
 import org.apache.wicket.markup.html.form.AbstractTextComponent;
 import org.apache.wicket.markup.html.form.PasswordTextField;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
+
 import org.apache.isis.applib.value.Password;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldParseableAbstract;
+import org.apache.isis.viewer.wicket.ui.components.scalars.TextFieldStringModel;
+
+import de.agilecoders.wicket.core.util.Attributes;
 
 /**
  * Panel for rendering scalars of type {@link Password Isis' applib.Password}.
@@ -36,10 +38,9 @@ import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldP
 public class IsisPasswordPanel extends ScalarPanelTextFieldParseableAbstract {
 
     private static final long serialVersionUID = 1L;
-    private static final String ID_SCALAR_VALUE = "scalarValue";
 
     public IsisPasswordPanel(final String id, final ScalarModel scalarModel) {
-        super(id, ID_SCALAR_VALUE, scalarModel);
+        super(id, scalarModel);
     }
 
     @Override
@@ -48,24 +49,9 @@ public class IsisPasswordPanel extends ScalarPanelTextFieldParseableAbstract {
     }
 
     @Override
-    protected AbstractTextComponent<String> createTextFieldForRegular() {
-        final PasswordTextField passwordField = new PasswordTextField(idTextField, new Model<String>() {
-            private static final long serialVersionUID = 1L;
-
-            @Override
-            public String getObject() {
-                return getModel().getObjectAsString();
-            }
-
-            @Override
-            public void setObject(final String object) {
-                if (object == null) {
-                    getModel().setObject(null);
-                } else {
-                    getModel().setObjectAsString(object);
-                }
-            }
-        }) {
+    protected AbstractTextComponent<String> createTextFieldForRegular(String id) {
+        final TextFieldStringModel textModel = new TextFieldStringModel(this);
+        final PasswordTextField passwordField = new PasswordTextField(id, textModel) {
             @Override
             protected void onComponentTag(ComponentTag tag) {
                 Attributes.set(tag, "type", "password");
@@ -82,4 +68,5 @@ public class IsisPasswordPanel extends ScalarPanelTextFieldParseableAbstract {
     protected IModel<String> getScalarPanelType() {
         return Model.of("isisPasswordPanel");
     }
+
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/cf9ad00b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisPercentagePanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisPercentagePanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisPercentagePanel.java
index c514400..88ef7f2 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisPercentagePanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisPercentagePanel.java
@@ -32,10 +32,9 @@ import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldP
 public class IsisPercentagePanel extends ScalarPanelTextFieldParseableAbstract {
 
     private static final long serialVersionUID = 1L;
-    private static final String ID_SCALAR_VALUE = "scalarValue";
 
     public IsisPercentagePanel(final String id, final ScalarModel scalarModel) {
-        super(id, ID_SCALAR_VALUE, scalarModel);
+        super(id, scalarModel);
     }
 
     @Override
@@ -43,9 +42,5 @@ public class IsisPercentagePanel extends ScalarPanelTextFieldParseableAbstract {
         return Model.of("isisPercentagePanel");
     }
 
-    @Override
-    protected void addSemantics() {
-        super.addSemantics();
-    }
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/cf9ad00b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisTimePanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisTimePanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisTimePanel.java
index b021346..ce86fdf 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisTimePanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisTimePanel.java
@@ -30,10 +30,9 @@ import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldP
 public class IsisTimePanel extends ScalarPanelTextFieldParseableAbstract {
 
     private static final long serialVersionUID = 1L;
-    private static final String ID_SCALAR_VALUE = "scalarValue";
 
     public IsisTimePanel(final String id, final ScalarModel scalarModel) {
-        super(id, ID_SCALAR_VALUE, scalarModel);
+        super(id, scalarModel);
     }
 
     @Override
@@ -41,9 +40,5 @@ public class IsisTimePanel extends ScalarPanelTextFieldParseableAbstract {
         return Model.of("isisTimePanel");
     }
 
-    @Override
-    protected void addSemantics() {
-        super.addSemantics();
-    }
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/cf9ad00b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisTimeStampPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisTimeStampPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisTimeStampPanel.java
index c52547c..384cc03 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisTimeStampPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisTimeStampPanel.java
@@ -31,10 +31,9 @@ import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldP
 public class IsisTimeStampPanel extends ScalarPanelTextFieldParseableAbstract {
 
     private static final long serialVersionUID = 1L;
-    private static final String ID_SCALAR_VALUE = "scalarValue";
 
     public IsisTimeStampPanel(final String id, final ScalarModel scalarModel) {
-        super(id, ID_SCALAR_VALUE, scalarModel);
+        super(id, scalarModel);
     }
 
     @Override
@@ -42,9 +41,5 @@ public class IsisTimeStampPanel extends ScalarPanelTextFieldParseableAbstract {
         return Model.of("isisTimeStampPanel");
     }
 
-    @Override
-    protected void addSemantics() {
-        super.addSemantics();
-    }
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/cf9ad00b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaSqlTimePanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaSqlTimePanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaSqlTimePanel.java
index 294d3cd..6dcaa70 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaSqlTimePanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaSqlTimePanel.java
@@ -32,10 +32,9 @@ import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldP
 public class JavaSqlTimePanel extends ScalarPanelTextFieldParseableAbstract {
 
     private static final long serialVersionUID = 1L;
-    private static final String ID_SCALAR_VALUE = "scalarValue";
 
     public JavaSqlTimePanel(final String id, final ScalarModel scalarModel) {
-        super(id, ID_SCALAR_VALUE, scalarModel);
+        super(id, scalarModel);
     }
 
     @Override
@@ -43,9 +42,5 @@ public class JavaSqlTimePanel extends ScalarPanelTextFieldParseableAbstract {
         return Model.of("javaSqlTimePanel");
     }
 
-    @Override
-    protected void addSemantics() {
-        super.addSemantics();
-    }
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/cf9ad00b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigDecimalPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigDecimalPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigDecimalPanel.java
index eeaf703..a6bc29b 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigDecimalPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigDecimalPanel.java
@@ -21,12 +21,14 @@ package org.apache.isis.viewer.wicket.ui.components.scalars.jdkmath;
 
 import java.math.BigDecimal;
 
-import org.apache.isis.viewer.wicket.model.models.ScalarModel;
-import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldNumeric;
-import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.markup.html.form.AbstractTextComponent;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
 
+import org.apache.isis.viewer.wicket.model.models.ScalarModel;
+import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldNumeric;
+import org.apache.isis.viewer.wicket.ui.components.scalars.TextFieldValueModel;
+
 /**
  * Panel for rendering scalars of type {@link BigDecimal}.
  */
@@ -40,10 +42,11 @@ public class JavaMathBigDecimalPanel extends ScalarPanelTextFieldNumeric<BigDeci
         super(id, scalarModel, BigDecimal.class, converter.forViewMode());
         this.converter = converter;
     }
- 
-    protected TextField<BigDecimal> createTextField(final String id) {
+
+    protected AbstractTextComponent<BigDecimal> createTextFieldForRegular(final String id) {
         final ScalarModel model = getModel();
-        return new BigDecimalTextField(id, newTextFieldValueModel(), cls, model, converter);
+        final TextFieldValueModel<BigDecimal> textFieldValueModel = new TextFieldValueModel<>(this);
+        return new BigDecimalTextField(id, textFieldValueModel, cls, model, converter);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/cf9ad00b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigIntegerPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigIntegerPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigIntegerPanel.java
index f8e948f..f992a64 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigIntegerPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigIntegerPanel.java
@@ -45,8 +45,9 @@ public class JavaMathBigIntegerPanel extends ScalarPanelTextFieldNumeric<BigInte
     }
 
     @Override
-    protected AbstractTextComponent<BigInteger> createTextFieldForRegular() {
-        return new TextField<BigInteger>(ID_SCALAR_VALUE, new TextFieldValueModel<BigInteger>(this), BigInteger.class) {
+    protected AbstractTextComponent<BigInteger> createTextFieldForRegular(final String id) {
+        final TextFieldValueModel<BigInteger> textFieldValueModel = new TextFieldValueModel<>(this);
+        return new TextField<BigInteger>(id, textFieldValueModel, BigInteger.class) {
             private static final long serialVersionUID = 1L;
 
             @SuppressWarnings("unchecked")

http://git-wip-us.apache.org/repos/asf/isis/blob/cf9ad00b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaDateTimePanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaDateTimePanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaDateTimePanel.java
index 87bbb67..54834a3 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaDateTimePanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaDateTimePanel.java
@@ -19,15 +19,16 @@
 
 package org.apache.isis.viewer.wicket.ui.components.scalars.jodatime;
 
-import org.apache.isis.viewer.wicket.ui.components.scalars.datepicker.TextFieldWithDateTimePicker;
-import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.markup.html.form.AbstractTextComponent;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
 import org.joda.time.DateTime;
 import org.joda.time.LocalDateTime;
+
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldDatePickerAbstract;
 import org.apache.isis.viewer.wicket.ui.components.scalars.TextFieldValueModel;
+import org.apache.isis.viewer.wicket.ui.components.scalars.datepicker.TextFieldWithDateTimePicker;
 
 /**
  * Panel for rendering scalars of type {@link LocalDateTime}.
@@ -41,9 +42,9 @@ public class JodaDateTimePanel extends ScalarPanelTextFieldDatePickerAbstract<Da
         init(new DateConverterForJodaDateTime(getSettings(), getAdjustBy()));
     }
 
-    @Override
-    protected TextField<DateTime> createTextField(final String id) {
-        return new TextFieldWithDateTimePicker<>(id, new TextFieldValueModel<DateTime>(this), cls, converter);
+    protected AbstractTextComponent<DateTime> createTextFieldForRegular(final String id) {
+        final TextFieldValueModel<DateTime> textFieldValueModel = new TextFieldValueModel<>(this);
+        return new TextFieldWithDateTimePicker<>(id, textFieldValueModel, cls, converter);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/cf9ad00b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaLocalDateTimePanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaLocalDateTimePanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaLocalDateTimePanel.java
index fe3f8fc..2435625 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaLocalDateTimePanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaLocalDateTimePanel.java
@@ -19,14 +19,15 @@
 
 package org.apache.isis.viewer.wicket.ui.components.scalars.jodatime;
 
-import org.apache.isis.viewer.wicket.ui.components.scalars.datepicker.TextFieldWithDateTimePicker;
-import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.markup.html.form.AbstractTextComponent;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
 import org.joda.time.LocalDateTime;
+
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldDatePickerAbstract;
 import org.apache.isis.viewer.wicket.ui.components.scalars.TextFieldValueModel;
+import org.apache.isis.viewer.wicket.ui.components.scalars.datepicker.TextFieldWithDateTimePicker;
 
 /**
  * Panel for rendering scalars of type {@link LocalDateTime}.
@@ -41,9 +42,9 @@ public class JodaLocalDateTimePanel extends ScalarPanelTextFieldDatePickerAbstra
     }
 
     // TODO mgrigorov: Check whether this is really needed after fixing ISIS-1015
-    @Override
-    protected TextField<LocalDateTime> createTextField(final String id) {
-        return new TextFieldWithDateTimePicker<>(id, new TextFieldValueModel<LocalDateTime>(this), cls, converter);
+    protected AbstractTextComponent<LocalDateTime> createTextFieldForRegular(final String id) {
+        final TextFieldValueModel<LocalDateTime> textFieldValueModel = new TextFieldValueModel<>(this);
+        return new TextFieldWithDateTimePicker<>(id, textFieldValueModel, cls, converter);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/cf9ad00b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BytePanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BytePanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BytePanel.java
index fb4d87b..e64f763 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BytePanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BytePanel.java
@@ -42,8 +42,9 @@ public class BytePanel extends ScalarPanelTextFieldNumeric<Byte> {
     }
 
     @Override
-    protected AbstractTextComponent<Byte> createTextFieldForRegular() {
-        return new TextField<Byte>(ID_SCALAR_VALUE, new TextFieldValueModel<Byte>(this), Byte.class) {
+    protected AbstractTextComponent<Byte> createTextFieldForRegular(final String id) {
+        final TextFieldValueModel<Byte> textFieldValueModel = new TextFieldValueModel<>(this);
+        return new TextField<Byte>(id, textFieldValueModel, Byte.class) {
             private static final long serialVersionUID = 1L;
 
             @SuppressWarnings("unchecked")

http://git-wip-us.apache.org/repos/asf/isis/blob/cf9ad00b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/CharacterPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/CharacterPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/CharacterPanel.java
index cffc3cd..d44bd1b 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/CharacterPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/CharacterPanel.java
@@ -30,10 +30,9 @@ import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldP
 public class CharacterPanel extends ScalarPanelTextFieldParseableAbstract {
 
     private static final long serialVersionUID = 1L;
-    private static final String ID_SCALAR_VALUE = "scalarValue";
 
     public CharacterPanel(final String id, final ScalarModel scalarModel) {
-        super(id, ID_SCALAR_VALUE, scalarModel);
+        super(id, scalarModel);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/cf9ad00b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/DoublePanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/DoublePanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/DoublePanel.java
index 233ba7b..6c038e5 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/DoublePanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/DoublePanel.java
@@ -42,8 +42,9 @@ public class DoublePanel extends ScalarPanelTextFieldNumeric<Double> {
     }
     
     @Override
-    protected AbstractTextComponent<Double> createTextFieldForRegular() {
-        return new TextField<Double>(ID_SCALAR_VALUE, new TextFieldValueModel<Double>(this), Double.class) {
+    protected AbstractTextComponent<Double> createTextFieldForRegular(final String id) {
+        final TextFieldValueModel<Double> textFieldValueModel = new TextFieldValueModel<>(this);
+        return new TextField<Double>(id, textFieldValueModel, Double.class) {
             private static final long serialVersionUID = 1L;
 
             @SuppressWarnings("unchecked")

http://git-wip-us.apache.org/repos/asf/isis/blob/cf9ad00b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/FloatPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/FloatPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/FloatPanel.java
index a8ecd34..0e590ef 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/FloatPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/FloatPanel.java
@@ -42,8 +42,9 @@ public class FloatPanel extends ScalarPanelTextFieldNumeric<Float> {
     }
 
     @Override
-    protected AbstractTextComponent<Float> createTextFieldForRegular() {
-        return new TextField<Float>(ID_SCALAR_VALUE, new TextFieldValueModel<Float>(this), Float.class) {
+    protected AbstractTextComponent<Float> createTextFieldForRegular(final String id) {
+        final TextFieldValueModel<Float> textFieldValueModel = new TextFieldValueModel<>(this);
+        return new TextField<Float>(id, textFieldValueModel, Float.class) {
             private static final long serialVersionUID = 1L;
 
             @SuppressWarnings("unchecked")

http://git-wip-us.apache.org/repos/asf/isis/blob/cf9ad00b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/IntegerPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/IntegerPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/IntegerPanel.java
index 8fc3ed0..aefd822 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/IntegerPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/IntegerPanel.java
@@ -19,9 +19,6 @@
 
 package org.apache.isis.viewer.wicket.ui.components.scalars.primitive;
 
-import org.apache.isis.viewer.wicket.model.models.ScalarModel;
-import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldNumeric;
-import org.apache.isis.viewer.wicket.ui.components.scalars.TextFieldValueModel;
 import org.apache.wicket.markup.html.form.AbstractTextComponent;
 import org.apache.wicket.markup.html.form.TextField;
 import org.apache.wicket.model.IModel;
@@ -29,6 +26,10 @@ import org.apache.wicket.model.Model;
 import org.apache.wicket.util.convert.IConverter;
 import org.apache.wicket.util.convert.converter.IntegerConverter;
 
+import org.apache.isis.viewer.wicket.model.models.ScalarModel;
+import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldNumeric;
+import org.apache.isis.viewer.wicket.ui.components.scalars.TextFieldValueModel;
+
 /**
  * Panel for rendering scalars of type {@link Integer} or <tt>int</tt>.
  */
@@ -41,8 +42,9 @@ public class IntegerPanel extends ScalarPanelTextFieldNumeric<Integer> {
     }
 
     @Override
-    protected AbstractTextComponent<Integer> createTextFieldForRegular() {
-        return new TextField<Integer>(ID_SCALAR_VALUE, new TextFieldValueModel<Integer>(this), Integer.class) {
+    protected AbstractTextComponent<Integer> createTextFieldForRegular(final String id) {
+        final TextFieldValueModel<Integer> textFieldValueModel = new TextFieldValueModel<>(this);
+        return new TextField<Integer>(id, textFieldValueModel, Integer.class) {
             private static final long serialVersionUID = 1L;
 
             @SuppressWarnings("unchecked")

http://git-wip-us.apache.org/repos/asf/isis/blob/cf9ad00b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/LongPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/LongPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/LongPanel.java
index ac1c916..0282240 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/LongPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/LongPanel.java
@@ -42,8 +42,9 @@ public class LongPanel extends ScalarPanelTextFieldNumeric<Long> {
     }
 
     @Override
-    protected AbstractTextComponent<Long> createTextFieldForRegular() {
-        return new TextField<Long>(ID_SCALAR_VALUE, new TextFieldValueModel<Long>(this), Long.class) {
+    protected AbstractTextComponent<Long> createTextFieldForRegular(final String id) {
+        final TextFieldValueModel<Long> textFieldValueModel = new TextFieldValueModel<>(this);
+        return new TextField<Long>(id, textFieldValueModel, Long.class) {
             private static final long serialVersionUID = 1L;
 
             @SuppressWarnings("unchecked")

http://git-wip-us.apache.org/repos/asf/isis/blob/cf9ad00b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/ShortPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/ShortPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/ShortPanel.java
index 4dbb399..9f5ec09 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/ShortPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/ShortPanel.java
@@ -42,8 +42,9 @@ public class ShortPanel extends ScalarPanelTextFieldNumeric<Short> {
     }
 
     @Override
-    protected AbstractTextComponent<Short> createTextFieldForRegular() {
-        return new TextField<Short>(ID_SCALAR_VALUE, new TextFieldValueModel<Short>(this), Short.class) {
+    protected AbstractTextComponent<Short> createTextFieldForRegular(final String id) {
+        final TextFieldValueModel<Short> textFieldValueModel = new TextFieldValueModel<>(this);
+        return new TextField<Short>(id, textFieldValueModel, Short.class) {
             private static final long serialVersionUID = 1L;
 
             @SuppressWarnings("unchecked")

http://git-wip-us.apache.org/repos/asf/isis/blob/cf9ad00b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
index a0f6f75..fc4326e 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
@@ -25,7 +25,6 @@ import java.util.List;
 import com.google.common.collect.Lists;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.wicketstuff.select2.ChoiceProvider;
-import org.wicketstuff.select2.Select2Choice;
 import org.wicketstuff.select2.Settings;
 
 import org.apache.wicket.AttributeModifier;
@@ -39,8 +38,6 @@ import org.apache.wicket.model.Model;
 import org.apache.wicket.validation.IValidatable;
 import org.apache.wicket.validation.IValidator;
 import org.apache.wicket.validation.ValidationError;
-import org.wicketstuff.select2.ChoiceProvider;
-import org.wicketstuff.select2.Settings;
 
 import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;

http://git-wip-us.apache.org/repos/asf/isis/blob/cf9ad00b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/string/MultiLineStringPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/string/MultiLineStringPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/string/MultiLineStringPanel.java
index 0bf8198..772eea8 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/string/MultiLineStringPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/string/MultiLineStringPanel.java
@@ -32,6 +32,7 @@ import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxLengthFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.multiline.MultiLineFacet;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldParseableAbstract;
+import org.apache.isis.viewer.wicket.ui.components.scalars.TextFieldStringModel;
 
 /**
  * Panel for rendering MultiLine scalars of type String
@@ -41,28 +42,13 @@ public class MultiLineStringPanel extends ScalarPanelTextFieldParseableAbstract
     private static final long serialVersionUID = 1L;
     
     public MultiLineStringPanel(final String id, final ScalarModel scalarModel) {
-        super(id, ID_SCALAR_VALUE, scalarModel);
+        super(id, scalarModel);
     }
 
     @Override
-    protected AbstractTextComponent<String> createTextFieldForRegular() {
-        final TextArea<String> textField = new TextArea<String>(idTextField, new Model<String>() {
-            private static final long serialVersionUID = 1L;
-
-            @Override
-            public String getObject() {
-                return getModel().getObjectAsString();
-            }
-
-            @Override
-            public void setObject(final String object) {
-                if (object == null) {
-                    getModel().setObject(null);
-                } else {
-                    getModel().setObjectAsString(object);
-                }
-            }
-        });
+    protected AbstractTextComponent<String> createTextFieldForRegular(final String id) {
+        TextFieldStringModel model = new TextFieldStringModel(this);
+        final TextArea<String> textField = new TextArea<String>(id, model);
 
         final MultiLineFacet multiLineFacet = getModel().getFacet(MultiLineFacet.class);
         setAttribute(textField, "rows", multiLineFacet.numberOfLines());
@@ -78,6 +64,7 @@ public class MultiLineStringPanel extends ScalarPanelTextFieldParseableAbstract
         return textField;
     }
 
+
     @Override
     protected Fragment createTextFieldFragment(String id) {
         return new Fragment(id, "textarea", MultiLineStringPanel.this);

http://git-wip-us.apache.org/repos/asf/isis/blob/cf9ad00b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/string/StringPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/string/StringPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/string/StringPanel.java
index b832a17..5991877 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/string/StringPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/string/StringPanel.java
@@ -30,11 +30,10 @@ import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldP
 public class StringPanel extends ScalarPanelTextFieldParseableAbstract {
 
     private static final long serialVersionUID = 1L;
-    private static final String ID_SCALAR_VALUE = "scalarValue";
 
     
     public StringPanel(final String id, final ScalarModel scalarModel) {
-        super(id, ID_SCALAR_VALUE, scalarModel);
+        super(id, scalarModel);
     }
 
     @Override
@@ -42,10 +41,6 @@ public class StringPanel extends ScalarPanelTextFieldParseableAbstract {
         return Model.of("stringPanel");
     }
 
-    @Override
-    protected void addSemantics() {
-        super.addSemantics();
-    }
-    
+
     
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/cf9ad00b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/value/ValuePanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/value/ValuePanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/value/ValuePanel.java
index fd3641a..667e20f 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/value/ValuePanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/value/ValuePanel.java
@@ -37,16 +37,11 @@ import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldP
 public class ValuePanel extends ScalarPanelTextFieldParseableAbstract {
 
     private static final long serialVersionUID = 1L;
-    private static final String ID_SCALAR_VALUE = "scalarValue";
 
     public ValuePanel(final String id, final ScalarModel scalarModel) {
-        super(id, ID_SCALAR_VALUE, scalarModel);
+        super(id, scalarModel);
     }
 
-    @Override
-    protected void addSemantics() {
-        super.addSemantics();
-    }
 
     @Override
     protected IModel<String> getScalarPanelType() {


[34/43] isis git commit: ISIS-1603: fixes compile error on nested class now static

Posted by da...@apache.org.
ISIS-1603: fixes compile error on nested class now static


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

Branch: refs/heads/master
Commit: 8d0615206ca00bbd5ffa9d7754de5482a16bd94e
Parents: 4fdfc25
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Thu Apr 27 13:30:44 2017 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Apr 27 13:30:44 2017 +0100

----------------------------------------------------------------------
 .../viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java   | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/8d061520/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
index 1617f0c..e70c846 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
@@ -327,7 +327,7 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
 
             // hmmm... this doesn't seem to be picked up...
             target.appendJavaScript(
-                    String.format("Wicket.Event.publish(Isis.Topic.FOCUS_FIRST_ACTION_PARAMETER, '%s')", getMarkupId()));
+                    String.format("Wicket.Event.publish(Isis.Topic.FOCUS_FIRST_ACTION_PARAMETER, '%s')", scalarPanel.getMarkupId()));
         }
 
         @Override


[04/43] isis git commit: ISIS-1603: applib, metamodel and wicket model changes, and docs.

Posted by da...@apache.org.
ISIS-1603: applib, metamodel  and wicket model changes, and docs.


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

Branch: refs/heads/master
Commit: 4ad7645e5cb8d23eff4cfe2b5dc07f03c7d77cb9
Parents: 530d555
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Fri Apr 21 13:29:38 2017 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Apr 27 13:25:36 2017 +0100

----------------------------------------------------------------------
 .../applib/layout/component/component.xsd       |   9 ++
 .../guides/rgant/_rgant-PropertyLayout.adoc     |   8 +
 .../rgant/_rgant-PropertyLayout_editStyle.adoc  |  25 +++
 .../guides/rgcfg/_rgcfg_configuring-core.adoc   |   8 +
 .../applib/annotation/PropertyEditStyle.java    |  45 ++++++
 .../isis/applib/annotation/PropertyLayout.java  |   6 +
 .../layout/component/PropertyLayoutData.java    |  15 +-
 .../facets/SingleStringValueFacet.java          |   6 +-
 .../PropertyEditStyleConfiguration.java         |  42 +++++
 .../editStyle/PropertyEditStyleFacet.java       |  32 ++++
 .../PropertyEditStyleFacetAbstract.java         |  38 +++++
 .../PropertyEditStyleFacetAsConfigured.java     |  37 +++++
 .../PropertyEditStyleFacetFallBack.java         |  35 ++++
 ...itStyleFacetForPropertyLayoutAnnotation.java |  81 ++++++++++
 .../PropertyEditStyleFacetForPropertyXml.java   |  49 ++++++
 ...tyleFacetOnPropertyFromLayoutProperties.java |  57 +++++++
 .../PropertyLayoutFacetFactory.java             | 123 +++++++++++----
 .../layoutmetadata/PropertyLayoutFacetRepr.java |   2 +
 .../grid/GridSystemServiceAbstract.java         |   5 +-
 .../PropertyEditStyleConfiguration_Test.java    |  74 +++++++++
 ...itStyleFacetFromPropertyAnnotation_Test.java | 158 +++++++++++++++++++
 ...tForPropertyLayoutAnnotationFactoryTest.java |  70 ++++++++
 ...tForPropertyLayoutAnnotationFactoryTest.java |  99 ++++++++++++
 .../metamodel/services/grid/BS3GridTest.java    |   2 +-
 .../viewer/wicket/model/models/ScalarModel.java |  20 +++
 25 files changed, 1007 insertions(+), 39 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/4ad7645e/adocs/documentation/src/main/asciidoc/applib/layout/component/component.xsd
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/applib/layout/component/component.xsd b/adocs/documentation/src/main/asciidoc/applib/layout/component/component.xsd
index 0ed2a41..e0498ef 100644
--- a/adocs/documentation/src/main/asciidoc/applib/layout/component/component.xsd
+++ b/adocs/documentation/src/main/asciidoc/applib/layout/component/component.xsd
@@ -60,6 +60,7 @@
       <xs:element minOccurs="0" name="metadataError" type="xs:string"/>
     </xs:sequence>
     <xs:attribute name="cssClass" type="xs:string"/>
+    <xs:attribute name="editStyle" type="tns:propertyEditStyle"/>
     <xs:attribute name="hidden" type="tns:where"/>
     <xs:attribute name="id" type="xs:string" use="required"/>
     <xs:attribute name="labelPosition" type="tns:labelPosition"/>
@@ -100,6 +101,14 @@
     </xs:restriction>
   </xs:simpleType>
 
+  <xs:simpleType name="propertyEditStyle">
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="DIALOG"/>
+      <xs:enumeration value="INLINE"/>
+      <xs:enumeration value="AS_CONFIGURED"/>
+    </xs:restriction>
+  </xs:simpleType>
+
   <xs:simpleType name="where">
     <xs:restriction base="xs:string">
       <xs:enumeration value="EVERYWHERE"/>

http://git-wip-us.apache.org/repos/asf/isis/blob/4ad7645e/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout.adoc
index 15b43b5..af66e3d 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout.adoc
@@ -29,6 +29,13 @@ The table below summarizes the annotation's attributes.
 |description of this property, eg to be rendered in a tooltip.
 
 
+|xref:../rgant/rgant.adoc#_rgant-PropertyLayout_editStyle[`editStyle()`]
+|`DIALOG`, `INLINE`, `AS_CONFIGURED` +
+(`AS_CONFIGURED`)
+|(`1.15.0-SNAPSHOT`) how a property should be edited within the UI
+
+
+
 |xref:../rgant/rgant.adoc#_rgant-PropertyLayout_hidden[`hidden()`]
 |`EVERYWHERE`, `OBJECT_FORMS`, `PARENTED_TABLES`, `STANDALONE_TABLES`, `ALL_TABLES`, `NOWHERE` +
 (`NOWHERE`)
@@ -121,6 +128,7 @@ so that boilerplate-busting tools such as link:https://projectlombok.org/[Projec
 
 include::_rgant-PropertyLayout_cssClass.adoc[leveloffset=+1]
 include::_rgant-PropertyLayout_describedAs.adoc[leveloffset=+1]
+include::_rgant-PropertyLayout_editStyle.adoc[leveloffset=+1]
 include::_rgant-PropertyLayout_labelPosition.adoc[leveloffset=+1]
 include::_rgant-PropertyLayout_multiLine.adoc[leveloffset=+1]
 include::_rgant-PropertyLayout_named.adoc[leveloffset=+1]

http://git-wip-us.apache.org/repos/asf/isis/blob/4ad7645e/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_editStyle.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_editStyle.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_editStyle.adoc
new file mode 100644
index 0000000..c5de7a0
--- /dev/null
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_editStyle.adoc
@@ -0,0 +1,25 @@
+[[_rgant-PropertyLayout_editStyle]]
+= `editStyle()` (`1.15.0-SNAPSHOT`)
+:Notice: 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.
+:_basedir: ../../
+:_imagesdir: images/
+
+
+The `editStyle()` attribute is used to specify whether a domain object property is edited through a dialog box (similar to an action parameter form) or using an inline edit.
+
+If the attribute is not set, then thevalue of the xref:../rgcfg/rgcfg.adoc#_rgcfg_configuring-core[configuration property] `isis.properties.editStyle` is used.
+If this is itself not set, then a dialog box is used.
+
+For example:
+
+[source,java]
+----
+public class Customer {
+    @Property(
+        editStyle=PropertyEditStyle.INLINE
+    )
+    public int getNotes(){ ... }
+    public void setNotes(String notes) { ... }
+}
+----
+

http://git-wip-us.apache.org/repos/asf/isis/blob/4ad7645e/adocs/documentation/src/main/asciidoc/guides/rgcfg/_rgcfg_configuring-core.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgcfg/_rgcfg_configuring-core.adoc b/adocs/documentation/src/main/asciidoc/guides/rgcfg/_rgcfg_configuring-core.adoc
index bacff5d..cd7bc9a 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgcfg/_rgcfg_configuring-core.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgcfg/_rgcfg_configuring-core.adoc
@@ -582,6 +582,14 @@ If enabled, this configuration property will ensure that domain services only de
 |Whether objects' properties and collections can be edited directly (for objects annotated with xref:../rgant/rgant.adoc#_rgant-DomainObject_editing[`@DomainObject#editing()`]); see xref:../rgcfg/rgcfg.adoc#__rgcfg_configuring-core_isis-objects-editing[below] for further discussion.
 
 
+|`isis.properties.` +
+`editStyle`
+|`dialog`,`inline` +
+(`dialog`)
+|(`1.15.0-SNAPSHOT`) whether a domain object property is edited through a dialog box (similar to an action parameter form) or using an inline edit.
+Can be overridden on a property-by-property basis using xref:../rgant/rgant.adoc#_rgant-PropertyLayout_editStyle[`@Property#editStyle()`]).
+
+
 |`isis.persistor.` +
 `disable` +
 `ConcurrencyChecking`

http://git-wip-us.apache.org/repos/asf/isis/blob/4ad7645e/core/applib/src/main/java/org/apache/isis/applib/annotation/PropertyEditStyle.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/PropertyEditStyle.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/PropertyEditStyle.java
new file mode 100644
index 0000000..e059cdb
--- /dev/null
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/PropertyEditStyle.java
@@ -0,0 +1,45 @@
+/*
+ *  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.applib.annotation;
+
+/**
+ * How editing of properties should be performed
+ */
+public enum PropertyEditStyle {
+    /**
+     * Edit the property according to the default edit style policy configured in <tt>isis.properties</tt>.
+     *
+     * <p>
+     *      If no editing style is configured, then {@link #DIALOG} is assumed.
+     * </p>
+     */
+    AS_CONFIGURED,
+    /**
+     * Edit the property using a dialog (similar to action parameter, but just a single property being changed)
+     */
+    DIALOG,
+    /**
+     * Edit the property inline.
+     *
+     * <p>
+     *     In the Wicket viewer this is implemented using the <code>x-editable</code> library
+     * </p>
+     */
+    INLINE
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/4ad7645e/core/applib/src/main/java/org/apache/isis/applib/annotation/PropertyLayout.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/PropertyLayout.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/PropertyLayout.java
index 449bf13..a744219 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/PropertyLayout.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/PropertyLayout.java
@@ -41,6 +41,12 @@ public @interface PropertyLayout {
      */
     String describedAs() default "";
 
+
+    /**
+     * How the properties of this domain object are be edited, either {@link PropertyEditStyle#DIALOG dialog} or {@link PropertyEditStyle#INLINE inline}.
+     */
+    PropertyEditStyle editStyle() default PropertyEditStyle.AS_CONFIGURED;
+
     /**
      * Indicates where in the UI the property should <i>not</i>not be visible.
      */

http://git-wip-us.apache.org/repos/asf/isis/blob/4ad7645e/core/applib/src/main/java/org/apache/isis/applib/layout/component/PropertyLayoutData.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/layout/component/PropertyLayoutData.java b/core/applib/src/main/java/org/apache/isis/applib/layout/component/PropertyLayoutData.java
index 1922d76..23b32e2 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/layout/component/PropertyLayoutData.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/layout/component/PropertyLayoutData.java
@@ -30,6 +30,7 @@ import javax.xml.bind.annotation.XmlType;
 import com.google.common.collect.Lists;
 
 import org.apache.isis.applib.annotation.LabelPosition;
+import org.apache.isis.applib.annotation.PropertyEditStyle;
 import org.apache.isis.applib.annotation.Where;
 
 /**
@@ -51,7 +52,7 @@ public class PropertyLayoutData
         implements ActionLayoutDataOwner,
                    Serializable,
                    Owned<FieldSet>,
-                   HasCssClass, HasDescribedAs, HasHidden, HasNamed {
+                   HasCssClass, HasDescribedAs, HasHidden, HasNamed  {
 
     private static final long serialVersionUID = 1L;
 
@@ -106,6 +107,18 @@ public class PropertyLayoutData
     }
 
 
+    private PropertyEditStyle editStyle;
+
+    @XmlAttribute(required = false)
+    public PropertyEditStyle getEditStyle() {
+        return editStyle;
+    }
+
+    public void setEditStyle(PropertyEditStyle editStyle) {
+        this.editStyle = editStyle;
+    }
+
+
     private Where hidden;
 
     @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/4ad7645e/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/SingleStringValueFacet.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/SingleStringValueFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/SingleStringValueFacet.java
index 2e4c474..fd3c30a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/SingleStringValueFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/SingleStringValueFacet.java
@@ -19,9 +19,5 @@
 
 package org.apache.isis.core.metamodel.facets;
 
-import org.apache.isis.core.metamodel.facetapi.Facet;
-
-public interface SingleStringValueFacet extends Facet {
-
-    public String value();
+public interface SingleStringValueFacet extends SingleValueFacet<String> {
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/4ad7645e/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/editStyle/PropertyEditStyleConfiguration.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/editStyle/PropertyEditStyleConfiguration.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/editStyle/PropertyEditStyleConfiguration.java
new file mode 100644
index 0000000..921c94f
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/editStyle/PropertyEditStyleConfiguration.java
@@ -0,0 +1,42 @@
+/*
+ *  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.core.metamodel.facets.properties.property.editStyle;
+
+import org.apache.isis.applib.annotation.PropertyEditStyle;
+import org.apache.isis.core.commons.config.IsisConfiguration;
+
+
+public class PropertyEditStyleConfiguration {
+
+    private PropertyEditStyleConfiguration() {}
+
+    public static final String EDIT_STYLE_KEY = "isis.properties.editStyle";
+
+    public static PropertyEditStyle parse(final IsisConfiguration configuration) {
+        final String configuredValue = configuration.getString(EDIT_STYLE_KEY);
+        return PropertyEditStyleConfiguration.parse(configuredValue);
+    }
+
+    private static PropertyEditStyle parse(final String value) {
+        return value != null && value.trim().equalsIgnoreCase(PropertyEditStyle.INLINE.name())
+                ? PropertyEditStyle.INLINE
+                : PropertyEditStyle.DIALOG;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/4ad7645e/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/editStyle/PropertyEditStyleFacet.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/editStyle/PropertyEditStyleFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/editStyle/PropertyEditStyleFacet.java
new file mode 100644
index 0000000..9bdd252
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/editStyle/PropertyEditStyleFacet.java
@@ -0,0 +1,32 @@
+/*
+ *  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.core.metamodel.facets.properties.property.editStyle;
+
+import org.apache.isis.applib.annotation.PropertyEditStyle;
+import org.apache.isis.core.metamodel.facets.SingleValueFacet;
+
+/**
+ * Indicates that the editing of the property should be published.
+ */
+public interface PropertyEditStyleFacet extends SingleValueFacet<PropertyEditStyle> {
+
+    PropertyEditStyle value();
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/4ad7645e/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/editStyle/PropertyEditStyleFacetAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/editStyle/PropertyEditStyleFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/editStyle/PropertyEditStyleFacetAbstract.java
new file mode 100644
index 0000000..80348c2
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/editStyle/PropertyEditStyleFacetAbstract.java
@@ -0,0 +1,38 @@
+/*
+ *  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.core.metamodel.facets.properties.property.editStyle;
+
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+
+public abstract class PropertyEditStyleFacetAbstract extends FacetAbstract
+        implements PropertyEditStyleFacet {
+
+
+    public static Class<? extends Facet> type() {
+        return PropertyEditStyleFacet.class;
+    }
+
+    public PropertyEditStyleFacetAbstract(final FacetHolder holder) {
+        super( type(), holder, Derivation.NOT_DERIVED);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/4ad7645e/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/editStyle/PropertyEditStyleFacetAsConfigured.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/editStyle/PropertyEditStyleFacetAsConfigured.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/editStyle/PropertyEditStyleFacetAsConfigured.java
new file mode 100644
index 0000000..6f6ff7e
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/editStyle/PropertyEditStyleFacetAsConfigured.java
@@ -0,0 +1,37 @@
+/*
+ *  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.core.metamodel.facets.properties.property.editStyle;
+
+import org.apache.isis.applib.annotation.PropertyEditStyle;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+
+public class PropertyEditStyleFacetAsConfigured extends PropertyEditStyleFacetAbstract {
+
+    private final PropertyEditStyle editStyle;
+
+    public PropertyEditStyleFacetAsConfigured(final PropertyEditStyle editStyle, final FacetHolder holder) {
+        super(holder);
+        this.editStyle = editStyle;
+    }
+
+    @Override public PropertyEditStyle value() {
+        return editStyle;
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/4ad7645e/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/editStyle/PropertyEditStyleFacetFallBack.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/editStyle/PropertyEditStyleFacetFallBack.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/editStyle/PropertyEditStyleFacetFallBack.java
new file mode 100644
index 0000000..b4e0bdb
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/editStyle/PropertyEditStyleFacetFallBack.java
@@ -0,0 +1,35 @@
+/*
+ *  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.core.metamodel.facets.properties.property.editStyle;
+
+import org.apache.isis.applib.annotation.PropertyEditStyle;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+
+public class PropertyEditStyleFacetFallBack extends PropertyEditStyleFacetAbstract {
+
+    public PropertyEditStyleFacetFallBack(final FacetHolder holder) {
+        super(holder);
+    }
+
+    @Override
+    public PropertyEditStyle value() {
+        return PropertyEditStyle.DIALOG;
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/4ad7645e/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PropertyEditStyleFacetForPropertyLayoutAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PropertyEditStyleFacetForPropertyLayoutAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PropertyEditStyleFacetForPropertyLayoutAnnotation.java
new file mode 100644
index 0000000..6ae9ef9
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PropertyEditStyleFacetForPropertyLayoutAnnotation.java
@@ -0,0 +1,81 @@
+/*
+ *  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.core.metamodel.facets.properties.propertylayout;
+
+import org.apache.isis.applib.annotation.PropertyEditStyle;
+import org.apache.isis.applib.annotation.PropertyLayout;
+import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.properties.property.editStyle.PropertyEditStyleConfiguration;
+import org.apache.isis.core.metamodel.facets.properties.property.editStyle.PropertyEditStyleFacet;
+import org.apache.isis.core.metamodel.facets.properties.property.editStyle.PropertyEditStyleFacetAbstract;
+import org.apache.isis.core.metamodel.facets.properties.property.editStyle.PropertyEditStyleFacetAsConfigured;
+import org.apache.isis.core.metamodel.facets.properties.property.editStyle.PropertyEditStyleFacetFallBack;
+
+public class PropertyEditStyleFacetForPropertyLayoutAnnotation extends PropertyEditStyleFacetAbstract {
+
+    private final PropertyEditStyle editStyle;
+
+    public PropertyEditStyleFacetForPropertyLayoutAnnotation(final PropertyEditStyle editStyle, final FacetHolder holder) {
+        super( holder );
+        this.editStyle = editStyle;
+    }
+
+    public static PropertyEditStyleFacet create(
+            final PropertyLayout propertyLayout,
+            final IsisConfiguration configuration,
+            final FacetHolder holder) {
+
+        PropertyEditStyle editStyle = propertyLayout != null? propertyLayout.editStyle() : null;
+
+        if(editStyle == null) {
+                if (holder.containsDoOpFacet(PropertyEditStyleFacet.class)) {
+                    // do not replace
+                    return null;
+                }
+
+                return new PropertyEditStyleFacetFallBack(holder);
+        } else {
+
+            switch (editStyle) {
+                case DIALOG:
+                case INLINE:
+                    return new PropertyEditStyleFacetForPropertyLayoutAnnotation(editStyle, holder);
+
+                case AS_CONFIGURED:
+                default:
+
+                    // do not replace
+                    if (holder.containsDoOpFacet(PropertyEditStyleFacet.class)) {
+                        return null;
+                    }
+
+                    editStyle = PropertyEditStyleConfiguration.parse(configuration);
+                    return new PropertyEditStyleFacetAsConfigured(editStyle, holder);
+            }
+        }
+
+    }
+
+    @Override
+    public PropertyEditStyle value() {
+        return editStyle;
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/4ad7645e/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PropertyEditStyleFacetForPropertyXml.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PropertyEditStyleFacetForPropertyXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PropertyEditStyleFacetForPropertyXml.java
new file mode 100644
index 0000000..c37190c
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PropertyEditStyleFacetForPropertyXml.java
@@ -0,0 +1,49 @@
+/*
+ *  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.core.metamodel.facets.properties.propertylayout;
+
+import org.apache.isis.applib.annotation.PropertyEditStyle;
+import org.apache.isis.applib.layout.component.PropertyLayoutData;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.properties.property.editStyle.PropertyEditStyleFacet;
+import org.apache.isis.core.metamodel.facets.properties.property.editStyle.PropertyEditStyleFacetAbstract;
+
+public class PropertyEditStyleFacetForPropertyXml extends PropertyEditStyleFacetAbstract {
+
+    public static PropertyEditStyleFacet create(PropertyLayoutData propertyLayout, FacetHolder holder) {
+        if(propertyLayout == null) {
+            return null;
+        }
+        final PropertyEditStyle propertyEditStyle = propertyLayout.getEditStyle();
+        return propertyEditStyle != null ? new PropertyEditStyleFacetForPropertyXml(propertyEditStyle, holder) : null;
+    }
+
+    private final PropertyEditStyle propertyEditStyle;
+
+    private PropertyEditStyleFacetForPropertyXml(PropertyEditStyle propertyEditStyle, FacetHolder holder) {
+        super(holder);
+        this.propertyEditStyle = propertyEditStyle;
+    }
+
+    @Override
+    public PropertyEditStyle value() {
+        return propertyEditStyle;
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/4ad7645e/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PropertyEditStyleFacetOnPropertyFromLayoutProperties.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PropertyEditStyleFacetOnPropertyFromLayoutProperties.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PropertyEditStyleFacetOnPropertyFromLayoutProperties.java
new file mode 100644
index 0000000..ca8fe5c
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PropertyEditStyleFacetOnPropertyFromLayoutProperties.java
@@ -0,0 +1,57 @@
+/*
+ *  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.core.metamodel.facets.properties.propertylayout;
+
+import java.util.Properties;
+
+import com.google.common.base.Strings;
+
+import org.apache.isis.applib.annotation.PropertyEditStyle;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.properties.property.editStyle.PropertyEditStyleFacet;
+import org.apache.isis.core.metamodel.facets.properties.property.editStyle.PropertyEditStyleFacetAbstract;
+
+public class PropertyEditStyleFacetOnPropertyFromLayoutProperties extends PropertyEditStyleFacetAbstract {
+
+    private final PropertyEditStyle propertyEditStyle;
+
+    public static PropertyEditStyleFacet create(Properties properties, FacetHolder holder) {
+        final PropertyEditStyle propertyEditStyle = propertyEditStyle(properties);
+        return propertyEditStyle != null? new PropertyEditStyleFacetOnPropertyFromLayoutProperties(propertyEditStyle, holder): null;
+    }
+
+    private PropertyEditStyleFacetOnPropertyFromLayoutProperties(PropertyEditStyle propertyEditStyle, FacetHolder holder) {
+        super(holder);
+        this.propertyEditStyle = propertyEditStyle;
+    }
+
+    private static PropertyEditStyle propertyEditStyle(Properties properties) {
+        if(properties == null) {
+            return null;
+        }
+        String propertyEditStyle = Strings.emptyToNull(properties.getProperty("editStyle"));
+        return PropertyEditStyle.valueOf(propertyEditStyle);
+    }
+
+    @Override
+    public PropertyEditStyle value() {
+        return propertyEditStyle;
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/4ad7645e/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PropertyLayoutFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PropertyLayoutFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PropertyLayoutFacetFactory.java
index dac5884..8439de2 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PropertyLayoutFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PropertyLayoutFacetFactory.java
@@ -21,6 +21,7 @@ package org.apache.isis.core.metamodel.facets.properties.propertylayout;
 
 import java.lang.reflect.Method;
 import java.util.Properties;
+
 import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.FacetUtil;
@@ -28,6 +29,7 @@ import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.facets.Annotations;
 import org.apache.isis.core.metamodel.facets.ContributeeMemberFacetFactory;
 import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
+import org.apache.isis.core.metamodel.facets.FacetedMethod;
 import org.apache.isis.core.metamodel.facets.all.describedas.DescribedAsFacet;
 import org.apache.isis.core.metamodel.facets.all.hide.HiddenFacet;
 import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
@@ -36,6 +38,7 @@ import org.apache.isis.core.metamodel.facets.objectvalue.labelat.LabelAtFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.multiline.MultiLineFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.renderedadjusted.RenderedAdjustedFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.typicallen.TypicalLengthFacet;
+import org.apache.isis.core.metamodel.facets.properties.property.editStyle.PropertyEditStyleFacet;
 
 public class PropertyLayoutFacetFactory extends FacetFactoryAbstract implements ContributeeMemberFacetFactory {
 
@@ -46,91 +49,123 @@ public class PropertyLayoutFacetFactory extends FacetFactoryAbstract implements
     @Override
     public void process(final ProcessMethodContext processMethodContext) {
 
-        final FacetHolder holder = processMethodContext.getFacetHolder();
-        final Method method = processMethodContext.getMethod();
+        final FacetHolder holder = facetHolderFrom(processMethodContext);
+        final Properties properties = metadataPropertiesFrom(processMethodContext);
+        final PropertyLayout propertyLayout = propertyLayoutAnnotationFrom(processMethodContext);
 
-        Properties properties = processMethodContext.metadataProperties("propertyLayout");
-        if(properties == null) {
-            // alternate key
-            properties = processMethodContext.metadataProperties("layout");
-        }
-        final PropertyLayout propertyLayout = Annotations.getAnnotation(method, PropertyLayout.class);
+        processCssClass(holder, properties, propertyLayout);
 
+        processDescribedAs(holder, properties, propertyLayout);
 
-        // cssClass
+        processEditStyle(holder, properties, propertyLayout);
+
+        processHidden(holder, properties, propertyLayout);
+
+        processLabelAt(holder, properties, propertyLayout);
+
+        processMultiLine(holder, properties, propertyLayout);
+
+        processNamed(holder, properties, propertyLayout);
+
+        processRenderedAdjusted(holder, properties, propertyLayout);
+
+        processTypicalLength(holder, properties, propertyLayout);
+    }
+
+    void processCssClass(final FacetHolder holder, final Properties properties, final PropertyLayout propertyLayout) {
         CssClassFacet cssClassFacet = CssClassFacetOnPropertyFromLayoutProperties.create(properties, holder);
         if(cssClassFacet == null) {
             cssClassFacet = CssClassFacetForPropertyLayoutAnnotation.create(propertyLayout, holder);
         }
         FacetUtil.addFacet(cssClassFacet);
+    }
 
-
-        // describedAs
+    void processDescribedAs(
+            final FacetHolder holder,
+            final Properties properties,
+            final PropertyLayout propertyLayout) {
         DescribedAsFacet describedAsFacet = DescribedAsFacetOnPropertyFromLayoutProperties.create(properties, holder);
         if(describedAsFacet == null) {
             describedAsFacet = DescribedAsFacetForPropertyLayoutAnnotation.create(propertyLayout, holder);
         }
         FacetUtil.addFacet(describedAsFacet);
+    }
 
+    void processEditStyle(final FacetHolder holder, final Properties properties, final PropertyLayout propertyLayout) {
+        PropertyEditStyleFacet propertyEditStyleFacet = PropertyEditStyleFacetOnPropertyFromLayoutProperties
+                .create(properties, holder);
+        if(propertyEditStyleFacet == null) {
+            propertyEditStyleFacet = PropertyEditStyleFacetForPropertyLayoutAnnotation
+                    .create(propertyLayout, getConfiguration(), holder);
+        }
 
-        // hidden
+        FacetUtil.addFacet(propertyEditStyleFacet);
+    }
+
+    void processHidden(final FacetHolder holder, final Properties properties, final PropertyLayout propertyLayout) {
         HiddenFacet hiddenFacet = HiddenFacetOnPropertyFromLayoutProperties.create(properties, holder);
         if(hiddenFacet == null) {
             hiddenFacet = HiddenFacetForPropertyLayoutAnnotation.create(propertyLayout, holder);
         }
         FacetUtil.addFacet(hiddenFacet);
+    }
 
-
-        // labelAt
+    void processLabelAt(
+            final FacetHolder holder,
+            final Properties properties,
+            final PropertyLayout propertyLayout) {
         LabelAtFacet labelAtFacet = LabelAtFacetOnPropertyFromLayoutProperties.create(properties, holder);
         if(labelAtFacet == null) {
             labelAtFacet = LabelAtFacetForPropertyLayoutAnnotation.create(propertyLayout, holder);
         }
         FacetUtil.addFacet(labelAtFacet);
+    }
 
-
-        // multiLine
+    void processMultiLine(final FacetHolder holder, final Properties properties, final PropertyLayout propertyLayout) {
         MultiLineFacet multiLineFacet = MultiLineFacetOnPropertyFromLayoutProperties.create(properties, holder);
         if(multiLineFacet == null) {
             multiLineFacet = MultiLineFacetForPropertyLayoutAnnotation.create(propertyLayout, holder);
         }
         FacetUtil.addFacet(multiLineFacet);
+    }
 
-
-        // named
+    void processNamed(final FacetHolder holder, final Properties properties, final PropertyLayout propertyLayout) {
         NamedFacet namedFacet = NamedFacetOnPropertyFromLayoutProperties.create(properties, holder);
         if(namedFacet == null) {
             namedFacet = NamedFacetForPropertyLayoutAnnotation.create(propertyLayout, holder);
         }
         FacetUtil.addFacet(namedFacet);
+    }
 
-
-        // renderedAsDayBefore
-        RenderedAdjustedFacet renderedAdjustedFacet = RenderedAdjustedFacetOnPropertyFromLayoutProperties.create(properties, holder);
+    void processRenderedAdjusted(
+            final FacetHolder holder,
+            final Properties properties,
+            final PropertyLayout propertyLayout) {
+        RenderedAdjustedFacet renderedAdjustedFacet = RenderedAdjustedFacetOnPropertyFromLayoutProperties
+                .create(properties, holder);
         if(renderedAdjustedFacet == null) {
             renderedAdjustedFacet = RenderedAdjustedFacetForPropertyLayoutAnnotation.create(propertyLayout, holder);
         }
         FacetUtil.addFacet(renderedAdjustedFacet);
+    }
 
-
-        // typicalLength
-        TypicalLengthFacet typicalLengthFacet = TypicalLengthFacetOnPropertyFromLayoutProperties.create(properties, holder);
+    void processTypicalLength(
+            final FacetHolder holder,
+            final Properties properties,
+            final PropertyLayout propertyLayout) {
+        TypicalLengthFacet typicalLengthFacet = TypicalLengthFacetOnPropertyFromLayoutProperties
+                .create(properties, holder);
         if(typicalLengthFacet == null) {
             typicalLengthFacet = TypicalLengthFacetForPropertyLayoutAnnotation.create(propertyLayout, holder);
         }
         FacetUtil.addFacet(typicalLengthFacet);
-
     }
 
     @Override
     public void process(ProcessContributeeMemberContext processMemberContext) {
         final FacetHolder holder = processMemberContext.getFacetHolder();
 
-        Properties properties = processMemberContext.metadataProperties("propertyLayout");
-        if(properties == null) {
-            // alternate key
-            properties = processMemberContext.metadataProperties("layout");
-        }
+        Properties properties = metadataPropertiesFrom(processMemberContext);
 
 
         // cssClass
@@ -174,4 +209,32 @@ public class PropertyLayoutFacetFactory extends FacetFactoryAbstract implements
 
     }
 
+    Properties metadataPropertiesFrom(final ProcessMethodContext processMethodContext) {
+        Properties properties = processMethodContext.metadataProperties("propertyLayout");
+        if(properties == null) {
+            // alternate key
+            properties = processMethodContext.metadataProperties("layout");
+        }
+        return properties;
+    }
+
+    FacetedMethod facetHolderFrom(final ProcessMethodContext processMethodContext) {
+        return processMethodContext.getFacetHolder();
+    }
+
+    PropertyLayout propertyLayoutAnnotationFrom(final ProcessMethodContext processMethodContext) {
+        final Method method = processMethodContext.getMethod();
+        return Annotations.getAnnotation(method, PropertyLayout.class);
+    }
+
+
+    Properties metadataPropertiesFrom(final ProcessContributeeMemberContext processMemberContext) {
+        Properties properties = processMemberContext.metadataProperties("propertyLayout");
+        if(properties == null) {
+            // alternate key
+            properties = processMemberContext.metadataProperties("layout");
+        }
+        return properties;
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/4ad7645e/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/PropertyLayoutFacetRepr.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/PropertyLayoutFacetRepr.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/PropertyLayoutFacetRepr.java
index 95c3891..2c0d333 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/PropertyLayoutFacetRepr.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/PropertyLayoutFacetRepr.java
@@ -18,12 +18,14 @@ package org.apache.isis.core.metamodel.layoutmetadata;
 
 
 import org.apache.isis.applib.annotation.LabelPosition;
+import org.apache.isis.applib.annotation.PropertyEditStyle;
 import org.apache.isis.applib.annotation.Where;
 
 public class PropertyLayoutFacetRepr {
 
     public String cssClass;
     public String describedAs;
+    public PropertyEditStyle editStyle;
     public Where hidden;
     public LabelPosition labelPosition;
     public int multiLine;

http://git-wip-us.apache.org/repos/asf/isis/blob/4ad7645e/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridSystemServiceAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridSystemServiceAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridSystemServiceAbstract.java
index 5a93517..4056300 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridSystemServiceAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridSystemServiceAbstract.java
@@ -22,8 +22,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.concurrent.atomic.AtomicInteger;
 
-import javax.inject.Inject;
-
 import com.google.common.base.Strings;
 import com.google.common.collect.Lists;
 
@@ -101,6 +99,7 @@ import org.apache.isis.core.metamodel.facets.properties.propertylayout.HiddenFac
 import org.apache.isis.core.metamodel.facets.properties.propertylayout.LabelAtFacetForPropertyXml;
 import org.apache.isis.core.metamodel.facets.properties.propertylayout.MultiLineFacetForPropertyXml;
 import org.apache.isis.core.metamodel.facets.properties.propertylayout.NamedFacetForPropertyXml;
+import org.apache.isis.core.metamodel.facets.properties.propertylayout.PropertyEditStyleFacetForPropertyXml;
 import org.apache.isis.core.metamodel.facets.properties.propertylayout.RenderedAdjustedFacetForPropertyXml;
 import org.apache.isis.core.metamodel.facets.properties.propertylayout.TypicalLengthFacetForPropertyXml;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -307,6 +306,8 @@ public abstract class GridSystemServiceAbstract<G extends Grid> implements GridS
 
                 FacetUtil.addOrReplaceFacet(CssClassFacetForPropertyXml.create(propertyLayoutData, oneToOneAssociation));
                 FacetUtil.addOrReplaceFacet(DescribedAsFacetForPropertyXml.create(propertyLayoutData, oneToOneAssociation));
+                FacetUtil.addOrReplaceFacet(
+                        PropertyEditStyleFacetForPropertyXml.create(propertyLayoutData, oneToOneAssociation));
                 FacetUtil.addOrReplaceFacet(HiddenFacetForPropertyXml.create(propertyLayoutData, oneToOneAssociation));
                 FacetUtil.addOrReplaceFacet(LabelAtFacetForPropertyXml.create(propertyLayoutData, oneToOneAssociation));
                 FacetUtil.addOrReplaceFacet(MultiLineFacetForPropertyXml.create(propertyLayoutData, oneToOneAssociation));

http://git-wip-us.apache.org/repos/asf/isis/blob/4ad7645e/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/editstyle/PropertyEditStyleConfiguration_Test.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/editstyle/PropertyEditStyleConfiguration_Test.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/editstyle/PropertyEditStyleConfiguration_Test.java
new file mode 100644
index 0000000..95a12ce
--- /dev/null
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/editstyle/PropertyEditStyleConfiguration_Test.java
@@ -0,0 +1,74 @@
+package org.apache.isis.core.metamodel.facets.properties.editstyle;
+
+import org.jmock.Expectations;
+import org.jmock.auto.Mock;
+import org.junit.Assert;
+import org.junit.Rule;
+import org.junit.Test;
+
+import org.apache.isis.applib.annotation.PropertyEditStyle;
+import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.core.metamodel.facets.properties.property.editStyle.PropertyEditStyleConfiguration;
+import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
+
+import static org.hamcrest.CoreMatchers.is;
+
+public class PropertyEditStyleConfiguration_Test {
+
+    @Rule
+    public JUnitRuleMockery2 context = JUnitRuleMockery2.createFor(JUnitRuleMockery2.Mode.INTERFACES_AND_CLASSES);
+
+    @Mock
+    IsisConfiguration mockIsisConfiguration;
+
+    @Test
+    public void when_none() throws Exception {
+        context.checking(new Expectations() {{
+            oneOf(mockIsisConfiguration).getString("isis.properties.editStyle");
+            will(returnValue(null));
+        }});
+        PropertyEditStyle editStyle = PropertyEditStyleConfiguration.parse(mockIsisConfiguration);
+        Assert.assertThat(editStyle, is(PropertyEditStyle.DIALOG));
+    }
+
+    @Test
+    public void when_inline() throws Exception {
+        context.checking(new Expectations() {{
+            oneOf(mockIsisConfiguration).getString("isis.properties.editStyle");
+            will(returnValue("inline"));
+        }});
+        PropertyEditStyle editStyle = PropertyEditStyleConfiguration.parse(mockIsisConfiguration);
+        Assert.assertThat(editStyle, is(PropertyEditStyle.INLINE));
+    }
+
+    @Test
+    public void when_inline_mixed_case_and_superfluous_characters() throws Exception {
+        context.checking(new Expectations() {{
+            oneOf(mockIsisConfiguration).getString("isis.properties.editStyle");
+            will(returnValue(" inLIne "));
+        }});
+        PropertyEditStyle editStyle = PropertyEditStyleConfiguration.parse(mockIsisConfiguration);
+        Assert.assertThat(editStyle, is(PropertyEditStyle.INLINE));
+    }
+
+    @Test
+    public void when_dialog() throws Exception {
+        context.checking(new Expectations() {{
+            oneOf(mockIsisConfiguration).getString("isis.properties.editStyle");
+            will(returnValue("dialog"));
+        }});
+        PropertyEditStyle editStyle = PropertyEditStyleConfiguration.parse(mockIsisConfiguration);
+        Assert.assertThat(editStyle, is(PropertyEditStyle.DIALOG));
+    }
+
+    @Test
+    public void when_invalid() throws Exception {
+        context.checking(new Expectations() {{
+            oneOf(mockIsisConfiguration).getString("isis.properties.editStyle");
+            will(returnValue("garbage"));
+        }});
+        PropertyEditStyle editStyle = PropertyEditStyleConfiguration.parse(mockIsisConfiguration);
+        Assert.assertThat(editStyle, is(PropertyEditStyle.DIALOG));
+    }
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/4ad7645e/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/editstyle/PropertyEditStyleFacetFromPropertyAnnotation_Test.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/editstyle/PropertyEditStyleFacetFromPropertyAnnotation_Test.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/editstyle/PropertyEditStyleFacetFromPropertyAnnotation_Test.java
new file mode 100644
index 0000000..854b8a0
--- /dev/null
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/editstyle/PropertyEditStyleFacetFromPropertyAnnotation_Test.java
@@ -0,0 +1,158 @@
+package org.apache.isis.core.metamodel.facets.properties.editstyle;
+
+import org.hamcrest.Matcher;
+import org.jmock.Expectations;
+import org.jmock.auto.Mock;
+import org.junit.Assert;
+import org.junit.Rule;
+import org.junit.Test;
+
+import org.apache.isis.applib.annotation.PropertyEditStyle;
+import org.apache.isis.applib.annotation.PropertyLayout;
+import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.core.commons.matchers.IsisMatchers;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.properties.property.editStyle.PropertyEditStyleFacet;
+import org.apache.isis.core.metamodel.facets.properties.property.editStyle.PropertyEditStyleFacetAsConfigured;
+import org.apache.isis.core.metamodel.facets.properties.property.editStyle.PropertyEditStyleFacetFallBack;
+import org.apache.isis.core.metamodel.facets.properties.propertylayout.PropertyEditStyleFacetForPropertyLayoutAnnotation;
+import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.nullValue;
+
+public class PropertyEditStyleFacetFromPropertyAnnotation_Test {
+
+    @Rule
+    public JUnitRuleMockery2 context = JUnitRuleMockery2.createFor(JUnitRuleMockery2.Mode.INTERFACES_AND_CLASSES);
+
+    @Mock
+    IsisConfiguration mockConfiguration;
+
+    @Mock
+    FacetHolder mockFacetHolder;
+
+    @Mock
+    PropertyLayout mockPropertyLayout;
+
+
+    public static class Create_Test extends PropertyEditStyleFacetFromPropertyAnnotation_Test {
+
+        @Test
+        public void when_annotated_with_dialog() throws Exception {
+
+            context.checking(new Expectations() {{
+                allowing(mockPropertyLayout).editStyle();
+                will(returnValue(PropertyEditStyle.DIALOG));
+
+                never(mockConfiguration);
+            }});
+
+            PropertyEditStyleFacet facet = PropertyEditStyleFacetForPropertyLayoutAnnotation
+                    .create(mockPropertyLayout, mockConfiguration, mockFacetHolder);
+
+            Assert.assertThat(facet, is((Matcher) IsisMatchers.anInstanceOf(PropertyEditStyleFacetForPropertyLayoutAnnotation.class)));
+            Assert.assertThat(facet.value(), is(PropertyEditStyle.DIALOG));
+        }
+
+        @Test
+        public void when_annotated_with_inline() throws Exception {
+
+            context.checking(new Expectations() {{
+                allowing(mockPropertyLayout).editStyle();
+                will(returnValue(PropertyEditStyle.INLINE));
+
+                never(mockConfiguration);
+            }});
+
+
+            PropertyEditStyleFacet facet = PropertyEditStyleFacetForPropertyLayoutAnnotation
+                    .create(mockPropertyLayout, mockConfiguration, mockFacetHolder);
+
+            Assert.assertThat(facet, is((Matcher) IsisMatchers.anInstanceOf(PropertyEditStyleFacetForPropertyLayoutAnnotation.class)));
+            Assert.assertThat(facet.value(), is(PropertyEditStyle.INLINE));
+        }
+
+        @Test
+        public void when_annotated_with_as_configured() throws Exception {
+
+            context.checking(new Expectations() {{
+                allowing(mockPropertyLayout).editStyle();
+                will(returnValue(PropertyEditStyle.AS_CONFIGURED));
+
+                oneOf(mockConfiguration).getString("isis.properties.editStyle");
+                will(returnValue(PropertyEditStyle.INLINE.name()));
+
+                allowing(mockFacetHolder).containsDoOpFacet(PropertyEditStyleFacet.class);
+                will(returnValue(false));
+            }});
+
+            PropertyEditStyleFacet facet = PropertyEditStyleFacetForPropertyLayoutAnnotation
+                    .create(mockPropertyLayout, mockConfiguration, mockFacetHolder);
+
+            Assert.assertThat(facet, is((Matcher) IsisMatchers.anInstanceOf(PropertyEditStyleFacetAsConfigured.class)));
+            Assert.assertThat(facet.value(), is(PropertyEditStyle.INLINE));
+        }
+
+        @Test
+        public void when_annotated_with_as_configured_but_already_has_doop_facet() throws Exception {
+
+            context.checking(new Expectations() {{
+                allowing(mockPropertyLayout).editStyle();
+                will(returnValue(PropertyEditStyle.AS_CONFIGURED));
+
+                oneOf(mockFacetHolder).containsDoOpFacet(PropertyEditStyleFacet.class);
+                will(returnValue(true));
+
+                never(mockConfiguration);
+            }});
+
+            PropertyEditStyleFacet facet = PropertyEditStyleFacetForPropertyLayoutAnnotation
+                    .create(mockPropertyLayout, mockConfiguration, mockFacetHolder);
+
+            Assert.assertThat(facet, is(nullValue()));
+        }
+
+        @Test
+        public void when_not_annotated() throws Exception {
+
+            context.checking(new Expectations() {{
+                allowing(mockPropertyLayout).editStyle();
+                will(returnValue(null));
+
+                allowing(mockFacetHolder).containsDoOpFacet(PropertyEditStyleFacet.class);
+                will(returnValue(false));
+
+                never(mockConfiguration);
+            }});
+
+            PropertyEditStyleFacet facet = PropertyEditStyleFacetForPropertyLayoutAnnotation
+                    .create(mockPropertyLayout, mockConfiguration, mockFacetHolder);
+
+            Assert.assertThat(facet.value(), is(PropertyEditStyle.DIALOG));
+            Assert.assertThat(facet, is((Matcher) IsisMatchers.anInstanceOf(PropertyEditStyleFacetFallBack.class)));
+        }
+
+        @Test
+        public void when_not_annotated_but_already_has_doop_facet() throws Exception {
+
+            context.checking(new Expectations() {{
+                allowing(mockPropertyLayout).editStyle();
+                will(returnValue(null));
+
+                allowing(mockFacetHolder).containsDoOpFacet(PropertyEditStyleFacet.class);
+                will(returnValue(true));
+
+                never(mockConfiguration);
+            }});
+
+            PropertyEditStyleFacet facet = PropertyEditStyleFacetForPropertyLayoutAnnotation
+                    .create(mockPropertyLayout, mockConfiguration, mockFacetHolder);
+
+            Assert.assertThat(facet, is(nullValue()));
+        }
+
+
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/4ad7645e/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/LabelAtFacetForPropertyLayoutAnnotationFactoryTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/LabelAtFacetForPropertyLayoutAnnotationFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/LabelAtFacetForPropertyLayoutAnnotationFactoryTest.java
new file mode 100644
index 0000000..f26ed39
--- /dev/null
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/LabelAtFacetForPropertyLayoutAnnotationFactoryTest.java
@@ -0,0 +1,70 @@
+/*
+ *  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.core.metamodel.facets.properties.propertylayout;
+
+import java.lang.reflect.Method;
+import java.util.Properties;
+
+import org.apache.isis.applib.annotation.LabelPosition;
+import org.apache.isis.applib.annotation.PropertyLayout;
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryTest;
+import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessMethodContext;
+import org.apache.isis.core.metamodel.facets.objectvalue.labelat.LabelAtFacet;
+
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.instanceOf;
+import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.notNullValue;
+import static org.junit.Assert.assertThat;
+
+public class LabelAtFacetForPropertyLayoutAnnotationFactoryTest extends AbstractFacetFactoryTest {
+
+    public void testPropertyLayoutAnnotationPickedUp() {
+        final PropertyLayoutFacetFactory facetFactory = new PropertyLayoutFacetFactory();
+
+        class Customer {
+            @SuppressWarnings("unused")
+            @PropertyLayout(labelPosition = LabelPosition.LEFT)
+            public String getFirstName() {
+                return null;
+            }
+        }
+        final Method method = findMethod(Customer.class, "getFirstName");
+
+        final ProcessMethodContext processMethodContext =
+                new ProcessMethodContext(Customer.class, null, null, method, methodRemover, facetedMethod);
+
+        // when
+        final FacetHolder holder = facetFactory.facetHolderFrom(processMethodContext);
+        final Properties properties = facetFactory.metadataPropertiesFrom(processMethodContext);
+        final PropertyLayout propertyLayout = facetFactory.propertyLayoutAnnotationFrom(processMethodContext);
+
+        facetFactory.processLabelAt(holder, properties, propertyLayout);
+
+        // then
+        final Facet facet = facetedMethod.getFacet(LabelAtFacet.class);
+        assertThat(facet, is(notNullValue()));
+        assertThat(facet, is(instanceOf(LabelAtFacetForPropertyLayoutAnnotation.class)));
+        final LabelAtFacetForPropertyLayoutAnnotation layoutAnnotation = (LabelAtFacetForPropertyLayoutAnnotation) facet;
+        assertThat(layoutAnnotation.label(), is(equalTo(LabelPosition.LEFT)));
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/4ad7645e/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/NamedFacetForPropertyLayoutAnnotationFactoryTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/NamedFacetForPropertyLayoutAnnotationFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/NamedFacetForPropertyLayoutAnnotationFactoryTest.java
new file mode 100644
index 0000000..5750433
--- /dev/null
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/NamedFacetForPropertyLayoutAnnotationFactoryTest.java
@@ -0,0 +1,99 @@
+/*
+ *  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.core.metamodel.facets.properties.propertylayout;
+
+import java.lang.reflect.Method;
+import java.util.Properties;
+
+import org.apache.isis.applib.annotation.PropertyLayout;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryTest;
+import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessMethodContext;
+import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
+
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.instanceOf;
+import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.notNullValue;
+import static org.junit.Assert.assertThat;
+
+public class NamedFacetForPropertyLayoutAnnotationFactoryTest extends AbstractFacetFactoryTest {
+
+    public void testPropertyLayoutAnnotationNamed() {
+        final PropertyLayoutFacetFactory facetFactory = new PropertyLayoutFacetFactory();
+
+        class Customer {
+            @SuppressWarnings("unused")
+            @PropertyLayout(named = "1st name")
+            public String getFirstName() {
+                return null;
+            }
+        }
+        final Method method = findMethod(Customer.class, "getFirstName");
+
+        // when
+        final ProcessMethodContext processMethodContext = new ProcessMethodContext(Customer.class, null, null, method,
+                methodRemover, facetedMethod);
+
+        final FacetHolder holder = facetFactory.facetHolderFrom(processMethodContext);
+        final Properties properties = facetFactory.metadataPropertiesFrom(processMethodContext);
+        final PropertyLayout propertyLayout = facetFactory.propertyLayoutAnnotationFrom(processMethodContext);
+
+        facetFactory.processNamed(holder, properties, propertyLayout);
+
+        // then
+        final NamedFacet facet = facetedMethod.getFacet(NamedFacet.class);
+        assertThat(facet, is(notNullValue()));
+        assertThat(facet, is(instanceOf(NamedFacetForPropertyLayoutAnnotation.class)));
+        assertThat(facet.value(), is(equalTo("1st name")));
+        assertThat(facet.escaped(), is(true));
+    }
+
+    public void testPropertyLayoutAnnotationNamedEscapedFalse() {
+        final PropertyLayoutFacetFactory facetFactory = new PropertyLayoutFacetFactory();
+
+        class Customer {
+            @SuppressWarnings("unused")
+            @PropertyLayout(named = "1st name", namedEscaped = false)
+            public String getFirstName() {
+                return null;
+            }
+        }
+        final Method method = findMethod(Customer.class, "getFirstName");
+
+        // when
+        final ProcessMethodContext processMethodContext = new ProcessMethodContext(Customer.class, null, null, method,
+                methodRemover, facetedMethod);
+
+        final FacetHolder holder = facetFactory.facetHolderFrom(processMethodContext);
+        final Properties properties = facetFactory.metadataPropertiesFrom(processMethodContext);
+        final PropertyLayout propertyLayout = facetFactory.propertyLayoutAnnotationFrom(processMethodContext);
+
+        facetFactory.processNamed(holder, properties, propertyLayout);
+
+        // then
+        final NamedFacet facet = facetedMethod.getFacet(NamedFacet.class);
+        assertThat(facet, is(notNullValue()));
+        assertThat(facet, is(instanceOf(NamedFacetForPropertyLayoutAnnotation.class)));
+        assertThat(facet.value(), is(equalTo("1st name")));
+        assertThat(facet.escaped(), is(false));
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/4ad7645e/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/grid/BS3GridTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/grid/BS3GridTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/grid/BS3GridTest.java
index 028e357..87e6fec 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/grid/BS3GridTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/grid/BS3GridTest.java
@@ -69,7 +69,7 @@ public class BS3GridTest {
     }
 
     @Test
-    public void xxx() throws Exception {
+    public void happy_case() throws Exception {
 
         final BS3Grid bs3Grid = new BS3Grid();
 

http://git-wip-us.apache.org/repos/asf/isis/blob/4ad7645e/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
index b0aae4f..06040a3 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
@@ -28,6 +28,7 @@ import java.util.List;
 import com.google.common.collect.FluentIterable;
 import com.google.common.collect.Lists;
 
+import org.apache.isis.applib.annotation.PropertyEditStyle;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
 import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
@@ -45,6 +46,7 @@ import org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.fileaccept.FileAcceptFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.mandatory.MandatoryFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.typicallen.TypicalLengthFacet;
+import org.apache.isis.core.metamodel.facets.properties.property.editStyle.PropertyEditStyleFacet;
 import org.apache.isis.core.metamodel.facets.value.bigdecimal.BigDecimalValueFacet;
 import org.apache.isis.core.metamodel.facets.value.string.StringValueSemanticsProvider;
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
@@ -917,6 +919,24 @@ public class ScalarModel extends EntityModel implements LinksProvider,HasExecuti
 
 
 
+    public PropertyEditStyle getEditStyle() {
+        if (isEditable()) {
+            PropertyEditStyleFacet facet = getFacet(PropertyEditStyleFacet.class);
+            return facet != null && facet.value() == PropertyEditStyle.INLINE
+                    ? PropertyEditStyle.INLINE
+                    : PropertyEditStyle.DIALOG;
+        } else {
+            // not editable
+            return null;
+        }
+    }
+
+    public boolean isEditable() {
+        Where where = getRenderingHint().isInTable() ? Where.PARENTED_TABLES : Where.OBJECT_FORMS;
+        boolean editable = disable(where) == null;
+        return editable && isViewMode();
+    }
+
 
     public String getReasonInvalidIfAny() {
         final OneToOneAssociation property = getPropertyMemento().getProperty(getSpecificationLoader());


[31/43] isis git commit: ISIS-1603: moves the markup from ScalarPanelTextAbstract.html down to its subclass, SclarPanelTextFieldAbstract.html

Posted by da...@apache.org.
ISIS-1603: moves the markup from ScalarPanelTextAbstract.html down to its subclass, SclarPanelTextFieldAbstract.html


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

Branch: refs/heads/master
Commit: 49013d08f090a5557197b1aa156b0aed50607da4
Parents: 8484d53
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Tue Apr 25 23:39:10 2017 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Apr 27 13:26:40 2017 +0100

----------------------------------------------------------------------
 .../components/scalars/ScalarPanelAbstract.java |   2 +-
 .../scalars/ScalarPanelTextAbstract.html        |  87 ---------------
 .../scalars/ScalarPanelTextAbstract.java        |  11 +-
 .../scalars/ScalarPanelTextFieldAbstract.html   | 110 ++++++++++++++-----
 .../scalars/ScalarPanelTextFieldAbstract.java   |  14 ++-
 5 files changed, 99 insertions(+), 125 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/49013d08/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
index a03b917..71d9bd8 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
@@ -300,7 +300,7 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
                         getComponentForRegular().setVisible(false);
                         scalarIfRegularInlinePromptForm.setVisible(true);
 
-                        target.add(ScalarPanelAbstract.this);
+                        target.add(scalarTypeContainer);
                     }
 
                     @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/49013d08/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextAbstract.html
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextAbstract.html b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextAbstract.html
index 9fd6bda..e69de29 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextAbstract.html
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextAbstract.html
@@ -1,87 +0,0 @@
-<?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>
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:wicket="http://wicket.apache.org"
-      xml:lang="en"
-      lang="en">
-    <body>
-        <wicket:panel>
-            <div class="scalarNameAndValueComponentType"
-                 wicket:id="scalarTypeContainer">
-
-                <div class="form-group"
-                     wicket:id="scalarIfRegular">
-
-                    <label class="scalarName control-label"
-                           wicket:id="scalarName"
-                    >[Label text]</label>
-
-                    <span class="scalarValueWrapper">
-                        <div class="scalarPlaceholder">
-
-                            <span class="scalarValueInput">
-                                <span class="editing">
-
-                                    <a href="#"
-                                       name="scalarValueEditInline"
-                                       class="form-control input-sm scalarValueEditInline"
-                                       wicket:id="scalarValueEditInline">
-                                        <span wicket:id="scalarValueEditInlineLabel"></span>
-                                    </a>
-
-                                    <wicket:child/>
-
-                                    <a href="#"
-                                       class="edit fa fa-pencil-square-o"
-                                       wicket:id="editProperty"></a>
-                                </span>
-                            </span>
-
-                            <span class="associatedActionLinksRight"
-                                  wicket:id="associatedActionLinksRight"
-                            >[drop down]</span>
-                        </div>
-                        <span wicket:id="feedback" class="help-block"></span>
-                        <span wicket:id="associatedActionLinksBelow"></span>
-                    </span>
-                    <div class="clearfix"></div>
-                </div>
-
-                <div class="inlineEditForm"
-                     wicket:id="scalarIfRegularInlineEditForm" >
-                    <div><span>property edit form</span></div>
-                </div>
-
-                <wicket:container wicket:id="scalarIfCompact"></wicket:container>
-            </div>
-
-            <wicket:fragment wicket:id="compactAsInputCheckbox">
-                <input wicket:id="scalarIfCompact"
-                       type="checkbox"
-                       class="form-control" />
-            </wicket:fragment>
-
-            <wicket:fragment wicket:id="compactAsSpan">
-                <span wicket:id="scalarIfCompact"></span>
-            </wicket:fragment>
-        </wicket:panel>
-    </body>
-</html>

http://git-wip-us.apache.org/repos/asf/isis/blob/49013d08/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextAbstract.java
index 198eb9e..7bfaf33 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextAbstract.java
@@ -20,16 +20,7 @@
 package org.apache.isis.viewer.wicket.ui.components.scalars;
 
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
-import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
-
-/**
- * Adapter for {@link PanelAbstract panel}s that use a {@link ScalarModel} as
- * their backing model.
- * 
- * <p>
- * Supports the concept of being {@link Rendering#COMPACT} (eg within a table) or
- * {@link Rendering#REGULAR regular} (eg within a form).
- */
+
 public abstract class ScalarPanelTextAbstract extends ScalarPanelAbstract  {
 
     private static final long serialVersionUID = 1L;

http://git-wip-us.apache.org/repos/asf/isis/blob/49013d08/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.html
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.html b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.html
index 673e6e1..31538a6 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.html
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.html
@@ -22,36 +22,96 @@
       xmlns:wicket="http://wicket.apache.org"
       xml:lang="en"
       lang="en">
-    <body>
-        <wicket:extend>
-            <wicket:container wicket:id="scalarValueContainer"/>
+<body>
+<wicket:panel>
+    <div class="scalarNameAndValueComponentType"
+         wicket:id="scalarTypeContainer">
 
-            <wicket:fragment wicket:id="text">
-                <input
-                        type="text"
-                        name="scalarValue"
-                        class="form-control input-sm scalarValue"
-                        wicket:id="scalarValue" />
-            </wicket:fragment>
+        <div class="form-group"
+             wicket:id="scalarIfRegular">
+
+            <label class="scalarName control-label"
+                   wicket:id="scalarName"
+            >[Label text]</label>
+
+            <span class="scalarValueWrapper">
+                    <div class="scalarPlaceholder">
+
+                        <span class="scalarValueInput">
+                            <span class="editing">
+
+                                <a href="#"
+                                   name="scalarValueEditInline"
+                                   class="form-control input-sm scalarValueEditInline"
+                                   wicket:id="scalarValueEditInline">
+                                    <span wicket:id="scalarValueEditInlineLabel"></span>
+                                </a>
+
+                                <wicket:container wicket:id="scalarValueContainer"/>
+
+
+
+                                <a href="#"
+                                   class="edit fa fa-pencil-square-o"
+                                   wicket:id="editProperty"></a>
+                            </span>
+                        </span>
 
-            <wicket:fragment wicket:id="textarea">
+                        <span class="associatedActionLinksRight"
+                              wicket:id="associatedActionLinksRight"
+                        >[drop down]</span>
+                    </div>
+                    <span wicket:id="feedback" class="help-block"></span>
+                    <span wicket:id="associatedActionLinksBelow"></span>
+                </span>
+            <div class="clearfix"></div>
+        </div>
+
+        <div class="inlineEditForm"
+             wicket:id="scalarIfRegularInlineEditForm" >
+            <div><span>property edit form</span></div>
+        </div>
+
+        <wicket:container wicket:id="scalarIfCompact"></wicket:container>
+    </div>
+
+    <wicket:fragment wicket:id="text">
+        <input
+                type="text"
+                name="scalarValue"
+                class="form-control input-sm scalarValue"
+                wicket:id="scalarValue" />
+    </wicket:fragment>
+
+    <wicket:fragment wicket:id="textarea">
                 <textarea
                         name="scalarValue"
                         class="form-control scalarValue"
                         wicket:id="scalarValue">
                 </textarea>
-            </wicket:fragment>
-
-            <wicket:fragment wicket:id="date">
-                <div class="date">
-                    <input
-                            type="text"
-                            name="scalarValue"
-                            class="form-control input-sm scalarValue"
-                            wicket:id="scalarValue"/>
-                </div>
-            </wicket:fragment>
-
-        </wicket:extend>
-    </body>
+    </wicket:fragment>
+
+    <wicket:fragment wicket:id="date">
+        <div class="date">
+            <input
+                    type="text"
+                    name="scalarValue"
+                    class="form-control input-sm scalarValue"
+                    wicket:id="scalarValue"/>
+        </div>
+    </wicket:fragment>
+
+    <wicket:fragment wicket:id="compactAsInputCheckbox">
+        <input wicket:id="scalarIfCompact"
+               type="checkbox"
+               class="form-control" />
+    </wicket:fragment>
+
+    <wicket:fragment wicket:id="compactAsSpan">
+        <span wicket:id="scalarIfCompact"></span>
+    </wicket:fragment>
+
+</wicket:panel>
+</body>
 </html>
+

http://git-wip-us.apache.org/repos/asf/isis/blob/49013d08/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
index 332e2e8..8e28819 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
@@ -51,11 +51,21 @@ import org.apache.isis.viewer.wicket.model.links.LinkAndLabel;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.components.actionmenu.entityactions.EntityActionUtil;
 import org.apache.isis.viewer.wicket.ui.components.widgets.bootstrap.FormGroup;
+import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
 import org.apache.isis.viewer.wicket.ui.util.CssClassAppender;
 
 /**
- * Adapter for {@link ScalarPanelAbstract scalar panel}s that are implemented
- * using a simple {@link TextField}.
+ * Adapter for {@link PanelAbstract panel}s that use a {@link ScalarModel} as
+ * their backing model.
+ *
+ * <p>
+ * Supports the concept of being {@link Rendering#COMPACT} (eg within a table) or
+ * {@link Rendering#REGULAR regular} (eg within a form).
+ * </p>
+ *
+ * <p>
+ * This implementation is for panels that use a textfield/text area.
+ * </p>
  */
 public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> extends ScalarPanelTextAbstract {
 


[40/43] isis git commit: ISIS-1603: working towards action prompts inline

Posted by da...@apache.org.
ISIS-1603: working towards action prompts inline

seemingly mostly there, but need to do the cancel and then some more thorough testing


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

Branch: refs/heads/master
Commit: 977ab2f229f80aa246ca516717c27bc67cd35cbb
Parents: ae298df
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Fri Apr 28 00:18:29 2017 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Fri Apr 28 00:18:29 2017 +0100

----------------------------------------------------------------------
 .../applib/layout/component/component.xsd       |   4 +
 .../isis/applib/annotation/ActionLayout.java    |   6 +
 .../isis/applib/annotation/PromptStyle.java     |   5 +
 .../isis/applib/annotation/PropertyLayout.java  |  10 +-
 .../layout/component/ActionLayoutData.java      |  12 +
 .../layout/component/PropertyLayoutData.java    |  25 +-
 .../layout/ActionLayoutFacetFactory.java        |  14 +-
 .../layout/HiddenFacetForActionLayoutXml.java   |  52 ----
 .../actions/layout/HiddenFacetForActionXml.java |  52 ++++
 ...omptStyleFacetForActionLayoutAnnotation.java |  90 +++++++
 .../layout/PromptStyleFacetForActionXml.java    |  49 ++++
 ...tStyleFacetOnActionFromLayoutProperties.java |  57 +++++
 .../PromptStyleFacetForPropertyLayoutXml.java   |  49 ----
 .../PromptStyleFacetForPropertyXml.java         |  49 ++++
 ...tyleFacetOnPropertyFromLayoutProperties.java |   4 +-
 .../layoutmetadata/ActionLayoutFacetRepr.java   |   3 +-
 .../layoutmetadata/PropertyLayoutFacetRepr.java |   2 +-
 .../grid/GridSystemServiceAbstract.java         |  12 +-
 .../metamodel/spec/feature/ObjectAction.java    |  90 ++++++-
 .../metamodel/spec/feature/ObjectActions.java   |   4 +-
 .../viewer/wicket/model/links/LinkAndLabel.java |  27 +-
 .../viewer/wicket/model/models/ActionModel.java |  49 +++-
 .../wicket/model/models/FormExecutor.java       |   3 -
 .../wicket/model/models/HasFormExecutor.java    |   5 -
 .../viewer/wicket/model/models/ScalarModel.java |  29 ++-
 .../entityactions/AdditionalLinksPanel.java     |   1 -
 .../entityactions/EntityActionLinkFactory.java  |   4 +-
 .../entityactions/EntityActionUtil.java         | 189 --------------
 .../entityactions/LinkAndLabelUtil.java         |  97 ++++++++
 .../actionmenu/serviceactions/CssMenuItem.java  |  10 +-
 .../ServiceActionLinkFactory.java               |   7 +-
 .../ui/components/actions/ActionPanel.java      | 194 +--------------
 .../components/actions/ActionPanelFactory.java  |   3 +-
 .../actions/ActionParametersFormExecutor.java   | 247 +++++++++++++++++++
 .../components/collection/CollectionPanel.java  |  11 +-
 .../entity/fieldset/PropertyGroup.java          |  10 +-
 .../entity/header/EntityHeaderPanel.java        |  10 +-
 .../ui/components/layout/bs3/col/Col.java       |  19 +-
 .../property/PropertyEditFormExecutor.java      |   6 +-
 .../components/scalars/ScalarPanelAbstract.java |  50 ++--
 .../linkandlabel/ActionLinkFactoryAbstract.java | 190 +++++++-------
 41 files changed, 1060 insertions(+), 690 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/adocs/documentation/src/main/asciidoc/applib/layout/component/component.xsd
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/applib/layout/component/component.xsd b/adocs/documentation/src/main/asciidoc/applib/layout/component/component.xsd
index 9d9749b..a83d9dd 100644
--- a/adocs/documentation/src/main/asciidoc/applib/layout/component/component.xsd
+++ b/adocs/documentation/src/main/asciidoc/applib/layout/component/component.xsd
@@ -37,6 +37,10 @@
     <xs:attribute name="hidden" type="tns:where"/>
     <xs:attribute name="id" type="xs:string" use="required"/>
     <xs:attribute name="namedEscaped" type="xs:boolean"/>
+
+    <!-- 1.15.0-SNAPSHOT -->
+    <xs:attribute name="promptStyle" type="tns:promptStyle"/>
+
     <xs:attribute name="position" type="tns:position"/>
   </xs:complexType>
 

http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/applib/src/main/java/org/apache/isis/applib/annotation/ActionLayout.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/ActionLayout.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/ActionLayout.java
index 73982e9..3c91af5 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/ActionLayout.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/ActionLayout.java
@@ -124,6 +124,12 @@ public @interface ActionLayout {
         PANEL_DROPDOWN
     }
 
+    /**
+     * How this parameters for this action are prompted, either {@link PromptStyle#DIALOG dialog} or {@link PromptStyle#INLINE inline}.
+     */
+    PromptStyle promptStyle() default PromptStyle.AS_CONFIGURED;
+
+
     // //////////////////////////////////////
 
     /**

http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/applib/src/main/java/org/apache/isis/applib/annotation/PromptStyle.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/PromptStyle.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/PromptStyle.java
index bcfd188..46f4012 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/PromptStyle.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/PromptStyle.java
@@ -18,9 +18,14 @@
  */
 package org.apache.isis.applib.annotation;
 
+import javax.xml.bind.annotation.XmlType;
+
 /**
  * How prompting for new values (property edit) should be performed
  */
+@XmlType(
+        namespace = "http://isis.apache.org/applib/layout/component"
+)
 public enum PromptStyle {
     /**
      * Edit the property according to the default edit style policy configured in <tt>isis.properties</tt>.

http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/applib/src/main/java/org/apache/isis/applib/annotation/PropertyLayout.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/PropertyLayout.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/PropertyLayout.java
index 1594a76..dae0a20 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/PropertyLayout.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/PropertyLayout.java
@@ -43,11 +43,6 @@ public @interface PropertyLayout {
 
 
     /**
-     * How the properties of this domain object are be edited, either {@link PromptStyle#DIALOG dialog} or {@link PromptStyle#INLINE inline}.
-     */
-    PromptStyle promptStyle() default PromptStyle.AS_CONFIGURED;
-
-    /**
      * Indicates where in the UI the property should <i>not</i>not be visible.
      */
     Where hidden() default Where.NOT_SPECIFIED;
@@ -77,6 +72,11 @@ public @interface PropertyLayout {
     boolean namedEscaped() default true;
 
     /**
+     * How the properties of this domain object are be edited, either {@link PromptStyle#DIALOG dialog} or {@link PromptStyle#INLINE inline}.
+     */
+    PromptStyle promptStyle() default PromptStyle.AS_CONFIGURED;
+
+    /**
      * For date properties (and parameters) only, instructs the viewer that the date should be rendered as one day
      * prior to the actually stored date.
      *

http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/applib/src/main/java/org/apache/isis/applib/layout/component/ActionLayoutData.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/layout/component/ActionLayoutData.java b/core/applib/src/main/java/org/apache/isis/applib/layout/component/ActionLayoutData.java
index a88229a..b1a19cc 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/layout/component/ActionLayoutData.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/layout/component/ActionLayoutData.java
@@ -27,6 +27,7 @@ import javax.xml.bind.annotation.XmlTransient;
 import javax.xml.bind.annotation.XmlType;
 
 import org.apache.isis.applib.annotation.BookmarkPolicy;
+import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.Where;
 
 /**
@@ -207,6 +208,17 @@ public class ActionLayoutData implements Serializable, Owned<ActionLayoutDataOwn
     }
 
 
+    private PromptStyle promptStyle;
+
+    @XmlAttribute(required = false)
+    public PromptStyle getPromptStyle() {
+        return promptStyle;
+    }
+
+    public void setPromptStyle(PromptStyle promptStyle) {
+        this.promptStyle = promptStyle;
+    }
+
 
 
     private ActionLayoutDataOwner owner;

http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/applib/src/main/java/org/apache/isis/applib/layout/component/PropertyLayoutData.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/layout/component/PropertyLayoutData.java b/core/applib/src/main/java/org/apache/isis/applib/layout/component/PropertyLayoutData.java
index 0485ffd..9388740 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/layout/component/PropertyLayoutData.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/layout/component/PropertyLayoutData.java
@@ -107,18 +107,6 @@ public class PropertyLayoutData
     }
 
 
-    private PromptStyle promptStyle;
-
-    @XmlAttribute(required = false)
-    public PromptStyle getPromptStyle() {
-        return promptStyle;
-    }
-
-    public void setPromptStyle(PromptStyle promptStyle) {
-        this.promptStyle = promptStyle;
-    }
-
-
     private Where hidden;
 
     @Override
@@ -185,6 +173,19 @@ public class PropertyLayoutData
     }
 
 
+    private PromptStyle promptStyle;
+
+    @XmlAttribute(required = false)
+    public PromptStyle getPromptStyle() {
+        return promptStyle;
+    }
+
+    public void setPromptStyle(PromptStyle promptStyle) {
+        this.promptStyle = promptStyle;
+    }
+
+
+
     private Boolean renderedAsDayBefore;
 
     @XmlAttribute(required = false)

http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/ActionLayoutFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/ActionLayoutFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/ActionLayoutFacetFactory.java
index 6b2251e..1f71b77 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/ActionLayoutFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/ActionLayoutFacetFactory.java
@@ -39,6 +39,7 @@ import org.apache.isis.core.metamodel.facets.members.cssclassfa.CssClassFaFacet;
 import org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacet;
 import org.apache.isis.core.metamodel.facets.object.domainservice.DomainServiceFacet;
 import org.apache.isis.core.metamodel.facets.object.mixin.MixinFacet;
+import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 
 
@@ -52,8 +53,8 @@ public class ActionLayoutFacetFactory extends FacetFactoryAbstract implements Co
     public void process(final ProcessMethodContext processMethodContext) {
 
         final FacetHolder holder = processMethodContext.getFacetHolder();
-
         Properties properties = processMethodContext.metadataProperties("actionLayout");
+
         if(properties == null) {
             // alternate key
             properties = processMethodContext.metadataProperties("layout");
@@ -108,6 +109,16 @@ public class ActionLayoutFacetFactory extends FacetFactoryAbstract implements Co
         }
         FacetUtil.addFacet(namedFacet);
 
+        // promptStyle
+        PromptStyleFacet promptStyleFacet = PromptStyleFacetOnActionFromLayoutProperties
+                .create(properties, holder);
+        if(promptStyleFacet == null) {
+            promptStyleFacet = PromptStyleFacetForActionLayoutAnnotation
+                    .create(actionLayout, getConfiguration(), holder);
+        }
+
+        FacetUtil.addFacet(promptStyleFacet);
+
 
         // position
         ActionPositionFacet actionPositionFacet = ActionPositionFacetOnActionFromLayoutProperties.create(properties, holder);
@@ -121,7 +132,6 @@ public class ActionLayoutFacetFactory extends FacetFactoryAbstract implements Co
 
 
         // contributing
-
         if (isContributingServiceOrMixinObject(processMethodContext)) {
             NotContributedFacet notContributedFacet = NotContributedFacetForLayoutProperties.create(properties, holder);
             if(notContributedFacet == null) {

http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/HiddenFacetForActionLayoutXml.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/HiddenFacetForActionLayoutXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/HiddenFacetForActionLayoutXml.java
deleted file mode 100644
index b4114fb..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/HiddenFacetForActionLayoutXml.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- *  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.core.metamodel.facets.actions.layout;
-
-import org.apache.isis.applib.annotation.When;
-import org.apache.isis.applib.annotation.Where;
-import org.apache.isis.applib.layout.component.ActionLayoutData;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.all.hide.HiddenFacet;
-import org.apache.isis.core.metamodel.facets.members.hidden.HiddenFacetAbstract;
-
-public class HiddenFacetForActionLayoutXml extends HiddenFacetAbstract {
-
-    public static HiddenFacet create(final ActionLayoutData actionLayout, final FacetHolder holder) {
-        if (actionLayout == null) {
-            return null;
-        }
-        final Where where = actionLayout.getHidden();
-        return where != null && where != Where.NOT_SPECIFIED  ? new HiddenFacetForActionLayoutXml(where, holder) : null;
-    }
-
-    private HiddenFacetForActionLayoutXml(final Where where, final FacetHolder holder) {
-        super(When.ALWAYS, where, holder);
-    }
-
-    @Override
-    public String hiddenReason(final ObjectAdapter targetAdapter, final Where whereContext) {
-        if(!where().includes(whereContext)) {
-            return null;
-        }
-        return "Hidden on " + where().getFriendlyName();
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/HiddenFacetForActionXml.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/HiddenFacetForActionXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/HiddenFacetForActionXml.java
new file mode 100644
index 0000000..433a859
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/HiddenFacetForActionXml.java
@@ -0,0 +1,52 @@
+/*
+ *  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.core.metamodel.facets.actions.layout;
+
+import org.apache.isis.applib.annotation.When;
+import org.apache.isis.applib.annotation.Where;
+import org.apache.isis.applib.layout.component.ActionLayoutData;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.all.hide.HiddenFacet;
+import org.apache.isis.core.metamodel.facets.members.hidden.HiddenFacetAbstract;
+
+public class HiddenFacetForActionXml extends HiddenFacetAbstract {
+
+    public static HiddenFacet create(final ActionLayoutData actionLayout, final FacetHolder holder) {
+        if (actionLayout == null) {
+            return null;
+        }
+        final Where where = actionLayout.getHidden();
+        return where != null && where != Where.NOT_SPECIFIED  ? new HiddenFacetForActionXml(where, holder) : null;
+    }
+
+    private HiddenFacetForActionXml(final Where where, final FacetHolder holder) {
+        super(When.ALWAYS, where, holder);
+    }
+
+    @Override
+    public String hiddenReason(final ObjectAdapter targetAdapter, final Where whereContext) {
+        if(!where().includes(whereContext)) {
+            return null;
+        }
+        return "Hidden on " + where().getFriendlyName();
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/PromptStyleFacetForActionLayoutAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/PromptStyleFacetForActionLayoutAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/PromptStyleFacetForActionLayoutAnnotation.java
new file mode 100644
index 0000000..1361aa0
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/PromptStyleFacetForActionLayoutAnnotation.java
@@ -0,0 +1,90 @@
+/*
+ *  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.core.metamodel.facets.actions.layout;
+
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.PromptStyle;
+import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleConfiguration;
+import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet;
+import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacetAbstract;
+import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacetAsConfigured;
+import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacetFallBack;
+
+public class PromptStyleFacetForActionLayoutAnnotation extends PromptStyleFacetAbstract {
+
+    private final PromptStyle promptStyle;
+
+    public PromptStyleFacetForActionLayoutAnnotation(final PromptStyle promptStyle, final FacetHolder holder) {
+        super( holder );
+        this.promptStyle = promptStyle;
+    }
+
+    public static PromptStyleFacet create(
+            final ActionLayout actionLayout,
+            final IsisConfiguration configuration,
+            final FacetHolder holder) {
+
+        PromptStyle promptStyle = actionLayout != null? actionLayout.promptStyle() : null;
+
+        if(promptStyle == null) {
+            if (holder.containsDoOpFacet(PromptStyleFacet.class)) {
+                // do not replace
+                return null;
+            }
+
+            return new PromptStyleFacetFallBack(holder);
+        } else {
+
+            switch (promptStyle) {
+                case DIALOG:
+                case INLINE:
+                    return new PromptStyleFacetForActionLayoutAnnotation(promptStyle, holder);
+
+                case AS_CONFIGURED:
+
+                    // do not replace
+                    if (holder.containsDoOpFacet(PromptStyleFacet.class)) {
+                        return null;
+                    }
+
+                    promptStyle = PromptStyleConfiguration.parse(configuration);
+                    return new PromptStyleFacetAsConfigured(promptStyle, holder);
+
+                default:
+
+                    // do not replace
+                    if (holder.containsDoOpFacet(PromptStyleFacet.class)) {
+                        return null;
+                    }
+
+                    promptStyle = PromptStyleConfiguration.parse(configuration);
+                    return new PromptStyleFacetAsConfigured(promptStyle, holder);
+            }
+        }
+
+    }
+
+    @Override
+    public PromptStyle value() {
+        return promptStyle;
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/PromptStyleFacetForActionXml.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/PromptStyleFacetForActionXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/PromptStyleFacetForActionXml.java
new file mode 100644
index 0000000..7fde483
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/PromptStyleFacetForActionXml.java
@@ -0,0 +1,49 @@
+/*
+ *  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.core.metamodel.facets.actions.layout;
+
+import org.apache.isis.applib.annotation.PromptStyle;
+import org.apache.isis.applib.layout.component.ActionLayoutData;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet;
+import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacetAbstract;
+
+public class PromptStyleFacetForActionXml extends PromptStyleFacetAbstract {
+
+    public static PromptStyleFacet create(ActionLayoutData actionLayout, FacetHolder holder) {
+        if(actionLayout == null) {
+            return null;
+        }
+        final PromptStyle promptStyle = actionLayout.getPromptStyle();
+        return promptStyle != null ? new PromptStyleFacetForActionXml(promptStyle, holder) : null;
+    }
+
+    private final PromptStyle promptStyle;
+
+    private PromptStyleFacetForActionXml(PromptStyle promptStyle, FacetHolder holder) {
+        super(holder);
+        this.promptStyle = promptStyle;
+    }
+
+    @Override
+    public PromptStyle value() {
+        return promptStyle;
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/PromptStyleFacetOnActionFromLayoutProperties.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/PromptStyleFacetOnActionFromLayoutProperties.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/PromptStyleFacetOnActionFromLayoutProperties.java
new file mode 100644
index 0000000..2b5b5ba
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/PromptStyleFacetOnActionFromLayoutProperties.java
@@ -0,0 +1,57 @@
+/*
+ *  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.core.metamodel.facets.actions.layout;
+
+import java.util.Properties;
+
+import com.google.common.base.Strings;
+
+import org.apache.isis.applib.annotation.PromptStyle;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet;
+import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacetAbstract;
+
+public class PromptStyleFacetOnActionFromLayoutProperties extends PromptStyleFacetAbstract {
+
+    private final PromptStyle promptStyle;
+
+    public static PromptStyleFacet create(Properties properties, FacetHolder holder) {
+        final PromptStyle promptStyle = promptStyle(properties);
+        return promptStyle != null? new PromptStyleFacetOnActionFromLayoutProperties(promptStyle, holder): null;
+    }
+
+    private PromptStyleFacetOnActionFromLayoutProperties(PromptStyle promptStyle, FacetHolder holder) {
+        super(holder);
+        this.promptStyle = promptStyle;
+    }
+
+    private static PromptStyle promptStyle(Properties properties) {
+        if(properties == null) {
+            return null;
+        }
+        String propertyPromptStyle = Strings.emptyToNull(properties.getProperty("promptStyle"));
+        return PromptStyle.valueOf(propertyPromptStyle);
+    }
+
+    @Override
+    public PromptStyle value() {
+        return promptStyle;
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PromptStyleFacetForPropertyLayoutXml.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PromptStyleFacetForPropertyLayoutXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PromptStyleFacetForPropertyLayoutXml.java
deleted file mode 100644
index 5df1ffd..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PromptStyleFacetForPropertyLayoutXml.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- *  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.core.metamodel.facets.properties.propertylayout;
-
-import org.apache.isis.applib.annotation.PromptStyle;
-import org.apache.isis.applib.layout.component.PropertyLayoutData;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet;
-import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacetAbstract;
-
-public class PromptStyleFacetForPropertyLayoutXml extends PromptStyleFacetAbstract {
-
-    public static PromptStyleFacet create(PropertyLayoutData propertyLayout, FacetHolder holder) {
-        if(propertyLayout == null) {
-            return null;
-        }
-        final PromptStyle promptStyle = propertyLayout.getPromptStyle();
-        return promptStyle != null ? new PromptStyleFacetForPropertyLayoutXml(promptStyle, holder) : null;
-    }
-
-    private final PromptStyle promptStyle;
-
-    private PromptStyleFacetForPropertyLayoutXml(PromptStyle promptStyle, FacetHolder holder) {
-        super(holder);
-        this.promptStyle = promptStyle;
-    }
-
-    @Override
-    public PromptStyle value() {
-        return promptStyle;
-    }
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PromptStyleFacetForPropertyXml.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PromptStyleFacetForPropertyXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PromptStyleFacetForPropertyXml.java
new file mode 100644
index 0000000..bde7a3d
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PromptStyleFacetForPropertyXml.java
@@ -0,0 +1,49 @@
+/*
+ *  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.core.metamodel.facets.properties.propertylayout;
+
+import org.apache.isis.applib.annotation.PromptStyle;
+import org.apache.isis.applib.layout.component.PropertyLayoutData;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet;
+import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacetAbstract;
+
+public class PromptStyleFacetForPropertyXml extends PromptStyleFacetAbstract {
+
+    public static PromptStyleFacet create(PropertyLayoutData propertyLayout, FacetHolder holder) {
+        if(propertyLayout == null) {
+            return null;
+        }
+        final PromptStyle promptStyle = propertyLayout.getPromptStyle();
+        return promptStyle != null ? new PromptStyleFacetForPropertyXml(promptStyle, holder) : null;
+    }
+
+    private final PromptStyle promptStyle;
+
+    private PromptStyleFacetForPropertyXml(PromptStyle promptStyle, FacetHolder holder) {
+        super(holder);
+        this.promptStyle = promptStyle;
+    }
+
+    @Override
+    public PromptStyle value() {
+        return promptStyle;
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PromptStyleFacetOnPropertyFromLayoutProperties.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PromptStyleFacetOnPropertyFromLayoutProperties.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PromptStyleFacetOnPropertyFromLayoutProperties.java
index 0f11ff4..3620f5a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PromptStyleFacetOnPropertyFromLayoutProperties.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PromptStyleFacetOnPropertyFromLayoutProperties.java
@@ -46,8 +46,8 @@ public class PromptStyleFacetOnPropertyFromLayoutProperties extends PromptStyleF
         if(properties == null) {
             return null;
         }
-        String propertyEditStyle = Strings.emptyToNull(properties.getProperty("promptStyle"));
-        return PromptStyle.valueOf(propertyEditStyle);
+        String propertyPromptStyle = Strings.emptyToNull(properties.getProperty("promptStyle"));
+        return PromptStyle.valueOf(propertyPromptStyle);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/ActionLayoutFacetRepr.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/ActionLayoutFacetRepr.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/ActionLayoutFacetRepr.java
index e8612f8..cb6d134 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/ActionLayoutFacetRepr.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/ActionLayoutFacetRepr.java
@@ -16,10 +16,10 @@
  */
 package org.apache.isis.core.metamodel.layoutmetadata;
 
-
 import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.BookmarkPolicy;
 import org.apache.isis.applib.annotation.Contributed;
+import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.Where;
 
 public class ActionLayoutFacetRepr {
@@ -31,6 +31,7 @@ public class ActionLayoutFacetRepr {
     public Where hidden;
     public String named;
     public boolean namedEscaped = true;
+    public PromptStyle promptStyle;
     public ActionLayout.Position position;
     public Contributed contributed;
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/PropertyLayoutFacetRepr.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/PropertyLayoutFacetRepr.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/PropertyLayoutFacetRepr.java
index e96f744..479692d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/PropertyLayoutFacetRepr.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/PropertyLayoutFacetRepr.java
@@ -25,12 +25,12 @@ public class PropertyLayoutFacetRepr {
 
     public String cssClass;
     public String describedAs;
-    public PromptStyle editStyle;
     public Where hidden;
     public LabelPosition labelPosition;
     public int multiLine;
     public String named;
     public boolean namedEscaped = true;
+    public PromptStyle promptStyle;
     public boolean renderedAsDayBefore;
     public int typicalLength;
 

http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridSystemServiceAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridSystemServiceAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridSystemServiceAbstract.java
index 2a3db3a..344d1f1 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridSystemServiceAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridSystemServiceAbstract.java
@@ -61,8 +61,9 @@ import org.apache.isis.core.metamodel.facets.actions.layout.BookmarkPolicyFacetF
 import org.apache.isis.core.metamodel.facets.actions.layout.CssClassFaFacetForActionXml;
 import org.apache.isis.core.metamodel.facets.actions.layout.CssClassFacetForActionXml;
 import org.apache.isis.core.metamodel.facets.actions.layout.DescribedAsFacetForActionXml;
-import org.apache.isis.core.metamodel.facets.actions.layout.HiddenFacetForActionLayoutXml;
+import org.apache.isis.core.metamodel.facets.actions.layout.HiddenFacetForActionXml;
 import org.apache.isis.core.metamodel.facets.actions.layout.NamedFacetForActionXml;
+import org.apache.isis.core.metamodel.facets.actions.layout.PromptStyleFacetForActionXml;
 import org.apache.isis.core.metamodel.facets.actions.position.ActionPositionFacet;
 import org.apache.isis.core.metamodel.facets.all.describedas.DescribedAsFacet;
 import org.apache.isis.core.metamodel.facets.all.hide.HiddenFacet;
@@ -99,7 +100,7 @@ import org.apache.isis.core.metamodel.facets.properties.propertylayout.HiddenFac
 import org.apache.isis.core.metamodel.facets.properties.propertylayout.LabelAtFacetForPropertyXml;
 import org.apache.isis.core.metamodel.facets.properties.propertylayout.MultiLineFacetForPropertyXml;
 import org.apache.isis.core.metamodel.facets.properties.propertylayout.NamedFacetForPropertyXml;
-import org.apache.isis.core.metamodel.facets.properties.propertylayout.PromptStyleFacetForPropertyLayoutXml;
+import org.apache.isis.core.metamodel.facets.properties.propertylayout.PromptStyleFacetForPropertyXml;
 import org.apache.isis.core.metamodel.facets.properties.propertylayout.RenderedAdjustedFacetForPropertyXml;
 import org.apache.isis.core.metamodel.facets.properties.propertylayout.TypicalLengthFacetForPropertyXml;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -293,8 +294,9 @@ public abstract class GridSystemServiceAbstract<G extends Grid> implements GridS
                 FacetUtil.addOrReplaceFacet(CssClassFacetForActionXml.create(actionLayoutData, objectAction));
                 FacetUtil.addOrReplaceFacet(CssClassFaFacetForActionXml.create(actionLayoutData, objectAction));
                 FacetUtil.addOrReplaceFacet(DescribedAsFacetForActionXml.create(actionLayoutData, objectAction));
-                FacetUtil.addOrReplaceFacet(HiddenFacetForActionLayoutXml.create(actionLayoutData, objectAction));
+                FacetUtil.addOrReplaceFacet(HiddenFacetForActionXml.create(actionLayoutData, objectAction));
                 FacetUtil.addOrReplaceFacet(NamedFacetForActionXml.create(actionLayoutData, objectAction));
+                FacetUtil.addOrReplaceFacet(PromptStyleFacetForActionXml.create(actionLayoutData, objectAction));
             }
 
             @Override
@@ -306,13 +308,13 @@ public abstract class GridSystemServiceAbstract<G extends Grid> implements GridS
 
                 FacetUtil.addOrReplaceFacet(CssClassFacetForPropertyXml.create(propertyLayoutData, oneToOneAssociation));
                 FacetUtil.addOrReplaceFacet(DescribedAsFacetForPropertyXml.create(propertyLayoutData, oneToOneAssociation));
-                FacetUtil.addOrReplaceFacet(
-                        PromptStyleFacetForPropertyLayoutXml.create(propertyLayoutData, oneToOneAssociation));
                 FacetUtil.addOrReplaceFacet(HiddenFacetForPropertyXml.create(propertyLayoutData, oneToOneAssociation));
                 FacetUtil.addOrReplaceFacet(LabelAtFacetForPropertyXml.create(propertyLayoutData, oneToOneAssociation));
                 FacetUtil.addOrReplaceFacet(MultiLineFacetForPropertyXml.create(propertyLayoutData, oneToOneAssociation));
                 FacetUtil.addOrReplaceFacet(NamedFacetForPropertyXml.create(propertyLayoutData, oneToOneAssociation));
                 FacetUtil.addOrReplaceFacet(
+                        PromptStyleFacetForPropertyXml.create(propertyLayoutData, oneToOneAssociation));
+                FacetUtil.addOrReplaceFacet(
                         RenderedAdjustedFacetForPropertyXml.create(propertyLayoutData, oneToOneAssociation));
                 FacetUtil.addOrReplaceFacet(TypicalLengthFacetForPropertyXml.create(propertyLayoutData, oneToOneAssociation));
 

http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
index d5838b1..13f12ec 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
@@ -17,6 +17,8 @@
 
 package org.apache.isis.core.metamodel.spec.feature;
 
+import java.util.Collections;
+import java.util.Comparator;
 import java.util.List;
 
 import com.google.common.base.Predicate;
@@ -35,6 +37,7 @@ import org.apache.isis.core.commons.lang.StringFunctions;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.consent.Consent;
 import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
+import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetFilters;
 import org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacet;
@@ -47,6 +50,7 @@ import org.apache.isis.core.metamodel.facets.members.cssclassfa.CssClassFaPositi
 import org.apache.isis.core.metamodel.facets.members.order.MemberOrderFacet;
 import org.apache.isis.core.metamodel.facets.object.wizard.WizardFacet;
 import org.apache.isis.core.metamodel.interactions.ValidatingInteractionAdvisor;
+import org.apache.isis.core.metamodel.layout.memberorderfacet.MemberOrderFacetComparator;
 import org.apache.isis.core.metamodel.spec.ActionType;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 
@@ -197,10 +201,12 @@ public interface ObjectAction extends ObjectMember {
 
     //endregion
 
-    //region > Utils
-    public static final class Utils {
+    //region > Util
+    public static final class Util {
 
-        private Utils() {
+        final static MemberOrderFacetComparator memberOrderFacetComparator = new MemberOrderFacetComparator(false);
+
+        private Util() {
         }
 
         public static String nameFor(final ObjectAction objAction) {
@@ -216,15 +222,14 @@ public interface ObjectAction extends ObjectMember {
         }
 
         public static boolean returnsBlobOrClob(final ObjectAction objectAction) {
-            boolean blobOrClob = false;
             final ObjectSpecification returnType = objectAction.getReturnType();
             if (returnType != null) {
                 Class<?> cls = returnType.getCorrespondingClass();
                 if (Blob.class.isAssignableFrom(cls) || Clob.class.isAssignableFrom(cls)) {
-                    blobOrClob = true;
+                    return true;
                 }
             }
-            return blobOrClob;
+            return false;
         }
 
         public static String actionIdentifierFor(final ObjectAction action) {
@@ -260,6 +265,79 @@ public interface ObjectAction extends ObjectMember {
             return cssClassFacet != null ? cssClassFacet.cssClass(objectAdapter) : null;
         }
 
+
+        public static List<ObjectAction> findTopLevel(
+                final ObjectAdapter adapter,
+                final DeploymentCategory deploymentCategory) {
+            final List<ObjectAction> topLevelActions = Lists.newArrayList();
+
+            addTopLevelActions(adapter, ActionType.USER, topLevelActions);
+            if(deploymentCategory.isPrototyping()) {
+                addTopLevelActions(adapter, ActionType.PROTOTYPE, topLevelActions);
+            }
+            return topLevelActions;
+        }
+
+        static void addTopLevelActions(
+                final ObjectAdapter adapter,
+                final ActionType actionType,
+                final List<ObjectAction> topLevelActions) {
+
+            final ObjectSpecification adapterSpec = adapter.getSpecification();
+
+            @SuppressWarnings({ "unchecked", "deprecation" })
+            Filter<ObjectAction> filter = org.apache.isis.applib.filter.Filters.and(
+                    Filters.memberOrderNotAssociationOf(adapterSpec),
+                    Filters.dynamicallyVisible(adapter, InteractionInitiatedBy.USER, Where.ANYWHERE),
+                    Filters.notBulkOnly(),
+                    Filters.excludeWizardActions(adapterSpec));
+
+            final List<ObjectAction> userActions = adapterSpec.getObjectActions(actionType, Contributed.INCLUDED, filter);
+            topLevelActions.addAll(userActions);
+        }
+
+
+        public static List<ObjectAction> findForAssociation(
+                final ObjectAdapter adapter,
+                final ObjectAssociation association, final DeploymentCategory deploymentCategory) {
+            final List<ObjectAction> associatedActions = Lists.newArrayList();
+
+            addActions(adapter, ActionType.USER, association, associatedActions);
+            if(deploymentCategory.isPrototyping()) {
+                addActions(adapter, ActionType.PROTOTYPE, association, associatedActions);
+            }
+
+            Collections.sort(associatedActions, new Comparator<ObjectAction>() {
+
+                @Override
+                public int compare(ObjectAction o1, ObjectAction o2) {
+                    final MemberOrderFacet m1 = o1.getFacet(MemberOrderFacet.class);
+                    final MemberOrderFacet m2 = o2.getFacet(MemberOrderFacet.class);
+                    return memberOrderFacetComparator.compare(m1, m2);
+                }
+            });
+            return associatedActions;
+        }
+
+        static List<ObjectAction> addActions(
+                final ObjectAdapter adapter,
+                final ActionType type,
+                final ObjectAssociation association, final List<ObjectAction> associatedActions) {
+            final ObjectSpecification objectSpecification = adapter.getSpecification();
+
+            @SuppressWarnings({ "unchecked", "deprecation" })
+            Filter<ObjectAction> filter = org.apache.isis.applib.filter.Filters.and(
+                    Filters.memberOrderOf(association),
+                    Filters.dynamicallyVisible(adapter, InteractionInitiatedBy.USER, Where.ANYWHERE),
+                    Filters.notBulkOnly(),
+                    Filters.excludeWizardActions(objectSpecification));
+
+            final List<ObjectAction> userActions = objectSpecification.getObjectActions(type, Contributed.INCLUDED, filter);
+            associatedActions.addAll(userActions);
+            return userActions;
+        }
+
+
     }
 
     //endregion

http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActions.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActions.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActions.java
index c167879..0dcf8a1 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActions.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActions.java
@@ -31,11 +31,11 @@ public final class ObjectActions {
     }
 
     /**
-     * @deprecated - use {@link ObjectAction.Utils#nameFor(ObjectAction)}
+     * @deprecated - use {@link ObjectAction.Util#nameFor(ObjectAction)}
      */
     @Deprecated
     public static String nameFor(final ObjectAction action) {
-        return ObjectAction.Utils.nameFor(action);
+        return ObjectAction.Util.nameFor(action);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/links/LinkAndLabel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/links/LinkAndLabel.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/links/LinkAndLabel.java
index 25f5705..acb49e6 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/links/LinkAndLabel.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/links/LinkAndLabel.java
@@ -20,10 +20,13 @@ package org.apache.isis.viewer.wicket.model.links;
 
 import java.io.Serializable;
 import java.util.List;
+
 import com.google.common.base.Predicate;
 import com.google.common.collect.Iterables;
 import com.google.common.collect.Lists;
+
 import org.apache.wicket.markup.html.link.AbstractLink;
+
 import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.ActionSemantics;
 import org.apache.isis.applib.annotation.SemanticsOf;
@@ -48,15 +51,15 @@ public class LinkAndLabel implements Serializable {
             final String disabledReasonIfAny,
             final boolean blobOrClob) {
 
-        final String name = ObjectAction.Utils.nameFor(objectAction);
+        final String name = ObjectAction.Util.nameFor(objectAction);
 
         final boolean explorationOrPrototype = objectAction.isPrototype();
-        final String actionIdentifier = ObjectAction.Utils.actionIdentifierFor(objectAction);
-        final String description = ObjectAction.Utils.descriptionOf(objectAction);
-        final String cssClass = ObjectAction.Utils.cssClassFor(objectAction, objectAdapter);
-        final String cssClassFa = ObjectAction.Utils.cssClassFaFor(objectAction);
-        final CssClassFaPosition cssClassFaPosition = ObjectAction.Utils.cssClassFaPositionFor(objectAction);
-        final ActionLayout.Position actionLayoutPosition = ObjectAction.Utils.actionLayoutPositionOf(objectAction);
+        final String actionIdentifier = ObjectAction.Util.actionIdentifierFor(objectAction);
+        final String description = ObjectAction.Util.descriptionOf(objectAction);
+        final String cssClass = ObjectAction.Util.cssClassFor(objectAction, objectAdapter);
+        final String cssClassFa = ObjectAction.Util.cssClassFaFor(objectAction);
+        final CssClassFaPosition cssClassFaPosition = ObjectAction.Util.cssClassFaPositionFor(objectAction);
+        final ActionLayout.Position actionLayoutPosition = ObjectAction.Util.actionLayoutPositionOf(objectAction);
         final ActionSemantics.Of semantics = objectAction.getSemantics();
 
         return new LinkAndLabel(
@@ -80,9 +83,6 @@ public class LinkAndLabel implements Serializable {
         public boolean isNoParameters() {
             return this == NO_PARAMETERS;
         }
-        public boolean isTakesParameters() {
-            return this == TAKES_PARAMETERS;
-        }
     }
 
     private final AbstractLink link;
@@ -190,4 +190,11 @@ public class LinkAndLabel implements Serializable {
             };
         }
     }
+
+    public static class Util {
+        private Util(){}
+
+
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
index 245d31a..1c6e18f 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
@@ -60,8 +60,11 @@ import org.apache.isis.core.metamodel.adapter.oid.OidMarshaller;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.metamodel.consent.Consent;
 import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacet;
 import org.apache.isis.core.metamodel.facets.object.encodeable.EncodableFacet;
+import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet;
 import org.apache.isis.core.metamodel.services.ServicesInjector;
 import org.apache.isis.core.metamodel.spec.ActionType;
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
@@ -89,6 +92,7 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> implements Has
     private static final String NULL_ARG = "$nullArg$";
     private static final Pattern KEY_VALUE_PATTERN = Pattern.compile("([^=]+)=(.+)");
 
+
     /**
      * Whether we are obtaining arguments (eg in a dialog), or displaying the
      * results
@@ -680,17 +684,6 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> implements Has
 
     private FormExecutor formExecutor;
 
-    @Override
-    public PromptStyle getPromptStyle() {
-        // for now, at least..
-        return PromptStyle.DIALOG;
-    }
-
-    @Override
-    public ScalarModel.InlinePromptContext getInlinePromptContext() {
-        throw new IllegalStateException("should not be called when getPromptStyle() returns DIALOG");
-    }
-
     /**
      * A hint passed from one Wicket UI component to another.
      *
@@ -706,6 +699,40 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> implements Has
 
 
     //////////////////////////////////////////////////
+
+    @Override
+    public PromptStyle getPromptStyle() {
+        final PromptStyleFacet facet = getFacet(PromptStyleFacet.class);
+        if(facet == null) {
+            return null;
+        }
+        return facet.value() == PromptStyle.INLINE
+                ? PromptStyle.INLINE
+                : PromptStyle.DIALOG;
+    }
+
+    public <T extends Facet> T getFacet(final Class<T> facetType) {
+        final FacetHolder facetHolder = getActionMemento().getAction(getSpecificationLoader());
+        return facetHolder.getFacet(facetType);
+    }
+
+
+    //////////////////////////////////////////////////
+
+    private ScalarModel.InlinePromptContext inlinePromptContext;
+
+    /**
+     * Further hint, to support inline prompts...
+     */
+    public ScalarModel.InlinePromptContext getInlinePromptContext() {
+        return inlinePromptContext;
+    }
+
+    public void setInlinePromptContext(ScalarModel.InlinePromptContext inlinePromptContext) {
+        this.inlinePromptContext = inlinePromptContext;
+    }
+
+    //////////////////////////////////////////////////
     // Dependencies (from context)
     //////////////////////////////////////////////////
 

http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/FormExecutor.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/FormExecutor.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/FormExecutor.java
index a04c1d1..2f33bbc 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/FormExecutor.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/FormExecutor.java
@@ -24,8 +24,6 @@ import java.io.Serializable;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.markup.html.form.Form;
 
-import org.apache.isis.applib.annotation.PromptStyle;
-
 /**
  * Passed through the {@link ActionModel} or {@link ScalarModel}, allowing
  * two different Wicket UI components (eg owning <code>ActionPanel</code> and
@@ -40,5 +38,4 @@ import org.apache.isis.applib.annotation.PromptStyle;
 public interface FormExecutor extends Serializable {
 
     boolean executeAndProcessResults(AjaxRequestTarget target, Form<?> feedbackForm);
-
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/HasFormExecutor.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/HasFormExecutor.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/HasFormExecutor.java
index 7c2c933..128d7f8 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/HasFormExecutor.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/HasFormExecutor.java
@@ -24,10 +24,5 @@ import org.apache.isis.applib.annotation.PromptStyle;
 public interface HasFormExecutor {
     PromptStyle getPromptStyle();
 
-    /**
-     * Only applicable if {@link #getPromptStyle()} is {@link PromptStyle#INLINE}.
-     */
-    ScalarModel.InlinePromptContext getInlinePromptContext();
-
     FormExecutor getFormExecutor();
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
index 6958feb..a847c79 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
@@ -30,6 +30,7 @@ import com.google.common.collect.FluentIterable;
 import com.google.common.collect.Lists;
 
 import org.apache.wicket.Component;
+import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 
 import org.apache.isis.applib.annotation.PromptStyle;
@@ -1036,7 +1037,7 @@ public class ScalarModel extends EntityModel implements LinksProvider,HasFormExe
     private InlinePromptContext inlinePromptContext;
 
     /**
-     * Further hint, to support inline edits...
+     * Further hint, to support inline prompts...
      */
     public InlinePromptContext getInlinePromptContext() {
         return inlinePromptContext;
@@ -1046,24 +1047,40 @@ public class ScalarModel extends EntityModel implements LinksProvider,HasFormExe
         this.inlinePromptContext = inlinePromptContext;
     }
 
+    // //////////////////////////////////////
+
     public static class InlinePromptContext implements Serializable {
 
         private static final long serialVersionUID = 1L;
 
         private final Component scalarIfRegular;
-        private final WebMarkupContainer scalarIfRegularInlineEditForm;
+        private final WebMarkupContainer scalarIfRegularInlinePromptForm;
+        private final MarkupContainer scalarTypeContainer;
 
         public InlinePromptContext(
                 final Component scalarIfRegular,
-                final WebMarkupContainer scalarIfRegularInlineEditForm) {
+                final WebMarkupContainer scalarIfRegularInlinePromptForm,
+                final MarkupContainer scalarTypeContainer) {
             this.scalarIfRegular = scalarIfRegular;
-            this.scalarIfRegularInlineEditForm = scalarIfRegularInlineEditForm;
+            this.scalarIfRegularInlinePromptForm = scalarIfRegularInlinePromptForm;
+            this.scalarTypeContainer = scalarTypeContainer;
         }
 
-        public void onCancel() {
+        public Component getScalarIfRegular() {
+            return scalarIfRegular;
+        }
 
+        public WebMarkupContainer getScalarIfRegularInlinePromptForm() {
+            return scalarIfRegularInlinePromptForm;
+        }
+
+        public void onCancel() {
             scalarIfRegular.setVisible(true);
-            scalarIfRegularInlineEditForm.setVisible(false);
+            scalarIfRegularInlinePromptForm.setVisible(false);
+        }
+
+        public MarkupContainer getScalarTypeContainer() {
+            return scalarTypeContainer;
         }
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/AdditionalLinksPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/AdditionalLinksPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/AdditionalLinksPanel.java
index 27c0722..be3e492 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/AdditionalLinksPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/AdditionalLinksPanel.java
@@ -124,7 +124,6 @@ public class AdditionalLinksPanel extends PanelAbstract<ListOfLinksModel> {
                     addConfirmationDialogIfAreYouSureSemantics(link, semantics);
                 }
 
-
                 final String cssClass = linkAndLabel.getCssClass();
                 CssClassAppender.appendCssClassTo(link, cssClass);
 

http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/EntityActionLinkFactory.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/EntityActionLinkFactory.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/EntityActionLinkFactory.java
index 1da1815..000d4cf 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/EntityActionLinkFactory.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/EntityActionLinkFactory.java
@@ -30,6 +30,7 @@ import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 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.widgets.linkandlabel.ActionLinkFactoryAbstract;
 
 public final class EntityActionLinkFactory extends ActionLinkFactoryAbstract {
@@ -39,7 +40,8 @@ public final class EntityActionLinkFactory extends ActionLinkFactoryAbstract {
     @SuppressWarnings("unused")
     private final EntityModel entityModel;
 
-    public EntityActionLinkFactory(final EntityModel entityModel) {
+    public EntityActionLinkFactory(final EntityModel entityModel, final ScalarModel scalarModelForAssociationIfAny) {
+        super(scalarModelForAssociationIfAny);
         this.entityModel = entityModel;
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/EntityActionUtil.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/EntityActionUtil.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/EntityActionUtil.java
deleted file mode 100644
index 9b4627f..0000000
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/EntityActionUtil.java
+++ /dev/null
@@ -1,189 +0,0 @@
-/*
- *  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.actionmenu.entityactions;
-
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-
-import com.google.common.base.Function;
-import com.google.common.base.Predicates;
-import com.google.common.collect.FluentIterable;
-import com.google.common.collect.Lists;
-
-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.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager.ConcurrencyChecking;
-import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
-import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
-import org.apache.isis.core.metamodel.facets.members.order.MemberOrderFacet;
-import org.apache.isis.core.metamodel.layout.memberorderfacet.MemberOrderFacetComparator;
-import org.apache.isis.core.metamodel.spec.ActionType;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.spec.feature.Contributed;
-import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
-import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
-import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
-import org.apache.isis.core.runtime.system.DeploymentType;
-import org.apache.isis.viewer.wicket.model.links.LinkAndLabel;
-import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
-import org.apache.isis.viewer.wicket.model.models.EntityModel;
-import org.apache.isis.viewer.wicket.model.models.ScalarModel;
-import org.apache.isis.viewer.wicket.ui.components.widgets.linkandlabel.ActionLinkFactory;
-
-public final class EntityActionUtil {
-
-    private EntityActionUtil(){}
-
-    private final static MemberOrderFacetComparator memberOrderFacetComparator = new MemberOrderFacetComparator(false);
-
-    public static List<LinkAndLabel> getEntityActionLinksForAssociation(
-            final ScalarModel scalarModel,
-            final DeploymentCategory deploymentCategory) {
-        final List<LinkAndLabel> entityActions = Lists.newArrayList();
-
-        if (scalarModel.getKind() != ScalarModel.Kind.PROPERTY) {
-            return entityActions;
-        } else {
-            final ObjectAdapterMemento parentMemento = scalarModel.getParentObjectAdapterMemento();
-            final EntityModel parentEntityModel = new EntityModel(parentMemento);
-            final OneToOneAssociation oneToOneAssociation = scalarModel.getPropertyMemento().getProperty(
-                    scalarModel.getSpecificationLoader());
-
-            final List<ObjectAction> associatedActions = getObjectActionsForAssociation(parentEntityModel, oneToOneAssociation,
-                    deploymentCategory);
-
-            entityActions.addAll(asLinkAndLabelsForAdditionalLinksPanel(parentEntityModel, associatedActions));
-            return entityActions;
-        }
-    }
-
-    public static List<ObjectAction> getObjectActionsForAssociation(
-            final EntityModel entityModel,
-            final ObjectAssociation association,
-            final DeploymentType deploymentType) {
-        return getObjectActionsForAssociation(entityModel, association, deploymentType.getDeploymentCategory());
-    }
-
-    public static List<ObjectAction> getObjectActionsForAssociation(
-            final EntityModel entityModel,
-            final ObjectAssociation association, final DeploymentCategory deploymentCategory) {
-        final List<ObjectAction> associatedActions = Lists.newArrayList();
-
-        addActions(ActionType.USER, entityModel, association, associatedActions);
-        if(deploymentCategory.isPrototyping()) {
-            addActions(ActionType.PROTOTYPE, entityModel, association, associatedActions);
-        }
-
-        Collections.sort(associatedActions, new Comparator<ObjectAction>() {
-
-            @Override
-            public int compare(ObjectAction o1, ObjectAction o2) {
-                final MemberOrderFacet m1 = o1.getFacet(MemberOrderFacet.class);
-                final MemberOrderFacet m2 = o2.getFacet(MemberOrderFacet.class);
-                return memberOrderFacetComparator.compare(m1, m2);
-            }
-        });
-        return associatedActions;
-    }
-
-    /**
-     * Converts an {@link org.apache.isis.viewer.wicket.model.models.EntityModel} and a (subset of its) {@link org.apache.isis.core.metamodel.spec.feature.ObjectAction}s into a
-     * list of {@link org.apache.isis.viewer.wicket.model.links.LinkAndLabel}s intended to be apassed
-     * to the {@link AdditionalLinksPanel}.
-     *
-     * <p>
-     *     The length of the list returned may smaller than the inbound actions; any null links
-     *     (for invisible actions) will be discarded.
-     * </p>
-     */
-    public static List<LinkAndLabel> asLinkAndLabelsForAdditionalLinksPanel(
-            final EntityModel entityModel,
-            final List<ObjectAction> actions) {
-
-        final String linkId = AdditionalLinksPanel.ID_ADDITIONAL_LINK;
-        final ActionLinkFactory linkFactory = new EntityActionLinkFactory(entityModel);
-
-        final ObjectAdapterMemento adapterMemento = entityModel.getObjectAdapterMemento();
-        return FluentIterable.from(actions)
-                .transform(new Function<ObjectAction, LinkAndLabel>() {
-
-                    @Override
-                    public LinkAndLabel apply(ObjectAction objectAction) {
-                        return linkFactory.newLink(linkId, adapterMemento, objectAction);
-                    }
-                })
-                .filter(Predicates.<LinkAndLabel>notNull())
-                .toList();
-    }
-
-    private static List<ObjectAction> addActions(
-            final ActionType type,
-            final EntityModel entityModel,
-            final ObjectAssociation association,
-            final List<ObjectAction> associatedActions) {
-        final ObjectSpecification adapterSpec = entityModel.getTypeOfSpecification();
-        final ObjectAdapter adapter = entityModel.load(ConcurrencyChecking.NO_CHECK);
-
-        final ObjectSpecification objectSpecification = entityModel.getTypeOfSpecification();
-        @SuppressWarnings({ "unchecked", "deprecation" })
-        Filter<ObjectAction> filter = Filters.and(
-                    ObjectAction.Filters.memberOrderOf(association),
-                    ObjectAction.Filters.dynamicallyVisible(adapter, InteractionInitiatedBy.USER, Where.ANYWHERE),
-                    ObjectAction.Filters.notBulkOnly(),
-                    ObjectAction.Filters.excludeWizardActions(objectSpecification));
-
-        final List<ObjectAction> userActions = adapterSpec.getObjectActions(type, Contributed.INCLUDED, filter);
-        associatedActions.addAll(userActions);
-        return userActions;
-    }
-
-
-    public static void addTopLevelActions(
-            final ObjectAdapter adapter,
-            final ActionType actionType,
-            final List<ObjectAction> topLevelActions) {
-
-        final ObjectSpecification adapterSpec = adapter.getSpecification();
-
-        @SuppressWarnings({ "unchecked", "deprecation" })
-        Filter<ObjectAction> filter = Filters.and(
-                ObjectAction.Filters.memberOrderNotAssociationOf(adapterSpec),
-                ObjectAction.Filters.dynamicallyVisible(adapter, InteractionInitiatedBy.USER, Where.ANYWHERE),
-                ObjectAction.Filters.notBulkOnly(),
-                ObjectAction.Filters.excludeWizardActions(adapterSpec));
-
-        final List<ObjectAction> userActions = adapterSpec.getObjectActions(actionType, Contributed.INCLUDED, filter);
-        topLevelActions.addAll(userActions);
-    }
-
-    public static List<ObjectAction> getTopLevelActions(
-            final ObjectAdapter adapter,
-            final DeploymentCategory deploymentCategory) {
-        final List<ObjectAction> topLevelActions = Lists.newArrayList();
-
-        addTopLevelActions(adapter, ActionType.USER, topLevelActions);
-        if(deploymentCategory.isPrototyping()) {
-            addTopLevelActions(adapter, ActionType.PROTOTYPE, topLevelActions);
-        }
-        return topLevelActions;
-    }
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/LinkAndLabelUtil.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/LinkAndLabelUtil.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/LinkAndLabelUtil.java
new file mode 100644
index 0000000..e983335
--- /dev/null
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/LinkAndLabelUtil.java
@@ -0,0 +1,97 @@
+/*
+ *  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.actionmenu.entityactions;
+
+import java.util.Collections;
+import java.util.List;
+
+import com.google.common.base.Function;
+import com.google.common.base.Predicates;
+import com.google.common.collect.FluentIterable;
+
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
+import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
+import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
+import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
+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.widgets.linkandlabel.ActionLinkFactory;
+
+public final class LinkAndLabelUtil {
+
+    private LinkAndLabelUtil(){}
+
+    public static List<LinkAndLabel> asActionLinksForAssociation(
+            final ScalarModel scalarModelForAssociation,
+            final DeploymentCategory deploymentCategory) {
+
+        if (scalarModelForAssociation.getKind() != ScalarModel.Kind.PROPERTY) {
+            return Collections.emptyList();
+        }
+
+        final ObjectAdapterMemento parentMemento = scalarModelForAssociation.getParentObjectAdapterMemento();
+        final EntityModel parentEntityModel = new EntityModel(parentMemento);
+
+        final ObjectAdapter parentAdapter = parentEntityModel.load(AdapterManager.ConcurrencyChecking.NO_CHECK);
+
+        final OneToOneAssociation oneToOneAssociation =
+                scalarModelForAssociation.getPropertyMemento().getProperty(scalarModelForAssociation.getSpecificationLoader());
+
+        final List<ObjectAction> associatedActions =
+                ObjectAction.Util.findForAssociation(parentAdapter, oneToOneAssociation, deploymentCategory);
+
+        return asActionLinksForAdditionalLinksPanel(parentEntityModel, associatedActions,
+                scalarModelForAssociation);
+    }
+
+    /**
+     * Converts an {@link org.apache.isis.viewer.wicket.model.models.EntityModel} and a (subset of its) {@link org.apache.isis.core.metamodel.spec.feature.ObjectAction}s into a
+     * list of {@link org.apache.isis.viewer.wicket.model.links.LinkAndLabel}s intended to be passed
+     * to the {@link AdditionalLinksPanel}.
+     *
+     * <p>
+     *     The length of the list returned may smaller than the inbound actions; any null links
+     *     (for invisible actions) will be discarded.
+     * </p>
+     */
+    public static List<LinkAndLabel> asActionLinksForAdditionalLinksPanel(
+            final EntityModel parentEntityModel,
+            final List<ObjectAction> actions,
+            final ScalarModel scalarModelForAssociationIfAny) {
+
+        final ActionLinkFactory linkFactory = new EntityActionLinkFactory(parentEntityModel, scalarModelForAssociationIfAny);
+        final String linkId = AdditionalLinksPanel.ID_ADDITIONAL_LINK;
+
+        final ObjectAdapterMemento adapterMemento = parentEntityModel.getObjectAdapterMemento();
+        return FluentIterable.from(actions)
+                .transform(new Function<ObjectAction, LinkAndLabel>() {
+
+                    @Override
+                    public LinkAndLabel apply(ObjectAction objectAction) {
+                        return linkFactory.newLink(linkId, adapterMemento, objectAction);
+                    }
+                })
+                .filter(Predicates.<LinkAndLabel>notNull())
+                .toList();
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/CssMenuItem.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/CssMenuItem.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/CssMenuItem.java
index 3b7e44e..998c366 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/CssMenuItem.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/CssMenuItem.java
@@ -345,13 +345,13 @@ class CssMenuItem implements Serializable {
                 .link(link)
                 .describedAs(descriptionIfAny)
                 .enabled(reasonDisabledIfAny)
-                .returnsBlobOrClob(ObjectAction.Utils.returnsBlobOrClob(objectAction))
+                .returnsBlobOrClob(ObjectAction.Util.returnsBlobOrClob(objectAction))
                 .prototyping(objectAction.isPrototype())
                 .requiresSeparator(separator)
-                .withActionIdentifier(ObjectAction.Utils.actionIdentifierFor(objectAction))
-                .withCssClass(ObjectAction.Utils.cssClassFor(objectAction, adapter))
-                .withCssClassFa(ObjectAction.Utils.cssClassFaFor(objectAction))
-                .withCssClassFaPosition(ObjectAction.Utils.cssClassFaPositionFor(objectAction));
+                .withActionIdentifier(ObjectAction.Util.actionIdentifierFor(objectAction))
+                .withCssClass(ObjectAction.Util.cssClassFor(objectAction, adapter))
+                .withCssClassFa(ObjectAction.Util.cssClassFaFor(objectAction))
+                .withCssClassFaPosition(ObjectAction.Util.cssClassFaPositionFor(objectAction));
 
         return builder;
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/ServiceActionLinkFactory.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/ServiceActionLinkFactory.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/ServiceActionLinkFactory.java
index 8385137..89657be 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/ServiceActionLinkFactory.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/ServiceActionLinkFactory.java
@@ -36,9 +36,14 @@ class ServiceActionLinkFactory extends ActionLinkFactoryAbstract {
 
     private static final long serialVersionUID = 1L;
 
+    ServiceActionLinkFactory() {
+        super(null);
+    }
+
     @Override
     public LinkAndLabel newLink(
-            final String linkId, final ObjectAdapterMemento adapterMemento,
+            final String linkId,
+            final ObjectAdapterMemento adapterMemento,
             final ObjectAction action) {
         
         ObjectAdapter objectAdapter = adapterMemento.getObjectAdapter(ConcurrencyChecking.NO_CHECK,


[18/43] isis git commit: ISIS-1603: spiking if can detect ESC to close inline prompt

Posted by da...@apache.org.
ISIS-1603: spiking if can detect ESC to close inline prompt


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

Branch: refs/heads/master
Commit: c8673f28bce39e8f256b4aba7031e29d1798813f
Parents: 4bdfb86
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Mon Apr 24 21:00:58 2017 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Apr 27 13:26:39 2017 +0100

----------------------------------------------------------------------
 .../actions/ActionParametersFormPanel.java      |  2 +-
 .../property/PropertyEditFormPanel.java         | 39 ++++++++++++++++++++
 .../ui/panels/PromptFormPanelAbstract.java      | 13 ++++---
 3 files changed, 48 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/c8673f28/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java
index 7a7d16c..daf7c62 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java
@@ -112,7 +112,7 @@ public class ActionParametersFormPanel extends PromptFormPanelAbstract<ActionMod
         }
 
         @Override
-        protected void configureButtons(final AjaxButton okButton) {
+        protected void configureButtons(final AjaxButton okButton, final AjaxButton cancelButton) {
             applyAreYouSure(okButton);
         }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/c8673f28/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditFormPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditFormPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditFormPanel.java
index 4e7b456..9623490 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditFormPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditFormPanel.java
@@ -21,7 +21,11 @@ package org.apache.isis.viewer.wicket.ui.components.property;
 
 import org.apache.wicket.Component;
 import org.apache.wicket.MarkupContainer;
+import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.markup.html.form.AjaxButton;
+import org.apache.wicket.markup.head.IHeaderResponse;
+import org.apache.wicket.markup.head.JavaScriptContentHeaderItem;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.form.Form;
 
@@ -130,6 +134,41 @@ public class PropertyEditFormPanel extends PromptFormPanelAbstract<ScalarModel>
             }
 
         }
+
+        @Override
+        protected void configureButtons(final AjaxButton okButton, final AjaxButton cancelButton) {
+            if(getScalarModel().getPromptStyle() == PromptStyle.INLINE) {
+                cancelButton.add(new AbstractDefaultAjaxBehavior() {
+
+                    private static final String PRE_JS =
+                            ""+"$(document).ready( function() { \n"
+                            +  "  $(document).bind('keyup', function(evt) { \n"
+                            +  "    if (evt.keyCode == 27) { \n";
+                    private static final String POST_JS =
+                            ""+"      evt.preventDefault(); \n   "
+                            +  "    } \n"
+                            +  "  }); \n"
+                            +  "});";
+
+                    @Override
+                    public void renderHead(final Component component, final IHeaderResponse response) {
+                        super.renderHead(component, response);
+
+                        final String javascript = PRE_JS + getCallbackScript() + POST_JS;
+                        response.render(
+                                JavaScriptContentHeaderItem.forScript(javascript, component.getPath(), null));
+                    }
+
+                    @Override
+                    protected void respond(final AjaxRequestTarget target) {
+                        onCancel(target);
+                    }
+
+
+                });
+            }
+        }
+
     }
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/c8673f28/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormPanelAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormPanelAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormPanelAbstract.java
index c4edc5a..8a20f08 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormPanelAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormPanelAbstract.java
@@ -91,11 +91,12 @@ public abstract class PromptFormPanelAbstract<T extends IModel<?> & HasFormExecu
             addOrReplace(formFeedback);
 
             AjaxButton okButton = addOkButton();
-            addCancelButton();
-            configureButtons(okButton);
+            final AjaxButton cancelButton = addCancelButton();
+            configureButtons(okButton, cancelButton);
         }
 
-        protected abstract void addParameters();
+
+    protected abstract void addParameters();
 
         protected AjaxButton addOkButton() {
             AjaxButton okButton = settings.isUseIndicatorForFormSubmit()
@@ -150,7 +151,7 @@ public abstract class PromptFormPanelAbstract<T extends IModel<?> & HasFormExecu
         }
 
 
-        protected void addCancelButton() {
+        protected AjaxButton addCancelButton() {
             AjaxButton cancelButton = new AjaxButton(ID_CANCEL_BUTTON, new ResourceModel("cancelLabel")) {
                 private static final long serialVersionUID = 1L;
 
@@ -169,9 +170,11 @@ public abstract class PromptFormPanelAbstract<T extends IModel<?> & HasFormExecu
             cancelButton.setDefaultFormProcessing(false);
 
             add(cancelButton);
+
+            return cancelButton;
         }
 
-        protected void configureButtons(final AjaxButton okButton) {
+        protected void configureButtons(final AjaxButton okButton, final AjaxButton cancelButton) {
         }
 
         private void onSubmitOf(


[19/43] isis git commit: ISIS-1603: makes the subclasses of ScalarPanelAbstract a little more consistent with each other

Posted by da...@apache.org.
ISIS-1603: makes the subclasses of ScalarPanelAbstract a little more consistent with each other

specifically, all now have scalarTypeContainer as the outermost


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

Branch: refs/heads/master
Commit: 6a9e95a5f5cba697d3c94441f963689d1f52fc7d
Parents: c1b8f47
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Tue Apr 25 20:22:09 2017 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Apr 27 13:26:39 2017 +0100

----------------------------------------------------------------------
 .../components/scalars/ScalarPanelAbstract.java |  15 +++
 .../scalars/ScalarPanelAbstract2.html           |  84 ------------
 .../scalars/ScalarPanelAbstract2.java           | 130 -------------------
 .../scalars/ScalarPanelTextAbstract.html        |  87 +++++++++++++
 .../scalars/ScalarPanelTextAbstract.java        | 126 ++++++++++++++++++
 .../scalars/ScalarPanelTextFieldAbstract.java   |  14 +-
 .../isisapplib/IsisBlobOrClobPanelAbstract.html |  27 +++-
 .../isisapplib/IsisBlobOrClobPanelAbstract.java |   5 +-
 .../scalars/primitive/BooleanPanel.html         |  35 ++++-
 .../scalars/primitive/BooleanPanel.java         |   4 +-
 .../BooleanPanel_labelRightPosition.html        |  27 +++-
 .../scalars/reference/ReferencePanel.html       |  53 ++++++--
 .../scalars/reference/ReferencePanel.java       |  14 +-
 .../valuechoices/ValueChoicesSelect2Panel.html  |  49 ++++++-
 .../valuechoices/ValueChoicesSelect2Panel.java  |   8 +-
 15 files changed, 416 insertions(+), 262 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/6a9e95a5/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
index 50f5442..db7e5c2 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
@@ -62,6 +62,8 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
 
     private static final long serialVersionUID = 1L;
 
+    protected static final String ID_SCALAR_TYPE_CONTAINER = "scalarTypeContainer";
+
     protected static final String ID_SCALAR_IF_COMPACT = "scalarIfCompact";
     protected static final String ID_SCALAR_IF_REGULAR = "scalarIfRegular";
     protected static final String ID_SCALAR_NAME = "scalarName";
@@ -80,6 +82,8 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
     protected Component scalarIfCompact;
     protected Component scalarIfRegular;
 
+    protected WebMarkupContainer scalarTypeContainer;
+
     public ScalarPanelAbstract(final String id, final ScalarModel scalarModel) {
         super(id, scalarModel);
         this.scalarModel = scalarModel;
@@ -88,6 +92,17 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
 
     // ///////////////////////////////////////////////////////////////////
 
+
+    @Override
+    protected void onInitialize() {
+        super.onInitialize();
+
+        scalarTypeContainer = new WebMarkupContainer(ID_SCALAR_TYPE_CONTAINER);
+        scalarTypeContainer.setOutputMarkupId(true);
+        addOrReplace(scalarTypeContainer);
+
+    }
+
     @Override
     protected void onBeforeRender() {
 

http://git-wip-us.apache.org/repos/asf/isis/blob/6a9e95a5/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract2.html
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract2.html b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract2.html
deleted file mode 100644
index 6238772..0000000
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract2.html
+++ /dev/null
@@ -1,84 +0,0 @@
-<?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>
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:wicket="http://wicket.apache.org"
-      xml:lang="en"
-      lang="en">
-    <body>
-        <wicket:panel>
-            <div wicket:id="scalarTypeContainer"
-                 class="scalarNameAndValueComponentType" >
-
-                <div wicket:id="scalarIfRegular"
-                     class="form-group" >
-
-                    <label wicket:id="scalarName"
-                           class="scalarName control-label"
-                    >[Label text]</label>
-
-                    <span class="scalarValueWrapper">
-                        <div class="scalarPlaceholder">
-                            <span class="scalarValueInput">
-                                <span class="editing">
-                                    <wicket:child/>
-                                    <a wicket:id="editProperty"
-                                       href="#"
-                                       class="edit fa fa-pencil-square-o"></a>
-                                    <a
-                                            href="#"
-                                            name="scalarValueEditInline"
-                                            class="form-control input-sm scalarValueEditInline"
-                                            wicket:id="scalarValueEditInline">
-                                        <span wicket:id="scalarValueEditInlineLabel"></span>
-                                    </a>
-                                </span>
-                            </span>
-
-                            <span wicket:id="associatedActionLinksRight"
-                                  class="associatedActionLinksRight"
-                            >[drop down]</span>
-                        </div>
-                        <span wicket:id="feedback" class="help-block"></span>
-                        <span wicket:id="associatedActionLinksBelow"></span>
-                    </span>
-                    <div class="clearfix"></div>
-
-                </div>
-
-                <div wicket:id="scalarIfRegularInlineEditForm" class="inlineEditForm" >
-                    <div><span>property edit form</span></div>
-                </div>
-
-                <wicket:container wicket:id="scalarIfCompact"></wicket:container>
-            </div>
-
-            <wicket:fragment wicket:id="compactAsInputCheckbox">
-                <input wicket:id="scalarIfCompact"
-                       type="checkbox"
-                       class="form-control" />
-            </wicket:fragment>
-
-            <wicket:fragment wicket:id="compactAsSpan">
-                <span wicket:id="scalarIfCompact"></span>
-            </wicket:fragment>
-        </wicket:panel>
-    </body>
-</html>

http://git-wip-us.apache.org/repos/asf/isis/blob/6a9e95a5/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract2.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract2.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract2.java
deleted file mode 100644
index 7b37a52..0000000
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract2.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- *  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.scalars;
-
-import org.apache.wicket.Component;
-import org.apache.wicket.ajax.AjaxEventBehavior;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.markup.html.WebMarkupContainer;
-import org.apache.wicket.markup.html.panel.Fragment;
-
-import org.apache.isis.applib.annotation.PromptStyle;
-import org.apache.isis.viewer.wicket.model.models.ScalarModel;
-import org.apache.isis.viewer.wicket.ui.ComponentType;
-import org.apache.isis.viewer.wicket.ui.components.property.PropertyEditFormExecutor;
-import org.apache.isis.viewer.wicket.ui.components.property.PropertyEditFormPanel;
-import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
-
-/**
- * Adapter for {@link PanelAbstract panel}s that use a {@link ScalarModel} as
- * their backing model.
- * 
- * <p>
- * Supports the concept of being {@link Rendering#COMPACT} (eg within a table) or
- * {@link Rendering#REGULAR regular} (eg within a form).
- */
-public abstract class ScalarPanelAbstract2 extends ScalarPanelAbstract  {
-
-    private static final long serialVersionUID = 1L;
-
-    protected static final String ID_SCALAR_TYPE_CONTAINER = "scalarTypeContainer";
-
-
-    protected static final String ID_SCALAR_VALUE_EDIT_INLINE = "scalarValueEditInline";
-    protected static final String ID_SCALAR_VALUE_EDIT_INLINE_LABEL = "scalarValueEditInlineLabel";
-
-    protected static final String ID_SCALAR_IF_REGULAR_INLINE_EDIT_FORM = "scalarIfRegularInlineEditForm";
-
-
-    public enum CompactType {
-        INPUT_CHECKBOX,
-        SPAN
-    }
-
-
-    protected WebMarkupContainer scalarTypeContainer;
-    protected WebMarkupContainer scalarIfRegularInlineEditForm;
-    protected WebMarkupContainer editInlineLink;
-
-
-    public ScalarPanelAbstract2(final String id, final ScalarModel scalarModel) {
-        super(id, scalarModel);
-    }
-
-    protected Fragment getCompactFragment(CompactType type) {
-        Fragment compactFragment;
-        switch (type) {
-            case INPUT_CHECKBOX:
-                compactFragment = new Fragment("scalarIfCompact", "compactAsInputCheckbox", ScalarPanelAbstract2.this);
-                break;
-            case SPAN:
-            default:
-                compactFragment = new Fragment("scalarIfCompact", "compactAsSpan", ScalarPanelAbstract2.this);
-                break;
-        }
-        return compactFragment;
-    }
-
-
-
-
-    protected void configureInlineEditCallback() {
-
-        final PromptStyle editStyle = this.scalarModel.getPromptStyle();
-        if(editStyle == PromptStyle.INLINE) {
-
-            if(editInlineLink != null) {
-                editInlineLink.add(new AjaxEventBehavior("click") {
-                    @Override
-                    protected void onEvent(final AjaxRequestTarget target) {
-
-                        scalarModel.toEditMode();
-
-                        // dynamically update the edit form.
-                        final PropertyEditFormExecutor formExecutor =
-                                new PropertyEditFormExecutor(ScalarPanelAbstract2.this, scalarModel);
-                        scalarModel.setFormExecutor(formExecutor);
-                        scalarModel.setInlinePromptContext(
-                                new ScalarModel.InlinePromptContext(scalarIfRegular, scalarIfRegularInlineEditForm));
-
-                        scalarIfRegularInlineEditForm = (PropertyEditFormPanel) getComponentFactoryRegistry().addOrReplaceComponent(
-                                scalarTypeContainer, ID_SCALAR_IF_REGULAR_INLINE_EDIT_FORM, ComponentType.PROPERTY_EDIT_FORM, scalarModel);
-
-
-                        scalarIfRegular.setVisible(false);
-                        scalarIfRegularInlineEditForm.setVisible(true);
-
-                        target.add(scalarTypeContainer);
-                    }
-
-                    @Override
-                    public boolean isEnabled(final Component component) {
-                        return true;
-                    }
-                });
-            }
-        }
-    }
-
-
-
-
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/6a9e95a5/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextAbstract.html
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextAbstract.html b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextAbstract.html
new file mode 100644
index 0000000..9fd6bda
--- /dev/null
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextAbstract.html
@@ -0,0 +1,87 @@
+<?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>
+<html xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:wicket="http://wicket.apache.org"
+      xml:lang="en"
+      lang="en">
+    <body>
+        <wicket:panel>
+            <div class="scalarNameAndValueComponentType"
+                 wicket:id="scalarTypeContainer">
+
+                <div class="form-group"
+                     wicket:id="scalarIfRegular">
+
+                    <label class="scalarName control-label"
+                           wicket:id="scalarName"
+                    >[Label text]</label>
+
+                    <span class="scalarValueWrapper">
+                        <div class="scalarPlaceholder">
+
+                            <span class="scalarValueInput">
+                                <span class="editing">
+
+                                    <a href="#"
+                                       name="scalarValueEditInline"
+                                       class="form-control input-sm scalarValueEditInline"
+                                       wicket:id="scalarValueEditInline">
+                                        <span wicket:id="scalarValueEditInlineLabel"></span>
+                                    </a>
+
+                                    <wicket:child/>
+
+                                    <a href="#"
+                                       class="edit fa fa-pencil-square-o"
+                                       wicket:id="editProperty"></a>
+                                </span>
+                            </span>
+
+                            <span class="associatedActionLinksRight"
+                                  wicket:id="associatedActionLinksRight"
+                            >[drop down]</span>
+                        </div>
+                        <span wicket:id="feedback" class="help-block"></span>
+                        <span wicket:id="associatedActionLinksBelow"></span>
+                    </span>
+                    <div class="clearfix"></div>
+                </div>
+
+                <div class="inlineEditForm"
+                     wicket:id="scalarIfRegularInlineEditForm" >
+                    <div><span>property edit form</span></div>
+                </div>
+
+                <wicket:container wicket:id="scalarIfCompact"></wicket:container>
+            </div>
+
+            <wicket:fragment wicket:id="compactAsInputCheckbox">
+                <input wicket:id="scalarIfCompact"
+                       type="checkbox"
+                       class="form-control" />
+            </wicket:fragment>
+
+            <wicket:fragment wicket:id="compactAsSpan">
+                <span wicket:id="scalarIfCompact"></span>
+            </wicket:fragment>
+        </wicket:panel>
+    </body>
+</html>

http://git-wip-us.apache.org/repos/asf/isis/blob/6a9e95a5/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextAbstract.java
new file mode 100644
index 0000000..b310d49
--- /dev/null
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextAbstract.java
@@ -0,0 +1,126 @@
+/*
+ *  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.scalars;
+
+import org.apache.wicket.Component;
+import org.apache.wicket.ajax.AjaxEventBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.panel.Fragment;
+
+import org.apache.isis.applib.annotation.PromptStyle;
+import org.apache.isis.viewer.wicket.model.models.ScalarModel;
+import org.apache.isis.viewer.wicket.ui.ComponentType;
+import org.apache.isis.viewer.wicket.ui.components.property.PropertyEditFormExecutor;
+import org.apache.isis.viewer.wicket.ui.components.property.PropertyEditFormPanel;
+import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
+
+/**
+ * Adapter for {@link PanelAbstract panel}s that use a {@link ScalarModel} as
+ * their backing model.
+ * 
+ * <p>
+ * Supports the concept of being {@link Rendering#COMPACT} (eg within a table) or
+ * {@link Rendering#REGULAR regular} (eg within a form).
+ */
+public abstract class ScalarPanelTextAbstract extends ScalarPanelAbstract  {
+
+    private static final long serialVersionUID = 1L;
+
+    protected static final String ID_SCALAR_VALUE_EDIT_INLINE = "scalarValueEditInline";
+    protected static final String ID_SCALAR_VALUE_EDIT_INLINE_LABEL = "scalarValueEditInlineLabel";
+
+    protected static final String ID_SCALAR_IF_REGULAR_INLINE_EDIT_FORM = "scalarIfRegularInlineEditForm";
+
+
+    public enum CompactType {
+        INPUT_CHECKBOX,
+        SPAN
+    }
+
+
+    protected WebMarkupContainer scalarIfRegularInlineEditForm;
+    protected WebMarkupContainer editInlineLink;
+
+
+    public ScalarPanelTextAbstract(final String id, final ScalarModel scalarModel) {
+        super(id, scalarModel);
+    }
+
+    protected Fragment getCompactFragment(CompactType type) {
+        Fragment compactFragment;
+        switch (type) {
+            case INPUT_CHECKBOX:
+                compactFragment = new Fragment("scalarIfCompact", "compactAsInputCheckbox", ScalarPanelTextAbstract.this);
+                break;
+            case SPAN:
+            default:
+                compactFragment = new Fragment("scalarIfCompact", "compactAsSpan", ScalarPanelTextAbstract.this);
+                break;
+        }
+        return compactFragment;
+    }
+
+
+
+
+    protected void configureInlineEditCallback() {
+
+        final PromptStyle editStyle = this.scalarModel.getPromptStyle();
+        if(editStyle == PromptStyle.INLINE) {
+
+            if(editInlineLink != null) {
+                editInlineLink.add(new AjaxEventBehavior("click") {
+                    @Override
+                    protected void onEvent(final AjaxRequestTarget target) {
+
+                        scalarModel.toEditMode();
+
+                        // dynamically update the edit form.
+                        final PropertyEditFormExecutor formExecutor =
+                                new PropertyEditFormExecutor(ScalarPanelTextAbstract.this, scalarModel);
+                        scalarModel.setFormExecutor(formExecutor);
+                        scalarModel.setInlinePromptContext(
+                                new ScalarModel.InlinePromptContext(scalarIfRegular, scalarIfRegularInlineEditForm));
+
+                        scalarIfRegularInlineEditForm = (PropertyEditFormPanel) getComponentFactoryRegistry().addOrReplaceComponent(
+                                scalarTypeContainer, ID_SCALAR_IF_REGULAR_INLINE_EDIT_FORM, ComponentType.PROPERTY_EDIT_FORM, scalarModel);
+
+
+                        scalarIfRegular.setVisible(false);
+                        scalarIfRegularInlineEditForm.setVisible(true);
+
+                        target.add(scalarTypeContainer);
+                    }
+
+                    @Override
+                    public boolean isEnabled(final Component component) {
+                        return true;
+                    }
+                });
+            }
+        }
+    }
+
+
+
+
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/6a9e95a5/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
index de9bfdd..eb427c7 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
@@ -57,7 +57,7 @@ import org.apache.isis.viewer.wicket.ui.util.CssClassAppender;
  * Adapter for {@link ScalarPanelAbstract scalar panel}s that are implemented
  * using a simple {@link TextField}.
  */
-public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> extends ScalarPanelAbstract2 {
+public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> extends ScalarPanelTextAbstract {
 
     private static final long serialVersionUID = 1L;
 
@@ -82,17 +82,19 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
         this.cls = cls;
     }
 
+    // ///////////////////////////////////////////////////////////////////
+
     @Override
     protected void onInitialize() {
         super.onInitialize();
 
-        scalarTypeContainer = new WebMarkupContainer(ID_SCALAR_TYPE_CONTAINER);
-        scalarTypeContainer.setOutputMarkupId(true);
         scalarTypeContainer.add(new CssClassAppender(getScalarPanelType()));
-        addOrReplace(scalarTypeContainer);
-
     }
 
+    protected abstract IModel<String> getScalarPanelType();
+
+    // ///////////////////////////////////////////////////////////////////
+
 
     AbstractTextComponent<T> getTextField() {
         return textField;
@@ -201,8 +203,6 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
         return scalarIfRegularFormGroup;
     }
 
-    protected abstract IModel<String> getScalarPanelType();
-
     private void addReplaceDisabledTagWithReadonlyTagBehaviourIfRequired(final Component component) {
         if(!getSettings().isReplaceDisabledTagWithReadonlyTag()) {
             return;

http://git-wip-us.apache.org/repos/asf/isis/blob/6a9e95a5/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.html
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.html b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.html
index cc19d87..48ae678 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.html
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.html
@@ -20,13 +20,25 @@
 <html xmlns:wicket="http://wicket.apache.org">
     <body>
         <wicket:panel>
-            <div class="isisBlobPanel scalarNameAndValueComponentType">
-                <div class="form-group" wicket:id="scalarIfRegular">
-                    <label wicket:id="scalarName" class="scalarName control-label">[Label text]</label>
+
+            <div class="scalarNameAndValueComponentType isisBlobPanel"
+                 wicket:id="scalarTypeContainer"
+            >
+
+                <div class="form-group"
+                     wicket:id="scalarIfRegular">
+
+                    <label class="scalarName control-label"
+                           wicket:id="scalarName"
+                    >[Label text]</label>
+
                     <span class="scalarValueWrapper">
+
                         <div class="scalarPlaceholder">
+
                             <span class="scalarValueInput">
                                 <span class="editing">
+
                                     <img class="scalarImage text-center" width="200px" wicket:id="scalarImage"/>
                                     <span class="scalarValue text-right">
 
@@ -38,10 +50,15 @@
                                         <a class="download btn btn-sm btn-primary" wicket:id="scalarIfRegularDownload"><span class="downloadTitle">Download</span></a>
                                         <span class="fileName" wicket:id="fileName">[filename]</span><span>&nbsp;</span>
                                     </span>
-                                    <a wicket:id="editProperty" href="#" class="edit fa fa-pencil-square-o"/>
+
+                                    <a href="#"
+                                       class="edit fa fa-pencil-square-o"
+                                       wicket:id="editProperty" ></a>
                                 </span>
                             </span>
-                            <span wicket:id="associatedActionLinksRight"  class="associatedActionLinksRight">[drop down]</span>
+                            <span class="associatedActionLinksRight"
+                                  wicket:id="associatedActionLinksRight"
+                            >[drop down]</span>
                         </div>
                         <span wicket:id="feedback" class="help-block"></span>
                         <span wicket:id="associatedActionLinksBelow"></span>

http://git-wip-us.apache.org/repos/asf/isis/blob/6a9e95a5/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java
index 0c69b8f..2ec3fb8 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java
@@ -114,7 +114,7 @@ public abstract class IsisBlobOrClobPanelAbstract<T extends NamedWithMimeType> e
         updateFileNameLabel(ID_FILE_NAME, scalarIfRegularFormGroup);
         updateDownloadLink(ID_SCALAR_IF_REGULAR_DOWNLOAD, scalarIfRegularFormGroup);
         
-        addOrReplace(scalarIfRegularFormGroup);
+        scalarTypeContainer.addOrReplace(scalarIfRegularFormGroup);
         addFeedbackOnlyTo(scalarIfRegularFormGroup, fileUploadField);
         addEditPropertyTo(scalarIfRegularFormGroup);
 
@@ -178,7 +178,8 @@ public abstract class IsisBlobOrClobPanelAbstract<T extends NamedWithMimeType> e
         if(downloadLink != null) {
             updateFileNameLabel("fileNameIfCompact", downloadLink);
         }
-        addOrReplace(scalarIfCompact);
+
+        scalarTypeContainer.addOrReplace(scalarIfCompact);
         return scalarIfCompact;
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/6a9e95a5/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.html
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.html b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.html
index 2b4af5f..f2f3586 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.html
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.html
@@ -24,25 +24,46 @@
       lang="en">
     <body>
         <wicket:panel>
-            <div class="booleanPanel scalarNameAndValueComponentType">
-                <div class="form-group" wicket:id="scalarIfRegular">
-                    <label wicket:id="scalarName" class="scalarName control-label">[Label text]</label>
+            <div class="scalarNameAndValueComponentType booleanPanel"
+                 wicket:id="scalarTypeContainer"
+            >
+                <div class="form-group"
+                     wicket:id="scalarIfRegular">
+
+                    <label class="scalarName control-label"
+                           wicket:id="scalarName"
+                    >[Label text]</label>
+
                     <span class="scalarValueWrapper">
+
                         <div class="scalarPlaceholder">
+
                             <span class="scalarValueInput">
                                 <span class="editing">
-                                    <input type="checkbox" name="scalarValue" class="scalarValue" wicket:id="scalarValue" />
-                                        <a wicket:id="editProperty" href="#" class="edit fa fa-pencil-square-o"/>
+
+                                    <input type="checkbox"
+                                           name="scalarValue"
+                                           class="scalarValue"
+                                           wicket:id="scalarValue" />
+
+                                    <a href="#"
+                                       class="edit fa fa-pencil-square-o"
+                                       wicket:id="editProperty" ></a>
                                 </span>
                             </span>
-                            <span wicket:id="associatedActionLinksRight" class="associatedActionLinksRight"></span>
+                            <span class="associatedActionLinksRight"
+                                  wicket:id="associatedActionLinksRight"
+                            >[drop down]</span>
                         </div>
                         <span wicket:id="feedback" class="help-block"></span>
                         <span wicket:id="associatedActionLinksBelow"></span>
                     </span>
                     <div class="clearfix"/>
                 </div>
-                <input type="checkbox" wicket:id="scalarIfCompact" />
+
+                <input type="checkbox"
+                       wicket:id="scalarIfCompact" />
+
             </div>
             <div class="clearfix"/>
         </wicket:panel>

http://git-wip-us.apache.org/repos/asf/isis/blob/6a9e95a5/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java
index 78e2a21..c461786 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java
@@ -94,7 +94,7 @@ public class BooleanPanel extends ScalarPanelAbstract {
 
         addPositioningCssTo(scalarIfRegularFormGroup, entityActions);
 
-        addOrReplace(scalarIfRegularFormGroup);
+        scalarTypeContainer.addOrReplace(scalarIfRegularFormGroup);
         addFeedbackOnlyTo(scalarIfRegularFormGroup, checkBox);
         addEditPropertyTo(scalarIfRegularFormGroup);
 
@@ -113,7 +113,7 @@ public class BooleanPanel extends ScalarPanelAbstract {
     @Override
     protected Component addComponentForCompact() {
         final CheckBoxX component = createCheckBox(ID_SCALAR_IF_COMPACT);
-        addOrReplace(component);
+        scalarTypeContainer.addOrReplace(component);
         return component;
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/6a9e95a5/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel_labelRightPosition.html
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel_labelRightPosition.html b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel_labelRightPosition.html
index c64ff87..fcc06b1 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel_labelRightPosition.html
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel_labelRightPosition.html
@@ -24,16 +24,33 @@
       lang="en">
     <body>
         <wicket:panel>
-            <div class="booleanPanel scalarNameAndValueComponentType">
-                <div class="form-group" wicket:id="scalarIfRegular">
+            <div class="scalarNameAndValueComponentType booleanPanel"
+                 wicket:id="scalarTypeContainer"
+            >
+
+                <div class="form-group"
+                     wicket:id="scalarIfRegular">
+
                     <div class="scalarValueWrapper">
-                        <input type="checkbox" name="scalarValue" class="scalarValue" wicket:id="scalarValue" /> <label wicket:id="scalarName" class="scalarName control-label">[Label text]</label>
+
+                        <input type="checkbox"
+                               name="scalarValue"
+                               class="scalarValue"
+                               wicket:id="scalarValue" />
+
+                        <label class="scalarName control-label"
+                               wicket:id="scalarName"
+                        >[Label text]</label>
+
                         <span wicket:id="feedback" class="help-block"></span>
                         <span wicket:id="associatedActionLinksBelow"></span>
                     </div>
-                    <span wicket:id="associatedActionLinksRight"></span>
+                    <span wicket:id="associatedActionLinksRight"
+                    >[drop down]</span>
                 </div>
-                <input type="checkbox" wicket:id="scalarIfCompact" />
+
+                <input type="checkbox"
+                       wicket:id="scalarIfCompact"/>
             </div>
         </wicket:panel>
     </body>

http://git-wip-us.apache.org/repos/asf/isis/blob/6a9e95a5/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.html
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.html b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.html
index c67d982..d6ffdad 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.html
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.html
@@ -24,33 +24,70 @@
       lang="en">
     <body>
         <wicket:panel>
-            <div class="referencePanel scalarNameAndValueComponentType">
-                <div class="form-group" wicket:id="scalarIfRegular">
-                    <label wicket:id="scalarName" class="scalarName control-label">[Label text]</label>
+            <div class="scalarNameAndValueComponentType referencePanel"
+                 wicket:id="scalarTypeContainer"
+            >
+
+                <div class="form-group"
+                     wicket:id="scalarIfRegular">
+
+                    <label class="scalarName control-label"
+                            wicket:id="scalarName"
+                    >[Label text]</label>
+
                     <span class="scalarValueWrapper">
+                        
                         <div class="scalarPlaceholder entityLinkSelect2Panel entityLinkComponentType">
+
                             <span class="entityLink wrapper">
+
                                 <span class="scalarValueInput">
                                     <span class="editing">
+
+                                        <wicket:remove>
+                                        <a href="#"
+                                           name="scalarValueEditInline"
+                                           class="form-control input-sm scalarValueEditInline"
+                                           xwicket:id="scalarValueEditInline">
+                                            <span xwicket:id="scalarValueEditInlineLabel"></span>
+                                        </a>
+                                        </wicket:remove>
+
                                         <span class="autoCompletePlaceholder">
                                             <span wicket:id="entityLink">link or drop down</span>
                                             <span wicket:id="entityIconAndTitle">[icon and title]</span>
                                         </span>
                                         <span wicket:id="entityTitleIfNull">(none)</span>
-                                        <a wicket:id="editProperty" href="#" class="edit fa fa-pencil-square-o"/>
+
+                                        <a href="#"
+                                           class="edit fa fa-pencil-square-o"
+                                           wicket:id="editProperty"></a>
                                     </span>
                                 </span>
                             </span>
-                            <span wicket:id="associatedActionLinksRight" class="associatedActionLinksRight"></span>
+                            <span class="associatedActionLinksRight"
+                                  wicket:id="associatedActionLinksRight"
+                            >[drop down]</span>
                         </div>
                         <span wicket:id="feedback" class="help-block"></span>
                         <span wicket:id="associatedActionLinksBelow"></span>
                     </span>
-                    <div class="clearfix"/>
+                    <div class="clearfix"></div>
                 </div>
-                <div wicket:id="scalarIfCompact" class="scalarIfCompact">
+
+                <wicket:remove>
+                <div class="inlineEditForm"
+                     xwicket:id="scalarIfRegularInlineEditForm" >
+                    <div><span>property edit form</span></div>
+                </div>
+                </wicket:remove>
+
+                <div class="scalarIfCompact"
+                     wicket:id="scalarIfCompact" >
                     <div class="scalarValue">
-                        <div class="entityLink" wicket:id="entityLink">[property or parameter value]</div>
+                        <div class="entityLink"
+                             wicket:id="entityLink"
+                        >[property or parameter value]</div>
                     </div>
                 </div>
             </div>

http://git-wip-us.apache.org/repos/asf/isis/blob/6a9e95a5/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
index 435312b..d600e78 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
@@ -77,6 +77,11 @@ public class ReferencePanel extends ScalarPanelAbstract implements PanelWithChoi
     private static final String ID_AUTO_COMPLETE = "autoComplete";
     private static final String ID_ENTITY_ICON_TITLE = "entityIconAndTitle";
 
+    private static final String ID_SCALAR_VALUE_EDIT_INLINE = "scalarValueEditInline";
+    private static final String ID_SCALAR_VALUE_EDIT_INLINE_LABEL = "scalarValueEditInlineLabel";
+
+    private static final String ID_SCALAR_IF_REGULAR_INLINE_EDIT_FORM = "scalarIfRegularInlineEditForm";
+
     /**
      * Determines the behaviour of dependent choices for the dependent; either to autoselect the first available choice, or to select none.
      */
@@ -89,6 +94,9 @@ public class ReferencePanel extends ScalarPanelAbstract implements PanelWithChoi
 
     private EntityLinkSimplePanel entitySimpleLink;
 
+    protected WebMarkupContainer scalarIfRegularInlineEditForm;
+    protected WebMarkupContainer editInlineLink;
+
     public ReferencePanel(final String id, final ScalarModel scalarModel) {
         super(id, scalarModel);
     }
@@ -112,8 +120,8 @@ public class ReferencePanel extends ScalarPanelAbstract implements PanelWithChoi
         
         final WebMarkupContainer labelIfCompact = new WebMarkupContainer(ID_SCALAR_IF_COMPACT);
         labelIfCompact.add(entitySimpleLink);
-        
-        addOrReplace(labelIfCompact);
+
+        scalarTypeContainer.addOrReplace(labelIfCompact);
 
         return labelIfCompact;
     }
@@ -159,7 +167,7 @@ public class ReferencePanel extends ScalarPanelAbstract implements PanelWithChoi
 
         addPositioningCssTo(scalarIfRegularFormGroup, entityActions);
 
-        addOrReplace(scalarIfRegularFormGroup);
+        scalarTypeContainer.addOrReplace(scalarIfRegularFormGroup);
         addFeedbackOnlyTo(scalarIfRegularFormGroup, select2.component()); // this is a placeholder; when select2.component() is available, we use that instead
         addEditPropertyTo(scalarIfRegularFormGroup);
 

http://git-wip-us.apache.org/repos/asf/isis/blob/6a9e95a5/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.html
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.html b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.html
index 26b41c7..c102463 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.html
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.html
@@ -24,26 +24,61 @@
       lang="en">
     <body>
         <wicket:panel>
-            <div class="valueChoicesSelect2Panel scalarNameAndValueComponentType">
-                <div class="form-group" wicket:id="scalarIfRegular">
-                    <label wicket:id="scalarName" class="scalarName control-label">[Label text]</label>
+            <div class="scalarNameAndValueComponentType valueChoicesSelect2Panel "
+                 wicket:id="scalarTypeContainer"
+            >
+                <div class="form-group"
+                     wicket:id="scalarIfRegular">
+
+                    <label class="scalarName control-label"
+                           wicket:id="scalarName"
+                    >[Label text]</label>
 
                     <span class="scalarValueWrapper">
                         <div class="scalarPlaceholder">
+
                             <span class="scalarValueInput">
                                 <span class="editing">
-                                    <select wicket:id="scalarValue" class="choices input-sm select2-remote" style="width: 99.8%;"></select>
-                                    <a wicket:id="editProperty" href="#" class="edit fa fa-pencil-square-o"/>
+
+                                    <wicket:remove>
+                                    <a href="#"
+                                       name="scalarValueEditInline"
+                                       class="form-control input-sm scalarValueEditInline"
+                                       xwicket:id="scalarValueEditInline">
+                                        <span xwicket:id="scalarValueEditInlineLabel"></span>
+                                    </a>
+                                    </wicket:remove>
+
+                                    <select class="choices input-sm select2-remote"
+                                            style="width: 99.8%;"
+                                            wicket:id="scalarValue"
+                                    ></select>
+                                    <a href="#"
+                                       class="edit fa fa-pencil-square-o"
+                                       wicket:id="editProperty"></a>
                                 </span>
                             </span>
-                            <span wicket:id="associatedActionLinksRight" class="associatedActionLinksRight"></span>
+                            <span class="associatedActionLinksRight"
+                                  wicket:id="associatedActionLinksRight"
+                            >[drop down]</span>
                         </div>
                         <span wicket:id="feedback" class="help-block"></span>
                         <span wicket:id="associatedActionLinksBelow"></span>
                     </span>
                     <div class="clearfix"></div>
                 </div>
-                <span wicket:id="scalarIfCompact"></span>
+
+
+                <wicket:remove>
+                    <div class="inlineEditForm"
+                         xwicket:id="scalarIfRegularInlineEditForm" >
+                        <div><span>property edit form</span></div>
+                    </div>
+                </wicket:remove>
+
+
+                <span class="scalarIfCompact"
+                      wicket:id="scalarIfCompact"></span>
             </div>
         </wicket:panel>
     </body>

http://git-wip-us.apache.org/repos/asf/isis/blob/6a9e95a5/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
index 4c1c2c6..429df19 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
@@ -27,6 +27,7 @@ import org.apache.wicket.Component;
 import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.behavior.Behavior;
+import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
@@ -56,6 +57,9 @@ public class ValueChoicesSelect2Panel extends ScalarPanelAbstract implements Sca
     private Select2 select2;
     private ObjectAdapterMemento pending;
 
+    protected WebMarkupContainer scalarIfRegularInlineEditForm;
+    protected WebMarkupContainer editInlineLink;
+
     public ValueChoicesSelect2Panel(final String id, final ScalarModel scalarModel) {
         super(id, scalarModel);
         pending = scalarModel.getObjectAdapterMemento();
@@ -87,7 +91,7 @@ public class ValueChoicesSelect2Panel extends ScalarPanelAbstract implements Sca
             scalarIfRegularFormGroup.add(new CssClassAppender("mandatory"));
         }
         
-        addOrReplace(scalarIfRegularFormGroup);
+        scalarTypeContainer.addOrReplace(scalarIfRegularFormGroup);
 
         final Label scalarName = new Label(ID_SCALAR_NAME, getRendering().getLabelCaption(select2.component()));
         if(getModel().isRequired()) {
@@ -153,7 +157,7 @@ public class ValueChoicesSelect2Panel extends ScalarPanelAbstract implements Sca
     @Override
     protected Component addComponentForCompact() {
         final Label labelIfCompact = new Label(ID_SCALAR_IF_COMPACT, getModel().getObjectAsString());
-        addOrReplace(labelIfCompact);
+        scalarTypeContainer.addOrReplace(labelIfCompact);
         return labelIfCompact;
     }
 


[20/43] isis git commit: ISIS-1603: further simplifications of subclasses of ScalarPanelAbstract

Posted by da...@apache.org.
ISIS-1603: further simplifications of subclasses of ScalarPanelAbstract

making stuff private in superclass, introduces new optional hook to create the inline prompt form.


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

Branch: refs/heads/master
Commit: 5f29ed3be069b4bb37d61524615877052ce3e52b
Parents: a8f018e
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Tue Apr 25 21:10:02 2017 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Apr 27 13:26:39 2017 +0100

----------------------------------------------------------------------
 .../components/scalars/ScalarPanelAbstract.java | 58 +++++++++++++++-----
 .../scalars/ScalarPanelTextAbstract.java        | 14 ++---
 .../scalars/ScalarPanelTextFieldAbstract.java   | 26 ++++-----
 .../ScalarPanelTextFieldDatePickerAbstract.java |  1 -
 .../scalars/ScalarPanelTextFieldNumeric.java    |  3 +-
 .../valuechoices/ValueChoicesSelect2Panel.java  |  4 --
 6 files changed, 65 insertions(+), 41 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/5f29ed3b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
index b7f3cc3..f2fff57 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
@@ -49,6 +49,7 @@ import org.apache.isis.viewer.wicket.model.models.EntityModel;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.ComponentType;
 import org.apache.isis.viewer.wicket.ui.components.actionmenu.entityactions.AdditionalLinksPanel;
+import org.apache.isis.viewer.wicket.ui.components.property.PropertyEditFormPanel;
 import org.apache.isis.viewer.wicket.ui.components.property.PropertyEditPanel;
 import org.apache.isis.viewer.wicket.ui.components.property.PropertyEditPromptHeaderPanel;
 import org.apache.isis.viewer.wicket.ui.components.scalars.TextFieldValueModel.ScalarModelProvider;
@@ -81,7 +82,7 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
     protected static final String ID_SCALAR_VALUE_EDIT_INLINE_LABEL = "scalarValueEditInlineLabel";
 
     /**
-     * as per {@link #scalarIfRegularInlineEditForm}.
+     * as per {@link #scalarIfRegularInlinePromptForm}.
      */
     protected static final String ID_SCALAR_IF_REGULAR_INLINE_EDIT_FORM = "scalarIfRegularInlineEditForm";
 
@@ -96,15 +97,16 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
 
     protected final ScalarModel scalarModel;
 
-    protected Component scalarIfCompact;
-    protected Component scalarIfRegular;
+    private Component scalarIfCompact;
+    private Component scalarIfRegular;
 
-    protected WebMarkupContainer scalarTypeContainer;
+    private WebMarkupContainer scalarTypeContainer;
 
     /**
      * Used by most subclasses ({@link ScalarPanelTextAbstract}, {@link ReferencePanel}, {@link ValueChoicesSelect2Panel}) but not all ({@link IsisBlobOrClobPanelAbstract}, {@link BooleanPanel})
      */
-    protected WebMarkupContainer scalarIfRegularInlineEditForm;
+    protected WebMarkupContainer scalarIfRegularInlinePromptForm;
+
     protected WebMarkupContainer editInlineLink;
 
     public ScalarPanelAbstract(final String id, final ScalarModel scalarModel) {
@@ -174,12 +176,14 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
      */
     private void buildGui() {
 
-        // REVIEW: this is nasty, both write to the same entityLink field
-        // even though only one is used
-        scalarIfCompact = createComponentForCompact();
-        scalarIfRegular = createComponentForRegular();
+        this.scalarIfCompact = createComponentForCompact();
+        this.scalarIfRegular = createComponentForRegular();
+        this.scalarIfRegularInlinePromptForm = createFormForInlinePromptIfRequired();
 
         scalarTypeContainer.addOrReplace(scalarIfCompact, scalarIfRegular);
+        if(scalarIfRegularInlinePromptForm != null) {
+            scalarTypeContainer.addOrReplace(scalarIfRegularInlinePromptForm);
+        }
 
         getRendering().buildGui(this);
         addCssForMetaModel();
@@ -304,7 +308,7 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
 
             @Override
             public void buildGui(final ScalarPanelAbstract panel) {
-                panel.getLabelForCompact().setVisible(false);
+                panel.scalarIfCompact.setVisible(false);
             }
 
             @Override
@@ -334,19 +338,42 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
     /**
      * Mandatory hook method to build the component to render the model when in
      * {@link Rendering#REGULAR regular} format.
+     *
+     * <p>
+     *     Is added to {@link #scalarTypeContainer}.
+     * </p>
      */
     protected abstract MarkupContainer createComponentForRegular();
 
+    /**
+     * Mandatory hook method to build the component to render the model when in
+     * {@link Rendering#COMPACT compact} format.
+     *
+     * <p>
+     *     Is added to {@link #scalarTypeContainer}.
+     * </p>
+     */
     protected abstract Component createComponentForCompact();
 
-    protected Component getLabelForCompact() {
-        return scalarIfCompact;
+    /**
+     * Optional hook method.
+     *
+     * <p>
+     *     If non-null, is added to {@link #scalarTypeContainer}.
+     * </p>
+     */
+    protected WebMarkupContainer createFormForInlinePromptIfRequired() {
+        return null;
     }
 
-    public Component getComponentForRegular() {
-        return scalarIfRegular;
+    protected void switchFormForInlinePrompt() {
+        scalarIfRegularInlinePromptForm = (PropertyEditFormPanel) getComponentFactoryRegistry().addOrReplaceComponent(
+                scalarTypeContainer, ID_SCALAR_IF_REGULAR_INLINE_EDIT_FORM, ComponentType.PROPERTY_EDIT_FORM, scalarModel);
     }
 
+    protected Component getComponentForRegular() {
+        return scalarIfRegular;
+    }
 
     // ///////////////////////////////////////////////////////////////////
 
@@ -447,6 +474,9 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
 
     // ///////////////////////////////////////////////////////////////////
 
+
+    // ///////////////////////////////////////////////////////////////////
+
     /**
      * Repaints this panel of just some of its children
      *

http://git-wip-us.apache.org/repos/asf/isis/blob/5f29ed3b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextAbstract.java
index f115c1e..9245a28 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextAbstract.java
@@ -89,16 +89,16 @@ public abstract class ScalarPanelTextAbstract extends ScalarPanelAbstract  {
                                 new PropertyEditFormExecutor(ScalarPanelTextAbstract.this, scalarModel);
                         scalarModel.setFormExecutor(formExecutor);
                         scalarModel.setInlinePromptContext(
-                                new ScalarModel.InlinePromptContext(scalarIfRegular, scalarIfRegularInlineEditForm));
+                                new ScalarModel.InlinePromptContext(
+                                        getComponentForRegular(),
+                                        scalarIfRegularInlinePromptForm));
 
-                        scalarIfRegularInlineEditForm = (PropertyEditFormPanel) getComponentFactoryRegistry().addOrReplaceComponent(
-                                scalarTypeContainer, ID_SCALAR_IF_REGULAR_INLINE_EDIT_FORM, ComponentType.PROPERTY_EDIT_FORM, scalarModel);
+                        switchFormForInlinePrompt();
 
+                        getComponentForRegular().setVisible(false);
+                        scalarIfRegularInlinePromptForm.setVisible(true);
 
-                        scalarIfRegular.setVisible(false);
-                        scalarIfRegularInlineEditForm.setVisible(true);
-
-                        target.add(scalarTypeContainer);
+                        target.add(ScalarPanelTextAbstract.this);
                     }
 
                     @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/5f29ed3b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
index 7735e0e..adde04e 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
@@ -159,18 +159,6 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
 
 
 
-        //
-        // inline edit form
-        // (placeholder initially, create dynamically when needed - otherwise infinite loop because form references regular)
-        //
-
-        scalarIfRegularInlineEditForm = new WebMarkupContainer(ID_SCALAR_IF_REGULAR_INLINE_EDIT_FORM);
-        scalarIfRegularInlineEditForm.setOutputMarkupId(true);
-        scalarTypeContainer.add(scalarIfRegularInlineEditForm);
-
-
-
-
 
         //
         // configure dialog edit vs inline edit
@@ -184,11 +172,23 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
         } else {
             editInlineLink.setVisibilityAllowed(false);
         }
-        scalarIfRegularInlineEditForm.setVisible(false);
 
         return scalarIfRegularFormGroup;
     }
 
+    @Override
+    protected WebMarkupContainer createFormForInlinePromptIfRequired() {
+
+        // (placeholder initially, create dynamically when needed - otherwise infinite loop because form references regular)
+
+        WebMarkupContainer scalarIfRegularInlinePromptForm = new WebMarkupContainer(ID_SCALAR_IF_REGULAR_INLINE_EDIT_FORM);
+        scalarIfRegularInlinePromptForm.setOutputMarkupId(true);
+
+        scalarIfRegularInlinePromptForm.setVisible(false);
+
+        return scalarIfRegularInlinePromptForm;
+    }
+
     private void addReplaceDisabledTagWithReadonlyTagBehaviourIfRequired(final Component component) {
         if(!getSettings().isReplaceDisabledTagWithReadonlyTag()) {
             return;

http://git-wip-us.apache.org/repos/asf/isis/blob/5f29ed3b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldDatePickerAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldDatePickerAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldDatePickerAbstract.java
index 06c8489..404f872 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldDatePickerAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldDatePickerAbstract.java
@@ -96,7 +96,6 @@ public abstract class ScalarPanelTextFieldDatePickerAbstract<T extends Serializa
 
         compactFragment.add(label);
 
-        scalarTypeContainer.addOrReplace(compactFragment);
         return label;
     }
     

http://git-wip-us.apache.org/repos/asf/isis/blob/5f29ed3b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldNumeric.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldNumeric.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldNumeric.java
index 17e91bf..d9c35b6 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldNumeric.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldNumeric.java
@@ -24,9 +24,9 @@ import java.io.Serializable;
 import org.apache.wicket.Component;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.panel.Fragment;
+import org.apache.wicket.util.convert.IConverter;
 
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
-import org.apache.wicket.util.convert.IConverter;
 
 /**
  * Panel for rendering numeric scalars.
@@ -60,7 +60,6 @@ public abstract class ScalarPanelTextFieldNumeric<T extends Serializable> extend
         label.setEnabled(false);
 
         compactFragment.add(label);
-        scalarTypeContainer.addOrReplace(compactFragment);
         return label;
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/5f29ed3b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
index d8c559c..c00d172 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
@@ -27,7 +27,6 @@ import org.apache.wicket.Component;
 import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.behavior.Behavior;
-import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
@@ -57,9 +56,6 @@ public class ValueChoicesSelect2Panel extends ScalarPanelAbstract implements Sca
     private Select2 select2;
     private ObjectAdapterMemento pending;
 
-    protected WebMarkupContainer scalarIfRegularInlineEditForm;
-    protected WebMarkupContainer editInlineLink;
-
     public ValueChoicesSelect2Panel(final String id, final ScalarModel scalarModel) {
         super(id, scalarModel);
         pending = scalarModel.getObjectAdapterMemento();


[17/43] isis git commit: ISIS-1603: CSS fix for inline prompt, ensure ESC triggers cancel second time around

Posted by da...@apache.org.
ISIS-1603: CSS fix for inline prompt, ensure ESC triggers cancel second time around


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

Branch: refs/heads/master
Commit: 74e0a3680b701724717c7fa0068968e689f8644a
Parents: c8673f2
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Mon Apr 24 22:45:17 2017 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Apr 27 13:26:39 2017 +0100

----------------------------------------------------------------------
 .../wicket/ui/components/property/PropertyEditFormPanel.java    | 5 +++--
 .../apache/isis/viewer/wicket/ui/pages/bootstrap-overrides.css  | 4 ++++
 2 files changed, 7 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/74e0a368/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditFormPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditFormPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditFormPanel.java
index 9623490..ca2e28e 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditFormPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditFormPanel.java
@@ -115,6 +115,8 @@ public class PropertyEditFormPanel extends PromptFormPanelAbstract<ScalarModel>
             if(promptStyle == PromptStyle.INLINE) {
 
                 getScalarModel().toViewMode();
+                getScalarModel().clearPending();
+                getScalarModel().reset();
 
                 // replace
                 final String id = propertyEditFormPanel.getId();
@@ -156,7 +158,7 @@ public class PropertyEditFormPanel extends PromptFormPanelAbstract<ScalarModel>
 
                         final String javascript = PRE_JS + getCallbackScript() + POST_JS;
                         response.render(
-                                JavaScriptContentHeaderItem.forScript(javascript, component.getPath(), null));
+                                JavaScriptContentHeaderItem.forScript(javascript, null, null));
                     }
 
                     @Override
@@ -164,7 +166,6 @@ public class PropertyEditFormPanel extends PromptFormPanelAbstract<ScalarModel>
                         onCancel(target);
                     }
 
-
                 });
             }
         }

http://git-wip-us.apache.org/repos/asf/isis/blob/74e0a368/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap-overrides.css
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap-overrides.css b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap-overrides.css
index a4c1881..3e0544c 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap-overrides.css
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap-overrides.css
@@ -877,3 +877,7 @@ tr.headers th form input {
     margin-bottom: 20px
 }
 
+.scalarNameAndValueComponentType .inlineEditForm .form-group {
+    padding-left: 5px;
+    padding-right: 15px;
+}


[30/43] isis git commit: ISIS-1603: simplifies the ScalarPanelAbstract hierarchy, removing responsibilities from ScalarPanelTextAbstract (both up and down)

Posted by da...@apache.org.
ISIS-1603: simplifies the ScalarPanelAbstract hierarchy, removing responsibilities from ScalarPanelTextAbstract (both up and down)


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

Branch: refs/heads/master
Commit: 8484d53b0748f81be4c77dea55cfbda19a04cefc
Parents: 5f29ed3
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Tue Apr 25 23:32:36 2017 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Apr 27 13:26:40 2017 +0100

----------------------------------------------------------------------
 .../components/scalars/ScalarPanelAbstract.java | 45 +++++++++++++
 .../scalars/ScalarPanelTextAbstract.java        | 70 --------------------
 .../scalars/ScalarPanelTextFieldAbstract.java   | 22 +++++-
 3 files changed, 66 insertions(+), 71 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/8484d53b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
index f2fff57..a03b917 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
@@ -49,6 +49,7 @@ import org.apache.isis.viewer.wicket.model.models.EntityModel;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.ComponentType;
 import org.apache.isis.viewer.wicket.ui.components.actionmenu.entityactions.AdditionalLinksPanel;
+import org.apache.isis.viewer.wicket.ui.components.property.PropertyEditFormExecutor;
 import org.apache.isis.viewer.wicket.ui.components.property.PropertyEditFormPanel;
 import org.apache.isis.viewer.wicket.ui.components.property.PropertyEditPanel;
 import org.apache.isis.viewer.wicket.ui.components.property.PropertyEditPromptHeaderPanel;
@@ -271,6 +272,50 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
     // ///////////////////////////////////////////////////////////////////
 
     /**
+     * For convenience of subclasses that support inline prompts ({@link ScalarPanelTextAbstract}, {@link ReferencePanel}, {@link ValueChoicesSelect2Panel}).
+     */
+    protected void configureInlinePromptCallback() {
+
+        final PromptStyle promptStyle = this.scalarModel.getPromptStyle();
+        if(promptStyle == PromptStyle.INLINE) {
+
+            if(editInlineLink != null) {
+                editInlineLink.add(new AjaxEventBehavior("click") {
+                    @Override
+                    protected void onEvent(final AjaxRequestTarget target) {
+
+                        scalarModel.toEditMode();
+
+                        // dynamically update the edit form.
+                        final PropertyEditFormExecutor formExecutor =
+                                new PropertyEditFormExecutor(ScalarPanelAbstract.this, scalarModel);
+                        scalarModel.setFormExecutor(formExecutor);
+                        scalarModel.setInlinePromptContext(
+                                new ScalarModel.InlinePromptContext(
+                                        getComponentForRegular(),
+                                        scalarIfRegularInlinePromptForm));
+
+                        switchFormForInlinePrompt();
+
+                        getComponentForRegular().setVisible(false);
+                        scalarIfRegularInlinePromptForm.setVisible(true);
+
+                        target.add(ScalarPanelAbstract.this);
+                    }
+
+                    @Override
+                    public boolean isEnabled(final Component component) {
+                        return true;
+                    }
+                });
+            }
+        }
+    }
+
+
+    // ///////////////////////////////////////////////////////////////////
+
+    /**
      * Mandatory hook.
      */
     protected abstract void addFormComponentBehavior(Behavior behavior);

http://git-wip-us.apache.org/repos/asf/isis/blob/8484d53b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextAbstract.java
index 9245a28..198eb9e 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextAbstract.java
@@ -19,16 +19,7 @@
 
 package org.apache.isis.viewer.wicket.ui.components.scalars;
 
-import org.apache.wicket.Component;
-import org.apache.wicket.ajax.AjaxEventBehavior;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.markup.html.panel.Fragment;
-
-import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
-import org.apache.isis.viewer.wicket.ui.ComponentType;
-import org.apache.isis.viewer.wicket.ui.components.property.PropertyEditFormExecutor;
-import org.apache.isis.viewer.wicket.ui.components.property.PropertyEditFormPanel;
 import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
 
 /**
@@ -43,72 +34,11 @@ public abstract class ScalarPanelTextAbstract extends ScalarPanelAbstract  {
 
     private static final long serialVersionUID = 1L;
 
-    public enum CompactType {
-        INPUT_CHECKBOX,
-        SPAN
-    }
-
-
 
     public ScalarPanelTextAbstract(final String id, final ScalarModel scalarModel) {
         super(id, scalarModel);
     }
 
 
-    protected Fragment getCompactFragment(CompactType type) {
-        Fragment compactFragment;
-        switch (type) {
-            case INPUT_CHECKBOX:
-                compactFragment = new Fragment("scalarIfCompact", "compactAsInputCheckbox", ScalarPanelTextAbstract.this);
-                break;
-            case SPAN:
-            default:
-                compactFragment = new Fragment("scalarIfCompact", "compactAsSpan", ScalarPanelTextAbstract.this);
-                break;
-        }
-        return compactFragment;
-    }
-
-
-
-
-    protected void configureInlineEditCallback() {
-
-        final PromptStyle editStyle = this.scalarModel.getPromptStyle();
-        if(editStyle == PromptStyle.INLINE) {
-
-            if(editInlineLink != null) {
-                editInlineLink.add(new AjaxEventBehavior("click") {
-                    @Override
-                    protected void onEvent(final AjaxRequestTarget target) {
-
-                        scalarModel.toEditMode();
-
-                        // dynamically update the edit form.
-                        final PropertyEditFormExecutor formExecutor =
-                                new PropertyEditFormExecutor(ScalarPanelTextAbstract.this, scalarModel);
-                        scalarModel.setFormExecutor(formExecutor);
-                        scalarModel.setInlinePromptContext(
-                                new ScalarModel.InlinePromptContext(
-                                        getComponentForRegular(),
-                                        scalarIfRegularInlinePromptForm));
-
-                        switchFormForInlinePrompt();
-
-                        getComponentForRegular().setVisible(false);
-                        scalarIfRegularInlinePromptForm.setVisible(true);
-
-                        target.add(ScalarPanelTextAbstract.this);
-                    }
-
-                    @Override
-                    public boolean isEnabled(final Component component) {
-                        return true;
-                    }
-                });
-            }
-        }
-    }
-
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/8484d53b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
index adde04e..332e2e8 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
@@ -165,7 +165,7 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
         //
 
         addEditPropertyTo(scalarIfRegularFormGroup);
-        configureInlineEditCallback();
+        configureInlinePromptCallback();
 
         if (scalarModel.canEnterEditMode() && scalarModel.getPromptStyle() == PromptStyle.INLINE) {
             textField.setVisibilityAllowed(false);
@@ -301,6 +301,26 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
         return labelIfCompact;
     }
 
+    public enum CompactType {
+        INPUT_CHECKBOX,
+        SPAN
+    }
+
+
+    protected Fragment getCompactFragment(CompactType type) {
+        Fragment compactFragment;
+        switch (type) {
+        case INPUT_CHECKBOX:
+            compactFragment = new Fragment(ID_SCALAR_IF_COMPACT, "compactAsInputCheckbox", ScalarPanelTextFieldAbstract.this);
+            break;
+        case SPAN:
+        default:
+            compactFragment = new Fragment(ID_SCALAR_IF_COMPACT, "compactAsSpan", ScalarPanelTextFieldAbstract.this);
+            break;
+        }
+        return compactFragment;
+    }
+
 
     @Override
     protected void onBeforeRenderWhenViewMode() {


[10/43] isis git commit: ISIS-1603: teases apart ScalarPanelAbstract.

Posted by da...@apache.org.
ISIS-1603: teases apart ScalarPanelAbstract.

Some of its subclasses completely overrode its markup, whereas ScalarPanelTextField extended it   So, trying to clarify/simplify.


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

Branch: refs/heads/master
Commit: c1b8f47ad3eaa49c6609948ff55a0c1d14b0b78f
Parents: 6ae427c
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Tue Apr 25 07:20:21 2017 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Apr 27 13:26:39 2017 +0100

----------------------------------------------------------------------
 .../applib/layout/component/component.xsd       |   6 +-
 .../actions/ActionParametersFormPanel.java      |   9 +-
 .../ui/components/scalars/PanelWithChoices.java |  26 ++
 .../components/scalars/ScalarPanelAbstract.html |  84 -----
 .../components/scalars/ScalarPanelAbstract.java | 361 ++++++++-----------
 .../scalars/ScalarPanelAbstract2.html           |  84 +++++
 .../scalars/ScalarPanelAbstract2.java           | 130 +++++++
 .../scalars/ScalarPanelTextFieldAbstract.java   |   2 +-
 .../scalars/reference/ReferencePanel.java       |   9 +-
 .../valuechoices/ValueChoicesSelect2Panel.java  |   6 +-
 10 files changed, 406 insertions(+), 311 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/c1b8f47a/adocs/documentation/src/main/asciidoc/applib/layout/component/component.xsd
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/applib/layout/component/component.xsd b/adocs/documentation/src/main/asciidoc/applib/layout/component/component.xsd
index cd1d56f..9d9749b 100644
--- a/adocs/documentation/src/main/asciidoc/applib/layout/component/component.xsd
+++ b/adocs/documentation/src/main/asciidoc/applib/layout/component/component.xsd
@@ -60,12 +60,15 @@
       <xs:element minOccurs="0" name="metadataError" type="xs:string"/>
     </xs:sequence>
     <xs:attribute name="cssClass" type="xs:string"/>
-    <xs:attribute name="promptStyle" type="tns:promptStyle"/>
     <xs:attribute name="hidden" type="tns:where"/>
     <xs:attribute name="id" type="xs:string" use="required"/>
     <xs:attribute name="labelPosition" type="tns:labelPosition"/>
     <xs:attribute name="multiLine" type="xs:int"/>
     <xs:attribute name="namedEscaped" type="xs:boolean"/>
+
+    <!-- 1.15.0-SNAPSHOT -->
+    <xs:attribute name="promptStyle" type="tns:promptStyle"/>
+
     <xs:attribute name="renderedAsDayBefore" type="xs:boolean"/>
     <xs:attribute name="typicalLength" type="xs:int"/>
   </xs:complexType>
@@ -101,6 +104,7 @@
     </xs:restriction>
   </xs:simpleType>
 
+  <!-- 1.15.0-SNAPSHOT -->
   <xs:simpleType name="promptStyle">
     <xs:restriction base="xs:string">
       <xs:enumeration value="DIALOG"/>

http://git-wip-us.apache.org/repos/asf/isis/blob/c1b8f47a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java
index daf7c62..0ee44c9 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java
@@ -38,6 +38,7 @@ import org.apache.isis.viewer.wicket.model.mementos.ActionParameterMemento;
 import org.apache.isis.viewer.wicket.model.models.ActionModel;
 import org.apache.isis.viewer.wicket.model.models.ActionArgumentModel;
 import org.apache.isis.viewer.wicket.ui.ComponentType;
+import org.apache.isis.viewer.wicket.ui.components.scalars.PanelWithChoices;
 import org.apache.isis.viewer.wicket.ui.panels.PromptFormPanelAbstract;
 import org.apache.isis.viewer.wicket.ui.components.property.PropertyEditFormPanel;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarModelSubscriber;
@@ -148,11 +149,13 @@ public class ActionParametersFormPanel extends PromptFormPanelAbstract<ActionMod
                 final int numParams = action.getParameterCount();
                 for (int i = 0; i < numParams; i++) {
                     final ScalarPanelAbstract paramPanel = paramPanels.get(i);
-                    if(paramPanel != null) {
-                        // this could throw a ConcurrencyException as we may have to reload the 
+                    if(paramPanel != null && paramPanel instanceof PanelWithChoices) {
+                        final PanelWithChoices panelWithChoices = (PanelWithChoices) paramPanel;
+
+                        // this could throw a ConcurrencyException as we may have to reload the
                         // object adapter of the action in order to compute the choices
                         // (and that object adapter might have changed)
-                        if (paramPanel.updateChoices(pendingArguments)) {
+                        if (panelWithChoices.updateChoices(pendingArguments)) {
                             paramPanel.repaint(target);
                         }
                     }

http://git-wip-us.apache.org/repos/asf/isis/blob/c1b8f47a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/PanelWithChoices.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/PanelWithChoices.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/PanelWithChoices.java
new file mode 100644
index 0000000..3b80a26
--- /dev/null
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/PanelWithChoices.java
@@ -0,0 +1,26 @@
+/**
+ *  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.scalars;
+
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+
+public interface PanelWithChoices {
+
+    boolean updateChoices(ObjectAdapter[] argsIfAvailable);
+
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/c1b8f47a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.html
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.html b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.html
deleted file mode 100644
index 6238772..0000000
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.html
+++ /dev/null
@@ -1,84 +0,0 @@
-<?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>
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:wicket="http://wicket.apache.org"
-      xml:lang="en"
-      lang="en">
-    <body>
-        <wicket:panel>
-            <div wicket:id="scalarTypeContainer"
-                 class="scalarNameAndValueComponentType" >
-
-                <div wicket:id="scalarIfRegular"
-                     class="form-group" >
-
-                    <label wicket:id="scalarName"
-                           class="scalarName control-label"
-                    >[Label text]</label>
-
-                    <span class="scalarValueWrapper">
-                        <div class="scalarPlaceholder">
-                            <span class="scalarValueInput">
-                                <span class="editing">
-                                    <wicket:child/>
-                                    <a wicket:id="editProperty"
-                                       href="#"
-                                       class="edit fa fa-pencil-square-o"></a>
-                                    <a
-                                            href="#"
-                                            name="scalarValueEditInline"
-                                            class="form-control input-sm scalarValueEditInline"
-                                            wicket:id="scalarValueEditInline">
-                                        <span wicket:id="scalarValueEditInlineLabel"></span>
-                                    </a>
-                                </span>
-                            </span>
-
-                            <span wicket:id="associatedActionLinksRight"
-                                  class="associatedActionLinksRight"
-                            >[drop down]</span>
-                        </div>
-                        <span wicket:id="feedback" class="help-block"></span>
-                        <span wicket:id="associatedActionLinksBelow"></span>
-                    </span>
-                    <div class="clearfix"></div>
-
-                </div>
-
-                <div wicket:id="scalarIfRegularInlineEditForm" class="inlineEditForm" >
-                    <div><span>property edit form</span></div>
-                </div>
-
-                <wicket:container wicket:id="scalarIfCompact"></wicket:container>
-            </div>
-
-            <wicket:fragment wicket:id="compactAsInputCheckbox">
-                <input wicket:id="scalarIfCompact"
-                       type="checkbox"
-                       class="form-control" />
-            </wicket:fragment>
-
-            <wicket:fragment wicket:id="compactAsSpan">
-                <span wicket:id="scalarIfCompact"></span>
-            </wicket:fragment>
-        </wicket:panel>
-    </body>
-</html>

http://git-wip-us.apache.org/repos/asf/isis/blob/c1b8f47a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
index 62f240b..50f5442 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
@@ -31,11 +31,8 @@ import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
 import org.apache.wicket.behavior.AttributeAppender;
 import org.apache.wicket.behavior.Behavior;
 import org.apache.wicket.feedback.ComponentFeedbackMessageFilter;
-import org.apache.wicket.markup.head.IHeaderResponse;
-import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.form.LabeledWebMarkupContainer;
-import org.apache.wicket.markup.html.panel.Fragment;
 import org.apache.wicket.model.Model;
 
 import org.apache.isis.applib.annotation.ActionLayout;
@@ -43,18 +40,15 @@ import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
-import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager.ConcurrencyChecking;
 import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.labelat.LabelAtFacet;
 import org.apache.isis.viewer.wicket.model.links.LinkAndLabel;
 import org.apache.isis.viewer.wicket.model.models.ActionPrompt;
 import org.apache.isis.viewer.wicket.model.models.ActionPromptProvider;
-import org.apache.isis.viewer.wicket.model.models.EntityModel.RenderingHint;
+import org.apache.isis.viewer.wicket.model.models.EntityModel;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.ComponentType;
 import org.apache.isis.viewer.wicket.ui.components.actionmenu.entityactions.AdditionalLinksPanel;
-import org.apache.isis.viewer.wicket.ui.components.property.PropertyEditFormExecutor;
-import org.apache.isis.viewer.wicket.ui.components.property.PropertyEditFormPanel;
 import org.apache.isis.viewer.wicket.ui.components.property.PropertyEditPanel;
 import org.apache.isis.viewer.wicket.ui.components.property.PropertyEditPromptHeaderPanel;
 import org.apache.isis.viewer.wicket.ui.components.scalars.TextFieldValueModel.ScalarModelProvider;
@@ -64,134 +58,35 @@ import org.apache.isis.viewer.wicket.ui.util.CssClassAppender;
 
 import de.agilecoders.wicket.core.markup.html.bootstrap.common.NotificationPanel;
 
-/**
- * Adapter for {@link PanelAbstract panel}s that use a {@link ScalarModel} as
- * their backing model.
- * 
- * <p>
- * Supports the concept of being {@link Rendering#COMPACT} (eg within a table) or
- * {@link Rendering#REGULAR regular} (eg within a form).
- */
 public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> implements ScalarModelProvider {
 
     private static final long serialVersionUID = 1L;
 
-    protected static final String ID_SCALAR_TYPE_CONTAINER = "scalarTypeContainer";
-
+    protected static final String ID_SCALAR_IF_COMPACT = "scalarIfCompact";
     protected static final String ID_SCALAR_IF_REGULAR = "scalarIfRegular";
     protected static final String ID_SCALAR_NAME = "scalarName";
     protected static final String ID_SCALAR_VALUE = "scalarValue";
 
-    protected static final String ID_SCALAR_VALUE_EDIT_INLINE = "scalarValueEditInline";
-    protected static final String ID_SCALAR_VALUE_EDIT_INLINE_LABEL = "scalarValueEditInlineLabel";
-
-    protected static final String ID_SCALAR_IF_REGULAR_INLINE_EDIT_FORM = "scalarIfRegularInlineEditForm";
-
-    protected static final String ID_SCALAR_IF_COMPACT = "scalarIfCompact";
-
-    private static final String ID_ASSOCIATED_ACTION_LINKS_BELOW = "associatedActionLinksBelow";
-    private static final String ID_ASSOCIATED_ACTION_LINKS_RIGHT = "associatedActionLinksRight";
 
     private static final String ID_EDIT_PROPERTY = "editProperty";
     private static final String ID_FEEDBACK = "feedback";
+    private static final String ID_ASSOCIATED_ACTION_LINKS_BELOW = "associatedActionLinksBelow";
+    private static final String ID_ASSOCIATED_ACTION_LINKS_RIGHT = "associatedActionLinksRight";
 
-    public enum CompactType {
-        INPUT_CHECKBOX,
-        SPAN
-    }
-
-    public enum Rendering {
-        /**
-         * Does not show labels, eg for use in tables
-         */
-        COMPACT {
-            @Override
-            public String getLabelCaption(final LabeledWebMarkupContainer labeledContainer) {
-                return "";
-            }
-
-            @Override
-            public void buildGui(final ScalarPanelAbstract panel) {
-                panel.getComponentForRegular().setVisible(false);
-            }
-
-            @Override
-            public Where getWhere() {
-                return Where.PARENTED_TABLES;
-            }
-        },
-        /**
-         * Does show labels, eg for use in forms.
-         */
-        REGULAR {
-            @Override
-            public String getLabelCaption(final LabeledWebMarkupContainer labeledContainer) {
-                return labeledContainer.getLabel().getObject();
-            }
-
-            @Override
-            public void buildGui(final ScalarPanelAbstract panel) {
-                panel.getLabelForCompact().setVisible(false);
-            }
-
-            @Override
-            public Where getWhere() {
-                return Where.OBJECT_FORMS;
-            }
-        };
-
-        public abstract String getLabelCaption(LabeledWebMarkupContainer labeledContainer);
-
-        public abstract void buildGui(ScalarPanelAbstract panel);
-
-        public abstract Where getWhere();
-
-        private static Rendering renderingFor(RenderingHint renderingHint) {
-            return renderingHint.isInTable()? Rendering.COMPACT: Rendering.REGULAR;
-        }
-    }
+    // ///////////////////////////////////////////////////////////////////
 
     protected final ScalarModel scalarModel;
 
-    protected WebMarkupContainer scalarTypeContainer;
-
     protected Component scalarIfCompact;
     protected Component scalarIfRegular;
-    protected WebMarkupContainer scalarIfRegularInlineEditForm;
-
-    protected WebMarkupContainer editInlineLink;
-
 
     public ScalarPanelAbstract(final String id, final ScalarModel scalarModel) {
         super(id, scalarModel);
         this.scalarModel = scalarModel;
     }
 
-    protected Fragment getCompactFragment(CompactType type) {
-        Fragment compactFragment;
-        switch (type) {
-            case INPUT_CHECKBOX:
-                compactFragment = new Fragment("scalarIfCompact", "compactAsInputCheckbox", ScalarPanelAbstract.this);
-                break;
-            case SPAN:
-            default:
-                compactFragment = new Fragment("scalarIfCompact", "compactAsSpan", ScalarPanelAbstract.this);
-                break;
-        }
-        return compactFragment;
-    }
-
-    protected Rendering getRendering() {
-        return Rendering.renderingFor(scalarModel.getRenderingHint());
-    }
-
-    protected Component getLabelForCompact() {
-        return scalarIfCompact;
-    }
 
-    public Component getComponentForRegular() {
-        return scalarIfRegular;
-    }
+    // ///////////////////////////////////////////////////////////////////
 
     @Override
     protected void onBeforeRender() {
@@ -215,6 +110,7 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
         super.onBeforeRender();
     }
 
+
     /**
      * hook for highly dynamic components, eg conditional choices.
      *
@@ -228,27 +124,65 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
 
     /**
      * Builds GUI lazily prior to first render.
-     * 
+     *
      * <p>
      * This design allows the panel to be configured first.
      *
      * @see #onBeforeRender()
      */
     private void buildGui() {
-        
+
         // REVIEW: this is nasty, both write to the same entityLink field
         // even though only one is used
         scalarIfCompact = addComponentForCompact();
         scalarIfRegular = addComponentForRegular();
-        
+
         getRendering().buildGui(this);
         addCssForMetaModel();
-        
+
         if(!subscribers.isEmpty()) {
             addFormComponentBehavior(new ScalarUpdatingBehavior());
         }
     }
 
+
+    /**
+     * Optional hook.
+     */
+    protected void onBeforeRenderWhenViewMode() {
+    }
+
+    /**
+     * Optional hook.
+     */
+    protected void onBeforeRenderWhenDisabled(final String disableReason) {
+    }
+
+    /**
+     * Optional hook.
+     */
+    protected void onBeforeRenderWhenEnabled() {
+    }
+
+
+    private void addCssForMetaModel() {
+        final String cssForMetaModel = getModel().getLongName();
+        if (cssForMetaModel != null) {
+            add(new AttributeAppender("class", Model.of(cssForMetaModel), " "));
+        }
+
+        ScalarModel model = getModel();
+        final CssClassFacet facet = model.getFacet(CssClassFacet.class);
+        if(facet != null) {
+            final ObjectAdapter parentAdapter = model.getParentObjectAdapterMemento().getObjectAdapter(
+                    AdapterManager.ConcurrencyChecking.NO_CHECK,
+                    getPersistenceSession(), getSpecificationLoader());
+            final String cssClass = facet.cssClass(parentAdapter);
+            CssClassAppender.appendCssClassTo(this, cssClass);
+        }
+    }
+
+
     protected class ScalarUpdatingBehavior extends AjaxFormComponentUpdatingBehavior {
         private static final long serialVersionUID = 1L;
 
@@ -276,27 +210,83 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
         }
     }
 
+
+    // //////////////////////////////////////
+
+    private final List<ScalarModelSubscriber> subscribers = Lists.newArrayList();
+
+    public void notifyOnChange(final ScalarModelSubscriber subscriber) {
+        subscribers.add(subscriber);
+    }
+
+
+    // ///////////////////////////////////////////////////////////////////
+
     /**
      * Mandatory hook.
      */
     protected abstract void addFormComponentBehavior(Behavior behavior);
 
-    private void addCssForMetaModel() {
-        final String cssForMetaModel = getModel().getLongName();
-        if (cssForMetaModel != null) {
-            add(new AttributeAppender("class", Model.of(cssForMetaModel), " "));
-        }
+    // ///////////////////////////////////////////////////////////////////
 
-        ScalarModel model = getModel();
-        final CssClassFacet facet = model.getFacet(CssClassFacet.class);
-        if(facet != null) {
-            final ObjectAdapter parentAdapter = model.getParentObjectAdapterMemento().getObjectAdapter(ConcurrencyChecking.NO_CHECK,
-                    getPersistenceSession(), getSpecificationLoader());
-            final String cssClass = facet.cssClass(parentAdapter);
-            CssClassAppender.appendCssClassTo(this, cssClass);
+    public enum Rendering {
+        /**
+         * Does not show labels, eg for use in tables
+         */
+        COMPACT {
+            @Override
+            public String getLabelCaption(final LabeledWebMarkupContainer labeledContainer) {
+                return "";
+            }
+
+            @Override
+            public void buildGui(final ScalarPanelAbstract panel) {
+                panel.getComponentForRegular().setVisible(false);
+            }
+
+            @Override
+            public Where getWhere() {
+                return Where.PARENTED_TABLES;
+            }
+        },
+        /**
+         * Does show labels, eg for use in forms.
+         */
+        REGULAR {
+            @Override
+            public String getLabelCaption(final LabeledWebMarkupContainer labeledContainer) {
+                return labeledContainer.getLabel().getObject();
+            }
+
+            @Override
+            public void buildGui(final ScalarPanelAbstract panel) {
+                panel.getLabelForCompact().setVisible(false);
+            }
+
+            @Override
+            public Where getWhere() {
+                return Where.OBJECT_FORMS;
+            }
+        };
+
+        public abstract String getLabelCaption(LabeledWebMarkupContainer labeledContainer);
+
+        public abstract void buildGui(ScalarPanelAbstract panel);
+
+        public abstract Where getWhere();
+
+        private static Rendering renderingFor(EntityModel.RenderingHint renderingHint) {
+            return renderingHint.isInTable()? Rendering.COMPACT: Rendering.REGULAR;
         }
     }
 
+    protected Rendering getRendering() {
+        return Rendering.renderingFor(scalarModel.getRenderingHint());
+    }
+
+
+    // ///////////////////////////////////////////////////////////////////
+
     /**
      * Mandatory hook method to build the component to render the model when in
      * {@link Rendering#REGULAR regular} format.
@@ -305,10 +295,17 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
 
     protected abstract Component addComponentForCompact();
 
-    protected void addFeedbackOnlyTo(final MarkupContainer markupContainer, final Component component) {
-        markupContainer.addOrReplace(new NotificationPanel(ID_FEEDBACK, component, new ComponentFeedbackMessageFilter(component)));
+    protected Component getLabelForCompact() {
+        return scalarIfCompact;
     }
 
+    public Component getComponentForRegular() {
+        return scalarIfRegular;
+    }
+
+
+    // ///////////////////////////////////////////////////////////////////
+
     protected void addEditPropertyTo(
             final MarkupContainer scalarIfRegularFormGroup) {
 
@@ -346,66 +343,24 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
 
     }
 
-    protected void configureInlineEditCallback() {
-
-        final PromptStyle editStyle = this.scalarModel.getPromptStyle();
-        if(editStyle == PromptStyle.INLINE) {
-
-            if(editInlineLink != null) {
-                editInlineLink.add(new AjaxEventBehavior("click") {
-                    @Override
-                    protected void onEvent(final AjaxRequestTarget target) {
-
-                        scalarModel.toEditMode();
-
-                        // dynamically update the edit form.
-                        final PropertyEditFormExecutor formExecutor =
-                                new PropertyEditFormExecutor(ScalarPanelAbstract.this, scalarModel);
-                        scalarModel.setFormExecutor(formExecutor);
-                        scalarModel.setInlinePromptContext(
-                                new ScalarModel.InlinePromptContext(scalarIfRegular, scalarIfRegularInlineEditForm));
-
-                        scalarIfRegularInlineEditForm = (PropertyEditFormPanel) getComponentFactoryRegistry().addOrReplaceComponent(
-                                scalarTypeContainer, ID_SCALAR_IF_REGULAR_INLINE_EDIT_FORM, ComponentType.PROPERTY_EDIT_FORM, scalarModel);
-
 
-                        scalarIfRegular.setVisible(false);
-                        scalarIfRegularInlineEditForm.setVisible(true);
-
-                        target.add(scalarTypeContainer);
-                    }
-
-                    @Override
-                    public boolean isEnabled(final Component component) {
-                        return true;
-                    }
-                });
-            }
-        }
+    protected void addFeedbackOnlyTo(final MarkupContainer markupContainer, final Component component) {
+        markupContainer.addOrReplace(new NotificationPanel(ID_FEEDBACK, component, new ComponentFeedbackMessageFilter(component)));
     }
 
-    /**
-     * Optional hook.
-     */
-    protected void onBeforeRenderWhenViewMode() {
-    }
 
-    /**
-     * Optional hook.
-     */
-    protected void onBeforeRenderWhenDisabled(final String disableReason) {
-    }
+    protected void addEntityActionLinksBelowAndRight(final MarkupContainer labelIfRegular, final List<LinkAndLabel> entityActions) {
+        final List<LinkAndLabel> entityActionsBelow = LinkAndLabel.positioned(entityActions, ActionLayout.Position.BELOW);
+        AdditionalLinksPanel.addAdditionalLinks(labelIfRegular, ID_ASSOCIATED_ACTION_LINKS_BELOW, entityActionsBelow, AdditionalLinksPanel.Style.INLINE_LIST);
 
-    /**
-     * Optional hook.
-     */
-    protected void onBeforeRenderWhenEnabled() {
+        final List<LinkAndLabel> entityActionsRight = LinkAndLabel.positioned(entityActions, ActionLayout.Position.RIGHT);
+        AdditionalLinksPanel.addAdditionalLinks(labelIfRegular, ID_ASSOCIATED_ACTION_LINKS_RIGHT, entityActionsRight, AdditionalLinksPanel.Style.DROPDOWN);
     }
 
     /**
-     * Applies the {@literal @}{@link org.apache.isis.core.metamodel.facets.objectvalue.labelat.LabelAtFacet} and also CSS based on
-     * whether any of the associated actions have {@literal @}{@link org.apache.isis.applib.annotation.ActionLayout layout} positioned to
-     * the {@link org.apache.isis.applib.annotation.ActionLayout.Position#RIGHT right}.
+     * Applies the {@literal @}{@link LabelAtFacet} and also CSS based on
+     * whether any of the associated actions have {@literal @}{@link ActionLayout layout} positioned to
+     * the {@link ActionLayout.Position#RIGHT right}.
      *
      * @param markupContainer The form group element
      * @param entityActionLinks
@@ -415,26 +370,18 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
         CssClassAppender.appendCssClassTo(markupContainer, determineActionLayoutPositioningCss(entityActionLinks));
     }
 
-    protected void addEntityActionLinksBelowAndRight(final MarkupContainer labelIfRegular, final List<LinkAndLabel> entityActions) {
-        final List<LinkAndLabel> entityActionsBelow = LinkAndLabel.positioned(entityActions, ActionLayout.Position.BELOW);
-        AdditionalLinksPanel.addAdditionalLinks(labelIfRegular, ID_ASSOCIATED_ACTION_LINKS_BELOW, entityActionsBelow, AdditionalLinksPanel.Style.INLINE_LIST);
-
-        final List<LinkAndLabel> entityActionsRight = LinkAndLabel.positioned(entityActions, ActionLayout.Position.RIGHT);
-        AdditionalLinksPanel.addAdditionalLinks(labelIfRegular, ID_ASSOCIATED_ACTION_LINKS_RIGHT, entityActionsRight, AdditionalLinksPanel.Style.DROPDOWN);
-    }
-
     private static String determinePropParamLayoutCss(ScalarModel model) {
         final LabelAtFacet facet = model.getFacet(LabelAtFacet.class);
         if (facet != null) {
             switch (facet.label()) {
-                case LEFT:
-                    return "label-left";
-                case RIGHT:
-                    return "label-right";
-                case NONE:
-                    return "label-none";
-                case TOP:
-                    return "label-top";
+            case LEFT:
+                return "label-left";
+            case RIGHT:
+                return "label-right";
+            case NONE:
+                return "label-none";
+            case TOP:
+                return "label-top";
             }
         }
         return "label-left";
@@ -454,24 +401,7 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
         return false;
     }
 
-    // //////////////////////////////////////
-
-    private final List<ScalarModelSubscriber> subscribers = Lists.newArrayList();
-
-    public void notifyOnChange(final ScalarModelSubscriber subscriber) {
-        subscribers.add(subscriber);
-    }
-
-    // //////////////////////////////////////
-
-    /**
-     * Optional hook method
-     * 
-     * @return true - indicates has been updated, so update dynamically via ajax
-     */
-    public boolean updateChoices(ObjectAdapter[] pendingArguments) {
-        return false;
-    }
+    // ///////////////////////////////////////////////////////////////////
 
     /**
      * Repaints this panel of just some of its children
@@ -482,7 +412,6 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
         target.add(this);
     }
 
-
     // ///////////////////////////////////////////////////////////////////
 
     @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/c1b8f47a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract2.html
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract2.html b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract2.html
new file mode 100644
index 0000000..6238772
--- /dev/null
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract2.html
@@ -0,0 +1,84 @@
+<?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>
+<html xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:wicket="http://wicket.apache.org"
+      xml:lang="en"
+      lang="en">
+    <body>
+        <wicket:panel>
+            <div wicket:id="scalarTypeContainer"
+                 class="scalarNameAndValueComponentType" >
+
+                <div wicket:id="scalarIfRegular"
+                     class="form-group" >
+
+                    <label wicket:id="scalarName"
+                           class="scalarName control-label"
+                    >[Label text]</label>
+
+                    <span class="scalarValueWrapper">
+                        <div class="scalarPlaceholder">
+                            <span class="scalarValueInput">
+                                <span class="editing">
+                                    <wicket:child/>
+                                    <a wicket:id="editProperty"
+                                       href="#"
+                                       class="edit fa fa-pencil-square-o"></a>
+                                    <a
+                                            href="#"
+                                            name="scalarValueEditInline"
+                                            class="form-control input-sm scalarValueEditInline"
+                                            wicket:id="scalarValueEditInline">
+                                        <span wicket:id="scalarValueEditInlineLabel"></span>
+                                    </a>
+                                </span>
+                            </span>
+
+                            <span wicket:id="associatedActionLinksRight"
+                                  class="associatedActionLinksRight"
+                            >[drop down]</span>
+                        </div>
+                        <span wicket:id="feedback" class="help-block"></span>
+                        <span wicket:id="associatedActionLinksBelow"></span>
+                    </span>
+                    <div class="clearfix"></div>
+
+                </div>
+
+                <div wicket:id="scalarIfRegularInlineEditForm" class="inlineEditForm" >
+                    <div><span>property edit form</span></div>
+                </div>
+
+                <wicket:container wicket:id="scalarIfCompact"></wicket:container>
+            </div>
+
+            <wicket:fragment wicket:id="compactAsInputCheckbox">
+                <input wicket:id="scalarIfCompact"
+                       type="checkbox"
+                       class="form-control" />
+            </wicket:fragment>
+
+            <wicket:fragment wicket:id="compactAsSpan">
+                <span wicket:id="scalarIfCompact"></span>
+            </wicket:fragment>
+        </wicket:panel>
+    </body>
+</html>

http://git-wip-us.apache.org/repos/asf/isis/blob/c1b8f47a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract2.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract2.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract2.java
new file mode 100644
index 0000000..7b37a52
--- /dev/null
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract2.java
@@ -0,0 +1,130 @@
+/*
+ *  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.scalars;
+
+import org.apache.wicket.Component;
+import org.apache.wicket.ajax.AjaxEventBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.panel.Fragment;
+
+import org.apache.isis.applib.annotation.PromptStyle;
+import org.apache.isis.viewer.wicket.model.models.ScalarModel;
+import org.apache.isis.viewer.wicket.ui.ComponentType;
+import org.apache.isis.viewer.wicket.ui.components.property.PropertyEditFormExecutor;
+import org.apache.isis.viewer.wicket.ui.components.property.PropertyEditFormPanel;
+import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
+
+/**
+ * Adapter for {@link PanelAbstract panel}s that use a {@link ScalarModel} as
+ * their backing model.
+ * 
+ * <p>
+ * Supports the concept of being {@link Rendering#COMPACT} (eg within a table) or
+ * {@link Rendering#REGULAR regular} (eg within a form).
+ */
+public abstract class ScalarPanelAbstract2 extends ScalarPanelAbstract  {
+
+    private static final long serialVersionUID = 1L;
+
+    protected static final String ID_SCALAR_TYPE_CONTAINER = "scalarTypeContainer";
+
+
+    protected static final String ID_SCALAR_VALUE_EDIT_INLINE = "scalarValueEditInline";
+    protected static final String ID_SCALAR_VALUE_EDIT_INLINE_LABEL = "scalarValueEditInlineLabel";
+
+    protected static final String ID_SCALAR_IF_REGULAR_INLINE_EDIT_FORM = "scalarIfRegularInlineEditForm";
+
+
+    public enum CompactType {
+        INPUT_CHECKBOX,
+        SPAN
+    }
+
+
+    protected WebMarkupContainer scalarTypeContainer;
+    protected WebMarkupContainer scalarIfRegularInlineEditForm;
+    protected WebMarkupContainer editInlineLink;
+
+
+    public ScalarPanelAbstract2(final String id, final ScalarModel scalarModel) {
+        super(id, scalarModel);
+    }
+
+    protected Fragment getCompactFragment(CompactType type) {
+        Fragment compactFragment;
+        switch (type) {
+            case INPUT_CHECKBOX:
+                compactFragment = new Fragment("scalarIfCompact", "compactAsInputCheckbox", ScalarPanelAbstract2.this);
+                break;
+            case SPAN:
+            default:
+                compactFragment = new Fragment("scalarIfCompact", "compactAsSpan", ScalarPanelAbstract2.this);
+                break;
+        }
+        return compactFragment;
+    }
+
+
+
+
+    protected void configureInlineEditCallback() {
+
+        final PromptStyle editStyle = this.scalarModel.getPromptStyle();
+        if(editStyle == PromptStyle.INLINE) {
+
+            if(editInlineLink != null) {
+                editInlineLink.add(new AjaxEventBehavior("click") {
+                    @Override
+                    protected void onEvent(final AjaxRequestTarget target) {
+
+                        scalarModel.toEditMode();
+
+                        // dynamically update the edit form.
+                        final PropertyEditFormExecutor formExecutor =
+                                new PropertyEditFormExecutor(ScalarPanelAbstract2.this, scalarModel);
+                        scalarModel.setFormExecutor(formExecutor);
+                        scalarModel.setInlinePromptContext(
+                                new ScalarModel.InlinePromptContext(scalarIfRegular, scalarIfRegularInlineEditForm));
+
+                        scalarIfRegularInlineEditForm = (PropertyEditFormPanel) getComponentFactoryRegistry().addOrReplaceComponent(
+                                scalarTypeContainer, ID_SCALAR_IF_REGULAR_INLINE_EDIT_FORM, ComponentType.PROPERTY_EDIT_FORM, scalarModel);
+
+
+                        scalarIfRegular.setVisible(false);
+                        scalarIfRegularInlineEditForm.setVisible(true);
+
+                        target.add(scalarTypeContainer);
+                    }
+
+                    @Override
+                    public boolean isEnabled(final Component component) {
+                        return true;
+                    }
+                });
+            }
+        }
+    }
+
+
+
+
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/c1b8f47a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
index 4009df4..de9bfdd 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
@@ -57,7 +57,7 @@ import org.apache.isis.viewer.wicket.ui.util.CssClassAppender;
  * Adapter for {@link ScalarPanelAbstract scalar panel}s that are implemented
  * using a simple {@link TextField}.
  */
-public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> extends ScalarPanelAbstract {
+public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> extends ScalarPanelAbstract2 {
 
     private static final long serialVersionUID = 1L;
 

http://git-wip-us.apache.org/repos/asf/isis/blob/c1b8f47a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
index 3b5fa18..435312b 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
@@ -23,13 +23,11 @@ import java.util.ArrayList;
 import java.util.List;
 
 import com.google.common.collect.Lists;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.wicketstuff.select2.ChoiceProvider;
-import org.wicketstuff.select2.Settings;
 
 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.behavior.Behavior;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
@@ -38,6 +36,8 @@ import org.apache.wicket.model.Model;
 import org.apache.wicket.validation.IValidatable;
 import org.apache.wicket.validation.IValidator;
 import org.apache.wicket.validation.ValidationError;
+import org.wicketstuff.select2.ChoiceProvider;
+import org.wicketstuff.select2.Settings;
 
 import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
@@ -55,6 +55,7 @@ import org.apache.isis.viewer.wicket.model.models.ScalarModelWithPending;
 import org.apache.isis.viewer.wicket.ui.ComponentFactory;
 import org.apache.isis.viewer.wicket.ui.ComponentType;
 import org.apache.isis.viewer.wicket.ui.components.actionmenu.entityactions.EntityActionUtil;
+import org.apache.isis.viewer.wicket.ui.components.scalars.PanelWithChoices;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelAbstract;
 import org.apache.isis.viewer.wicket.ui.components.widgets.bootstrap.FormGroup;
 import org.apache.isis.viewer.wicket.ui.components.widgets.entitysimplelink.EntityLinkSimplePanel;
@@ -69,7 +70,7 @@ import org.apache.isis.viewer.wicket.ui.util.CssClassAppender;
  * Panel for rendering scalars which of are of reference type (as opposed to
  * value types).
  */
-public class ReferencePanel extends ScalarPanelAbstract {
+public class ReferencePanel extends ScalarPanelAbstract implements PanelWithChoices {
 
     private static final long serialVersionUID = 1L;
 

http://git-wip-us.apache.org/repos/asf/isis/blob/c1b8f47a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
index 7fb8a56..4c1c2c6 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
@@ -41,13 +41,15 @@ import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.model.models.ScalarModelWithMultiPending;
 import org.apache.isis.viewer.wicket.model.models.ScalarModelWithPending;
 import org.apache.isis.viewer.wicket.ui.components.actionmenu.entityactions.EntityActionUtil;
+import org.apache.isis.viewer.wicket.ui.components.scalars.PanelWithChoices;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelAbstract;
-import org.apache.isis.viewer.wicket.ui.components.widgets.select2.Select2;
 import org.apache.isis.viewer.wicket.ui.components.widgets.bootstrap.FormGroup;
+import org.apache.isis.viewer.wicket.ui.components.widgets.select2.Select2;
 import org.apache.isis.viewer.wicket.ui.components.widgets.select2.providers.ObjectAdapterMementoProviderForValueChoices;
 import org.apache.isis.viewer.wicket.ui.util.CssClassAppender;
 
-public class ValueChoicesSelect2Panel extends ScalarPanelAbstract implements ScalarModelWithPending, ScalarModelWithMultiPending {
+public class ValueChoicesSelect2Panel extends ScalarPanelAbstract implements ScalarModelWithPending, ScalarModelWithMultiPending,
+        PanelWithChoices {
 
     private static final long serialVersionUID = 1L;
 


[29/43] isis git commit: ISIS-1603: removes some duplication of ScalarPanelAbstract and its subclasses

Posted by da...@apache.org.
ISIS-1603: removes some duplication of ScalarPanelAbstract and its subclasses

specifically:
- addFormComponentBehavior is no longer a mandatory hook, instead uses the getScalarValueComponent() hook to set up the ScalarUpdatingBehaviour passed in.
- ScalarUpdatingBehaviour class made static
- updateChoices moved up to ScalarPanelSelect2Abstract (identical in both subclasses)
-repaint(....) overridden method moved up to ScalarPanelSelect2Abstract (identical in both subclasses)


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

Branch: refs/heads/master
Commit: ea613a99c07ed77ba7754e79648213931556b4ba
Parents: 8f8abea
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Thu Apr 27 12:43:51 2017 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Apr 27 13:26:40 2017 +0100

----------------------------------------------------------------------
 .../components/scalars/ScalarPanelAbstract.java | 48 +++++++++++---------
 .../scalars/ScalarPanelSelect2Abstract.java     | 40 +++++++++++++---
 .../scalars/ScalarPanelTextFieldAbstract.java   |  4 --
 .../isisapplib/IsisBlobOrClobPanelAbstract.java |  8 ----
 .../scalars/primitive/BooleanPanel.java         |  9 ----
 .../scalars/reference/ReferencePanel.java       | 39 ----------------
 .../valuechoices/ValueChoicesSelect2Panel.java  | 28 ------------
 7 files changed, 60 insertions(+), 116 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/ea613a99/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
index 221e327..1617f0c 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
@@ -267,13 +267,9 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
         getRendering().buildGui(this);
         addCssForMetaModel();
 
-        if(!subscribers.isEmpty()) {
-            addFormComponentBehavior(new ScalarUpdatingBehavior());
-        }
+        addFormComponentBehaviour();
     }
 
-
-
     /**
      * Optional hook.
      */
@@ -311,17 +307,22 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
     }
 
 
-    protected class ScalarUpdatingBehavior extends AjaxFormComponentUpdatingBehavior {
+    // //////////////////////////////////////
+
+
+    static class ScalarUpdatingBehavior extends AjaxFormComponentUpdatingBehavior {
         private static final long serialVersionUID = 1L;
+        private final ScalarPanelAbstract scalarPanel;
 
-        private ScalarUpdatingBehavior() {
+        private ScalarUpdatingBehavior(final ScalarPanelAbstract scalarPanel) {
             super("change");
+            this.scalarPanel = scalarPanel;
         }
 
         @Override
         protected void onUpdate(AjaxRequestTarget target) {
-            for (ScalarModelSubscriber subscriber : subscribers) {
-                subscriber.onUpdate(target, ScalarPanelAbstract.this);
+            for (ScalarModelSubscriber subscriber : scalarPanel.subscribers) {
+                subscriber.onUpdate(target, scalarPanel);
             }
 
             // hmmm... this doesn't seem to be picked up...
@@ -332,30 +333,32 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
         @Override
         protected void onError(AjaxRequestTarget target, RuntimeException e) {
             super.onError(target, e);
-            for (ScalarModelSubscriber subscriber : subscribers) {
-                subscriber.onError(target, ScalarPanelAbstract.this);
+            for (ScalarModelSubscriber subscriber : scalarPanel.subscribers) {
+                subscriber.onError(target, scalarPanel);
             }
         }
     }
 
-
-    // //////////////////////////////////////
-
-
     private final List<ScalarModelSubscriber> subscribers = Lists.newArrayList();
 
     public void notifyOnChange(final ScalarModelSubscriber subscriber) {
         subscribers.add(subscriber);
     }
 
+    private void addFormComponentBehaviour() {
+        if (subscribers.isEmpty()) {
+            return;
+        }
 
-    // ///////////////////////////////////////////////////////////////////
-
-
-    /**
-     * Mandatory hook.
-     */
-    protected abstract void addFormComponentBehavior(Behavior behavior);
+        Component scalarValueComponent = getScalarValueComponent();
+        if(scalarValueComponent == null) {
+            return;
+        }
+        for (Behavior b : scalarValueComponent.getBehaviors(ScalarUpdatingBehavior.class)) {
+            scalarValueComponent.remove(b);
+        }
+        scalarValueComponent.add(new ScalarUpdatingBehavior(this));
+    }
 
     // ///////////////////////////////////////////////////////////////////
 
@@ -565,6 +568,7 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
      */
     protected abstract Component getScalarValueComponent();
 
+
     private void addFeedbackOnlyTo(final MarkupContainer markupContainer, final Component component) {
         markupContainer.addOrReplace(new NotificationPanel(ID_FEEDBACK, component, new ComponentFeedbackMessageFilter(component)));
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/ea613a99/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelSelect2Abstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelSelect2Abstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelSelect2Abstract.java
index 5597368..a9738e5 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelSelect2Abstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelSelect2Abstract.java
@@ -24,6 +24,7 @@ import java.util.List;
 import com.google.common.base.Strings;
 
 import org.apache.wicket.AttributeModifier;
+import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.form.FormComponent;
 import org.apache.wicket.model.Model;
@@ -56,7 +57,7 @@ public abstract class ScalarPanelSelect2Abstract extends ScalarPanelAbstract {
         return select2;
     }
 
-    protected Label createScalarName(final String id) {
+    private Label createScalarName(final String id) {
         final Label scalarName = new Label(id, getRendering().getLabelCaption(select2.component()));
         if(getModel().isRequired()) {
             final String label = scalarName.getDefaultModelObjectAsString();
@@ -86,14 +87,12 @@ public abstract class ScalarPanelSelect2Abstract extends ScalarPanelAbstract {
         return formGroup;
     }
 
+
+
     /**
      * sets up the choices, also ensuring that any currently held value is compatible.
-     *
-     * <p>
-     *     For convenience of subclasses using a select2.
-     * </p>
      */
-    protected void setProviderAndCurrAndPending(final Select2 select2, ObjectAdapter[] argsIfAvailable) {
+    private void setProviderAndCurrAndPending(final Select2 select2, ObjectAdapter[] argsIfAvailable) {
 
         final ChoiceProvider<ObjectAdapterMemento> choiceProvider;
         choiceProvider = buildChoiceProvider(argsIfAvailable);
@@ -118,4 +117,33 @@ public abstract class ScalarPanelSelect2Abstract extends ScalarPanelAbstract {
     protected abstract void resetIfCurrentNotInChoices(final Select2 select2, final List<ObjectAdapterMemento> choicesMementos);
 
 
+    // //////////////////////////////////////
+
+    /**
+     * Hook method to refresh choices when changing.
+     *
+     * <p>
+     * called from onUpdate callback
+     */
+    public boolean updateChoices(ObjectAdapter[] argsIfAvailable) {
+        if (select2 == null) {
+            return false;
+        }
+        setProviderAndCurrAndPending(select2, argsIfAvailable);
+        return true;
+    }
+
+
+
+    /**
+     * Repaints just the Select2 component
+     *
+     * @param target The Ajax request handler
+     */
+    @Override
+    public void repaint(AjaxRequestTarget target) {
+        target.add(select2.component());
+    }
+
+
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/ea613a99/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
index a0066d9..245e05f 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
@@ -327,10 +327,6 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
         inlinePromptLink.add(title);
     }
 
-    @Override
-    protected void addFormComponentBehavior(Behavior behavior) {
-        textField.add(behavior);
-    }
 
 
     // //////////////////////////////////////

http://git-wip-us.apache.org/repos/asf/isis/blob/ea613a99/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java
index 79d5957..e141980 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java
@@ -31,7 +31,6 @@ 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.Behavior;
 import org.apache.wicket.extensions.markup.html.image.resource.ThumbnailImageResource;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
@@ -51,9 +50,7 @@ import org.apache.isis.applib.value.Blob;
 import org.apache.isis.applib.value.NamedWithMimeType;
 import org.apache.isis.core.commons.lang.CloseableExtensions;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.viewer.wicket.model.links.LinkAndLabel;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
-import org.apache.isis.viewer.wicket.ui.components.actionmenu.entityactions.EntityActionUtil;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelAbstract;
 import org.apache.isis.viewer.wicket.ui.components.widgets.bootstrap.FormGroup;
 import org.apache.isis.viewer.wicket.ui.util.Components;
@@ -351,12 +348,7 @@ public abstract class IsisBlobOrClobPanelAbstract<T extends NamedWithMimeType> e
         return getBlobOrClob(getModel());
     }
 
-    @Override
-    protected void addFormComponentBehavior(Behavior behavior) {
-        fileUploadField.add(behavior);
-    }
 
-    
     /**
      * Mandatory hook method.
      */

http://git-wip-us.apache.org/repos/asf/isis/blob/ea613a99/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java
index ca21a39..b32e0ee 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java
@@ -19,12 +19,9 @@
 
 package org.apache.isis.viewer.wicket.ui.components.scalars.primitive;
 
-import java.util.List;
-
 import org.apache.wicket.AttributeModifier;
 import org.apache.wicket.Component;
 import org.apache.wicket.MarkupContainer;
-import org.apache.wicket.behavior.Behavior;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.model.Model;
 
@@ -33,9 +30,7 @@ import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.labelat.LabelAtFacet;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.viewer.wicket.model.links.LinkAndLabel;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
-import org.apache.isis.viewer.wicket.ui.components.actionmenu.entityactions.EntityActionUtil;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelAbstract;
 import org.apache.isis.viewer.wicket.ui.components.widgets.bootstrap.FormGroup;
 import org.apache.isis.viewer.wicket.ui.util.CssClassAppender;
@@ -172,10 +167,6 @@ public class BooleanPanel extends ScalarPanelAbstract {
         checkBox.setEnabled(false);
     }
 
-    @Override
-    protected void addFormComponentBehavior(Behavior behavior) {
-        checkBox.add(behavior);
-    }
 
     @Override
     public String getVariation() {

http://git-wip-us.apache.org/repos/asf/isis/blob/ea613a99/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
index bc26781..abe0f34 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
@@ -27,7 +27,6 @@ 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.behavior.Behavior;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.model.IModel;
@@ -229,17 +228,7 @@ public class ReferencePanel extends ScalarPanelSelect2Abstract implements PanelW
 
 
 
-    // //////////////////////////////////////
-
-    // called from buildGui
-    @Override
-    protected void addFormComponentBehavior(Behavior behavior) {
-        if(select2 != null) {
-            select2.add(behavior);
-        }
-    }
 
-    
     // //////////////////////////////////////
     // onBeforeRender*
     // //////////////////////////////////////
@@ -458,24 +447,6 @@ public class ReferencePanel extends ScalarPanelSelect2Abstract implements PanelW
         entityLink.setConvertedInput(pendingAdapter);
     }
 
-    // //////////////////////////////////////
-    // updateChoices
-    // //////////////////////////////////////
-
-    /**
-     * Hook method to refresh choices when changing.
-     * 
-     * <p>
-     * called from onUpdate callback
-     */
-    @Override
-    public boolean updateChoices(ObjectAdapter[] argsIfAvailable) {
-        if (select2 == null) {
-            return false;
-        }
-        setProviderAndCurrAndPending(select2, argsIfAvailable);
-        return true;
-    }
 
     
     // //////////////////////////////////////
@@ -503,16 +474,6 @@ public class ReferencePanel extends ScalarPanelSelect2Abstract implements PanelW
     }
 
 
-    /**
-     * Repaints just the Select2 component
-     *
-     * @param target The Ajax request handler
-     */
-    @Override
-    public void repaint(AjaxRequestTarget target) {
-        target.add(select2.component());
-    }
-
     @Override
     protected String getScalarPanelType() {
         return "referencePanel";

http://git-wip-us.apache.org/repos/asf/isis/blob/ea613a99/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
index b64b6cc..ea5ce37 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
@@ -23,8 +23,6 @@ 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.behavior.Behavior;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
@@ -143,34 +141,8 @@ public class ValueChoicesSelect2Panel extends ScalarPanelSelect2Abstract impleme
     }
 
     
-    @Override
-    protected void addFormComponentBehavior(Behavior behavior) {
-        for (Behavior b : select2.getBehaviors(ScalarUpdatingBehavior.class)) {
-            select2.remove(b);
-        }
-        select2.add(behavior);
-    }
-
     // //////////////////////////////////////
 
-    @Override
-    public boolean updateChoices(ObjectAdapter[] argsIfAvailable) {
-        if (select2 == null) {
-            return false;
-        }
-        setProviderAndCurrAndPending(select2, argsIfAvailable);
-        return true;
-    }
-
-    /**
-     * Repaints just the Select2 component
-     *
-     * @param target The Ajax request handler
-     */
-    @Override
-    public void repaint(AjaxRequestTarget target) {
-        target.add(select2.component());
-    }
 
 
     // in corresponding code in ReferencePanelFactory, these is a branch for different types of providers


[16/43] isis git commit: ISIS-1603: improves the tab focus a little bit

Posted by da...@apache.org.
ISIS-1603: improves the tab focus a little bit


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

Branch: refs/heads/master
Commit: 6ae427cc021dab52f429f6360653dd1518ccf285
Parents: 74e0a36
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Mon Apr 24 23:06:35 2017 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Apr 27 13:26:39 2017 +0100

----------------------------------------------------------------------
 .../components/actionprompt/ActionPromptModalWindow.java |  2 +-
 .../ui/components/property/PropertyEditFormPanel.java    | 11 +++++++++++
 .../ui/components/scalars/ScalarPanelAbstract.java       |  2 ++
 .../apache/isis/viewer/wicket/ui/pages/PageAbstract.java |  5 +++++
 .../viewer/wicket/ui/pages/jquery.isis.wicket.viewer.js  | 11 +++++++++--
 5 files changed, 28 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/6ae427cc/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionprompt/ActionPromptModalWindow.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionprompt/ActionPromptModalWindow.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionprompt/ActionPromptModalWindow.java
index 59ee4a7..782a3e9 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionprompt/ActionPromptModalWindow.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionprompt/ActionPromptModalWindow.java
@@ -64,6 +64,6 @@ public class ActionPromptModalWindow extends ModalDialog<Void> {
         super.renderHead(response);
 
         response.render(OnDomReadyHeaderItem.forScript(
-                String.format("Wicket.Event.publish(Isis.Topic.FOCUS_FIRST_ACTION_PARAMETER, '%s')", getMarkupId())));
+                String.format("Wicket.Event.publish(Isis.Topic.FOCUS_FIRST_PARAMETER, '%s')", getMarkupId())));
     }
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/6ae427cc/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditFormPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditFormPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditFormPanel.java
index ca2e28e..2c6719e 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditFormPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditFormPanel.java
@@ -26,6 +26,7 @@ import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.markup.html.form.AjaxButton;
 import org.apache.wicket.markup.head.IHeaderResponse;
 import org.apache.wicket.markup.head.JavaScriptContentHeaderItem;
+import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.form.Form;
 
@@ -80,6 +81,16 @@ public class PropertyEditFormPanel extends PromptFormPanelAbstract<ScalarModel>
         }
 
         @Override
+        public void renderHead(final IHeaderResponse response) {
+            super.renderHead(response);
+
+            response.render(OnDomReadyHeaderItem.forScript(
+                    String.format("Wicket.Event.publish(Isis.Topic.FOCUS_FIRST_PARAMETER, '%s')", getMarkupId())));
+
+        }
+
+
+        @Override
         protected void addParameters() {
             final ScalarModel scalarModel = getScalarModel();
 

http://git-wip-us.apache.org/repos/asf/isis/blob/6ae427cc/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
index 32d53e7..62f240b 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
@@ -31,6 +31,8 @@ import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
 import org.apache.wicket.behavior.AttributeAppender;
 import org.apache.wicket.behavior.Behavior;
 import org.apache.wicket.feedback.ComponentFeedbackMessageFilter;
+import org.apache.wicket.markup.head.IHeaderResponse;
+import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.form.LabeledWebMarkupContainer;
 import org.apache.wicket.markup.html.panel.Fragment;

http://git-wip-us.apache.org/repos/asf/isis/blob/6ae427cc/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java
index be3313d..779d5db 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java
@@ -37,6 +37,7 @@ import org.apache.wicket.markup.head.CssReferenceHeaderItem;
 import org.apache.wicket.markup.head.IHeaderResponse;
 import org.apache.wicket.markup.head.JavaScriptHeaderItem;
 import org.apache.wicket.markup.head.JavaScriptReferenceHeaderItem;
+import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
 import org.apache.wicket.markup.head.PriorityHeaderItem;
 import org.apache.wicket.markup.head.filter.HeaderResponseContainer;
 import org.apache.wicket.markup.html.WebMarkupContainer;
@@ -279,6 +280,10 @@ public abstract class PageAbstract extends WebPage implements ActionPromptProvid
         if(isModernBrowser()) {
             addBootLint(response);
         }
+
+        response.render(OnDomReadyHeaderItem.forScript(
+                "Wicket.Event.publish(Isis.Topic.FOCUS_FIRST_PROPERTY)"));
+
     }
 
     private void addBootLint(final IHeaderResponse response) {

http://git-wip-us.apache.org/repos/asf/isis/blob/6ae427cc/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/jquery.isis.wicket.viewer.js
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/jquery.isis.wicket.viewer.js b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/jquery.isis.wicket.viewer.js
index e59913c..8c91219 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/jquery.isis.wicket.viewer.js
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/jquery.isis.wicket.viewer.js
@@ -27,7 +27,8 @@ $(function() {
     window.Isis = {
         Topic: {
             OPEN_IN_NEW_TAB: 'openInNewTab',
-            FOCUS_FIRST_ACTION_PARAMETER: 'focusFirstActionParameter'
+            FOCUS_FIRST_PARAMETER: 'focusFirstParameter',
+            FOCUS_FIRST_PROPERTY: 'focusFirstProperty'
         },
         copyModalShown: false
     };
@@ -78,12 +79,18 @@ $(function() {
         if(win) { win.focus(); }
     });
 
-    Wicket.Event.subscribe(Isis.Topic.FOCUS_FIRST_ACTION_PARAMETER, function(jqEvent, modalWindowId) {
+    Wicket.Event.subscribe(Isis.Topic.FOCUS_FIRST_PARAMETER, function(jqEvent, modalWindowId) {
         setTimeout(function() {
             $('#'+modalWindowId).find('.inputFormTable.parameters').find('input,textarea,select').filter(':visible:first').focus();
         }, 0);
     });
 
+    Wicket.Event.subscribe(Isis.Topic.FOCUS_FIRST_PROPERTY, function(jqEvent) {
+        setTimeout(function() {
+            $(document).find('a.scalarValueEditInline').filter(':visible:first').focus();
+        }, 0);
+    });
+
     /* for modal dialogs */
     Wicket.Event.subscribe(Wicket.Event.Topic.AJAX_CALL_BEFORE_SEND, function(jqEvent, attributes, jqXHR, settings) {
         if (attributes.c !== window && !$('#'+attributes.c).hasClass('noVeil')) {


[13/43] isis git commit: ISIS-1603: renames PropertyEditStyle to PromptStyle

Posted by da...@apache.org.
http://git-wip-us.apache.org/repos/asf/isis/blob/8a4f6d68/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
index cfde571..984b3ee 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
@@ -37,7 +37,7 @@ import org.apache.wicket.markup.html.panel.Fragment;
 import org.apache.wicket.model.Model;
 
 import org.apache.isis.applib.annotation.ActionLayout;
-import org.apache.isis.applib.annotation.PropertyEditStyle;
+import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
@@ -52,6 +52,7 @@ import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.ComponentType;
 import org.apache.isis.viewer.wicket.ui.components.actionmenu.entityactions.AdditionalLinksPanel;
 import org.apache.isis.viewer.wicket.ui.components.property.PropertyEditFormExecutor;
+import org.apache.isis.viewer.wicket.ui.components.property.PropertyEditFormPanel;
 import org.apache.isis.viewer.wicket.ui.components.property.PropertyEditPanel;
 import org.apache.isis.viewer.wicket.ui.components.property.PropertyEditPromptHeaderPanel;
 import org.apache.isis.viewer.wicket.ui.components.scalars.TextFieldValueModel.ScalarModelProvider;
@@ -309,7 +310,7 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
     protected void addEditPropertyTo(
             final MarkupContainer scalarIfRegularFormGroup) {
 
-        if(scalarModel.isEditable() && scalarModel.getEditStyle() == PropertyEditStyle.DIALOG) {
+        if(scalarModel.isEditable() && scalarModel.getEditStyle() == PromptStyle.DIALOG) {
 
             final WebMarkupContainer editProperty = new WebMarkupContainer(ID_EDIT_PROPERTY);
             editProperty.setOutputMarkupId(true);
@@ -345,8 +346,8 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
 
     protected void configureInlineEditCallback() {
 
-        final PropertyEditStyle editStyle = this.scalarModel.getEditStyle();
-        if(editStyle == PropertyEditStyle.INLINE) {
+        final PromptStyle editStyle = this.scalarModel.getEditStyle();
+        if(editStyle == PromptStyle.INLINE) {
 
             if(editInlineLink != null) {
                 editInlineLink.add(new AjaxEventBehavior("click") {
@@ -360,7 +361,7 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
                         final PropertyEditFormExecutor formExecutor =
                                 new PropertyEditFormExecutor(ScalarPanelAbstract.this, scalarModel);
                         scalarModel.setFormExecutor(formExecutor);
-                        scalarIfRegularInlineEditForm = (WebMarkupContainer) getComponentFactoryRegistry().addOrReplaceComponent(
+                        scalarIfRegularInlineEditForm = (PropertyEditFormPanel) getComponentFactoryRegistry().addOrReplaceComponent(
                                 scalarTypeContainer, ID_SCALAR_IF_REGULAR_INLINE_EDIT_FORM, ComponentType.PROPERTY_EDIT_FORM, scalarModel);
 
                         scalarIfRegular.setVisible(false);

http://git-wip-us.apache.org/repos/asf/isis/blob/8a4f6d68/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
index ba6f4d2..e751380 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
@@ -40,7 +40,7 @@ import org.apache.wicket.validation.IValidatable;
 import org.apache.wicket.validation.IValidator;
 import org.apache.wicket.validation.ValidationError;
 
-import org.apache.isis.applib.annotation.PropertyEditStyle;
+import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.facets.SingleIntValueFacet;
 import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
@@ -191,7 +191,7 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
         addEditPropertyTo(scalarIfRegularFormGroup);
         configureInlineEditCallback();
 
-        if (scalarModel.isEditable() && scalarModel.getEditStyle() == PropertyEditStyle.INLINE) {
+        if (scalarModel.isEditable() && scalarModel.getEditStyle() == PromptStyle.INLINE) {
             textField.setVisibilityAllowed(false);
         } else {
             editInlineLink.setVisibilityAllowed(false);

http://git-wip-us.apache.org/repos/asf/isis/blob/8a4f6d68/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormPanelAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormPanelAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormPanelAbstract.java
index 762baa3..3350f91 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormPanelAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormPanelAbstract.java
@@ -42,7 +42,6 @@ import org.apache.isis.viewer.wicket.model.models.ActionPrompt;
 import org.apache.isis.viewer.wicket.model.models.ActionPromptProvider;
 import org.apache.isis.viewer.wicket.model.models.FormExecutor;
 import org.apache.isis.viewer.wicket.model.models.HasFormExecutor;
-import org.apache.isis.viewer.wicket.ui.components.property.PropertyEditFormExecutor;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarModelSubscriber;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelAbstract;
 import org.apache.isis.viewer.wicket.ui.components.scalars.TextFieldValueModel;
@@ -161,6 +160,8 @@ public abstract class PromptFormPanelAbstract<T extends IModel<?> & HasFormExecu
                     if(actionPromptIfAny != null) {
                         actionPromptIfAny.closePrompt(target);
                     }
+                    // HACK: redraw the entire page...
+                    target.add(parentPanel.getPage());
                 }
             };
             // so can submit with invalid content (eg mandatory params missing)


[09/43] isis git commit: ISIS-1603: renaames ExecutingPanel to FormExecutor, and moves implementation of PropertyEditPanel to new class (PropertyEditFormExecutor) so will be able to reuse.

Posted by da...@apache.org.
ISIS-1603: renaames ExecutingPanel to FormExecutor, and moves implementation of PropertyEditPanel to new class (PropertyEditFormExecutor) so will be able to reuse.

Also:
- started work on setting up the edit form in ScalarPanelAbstract#addEditPropertyTo ... not yet complete.
- renamed some local vars so consistent across all subclasses of ScalarPanelAbstract


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

Branch: refs/heads/master
Commit: 6a5c6f6e928a8d714194bc8d56d30a2262aa9593
Parents: f65f45c
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Sun Apr 23 10:26:22 2017 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Apr 27 13:25:37 2017 +0100

----------------------------------------------------------------------
 .../viewer/wicket/model/models/ActionModel.java |  12 +-
 .../wicket/model/models/ExecutingPanel.java     |  42 ----
 .../wicket/model/models/FormExecutor.java       |  42 ++++
 .../wicket/model/models/HasExecutingPanel.java  |   2 +-
 .../viewer/wicket/model/models/ScalarModel.java |  10 +-
 .../ui/components/actions/ActionPanel.java      |   6 +-
 .../property/PropertyEditFormExecutor.java      | 231 +++++++++++++++++++
 .../components/property/PropertyEditPanel.java  | 158 +------------
 .../components/scalars/ScalarPanelAbstract.html |  13 ++
 .../components/scalars/ScalarPanelAbstract.java |  24 +-
 .../scalars/ScalarPanelTextFieldAbstract.html   |  15 --
 .../scalars/ScalarPanelTextFieldAbstract.java   |  21 +-
 .../isisapplib/IsisBlobOrClobPanelAbstract.java |  26 +--
 .../scalars/primitive/BooleanPanel.java         |  22 +-
 .../scalars/reference/ReferencePanel.java       |  20 +-
 .../valuechoices/ValueChoicesSelect2Panel.java  |  28 +--
 .../ui/panels/PromptFormPanelAbstract.java      |  10 +-
 17 files changed, 385 insertions(+), 297 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/6a5c6f6e/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
index 0219729..981026b 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
@@ -340,7 +340,7 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> implements Has
             setArgument(argumentModel.getKey(), argumentModel.getValue().getObject());
         }
 
-        this.executingPanel = actionModel.executingPanel;
+        this.formExecutor = actionModel.formExecutor;
     }
 
     private void setArgumentsIfPossible(
@@ -677,19 +677,19 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> implements Has
 
     //////////////////////////////////////////////////
 
-    private ExecutingPanel executingPanel;
+    private FormExecutor formExecutor;
 
     /**
      * A hint passed from one Wicket UI component to another.
      *
      * Mot actually used by the model itself.
      */
-    public ExecutingPanel getExecutingPanel() {
-        return executingPanel;
+    public FormExecutor getFormExecutor() {
+        return formExecutor;
     }
 
-    public void setExecutingPanel(final ExecutingPanel executingPanel) {
-        this.executingPanel = executingPanel;
+    public void setFormExecutor(final FormExecutor formExecutor) {
+        this.formExecutor = formExecutor;
     }
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/6a5c6f6e/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ExecutingPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ExecutingPanel.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ExecutingPanel.java
deleted file mode 100644
index bc6c06e..0000000
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ExecutingPanel.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- *  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.model.models;
-
-import java.io.Serializable;
-
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.markup.html.form.Form;
-
-/**
- * Passed through the {@link ActionModel} or {@link ScalarModel}, allowing
- * two different Wicket UI components (eg owning <code>ActionPanel</code> and
- * <code>ActionParametersFormPanel</code> to interact.
- *
- * <p>
- *     REVIEW: this is a rather clunky design.  The executing panel
- *     isn't used by the model, and one panel is parent/creates of the other;
- *     is it necessary to decouple them to this degree?
- * </p>
- */
-public interface ExecutingPanel extends Serializable {
-
-    boolean executeAndProcessResults(AjaxRequestTarget target, Form<?> feedbackForm);
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/6a5c6f6e/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/FormExecutor.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/FormExecutor.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/FormExecutor.java
new file mode 100644
index 0000000..43802b7
--- /dev/null
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/FormExecutor.java
@@ -0,0 +1,42 @@
+/*
+ *  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.model.models;
+
+import java.io.Serializable;
+
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.markup.html.form.Form;
+
+/**
+ * Passed through the {@link ActionModel} or {@link ScalarModel}, allowing
+ * two different Wicket UI components (eg owning <code>ActionPanel</code> and
+ * <code>ActionParametersFormPanel</code> to interact.
+ *
+ * <p>
+ *     REVIEW: this is a rather clunky design.  The executing panel
+ *     isn't used by the model, and one panel is parent/creates of the other;
+ *     is it necessary to decouple them to this degree?
+ * </p>
+ */
+public interface FormExecutor extends Serializable {
+
+    boolean executeAndProcessResults(AjaxRequestTarget target, Form<?> feedbackForm);
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/6a5c6f6e/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/HasExecutingPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/HasExecutingPanel.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/HasExecutingPanel.java
index 2d0826f..33b376d 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/HasExecutingPanel.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/HasExecutingPanel.java
@@ -20,5 +20,5 @@
 package org.apache.isis.viewer.wicket.model.models;
 
 public interface HasExecutingPanel  {
-    ExecutingPanel getExecutingPanel();
+    FormExecutor getFormExecutor();
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/6a5c6f6e/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
index 06040a3..18e2830 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
@@ -1008,18 +1008,18 @@ public class ScalarModel extends EntityModel implements LinksProvider,HasExecuti
     // //////////////////////////////////////
 
 
-    private ExecutingPanel executingPanel;
+    private FormExecutor formExecutor;
 
     /**
      * A hint passed from one Wicket UI component to another.
      *
      * Mot actually used by the model itself.
      */
-    public ExecutingPanel getExecutingPanel() {
-        return executingPanel;
+    public FormExecutor getFormExecutor() {
+        return formExecutor;
     }
-    public void setExecutingPanel(final ExecutingPanel executingPanel) {
-        this.executingPanel = executingPanel;
+    public void setFormExecutor(final FormExecutor formExecutor) {
+        this.formExecutor = formExecutor;
     }
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/6a5c6f6e/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionPanel.java
index 1959ce6..aa0b8d5 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionPanel.java
@@ -43,7 +43,7 @@ import org.apache.isis.viewer.wicket.model.models.ActionPrompt;
 import org.apache.isis.viewer.wicket.model.models.BookmarkableModel;
 import org.apache.isis.viewer.wicket.model.models.BookmarkedPagesModel;
 import org.apache.isis.viewer.wicket.model.models.EntityModel;
-import org.apache.isis.viewer.wicket.model.models.ExecutingPanel;
+import org.apache.isis.viewer.wicket.model.models.FormExecutor;
 import org.apache.isis.viewer.wicket.ui.ComponentType;
 import org.apache.isis.viewer.wicket.ui.actionresponse.ActionResultResponse;
 import org.apache.isis.viewer.wicket.ui.actionresponse.ActionResultResponseHandlingStrategy;
@@ -62,7 +62,7 @@ import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
  * <p>
  * TODO: on results panel, have a button to resubmit?
  */
-public class ActionPanel extends PanelAbstract<ActionModel> implements ExecutingPanel {
+public class ActionPanel extends PanelAbstract<ActionModel> implements FormExecutor {
 
     private static final long serialVersionUID = 1L;
 
@@ -79,7 +79,7 @@ public class ActionPanel extends PanelAbstract<ActionModel> implements Executing
 
     public ActionPanel(final String id, final ActionModel actionModel) {
         super(id, actionModel);
-        actionModel.setExecutingPanel(this);
+        actionModel.setFormExecutor(this);
         buildGui(getActionModel());
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/6a5c6f6e/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditFormExecutor.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditFormExecutor.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditFormExecutor.java
new file mode 100644
index 0000000..ac26554
--- /dev/null
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditFormExecutor.java
@@ -0,0 +1,231 @@
+package org.apache.isis.viewer.wicket.ui.components.property;
+
+import java.util.List;
+import java.util.concurrent.Callable;
+
+import com.google.common.base.Throwables;
+
+import org.apache.wicket.MarkupContainer;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.markup.html.form.Form;
+
+import org.apache.isis.applib.services.command.Command;
+import org.apache.isis.applib.services.command.CommandContext;
+import org.apache.isis.applib.services.exceprecog.ExceptionRecognizer;
+import org.apache.isis.applib.services.exceprecog.ExceptionRecognizerComposite;
+import org.apache.isis.core.commons.authentication.AuthenticationSession;
+import org.apache.isis.core.commons.authentication.MessageBroker;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
+import org.apache.isis.core.metamodel.adapter.version.ConcurrencyException;
+import org.apache.isis.core.metamodel.services.ServicesInjector;
+import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
+import org.apache.isis.core.runtime.system.context.IsisContext;
+import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
+import org.apache.isis.core.runtime.system.session.IsisSessionFactory;
+import org.apache.isis.core.runtime.system.transaction.IsisTransactionManager;
+import org.apache.isis.viewer.wicket.model.models.FormExecutor;
+import org.apache.isis.viewer.wicket.model.models.ScalarModel;
+import org.apache.isis.viewer.wicket.ui.ComponentType;
+import org.apache.isis.viewer.wicket.ui.actionresponse.ActionResultResponseHandlingStrategy;
+import org.apache.isis.viewer.wicket.ui.pages.entity.EntityPage;
+import org.apache.isis.viewer.wicket.ui.util.Components;
+
+public class PropertyEditFormExecutor implements FormExecutor {
+
+    private MarkupContainer panel;
+    private final ScalarModel scalarModel;
+
+    public PropertyEditFormExecutor(final MarkupContainer panel, final ScalarModel scalarModel) {
+        this.panel = panel;
+        this.scalarModel = scalarModel;
+    }
+
+    @Override
+    public boolean executeAndProcessResults(
+            final AjaxRequestTarget target,
+            final Form<?> feedbackForm) {
+
+        Components.permanentlyHide(panel, ComponentType.ENTITY_ICON_AND_TITLE);
+
+        ObjectAdapter targetAdapter = null;
+        try {
+            targetAdapter = scalarModel.getParentObjectAdapterMemento().getObjectAdapter(
+                                AdapterManager.ConcurrencyChecking.CHECK,
+                                getPersistenceSession(), getSpecificationLoader());
+
+            // no concurrency exception, so continue...
+            return editTargetAndProcessResults(target, feedbackForm);
+
+        } catch (ConcurrencyException ex) {
+
+            // second attempt should succeed, because the Oid would have
+            // been updated in the attempt
+            if (targetAdapter == null) {
+                targetAdapter = scalarModel.getParentObjectAdapterMemento().getObjectAdapter(
+                                    AdapterManager.ConcurrencyChecking.CHECK,
+                        getPersistenceSession(), getSpecificationLoader());
+            }
+
+            // page redirect/handling
+            final EntityPage entityPage = new EntityPage(targetAdapter, null);
+            panel.setResponsePage(entityPage);
+
+            getMessageBroker().addWarning(ex.getMessage());
+            return false;
+        }
+
+    }
+
+    private boolean editTargetAndProcessResults(
+            final AjaxRequestTarget target,
+            final Form<?> feedbackForm) {
+
+        // validate the action parameters (if any)
+        final String invalidReasonIfAny = this.scalarModel.getReasonInvalidIfAny();
+
+        if (invalidReasonIfAny != null) {
+            raiseWarning(target, feedbackForm, invalidReasonIfAny);
+            return false;
+        }
+
+        final CommandContext commandContext = getServicesInjector().lookupService(CommandContext.class);
+        final Command command;
+        if (commandContext != null) {
+            command = commandContext.getCommand();
+            command.setExecutor(Command.Executor.USER);
+        } else {
+            command = null;
+        }
+
+        // the object store could raise an exception (eg uniqueness constraint)
+        // so we handle it here.
+        try {
+            // could be programmatic flushing, so must include in the try... finally
+
+            ObjectAdapter adapter = this.scalarModel.getParentObjectAdapterMemento().getObjectAdapter(
+                                        AdapterManager.ConcurrencyChecking.CHECK,
+                                        getPersistenceSession(), getSpecificationLoader());
+
+            final ObjectAdapter objectAdapter = this.scalarModel.applyValue(adapter);
+            // (borrowed some code previously in EntityModel)
+            if (objectAdapter != adapter) {
+                this.scalarModel.getParentObjectAdapterMemento().setAdapter(adapter);
+            }
+
+            // flush any queued changes, so concurrency or violation exceptions (if any)
+            // will be thrown here
+            getTransactionManager().flushTransaction();
+
+            // disabling concurrency checking after the layout XML (grid) feature
+            // was throwing an exception when rebuild grid after invoking edit prompt.
+            // not certain why that would be the case, but (following similar code for action prompt)
+            // think it should be safe to simply disable while recreating the page to re-render back to user.
+            final EntityPage entityPage =
+                    AdapterManager.ConcurrencyChecking.executeWithConcurrencyCheckingDisabled(
+                            new Callable<EntityPage>() {
+                                @Override public EntityPage call() throws Exception {
+                                    return new EntityPage(objectAdapter, null);
+                                }
+                            }
+                    );
+
+            panel.setResponsePage(entityPage);
+
+            return true;
+
+        } catch (RuntimeException ex) {
+
+            String message = recognizeException(ex, target, feedbackForm);
+
+            if (message != null) {
+                // no need to add to message broker, should already have been added...
+
+                if (feedbackForm == null) {
+                    // forward on instead to void page
+                    // (otherwise, we'll have rendered an action parameters page
+                    // and so we'll be staying on that page)
+                    ActionResultResponseHandlingStrategy.REDIRECT_TO_VOID
+                            .handleResults(panel, null, getIsisSessionFactory());
+                }
+
+                return false;
+            }
+
+            // not handled, so capture and propagate
+            if (command != null) {
+                command.setException(Throwables.getStackTraceAsString(ex));
+            }
+
+            throw ex;
+        }
+    }
+
+    private String recognizeException(RuntimeException ex, AjaxRequestTarget target, Form<?> feedbackForm) {
+
+        // REVIEW: this code is similar to stuff in EntityPropertiesForm, perhaps move up to superclass?
+        // REVIEW: similar code also in WebRequestCycleForIsis; combine?
+
+        // see if the exception is recognized as being a non-serious error
+        // (nb: similar code in WebRequestCycleForIsis, as a fallback)
+        List<ExceptionRecognizer> exceptionRecognizers = getServicesInjector()
+                .lookupServices(ExceptionRecognizer.class);
+        String recognizedErrorIfAny = new ExceptionRecognizerComposite(exceptionRecognizers).recognize(ex);
+        if (recognizedErrorIfAny != null) {
+
+            // recognized
+            raiseWarning(target, feedbackForm, recognizedErrorIfAny);
+
+            getTransactionManager().getCurrentTransaction().clearAbortCause();
+
+            // there's no need to abort the transaction, it will have already been done
+            // (in IsisTransactionManager#executeWithinTransaction(...)).
+        }
+        return recognizedErrorIfAny;
+    }
+
+    private void raiseWarning(AjaxRequestTarget target, Form<?> feedbackForm, String error) {
+        if(target != null && feedbackForm != null) {
+            target.add(feedbackForm);
+            feedbackForm.error(error);
+        } else {
+            getMessageBroker().addWarning(error);
+        }
+    }
+
+
+
+    // ///////////////////////////////////////////////////////////////////
+    // Dependencies (from IsisContext)
+    // ///////////////////////////////////////////////////////////////////
+
+    protected PersistenceSession getPersistenceSession() {
+        return getIsisSessionFactory().getCurrentSession().getPersistenceSession();
+    }
+
+    protected ServicesInjector getServicesInjector() {
+        return getIsisSessionFactory().getServicesInjector();
+    }
+
+    protected SpecificationLoader getSpecificationLoader() {
+        return getIsisSessionFactory().getSpecificationLoader();
+    }
+
+    protected IsisTransactionManager getTransactionManager() {
+        return getPersistenceSession().getTransactionManager();
+    }
+
+    protected MessageBroker getMessageBroker() {
+        return getAuthenticationSession().getMessageBroker();
+    }
+
+    protected IsisSessionFactory getIsisSessionFactory() {
+        return IsisContext.getSessionFactory();
+    }
+
+    protected AuthenticationSession getAuthenticationSession() {
+        return getIsisSessionFactory().getCurrentSession().getAuthenticationSession();
+    }
+
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/6a5c6f6e/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditPanel.java
index 5570903..146b4d0 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditPanel.java
@@ -19,21 +19,12 @@
 
 package org.apache.isis.viewer.wicket.ui.components.property;
 
-import java.util.List;
-import java.util.concurrent.Callable;
-
-import com.google.common.base.Throwables;
-
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.model.Model;
 
-import org.apache.isis.applib.services.command.Command;
-import org.apache.isis.applib.services.command.CommandContext;
-import org.apache.isis.applib.services.exceprecog.ExceptionRecognizer;
-import org.apache.isis.applib.services.exceprecog.ExceptionRecognizerComposite;
 import org.apache.isis.core.commons.authentication.MessageBroker;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
@@ -42,15 +33,14 @@ import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
 import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
 import org.apache.isis.core.runtime.system.transaction.IsisTransactionManager;
 import org.apache.isis.viewer.wicket.model.models.EntityModel;
-import org.apache.isis.viewer.wicket.model.models.ExecutingPanel;
+import org.apache.isis.viewer.wicket.model.models.FormExecutor;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.ComponentType;
-import org.apache.isis.viewer.wicket.ui.actionresponse.ActionResultResponseHandlingStrategy;
 import org.apache.isis.viewer.wicket.ui.pages.entity.EntityPage;
 import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
 
 public class PropertyEditPanel extends PanelAbstract<ScalarModel>
-        implements ExecutingPanel {
+        implements FormExecutor {
 
     private static final long serialVersionUID = 1L;
 
@@ -65,7 +55,7 @@ public class PropertyEditPanel extends PanelAbstract<ScalarModel>
 
     public PropertyEditPanel(final String id, final ScalarModel scalarModel) {
         super(id, new ScalarModel(scalarModel.getParentObjectAdapterMemento(), scalarModel.getPropertyMemento()));
-        getScalarModel().setExecutingPanel(this);
+        getScalarModel().setFormExecutor(this);
         buildGui(getScalarModel());
     }
 
@@ -153,155 +143,15 @@ public class PropertyEditPanel extends PanelAbstract<ScalarModel>
     @Override
     public boolean executeAndProcessResults(AjaxRequestTarget target, Form<?> feedbackForm) {
 
-        permanentlyHide(ComponentType.ENTITY_ICON_AND_TITLE);
-
-        ObjectAdapter targetAdapter = null;
-        try {
-            targetAdapter = getModel().getParentObjectAdapterMemento().getObjectAdapter(
-                    AdapterManager.ConcurrencyChecking.CHECK, getModel().getPersistenceSession(), getSpecificationLoader());
-
-            // no concurrency exception, so continue...
-            return editTargetAndProcessResults(target, feedbackForm);
-
-        } catch (ConcurrencyException ex) {
+        return new PropertyEditFormExecutor(this, getModel()).executeAndProcessResults(target, feedbackForm);
 
-            // second attempt should succeed, because the Oid would have
-            // been updated in the attempt
-            if (targetAdapter == null) {
-                targetAdapter = getModel().getParentObjectAdapterMemento().getObjectAdapter(
-                        AdapterManager.ConcurrencyChecking.CHECK, getModel().getPersistenceSession(),
-                        getSpecificationLoader());
-            }
-
-            // page redirect/handling
-            final EntityPage entityPage = new EntityPage(targetAdapter, null);
-            setResponsePage(entityPage);
 
-            getMessageBroker().addWarning(ex.getMessage());
-            return false;
-        }
     }
 
 
 
-    private boolean editTargetAndProcessResults(
-            final AjaxRequestTarget target,
-            final Form<?> feedbackForm) {
-
-        final ScalarModel scalarModel = getScalarModel();
-
-        // validate the action parameters (if any)
-        final String invalidReasonIfAny = scalarModel.getReasonInvalidIfAny();
-
-        if (invalidReasonIfAny != null) {
-            raiseWarning(target, feedbackForm, invalidReasonIfAny);
-            return false;
-        }
-
-        final CommandContext commandContext = getServicesInjector().lookupService(CommandContext.class);
-        final Command command;
-        if (commandContext != null) {
-            command = commandContext.getCommand();
-            command.setExecutor(Command.Executor.USER);
-        } else {
-            command = null;
-        }
-
-
-        // the object store could raise an exception (eg uniqueness constraint)
-        // so we handle it here.
-        try {
-            // could be programmatic flushing, so must include in the try... finally
 
-            ObjectAdapter adapter = getScalarModel().getParentObjectAdapterMemento()
-                    .getObjectAdapter(AdapterManager.ConcurrencyChecking.CHECK, getPersistenceSession(),
-                            getSpecificationLoader());
 
-            final ObjectAdapter objectAdapter = getScalarModel().applyValue(adapter);
-            // (borrowed some code previously in EntityModel)
-            if(objectAdapter != adapter) {
-                getModel().getParentObjectAdapterMemento().setAdapter(adapter);
-            }
-
-            // flush any queued changes, so concurrency or violation exceptions (if any)
-            // will be thrown here
-            getTransactionManager().flushTransaction();
-
-
-            // disabling concurrency checking after the layout XML (grid) feature
-            // was throwing an exception when rebuild grid after invoking edit prompt.
-            // not certain why that would be the case, but (following similar code for action prompt)
-            // think it should be safe to simply disable while recreating the page to re-render back to user.
-            final EntityPage entityPage =
-                    AdapterManager.ConcurrencyChecking.executeWithConcurrencyCheckingDisabled(
-                    new Callable<EntityPage>() {
-                        @Override public EntityPage call() throws Exception {
-                            return new EntityPage(objectAdapter, null);
-                        }
-                    }
-            );
-
-            setResponsePage(entityPage);
-
-            return true;
-
-        } catch (RuntimeException ex) {
-
-            String message = recognizeException(ex, target, feedbackForm);
-
-            if (message != null) {
-                // no need to add to message broker, should already have been added...
-
-                if(feedbackForm == null) {
-                    // forward on instead to void page
-                    // (otherwise, we'll have rendered an action parameters page
-                    // and so we'll be staying on that page)
-                    ActionResultResponseHandlingStrategy.REDIRECT_TO_VOID.handleResults(this, null, getIsisSessionFactory());
-                }
-
-                return false;
-            }
-
-            // not handled, so capture and propagate
-            if(command != null) {
-                command.setException(Throwables.getStackTraceAsString(ex));
-            }
-
-            throw ex;
-        }
-    }
-
-
-    private String recognizeException(RuntimeException ex, AjaxRequestTarget target, Form<?> feedbackForm) {
-        
-        // REVIEW: this code is similar to stuff in EntityPropertiesForm, perhaps move up to superclass?
-        // REVIEW: similar code also in WebRequestCycleForIsis; combine?
-        
-        // see if the exception is recognized as being a non-serious error
-        // (nb: similar code in WebRequestCycleForIsis, as a fallback)
-        List<ExceptionRecognizer> exceptionRecognizers = getServicesInjector().lookupServices(ExceptionRecognizer.class);
-        String recognizedErrorIfAny = new ExceptionRecognizerComposite(exceptionRecognizers).recognize(ex);
-        if(recognizedErrorIfAny != null) {
-
-            // recognized
-            raiseWarning(target, feedbackForm, recognizedErrorIfAny);
-
-            getTransactionManager().getCurrentTransaction().clearAbortCause();
-            
-            // there's no need to abort the transaction, it will have already been done
-            // (in IsisTransactionManager#executeWithinTransaction(...)).
-        }
-        return recognizedErrorIfAny;
-    }
-
-    public void raiseWarning(AjaxRequestTarget target, Form<?> feedbackForm, String error) {
-        if(target != null && feedbackForm != null) {
-            target.add(feedbackForm);
-            feedbackForm.error(error);
-        } else {
-            getMessageBroker().addWarning(error);
-        }
-    }
 
 
     ///////////////////////////////////////////////////////

http://git-wip-us.apache.org/repos/asf/isis/blob/6a5c6f6e/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.html
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.html b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.html
index 3e5887f..8029649 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.html
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.html
@@ -39,6 +39,19 @@
                                     <a wicket:id="editProperty"
                                        href="#"
                                        class="edit fa fa-pencil-square-o"/>
+                                    <div wicket:id="scalarValueEditInlineContainer">
+                                        <a
+                                                href="#"
+                                                name="scalarValueEditInline"
+                                                class="form-control input-sm scalarValueEditInline"
+                                                wicket:id="scalarValueEditInline">
+                                            <span wicket:id="scalarValueEditInlineLabel"></span>
+                                        </a>
+
+                                        <div wicket:id="propertyEditForm">
+                                            <div><span>property edit form</span></div>
+                                        </div>
+                                    </div>
                                 </span>
                             </span>
                             <span wicket:id="associatedActionLinksRight"

http://git-wip-us.apache.org/repos/asf/isis/blob/6a5c6f6e/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
index 140a587..135e9a2 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
@@ -296,7 +296,11 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
         markupContainer.addOrReplace(new NotificationPanel(ID_FEEDBACK, component, new ComponentFeedbackMessageFilter(component)));
     }
 
-    protected void addEditPropertyTo(final MarkupContainer markupContainer) {
+    protected void addEditPropertyTo(
+            final MarkupContainer markupContainer,
+            final WebMarkupContainer editInlineLink,
+            final Component scalarValueEditInlineContainer,
+            final Component propertyEditForm) {
 
         final PropertyEditStyle editStyle = this.scalarModel.getEditStyle();
         if(editStyle == PropertyEditStyle.DIALOG) {
@@ -331,6 +335,24 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
             markupContainer.addOrReplace(editProperty);
 
         } else {
+
+            if(editInlineLink != null) {
+                editInlineLink.add(new AjaxEventBehavior("click") {
+                    @Override
+                    protected void onEvent(final AjaxRequestTarget target) {
+                        editInlineLink.setVisible(false);
+                        propertyEditForm.setVisible(true);
+                        target.add(scalarValueEditInlineContainer);
+                    }
+
+                    @Override
+                    public boolean isEnabled(final Component component) {
+                        return true;
+                    }
+                });
+            }
+
+
             Components.permanentlyHide(markupContainer, ID_EDIT_PROPERTY);
         }
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/6a5c6f6e/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.html
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.html b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.html
index 8f4cc42..673e6e1 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.html
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.html
@@ -26,21 +26,6 @@
         <wicket:extend>
             <wicket:container wicket:id="scalarValueContainer"/>
 
-            <div wicket:id="scalarValueEditInlineContainer">
-                <a
-                        href="#"
-                        name="scalarValueEditInline"
-                        class="form-control input-sm scalarValueEditInline"
-                        wicket:id="scalarValueEditInline">
-                    <span wicket:id="scalarValueEditInlineLabel"></span>
-                </a>
-
-                <div wicket:id="propertyEditForm">
-                    <div><span>property edit form</span></div>
-                </div>
-
-            </div>
-
             <wicket:fragment wicket:id="text">
                 <input
                         type="text"

http://git-wip-us.apache.org/repos/asf/isis/blob/6a5c6f6e/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
index e00a34b..7e91968 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
@@ -27,8 +27,6 @@ import com.google.common.base.Strings;
 import org.apache.wicket.AttributeModifier;
 import org.apache.wicket.Component;
 import org.apache.wicket.MarkupContainer;
-import org.apache.wicket.ajax.AjaxEventBehavior;
-import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.behavior.Behavior;
 import org.apache.wicket.markup.ComponentTag;
 import org.apache.wicket.markup.html.WebMarkupContainer;
@@ -81,7 +79,7 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
 
     private WebMarkupContainer scalarValueEditInlineContainer;
     private WebMarkupContainer editInlineLink;
-    private WebMarkupContainer propertyEditForm;
+    private Component propertyEditForm;
 
     public ScalarPanelTextFieldAbstract(final String id, final ScalarModel scalarModel, final Class<T> cls) {
         super(id, scalarModel);
@@ -152,24 +150,13 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
         scalarValueEditInlineContainer.add(editInlineLink);
 
         propertyEditForm = new WebMarkupContainer("propertyEditForm");
+        //propertyEditForm = getComponentFactoryRegistry().addOrReplaceComponent(this, ComponentType.PROPERTY_EDIT_FORM, scalarModel);
+
         scalarValueEditInlineContainer.add(propertyEditForm);
 
         final Label editInlineLinkLabel = new Label(ID_SCALAR_VALUE_EDIT_INLINE_LABEL, textFieldModel);
         editInlineLink.add(editInlineLinkLabel);
 
-        editInlineLink.add(new AjaxEventBehavior("click") {
-            @Override
-            protected void onEvent(final AjaxRequestTarget target) {
-                editInlineLink.setVisible(false);
-                propertyEditForm.setVisible(true);
-                target.add(scalarValueEditInlineContainer);
-            }
-
-            @Override public boolean isEnabled(final Component component) {
-                return true;
-            }
-        });
-
         propertyEditForm.setVisible(false);
 
         final MarkupContainer scalarIfRegularFormGroup = createScalarIfRegularFormGroup();
@@ -203,7 +190,7 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
         }
 
         addFeedbackOnlyTo(scalarIfRegularFormGroup, getEditComponent());
-        addEditPropertyTo(scalarIfRegularFormGroup);
+        addEditPropertyTo(scalarIfRegularFormGroup, editInlineLink, scalarValueEditInlineContainer, propertyEditForm);
 
         // ... add entity links to panel (below and to right)
         addEntityActionLinksBelowAndRight(scalarIfRegularFormGroup, entityActions);

http://git-wip-us.apache.org/repos/asf/isis/blob/6a5c6f6e/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java
index 4090730..ba54edf 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java
@@ -92,36 +92,36 @@ public abstract class IsisBlobOrClobPanelAbstract<T extends NamedWithMimeType> e
         fileUploadField = createFileUploadField(ID_SCALAR_VALUE);
         fileUploadField.setLabel(Model.of(getModel().getName()));
         
-        final FormGroup labelIfRegular = new FormGroup(ID_SCALAR_IF_REGULAR, fileUploadField);
-        labelIfRegular.add(fileUploadField);
+        final FormGroup scalarIfRegularFormGroup = new FormGroup(ID_SCALAR_IF_REGULAR, fileUploadField);
+        scalarIfRegularFormGroup.add(fileUploadField);
     
         final Label scalarName = new Label(ID_SCALAR_NAME, getModel().getName());
-        labelIfRegular.add(scalarName);
+        scalarIfRegularFormGroup.add(scalarName);
 
         // find the links...
         final List<LinkAndLabel> entityActions = EntityActionUtil.getEntityActionLinksForAssociation(this.scalarModel, getDeploymentCategory());
 
-        addPositioningCssTo(labelIfRegular, entityActions);
+        addPositioningCssTo(scalarIfRegularFormGroup, entityActions);
 
         wicketImage = asWicketImage(ID_IMAGE);
         if(wicketImage != null) {
             wicketImage.setOutputMarkupId(true);
-            labelIfRegular.addOrReplace(wicketImage);
+            scalarIfRegularFormGroup.addOrReplace(wicketImage);
         } else {
-            Components.permanentlyHide(labelIfRegular, ID_IMAGE);
+            Components.permanentlyHide(scalarIfRegularFormGroup, ID_IMAGE);
         }
         
-        updateFileNameLabel(ID_FILE_NAME, labelIfRegular);
-        updateDownloadLink(ID_SCALAR_IF_REGULAR_DOWNLOAD, labelIfRegular);
+        updateFileNameLabel(ID_FILE_NAME, scalarIfRegularFormGroup);
+        updateDownloadLink(ID_SCALAR_IF_REGULAR_DOWNLOAD, scalarIfRegularFormGroup);
         
-        addOrReplace(labelIfRegular);
-        addFeedbackOnlyTo(labelIfRegular, fileUploadField);
-        addEditPropertyTo(labelIfRegular);
+        addOrReplace(scalarIfRegularFormGroup);
+        addFeedbackOnlyTo(scalarIfRegularFormGroup, fileUploadField);
+        addEditPropertyTo(scalarIfRegularFormGroup, null, null, null);
 
         // ... add entity links to panel (below and to right)
-        addEntityActionLinksBelowAndRight(labelIfRegular, entityActions);
+        addEntityActionLinksBelowAndRight(scalarIfRegularFormGroup, entityActions);
 
-        return labelIfRegular;
+        return scalarIfRegularFormGroup;
     }
 
     private Image asWicketImage(String id) {

http://git-wip-us.apache.org/repos/asf/isis/blob/6a5c6f6e/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java
index 75f766e..1e27073 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java
@@ -72,19 +72,19 @@ public class BooleanPanel extends ScalarPanelAbstract {
 
         checkBox.setLabel(Model.of(name));
 
-        final FormGroup labelIfRegular = new FormGroup(ID_SCALAR_IF_REGULAR, checkBox);
-        labelIfRegular.add(checkBox);
+        final FormGroup scalarIfRegularFormGroup = new FormGroup(ID_SCALAR_IF_REGULAR, checkBox);
+        scalarIfRegularFormGroup.add(checkBox);
         if(getModel().isRequired()) {
-            labelIfRegular.add(new CssClassAppender("mandatory"));
+            scalarIfRegularFormGroup.add(new CssClassAppender("mandatory"));
         }
 
         final String describedAs = getModel().getDescribedAs();
         if(describedAs != null) {
-            labelIfRegular.add(new AttributeModifier("title", Model.of(describedAs)));
+            scalarIfRegularFormGroup.add(new AttributeModifier("title", Model.of(describedAs)));
         }
         
         final Label scalarName = new Label(ID_SCALAR_NAME, getRendering().getLabelCaption(checkBox));
-        labelIfRegular.add(scalarName);
+        scalarIfRegularFormGroup.add(scalarName);
         NamedFacet namedFacet = getModel().getFacet(NamedFacet.class);
         if (namedFacet != null) {
             scalarName.setEscapeModelStrings(namedFacet.escaped());
@@ -92,16 +92,16 @@ public class BooleanPanel extends ScalarPanelAbstract {
 
         final List<LinkAndLabel> entityActions = EntityActionUtil.getEntityActionLinksForAssociation(this.scalarModel, getDeploymentCategory());
 
-        addPositioningCssTo(labelIfRegular, entityActions);
+        addPositioningCssTo(scalarIfRegularFormGroup, entityActions);
 
-        addOrReplace(labelIfRegular);
-        addFeedbackOnlyTo(labelIfRegular, checkBox);
-        addEditPropertyTo(labelIfRegular);
+        addOrReplace(scalarIfRegularFormGroup);
+        addFeedbackOnlyTo(scalarIfRegularFormGroup, checkBox);
+        addEditPropertyTo(scalarIfRegularFormGroup, null, null, null);
 
         // ... add entity links to panel (below and to right)
-        addEntityActionLinksBelowAndRight(labelIfRegular, entityActions);
+        addEntityActionLinksBelowAndRight(scalarIfRegularFormGroup, entityActions);
 
-        return labelIfRegular;
+        return scalarIfRegularFormGroup;
     }
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/6a5c6f6e/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
index fc4326e..114f3dd 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
@@ -136,16 +136,16 @@ public class ReferencePanel extends ScalarPanelAbstract {
         select2.component().setOutputMarkupId(true);
         select2.component().setLabel(Model.of(name));
 
-        final FormGroup labelIfRegular = new FormGroup(ID_SCALAR_IF_REGULAR, entityLink);
-        labelIfRegular.add(entityLink);
+        final FormGroup scalarIfRegularFormGroup = new FormGroup(ID_SCALAR_IF_REGULAR, entityLink);
+        scalarIfRegularFormGroup.add(entityLink);
 
         final String describedAs = getModel().getDescribedAs();
         if(describedAs != null) {
-            labelIfRegular.add(new AttributeModifier("title", Model.of(describedAs)));
+            scalarIfRegularFormGroup.add(new AttributeModifier("title", Model.of(describedAs)));
         }
 
         final Label scalarName = new Label(ID_SCALAR_NAME, getRendering().getLabelCaption(select2.component()));
-        labelIfRegular.add(scalarName);
+        scalarIfRegularFormGroup.add(scalarName);
         NamedFacet namedFacet = getModel().getFacet(NamedFacet.class);
         if (namedFacet != null) {
             scalarName.setEscapeModelStrings(namedFacet.escaped());
@@ -156,14 +156,14 @@ public class ReferencePanel extends ScalarPanelAbstract {
         final List<LinkAndLabel> entityActions =
                 EntityActionUtil.getEntityActionLinksForAssociation(this.scalarModel, getDeploymentCategory());
 
-        addPositioningCssTo(labelIfRegular, entityActions);
+        addPositioningCssTo(scalarIfRegularFormGroup, entityActions);
 
-        addOrReplace(labelIfRegular);
-        addFeedbackOnlyTo(labelIfRegular, select2.component()); // this is a placeholder; when select2.component() is available, we use that instead
-        addEditPropertyTo(labelIfRegular);
+        addOrReplace(scalarIfRegularFormGroup);
+        addFeedbackOnlyTo(scalarIfRegularFormGroup, select2.component()); // this is a placeholder; when select2.component() is available, we use that instead
+        addEditPropertyTo(scalarIfRegularFormGroup, null, null, null);
 
         // ... add entity links to panel (below and to right)
-        addEntityActionLinksBelowAndRight(labelIfRegular, entityActions);
+        addEntityActionLinksBelowAndRight(scalarIfRegularFormGroup, entityActions);
 
         // add semantics
         entityLink.setRequired(getModel().isRequired());
@@ -186,7 +186,7 @@ public class ReferencePanel extends ScalarPanelAbstract {
         if(getModel().isRequired()) {
             scalarName.add(new CssClassAppender("mandatory"));
         }
-        return labelIfRegular;
+        return scalarIfRegularFormGroup;
     }
 
     private Select2 createSelect2() {

http://git-wip-us.apache.org/repos/asf/isis/blob/6a5c6f6e/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
index c642413..75d8ed7 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
@@ -80,12 +80,12 @@ public class ValueChoicesSelect2Panel extends ScalarPanelAbstract implements Sca
         }
 
 
-        final MarkupContainer labelIfRegular = createFormComponentLabel();
+        final MarkupContainer scalarIfRegularFormGroup = createScalarIfRegularFormGroup();
         if(getModel().isRequired()) {
-            labelIfRegular.add(new CssClassAppender("mandatory"));
+            scalarIfRegularFormGroup.add(new CssClassAppender("mandatory"));
         }
         
-        addOrReplace(labelIfRegular);
+        addOrReplace(scalarIfRegularFormGroup);
 
         final Label scalarName = new Label(ID_SCALAR_NAME, getRendering().getLabelCaption(select2.component()));
         if(getModel().isRequired()) {
@@ -94,7 +94,7 @@ public class ValueChoicesSelect2Panel extends ScalarPanelAbstract implements Sca
                 scalarName.add(new CssClassAppender("mandatory"));
             }
         }
-        labelIfRegular.addOrReplace(scalarName);
+        scalarIfRegularFormGroup.addOrReplace(scalarName);
         NamedFacet namedFacet = getModel().getFacet(NamedFacet.class);
         if (namedFacet != null) {
             scalarName.setEscapeModelStrings(namedFacet.escaped());
@@ -103,15 +103,15 @@ public class ValueChoicesSelect2Panel extends ScalarPanelAbstract implements Sca
         // find the links...
         final List<LinkAndLabel> entityActions = EntityActionUtil.getEntityActionLinksForAssociation(this.scalarModel, getDeploymentCategory());
 
-        addPositioningCssTo(labelIfRegular, entityActions);
+        addPositioningCssTo(scalarIfRegularFormGroup, entityActions);
 
-        addFeedbackOnlyTo(labelIfRegular, select2.component());
-        addEditPropertyTo(labelIfRegular);
+        addFeedbackOnlyTo(scalarIfRegularFormGroup, select2.component());
+        addEditPropertyTo(scalarIfRegularFormGroup, null, null, null);
 
         // ... add entity links to panel (below and to right)
-        addEntityActionLinksBelowAndRight(labelIfRegular, entityActions);
+        addEntityActionLinksBelowAndRight(scalarIfRegularFormGroup, entityActions);
 
-        return labelIfRegular;
+        return scalarIfRegularFormGroup;
     }
 
     private List<ObjectAdapterMemento> getChoiceMementos(final ObjectAdapter[] argumentsIfAvailable) {
@@ -132,20 +132,20 @@ public class ValueChoicesSelect2Panel extends ScalarPanelAbstract implements Sca
         select2.setRequired(required);
     }
 
-    protected MarkupContainer createFormComponentLabel() {
+    protected MarkupContainer createScalarIfRegularFormGroup() {
         final String name = getModel().getName();
         select2.setLabel(Model.of(name));
 
-        final FormGroup labelIfRegular = new FormGroup(ID_SCALAR_IF_REGULAR, select2.component());
+        final FormGroup formGroup = new FormGroup(ID_SCALAR_IF_REGULAR, select2.component());
 
         final String describedAs = getModel().getDescribedAs();
         if(describedAs != null) {
-            labelIfRegular.add(new AttributeModifier("title", Model.of(describedAs)));
+            formGroup.add(new AttributeModifier("title", Model.of(describedAs)));
         }
 
-        labelIfRegular.add(select2.component());
+        formGroup.add(select2.component());
 
-        return labelIfRegular;
+        return formGroup;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/6a5c6f6e/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormPanelAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormPanelAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormPanelAbstract.java
index c815cb0..6447940 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormPanelAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormPanelAbstract.java
@@ -38,7 +38,7 @@ import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
 import org.apache.isis.viewer.wicket.model.models.ActionPrompt;
 import org.apache.isis.viewer.wicket.model.models.ActionPromptProvider;
-import org.apache.isis.viewer.wicket.model.models.ExecutingPanel;
+import org.apache.isis.viewer.wicket.model.models.FormExecutor;
 import org.apache.isis.viewer.wicket.model.models.HasExecutingPanel;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarModelSubscriber;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelAbstract;
@@ -57,7 +57,7 @@ import static org.hamcrest.CoreMatchers.nullValue;
  */
 public abstract class PromptFormPanelAbstract<T extends IModel<?> & HasExecutingPanel> extends PanelAbstract<T> {
 
-    protected final ExecutingPanel executingPanel;
+    protected final FormExecutor formExecutor;
 
     private static final String ID_OK_BUTTON = "okButton";
     private static final String ID_CANCEL_BUTTON = "cancelButton";
@@ -65,8 +65,8 @@ public abstract class PromptFormPanelAbstract<T extends IModel<?> & HasExecuting
 
     public PromptFormPanelAbstract(final String id, final T model) {
         super(id, model);
-        Ensure.ensureThatArg(model.getExecutingPanel(), is(not(nullValue())));
-        this.executingPanel = model.getExecutingPanel();
+        Ensure.ensureThatArg(model.getFormExecutor(), is(not(nullValue())));
+        this.formExecutor = model.getFormExecutor();
     }
 
     public static abstract class FormAbstract<T extends IModel<?>> extends Form<ObjectAdapter>
@@ -173,7 +173,7 @@ public abstract class PromptFormPanelAbstract<T extends IModel<?> & HasExecuting
                 final Form<?> form,
                 final AjaxButton ajaxButton,
                 final PromptFormPanelAbstract<?> parentPanel) {
-            boolean succeeded = parentPanel.executingPanel.executeAndProcessResults(target, form);
+            boolean succeeded = parentPanel.formExecutor.executeAndProcessResults(target, form);
             if(succeeded) {
                 // the Wicket ajax callbacks will have just started to hide the veil
                 // we now show it once more, so that a veil continues to be shown until the