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/26 22:17:07 UTC
isis git commit: ISIS-1603: value choices and reference panel now
working adequately with inline prompt.
Repository: isis
Updated Branches:
refs/heads/ISIS-1603-no-xeditable 3dccc4c17 -> 2d3232a90
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/2d3232a9
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/2d3232a9
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/2d3232a9
Branch: refs/heads/ISIS-1603-no-xeditable
Commit: 2d3232a90ef1e0251539cc3ad7d4a880e73fe8d9
Parents: 3dccc4c
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: Wed Apr 26 23:16:59 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/2d3232a9/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 f948384..2e57e8b 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.
*/
@@ -368,16 +438,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)
@@ -389,78 +452,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() {
@@ -508,13 +554,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);
@@ -530,7 +582,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/2d3232a9/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/2d3232a9/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/2d3232a9/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/2d3232a9/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/2d3232a9/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/2d3232a9/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/2d3232a9/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() {