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;