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

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

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;