You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2022/03/03 19:32:52 UTC
[isis] branch master updated: ISIS-2877: various regr. fixes
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git
The following commit(s) were added to refs/heads/master by this push:
new d01f223 ISIS-2877: various regr. fixes
d01f223 is described below
commit d01f223fc8d391a2627e26ad863280b567b33a7e
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Mar 3 20:30:36 2022 +0100
ISIS-2877: various regr. fixes
- also properly cancel scalar model edit when on inline prompt
---
.../wicket/model/models/InlinePromptContext.java | 28 +++++++-
.../viewer/wicket/model/models/ScalarModel.java | 1 +
.../ui/components/scalars/ScalarPanelAbstract.java | 82 ++++++++++++----------
.../blobclob/IsisBlobOrClobPanelAbstract.java | 3 +-
.../components/scalars/primitive/BooleanPanel.java | 6 +-
.../widgets/linkandlabel/ActionLink.java | 4 +-
.../wicket/ui/panels/PromptFormAbstract.java | 25 +------
7 files changed, 78 insertions(+), 71 deletions(-)
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/InlinePromptContext.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/InlinePromptContext.java
index 34fbf36..fffe4d7 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/InlinePromptContext.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/InlinePromptContext.java
@@ -24,22 +24,44 @@ import org.apache.wicket.Component;
import org.apache.wicket.MarkupContainer;
import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.isis.commons.internal.base._Either;
+import org.apache.isis.commons.internal.functions._Functions;
+
import lombok.Getter;
import lombok.RequiredArgsConstructor;
+import lombok.val;
-@Getter
@RequiredArgsConstructor
public class InlinePromptContext implements Serializable {
private static final long serialVersionUID = 1L;
+ private final ScalarModel scalarModel;
+
+ @Getter
+ private final MarkupContainer scalarTypeContainer;
+
private final Component scalarIfRegular;
private final WebMarkupContainer scalarIfRegularInlinePromptForm;
- private final MarkupContainer scalarTypeContainer;
- public void onCancel() {
+ public void onPrompt() {
+ scalarIfRegular.setVisible(false);
+ scalarIfRegularInlinePromptForm.setVisible(true);
+ }
+
+ public void onCancel(final _Either<ActionModel, ScalarPropertyModel> memberModel) {
+
+ memberModel
+ .accept(_Functions.noopConsumer(), prop->{
+ // reset the UI form input field to the untouched property value
+ val untouchedPropertyValue = prop.getManagedProperty().getPropertyValue();
+ scalarModel.setObject(untouchedPropertyValue);
+ });
+
scalarIfRegular.setVisible(true);
scalarIfRegularInlinePromptForm.setVisible(false);
+
}
+
}
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
index 5c08c09..f4ee515 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
@@ -350,4 +350,5 @@ implements HasRenderingHints, ScalarUiModel, LinksProvider, FormExecutorContext
}
+
}
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
index 09d0528..e4d8c43 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
@@ -106,10 +106,10 @@ implements ScalarModelSubscriber, HasScalarModel {
*/
public static final String ID_SCALAR_IF_REGULAR_INLINE_PROMPT_FORM = "scalarIfRegularInlinePromptForm";
- 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";
+ protected static final String ID_EDIT_PROPERTY = "editProperty";
+ protected static final String ID_FEEDBACK = "feedback";
+ protected static final String ID_ASSOCIATED_ACTION_LINKS_BELOW = "associatedActionLinksBelow";
+ protected static final String ID_ASSOCIATED_ACTION_LINKS_RIGHT = "associatedActionLinksRight";
public enum Repaint {
ENTIRE_FORM,
@@ -326,31 +326,37 @@ implements ScalarModelSubscriber, HasScalarModel {
componentIfCompact = createShallowComponentForCompact();
componentIfRegular.setVisible(true);
componentIfCompact.setVisible(false);
+ componentIfRegular.setOutputMarkupId(true); // enable as AJAX target
+
+ scalarTypeContainer.addOrReplace(componentIfCompact, componentIfRegular,
+ scalarIfRegularInlinePromptForm = createInlinePromptForm());
+
+ // 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 InlinePromptContext(
+ scalarModel,
+ scalarTypeContainer,
+ getComponentForRegular(), scalarIfRegularInlinePromptForm));
+
+ val associatedLinksAndLabels = associatedLinksAndLabels();
+ addPositioningCssTo(componentIfRegular, associatedLinksAndLabels);
+ addActionLinksBelowAndRight(componentIfRegular, associatedLinksAndLabels);
+
+ addFeedbackOnlyTo(componentIfRegular, getValidationFeedbackReceiver());
+
break;
default:
componentIfRegular = createShallowComponentForRegular();
componentIfCompact = createComponentForCompact();
componentIfRegular.setVisible(false);
componentIfCompact.setVisible(true);
- break;
- }
-
- componentIfRegular.setOutputMarkupId(true); // enable as AJAX target
- scalarTypeContainer.addOrReplace(componentIfCompact, componentIfRegular,
- scalarIfRegularInlinePromptForm = createInlinePromptForm());
+ scalarTypeContainer.addOrReplace(componentIfCompact, componentIfRegular,
+ scalarIfRegularInlinePromptForm = createInlinePromptForm());
- // find associated actions for this scalar property (only properties will have any.)
- final ScalarModel.AssociatedActions associatedActions =
- scalarModel.getAssociatedActions();
- val inlineActionIfAny =
- associatedActions.getFirstAssociatedWithInlineAsIfEdit();
- val remainingAssociated = associatedActions.getRemainingAssociated();
-
- // convert those actions into UI layer widgets
- final Can<LinkAndLabel> remainingLinkAndLabels = remainingAssociated.stream()
- .map(LinkAndLabelFactory.forPropertyOrParameter(scalarModel))
- .collect(Can.toCan());
+ break;
+ }
val inlinePromptConfig = getInlinePromptConfig();
if(inlinePromptConfig.isSupported()) {
@@ -358,13 +364,6 @@ implements ScalarModelSubscriber, HasScalarModel {
componentIfRegular
.add(inlinePromptLink = createInlinePromptLink());
- // 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 InlinePromptContext(
- getComponentForRegular(),
- scalarIfRegularInlinePromptForm, scalarTypeContainer));
-
// start off assuming that neither the property nor any of the associated actions
// are using inline prompts
@@ -378,6 +377,9 @@ implements ScalarModelSubscriber, HasScalarModel {
} else {
+ val inlineActionIfAny =
+ scalarModel.getAssociatedActions().getFirstAssociatedWithInlineAsIfEdit();
+
// not editable property, but maybe one of the actions is.
inlineActionIfAny
.map(LinkAndLabelFactory.forPropertyOrParameter(scalarModel))
@@ -404,18 +406,22 @@ implements ScalarModelSubscriber, HasScalarModel {
Wkt.noTabbing(getValidationFeedbackReceiver());
}
- addPositioningCssTo(componentIfRegular, remainingLinkAndLabels);
- addActionLinksBelowAndRight(componentIfRegular, remainingLinkAndLabels);
-
- addEditPropertyTo(componentIfRegular);
- addFeedbackOnlyTo(componentIfRegular, getValidationFeedbackReceiver());
-
+ addEditProperty();
addCssFromMetaModel();
notifyOnChange(this);
addFormComponentBehaviourToUpdateSubscribers();
}
+ private Can<LinkAndLabel> associatedLinksAndLabels() {
+ // find associated actions for this scalar property (only properties will have any.)
+ // convert those actions into UI layer widgets
+ return scalarModel.getAssociatedActions()
+ .getRemainingAssociated()
+ .stream()
+ .map(LinkAndLabelFactory.forPropertyOrParameter(scalarModel))
+ .collect(Can.toCan());
+ }
/**
* Builds the hidden REGULAR component when in COMPACT format.
* <p>Is added to {@link #scalarTypeContainer}.
@@ -666,6 +672,7 @@ implements ScalarModelSubscriber, HasScalarModel {
onSwitchFormForInlinePrompt(scalarIfRegularInlinePromptForm, target);
}
+
/**
* Optional hook.
*/
@@ -676,16 +683,15 @@ implements ScalarModelSubscriber, HasScalarModel {
// ///////////////////////////////////////////////////////////////////
- protected void addEditPropertyTo(
- final MarkupContainer scalarIfRegularFormGroup) {
+ protected void addEditProperty() {
if(scalarModel.canEnterEditMode() &&
(scalarModel.getPromptStyle().isDialog() ||
!getInlinePromptConfig().isSupported())) {
- val editProperty = Wkt.containerAdd(scalarIfRegularFormGroup, ID_EDIT_PROPERTY);
+ val editProperty = Wkt.containerAdd(componentIfRegular, ID_EDIT_PROPERTY);
Wkt.behaviorAddOnClick(editProperty, this::onPropertyEditClick);
} else {
- Components.permanentlyHide(scalarIfRegularFormGroup, ID_EDIT_PROPERTY);
+ Components.permanentlyHide(componentIfRegular, ID_EDIT_PROPERTY);
}
}
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/blobclob/IsisBlobOrClobPanelAbstract.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/blobclob/IsisBlobOrClobPanelAbstract.java
index e25336e..8c913de 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/blobclob/IsisBlobOrClobPanelAbstract.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/blobclob/IsisBlobOrClobPanelAbstract.java
@@ -111,7 +111,8 @@ extends ScalarPanelWithFormFieldAbstract<T> {
protected MarkupContainer createShallowComponentForRegular() {
val shallowRegular = super.createShallowComponentForRegular();
Components.permanentlyHide(shallowRegular,
- ID_IMAGE, ID_SCALAR_NAME, ID_SCALAR_VALUE, "feedback");
+ ID_IMAGE, ID_SCALAR_NAME, ID_SCALAR_VALUE, ID_FEEDBACK,
+ ID_ASSOCIATED_ACTION_LINKS_BELOW, ID_ASSOCIATED_ACTION_LINKS_RIGHT);
return shallowRegular;
}
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java
index df8cf3e..bca048eb 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java
@@ -65,13 +65,13 @@ extends ScalarPanelWithFormFieldAbstract<Boolean> {
@Override
protected Component createComponentForCompact() {
- val checkbox = Wkt.checkbox(
+ checkBox = Wkt.checkbox(
ID_SCALAR_IF_COMPACT,
BooleanModel.forScalarModel(scalarModel()),
scalarModel().isRequired(),
CheckBoxXConfig.Sizes.sm);
- checkbox.setEnabled(false); // will be enabled before rendering if required
- return checkbox;
+ checkBox.setEnabled(false); // will be enabled before rendering if required
+ return checkBox;
}
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLink.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLink.java
index 9d55c76..39517d9 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLink.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLink.java
@@ -250,8 +250,8 @@ extends IndicatingAjaxLink<ManagedObject> {
getComponentFactoryRegistry().addOrReplaceComponent(scalarTypeContainer,
ScalarPanelAbstract.ID_SCALAR_IF_REGULAR_INLINE_PROMPT_FORM, ComponentType.PARAMETERS, actionModel);
- inlinePromptContext.getScalarIfRegular().setVisible(false);
- inlinePromptContext.getScalarIfRegularInlinePromptForm().setVisible(true);
+ inlinePromptContext.onPrompt();
+
target.add(scalarTypeContainer);
}
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormAbstract.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormAbstract.java
index 937bcac..61d6cf8 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormAbstract.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormAbstract.java
@@ -35,19 +35,15 @@ import org.apache.isis.commons.internal.base._Either;
import org.apache.isis.commons.internal.collections._Lists;
import org.apache.isis.commons.internal.debug._Probe;
import org.apache.isis.commons.internal.debug._Probe.EntryPoint;
-import org.apache.isis.commons.internal.functions._Functions;
import org.apache.isis.core.metamodel.spec.ManagedObject;
-import org.apache.isis.core.metamodel.spec.ManagedObjects;
import org.apache.isis.viewer.wicket.model.hints.UiHintContainer;
import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
import org.apache.isis.viewer.wicket.model.models.ActionModel;
import org.apache.isis.viewer.wicket.model.models.ActionPromptProvider;
import org.apache.isis.viewer.wicket.model.models.FormExecutorContext;
-import org.apache.isis.viewer.wicket.model.models.ScalarModel;
import org.apache.isis.viewer.wicket.model.models.ScalarPropertyModel;
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.bootstrap.FormGroup;
import org.apache.isis.viewer.wicket.ui.pages.PageAbstract;
import org.apache.isis.viewer.wicket.ui.pages.entity.EntityPage;
import org.apache.isis.viewer.wicket.ui.util.Components;
@@ -139,25 +135,6 @@ implements ScalarModelSubscriber {
+ "action prompt.");
setLastFocusHint();
-
- getMemberModel()
- .accept(_Functions.noopConsumer(), prop->{
-
- // reset the UI form input field to the untouched property value
- val scalarContainer = prop.getInlinePromptContext().getScalarIfRegular();
- if(scalarContainer instanceof FormGroup) {
- val scalarFormComponent = ((FormGroup)scalarContainer).getFormComponent();
- if(scalarFormComponent.getDefaultModel() instanceof ScalarModel) {
- val untouchedPropertyValue = prop.getManagedProperty().getPropertyValue();
- scalarFormComponent.setDefaultModelObject(untouchedPropertyValue);
- } else {
- val untouchedPropertyValue = ManagedObjects.UnwrapUtil
- .single(prop.getManagedProperty().getPropertyValue());
- scalarFormComponent.setDefaultModelObject(untouchedPropertyValue);
- }
- }
-
- });
completePrompt(target);
}
@@ -224,7 +201,7 @@ implements ScalarModelSubscriber {
.setVisible(false);
// change visibility of inline components
- formExecutorContext().getInlinePromptContext().onCancel();
+ formExecutorContext().getInlinePromptContext().onCancel(getMemberModel());
Optional.ofNullable(formExecutorContext().getInlinePromptContext().getScalarTypeContainer())
.ifPresent(scalarTypeContainer->{