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:15 UTC
[10/43] isis git commit: ISIS-1603: teases apart ScalarPanelAbstract.
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;