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/27 11:44:01 UTC
[3/4] isis git commit: ISIS-1603: removes some of the duplication
between ReferencesPanel and ValueChoicesSelect2Panel (introduces new
ScalarPanelSelect2Abstract superclass to hold this stuff).
ISIS-1603: removes some of the duplication between ReferencesPanel and ValueChoicesSelect2Panel (introduces new ScalarPanelSelect2Abstract superclass to hold this stuff).
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/ad6ce14e
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/ad6ce14e
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/ad6ce14e
Branch: refs/heads/ISIS-1603-no-xeditable
Commit: ad6ce14eeb1cbaa3ecfc9d73914292f6d253a249
Parents: 609f125
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Thu Apr 27 12:24:19 2017 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Apr 27 12:24:19 2017 +0100
----------------------------------------------------------------------
.../components/scalars/ScalarPanelAbstract.java | 25 ----
.../scalars/ScalarPanelSelect2Abstract.java | 121 +++++++++++++++++++
.../reference/EntityLinkSelect2Panel.java | 2 +-
.../scalars/reference/ReferencePanel.java | 90 +++++---------
.../valuechoices/ValueChoicesSelect2Panel.java | 113 ++++-------------
.../ui/components/widgets/select2/Select2.java | 29 ++---
.../ObjectAdapterMementoProviderForChoices.java | 48 ++++++++
...apterMementoProviderForReferenceChoices.java | 2 +-
...ctAdapterMementoProviderForValueChoices.java | 5 +-
9 files changed, 239 insertions(+), 196 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/ad6ce14e/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 a4e69ae..34d0529 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
@@ -19,7 +19,6 @@
package org.apache.isis.viewer.wicket.ui.components.scalars;
-import java.util.ArrayList;
import java.util.List;
import com.google.common.collect.Lists;
@@ -46,13 +45,10 @@ import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
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.mementos.ObjectAdapterMemento;
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;
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.ComponentType;
import org.apache.isis.viewer.wicket.ui.components.actionmenu.entityactions.AdditionalLinksPanel;
import org.apache.isis.viewer.wicket.ui.components.actionmenu.entityactions.EntityActionUtil;
@@ -65,7 +61,6 @@ import org.apache.isis.viewer.wicket.ui.components.scalars.isisapplib.IsisBlobOr
import org.apache.isis.viewer.wicket.ui.components.scalars.primitive.BooleanPanel;
import org.apache.isis.viewer.wicket.ui.components.scalars.reference.ReferencePanel;
import org.apache.isis.viewer.wicket.ui.components.scalars.valuechoices.ValueChoicesSelect2Panel;
-import org.apache.isis.viewer.wicket.ui.components.widgets.select2.Select2;
import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
import org.apache.isis.viewer.wicket.ui.util.Components;
import org.apache.isis.viewer.wicket.ui.util.CssClassAppender;
@@ -340,28 +335,8 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
}
-
-
// //////////////////////////////////////
- /**
- * For convenience of implementations that use a select2 dropdown ({@link ReferencePanel} and {@link ValueChoicesSelect2Panel}).
- */
- protected Select2 createSelect2(final String id) {
- final Select2 select2;
- if(getModel().isCollection()) {
- final IModel<ArrayList<ObjectAdapterMemento>> model = ScalarModelWithMultiPending.Util.createModel(scalarModel);
- select2 = Select2.newSelect2MultiChoice(id, model, scalarModel);
- } else {
- final IModel<ObjectAdapterMemento> model = ScalarModelWithPending.Util.createModel(scalarModel);
- select2 = Select2.newSelect2Choice(id, model, scalarModel);
- }
- return select2;
- }
-
-
-
- // //////////////////////////////////////
private final List<ScalarModelSubscriber> subscribers = Lists.newArrayList();
http://git-wip-us.apache.org/repos/asf/isis/blob/ad6ce14e/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelSelect2Abstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelSelect2Abstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelSelect2Abstract.java
new file mode 100644
index 0000000..5597368
--- /dev/null
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelSelect2Abstract.java
@@ -0,0 +1,121 @@
+/*
+ * 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 java.util.List;
+
+import com.google.common.base.Strings;
+
+import org.apache.wicket.AttributeModifier;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.FormComponent;
+import org.apache.wicket.model.Model;
+import org.wicketstuff.select2.ChoiceProvider;
+
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
+import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
+import org.apache.isis.viewer.wicket.model.models.ScalarModel;
+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.ObjectAdapterMementoProviderForChoices;
+import org.apache.isis.viewer.wicket.ui.util.CssClassAppender;
+
+public abstract class ScalarPanelSelect2Abstract extends ScalarPanelAbstract {
+
+ private static final long serialVersionUID = 1L;
+
+ protected Select2 select2;
+
+ public ScalarPanelSelect2Abstract(final String id, final ScalarModel scalarModel) {
+ super(id, scalarModel);
+ }
+
+
+ protected Select2 createSelect2(final String id) {
+ final Select2 select2 = Select2.createSelect2(id, scalarModel);
+ setProviderAndCurrAndPending(select2, scalarModel.getActionArgsHint());
+ select2.setRequired(scalarModel.isRequired());
+ return select2;
+ }
+
+ protected Label createScalarName(final String id) {
+ final Label scalarName = new Label(id, getRendering().getLabelCaption(select2.component()));
+ if(getModel().isRequired()) {
+ final String label = scalarName.getDefaultModelObjectAsString();
+ if(!Strings.isNullOrEmpty(label)) {
+ scalarName.add(new CssClassAppender("mandatory"));
+ }
+ }
+ NamedFacet namedFacet = getModel().getFacet(NamedFacet.class);
+ if (namedFacet != null) {
+ scalarName.setEscapeModelStrings(namedFacet.escaped());
+ }
+ return scalarName;
+ }
+
+ protected FormGroup createFormGroupAndName(
+ final FormComponent<?> component,
+ final String formGroupId, final String nameId) {
+ final FormGroup formGroup = new FormGroup(formGroupId, component);
+ final String describedAs = getModel().getDescribedAs();
+ if(describedAs != null) {
+ formGroup.add(new AttributeModifier("title", Model.of(describedAs)));
+ }
+ formGroup.add(component);
+
+ final Label scalarName = createScalarName(nameId);
+ formGroup.addOrReplace(scalarName);
+ return formGroup;
+ }
+
+ /**
+ * sets up the choices, also ensuring that any currently held value is compatible.
+ *
+ * <p>
+ * For convenience of subclasses using a select2.
+ * </p>
+ */
+ protected void setProviderAndCurrAndPending(final Select2 select2, ObjectAdapter[] argsIfAvailable) {
+
+ final ChoiceProvider<ObjectAdapterMemento> choiceProvider;
+ choiceProvider = buildChoiceProvider(argsIfAvailable);
+
+ select2.setProvider(choiceProvider);
+ getModel().clearPending();
+
+ if(choiceProvider instanceof ObjectAdapterMementoProviderForChoices) {
+ final ObjectAdapterMementoProviderForChoices providerForChoices = (ObjectAdapterMementoProviderForChoices) choiceProvider;
+ resetIfCurrentNotInChoices(select2, providerForChoices.getChoiceMementos());
+ }
+ }
+
+ /**
+ * Mandatory hook (is called by {@link #setProviderAndCurrAndPending(Select2, ObjectAdapter[])})
+ */
+ protected abstract ChoiceProvider<ObjectAdapterMemento> buildChoiceProvider(final ObjectAdapter[] argsIfAvailable);
+
+ /**
+ * Mandatory hook (is called by {@link #setProviderAndCurrAndPending(Select2, ObjectAdapter[])})
+ */
+ protected abstract void resetIfCurrentNotInChoices(final Select2 select2, final List<ObjectAdapterMemento> choicesMementos);
+
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/ad6ce14e/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/EntityLinkSelect2Panel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/EntityLinkSelect2Panel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/EntityLinkSelect2Panel.java
index 6aa26c9..6ebab43 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/EntityLinkSelect2Panel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/EntityLinkSelect2Panel.java
@@ -46,7 +46,7 @@ class EntityLinkSelect2Panel extends FormComponentPanelAbstract<ObjectAdapter> i
*/
@Override
public boolean checkRequired() {
- return owningPanel.select2.checkRequired();
+ return owningPanel.getSelect2().checkRequired();
}
/**
http://git-wip-us.apache.org/repos/asf/isis/blob/ad6ce14e/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 17be714..bc26781 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
@@ -41,7 +41,6 @@ import org.wicketstuff.select2.Settings;
import org.apache.isis.core.commons.config.IsisConfiguration;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager.ConcurrencyChecking;
-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;
@@ -51,7 +50,7 @@ import org.apache.isis.viewer.wicket.model.models.ScalarModel;
import org.apache.isis.viewer.wicket.ui.ComponentFactory;
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.components.scalars.ScalarPanelAbstract;
+import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelSelect2Abstract;
import org.apache.isis.viewer.wicket.ui.components.widgets.bootstrap.FormGroup;
import org.apache.isis.viewer.wicket.ui.components.widgets.entitysimplelink.EntityLinkSimplePanel;
import org.apache.isis.viewer.wicket.ui.components.widgets.select2.Select2;
@@ -59,13 +58,12 @@ import org.apache.isis.viewer.wicket.ui.components.widgets.select2.providers.Obj
import org.apache.isis.viewer.wicket.ui.components.widgets.select2.providers.ObjectAdapterMementoProviderForReferenceObjectAutoComplete;
import org.apache.isis.viewer.wicket.ui.components.widgets.select2.providers.ObjectAdapterMementoProviderForReferenceParamOrPropertyAutoComplete;
import org.apache.isis.viewer.wicket.ui.util.Components;
-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 implements PanelWithChoices {
+public class ReferencePanel extends ScalarPanelSelect2Abstract implements PanelWithChoices {
private static final long serialVersionUID = 1L;
@@ -79,8 +77,6 @@ public class ReferencePanel extends ScalarPanelAbstract implements PanelWithChoi
private static final String KEY_DISABLE_DEPENDENT_CHOICE_AUTO_SELECTION = "isis.viewer.wicket.disableDependentChoiceAutoSelection";
private EntityLinkSelect2Panel entityLink;
- Select2 select2;
-
private EntityLinkSimplePanel entitySimpleLink;
@@ -89,6 +85,11 @@ public class ReferencePanel extends ScalarPanelAbstract implements PanelWithChoi
super(id, scalarModel);
}
+
+ Select2 getSelect2() {
+ return select2;
+ }
+
// //////////////////////////////////////
// First called as a side-effect of {@link #beforeRender()}
@@ -112,9 +113,7 @@ public class ReferencePanel extends ScalarPanelAbstract implements PanelWithChoi
// First called as a side-effect of {@link #beforeRender()}
@Override
protected FormGroup createComponentForRegular() {
- final ScalarModel scalarModel = getModel();
- final String name = scalarModel.getName();
-
+
entityLink = new EntityLinkSelect2Panel(ComponentType.ENTITY_LINK.getWicketId(), this);
entityLink.setRequired(getModel().isRequired());
@@ -126,35 +125,19 @@ public class ReferencePanel extends ScalarPanelAbstract implements PanelWithChoi
setOutputMarkupId(true);
entityLink.setOutputMarkupId(true);
select2.component().setOutputMarkupId(true);
- select2.component().setLabel(Model.of(name));
-
- final FormGroup scalarIfRegularFormGroup = new FormGroup(ID_SCALAR_IF_REGULAR, entityLink);
- scalarIfRegularFormGroup.add(entityLink);
-
- final String describedAs = getModel().getDescribedAs();
- if(describedAs != null) {
- scalarIfRegularFormGroup.add(new AttributeModifier("title", Model.of(describedAs)));
- }
-
- final Label scalarName = new Label(ID_SCALAR_NAME, getRendering().getLabelCaption(select2.component()));
- scalarIfRegularFormGroup.add(scalarName);
- NamedFacet namedFacet = getModel().getFacet(NamedFacet.class);
- if (namedFacet != null) {
- scalarName.setEscapeModelStrings(namedFacet.escaped());
- }
- if(getModel().isRequired()) {
- scalarName.add(new CssClassAppender("mandatory"));
- }
+ final String name = scalarModel.getName();
+ select2.setLabel(Model.of(name));
+ final FormGroup formGroup = createFormGroupAndName(this.entityLink, ID_SCALAR_IF_REGULAR, ID_SCALAR_NAME);
// add semantics
- entityLink.setRequired(getModel().isRequired());
- entityLink.add(new IValidator<ObjectAdapter>() {
-
+ this.entityLink.setRequired(getModel().isRequired());
+ this.entityLink.add(new IValidator<ObjectAdapter>() {
+
private static final long serialVersionUID = 1L;
-
+
@Override
public void validate(final IValidatable<ObjectAdapter> validatable) {
final ObjectAdapter proposedAdapter = validatable.getValue();
@@ -167,8 +150,7 @@ public class ReferencePanel extends ScalarPanelAbstract implements PanelWithChoi
}
});
-
- return scalarIfRegularFormGroup;
+ return formGroup;
}
@Override
@@ -180,7 +162,6 @@ public class ReferencePanel extends ScalarPanelAbstract implements PanelWithChoi
final Select2 select2 = createSelect2(ID_AUTO_COMPLETE);
- setProviderAndCurrAndPending(select2, getModel().getActionArgsHint());
final Settings settings = select2.getSettings();
@@ -206,6 +187,8 @@ public class ReferencePanel extends ScalarPanelAbstract implements PanelWithChoi
return select2;
}
+
+
// //////////////////////////////////////
@Override
@@ -378,32 +361,19 @@ public class ReferencePanel extends ScalarPanelAbstract implements PanelWithChoi
// setProviderAndCurrAndPending
// //////////////////////////////////////
- // called by syncWithInput, updateChoices
- private void setProviderAndCurrAndPending(
- final Select2 select2,
- final ObjectAdapter[] argsIfAvailable) {
+ @Override
+ protected ChoiceProvider<ObjectAdapterMemento> buildChoiceProvider(final ObjectAdapter[] argsIfAvailable) {
- ChoiceProvider<ObjectAdapterMemento> providerForChoices;
if (getModel().hasChoices()) {
List<ObjectAdapterMemento> choiceMementos = obtainChoiceMementos(argsIfAvailable);
- providerForChoices =
- new ObjectAdapterMementoProviderForReferenceChoices(getModel(), wicketViewerSettings, choiceMementos);
-
- } else if(getModel().hasAutoComplete()) {
- providerForChoices =
- new ObjectAdapterMementoProviderForReferenceParamOrPropertyAutoComplete(getModel(), wicketViewerSettings);
- } else {
- providerForChoices =
- new ObjectAdapterMementoProviderForReferenceObjectAutoComplete(getModel(), wicketViewerSettings);
+ return new ObjectAdapterMementoProviderForReferenceChoices(getModel(), wicketViewerSettings, choiceMementos);
}
- select2.setProvider(providerForChoices);
- getModel().clearPending();
-
- if(providerForChoices instanceof ObjectAdapterMementoProviderForReferenceChoices) {
- final ObjectAdapterMementoProviderForReferenceChoices provider = (ObjectAdapterMementoProviderForReferenceChoices) providerForChoices;
- resetIfCurrentNotInChoices(select2, provider.getChoiceMementos());
+ if(getModel().hasAutoComplete()) {
+ return new ObjectAdapterMementoProviderForReferenceParamOrPropertyAutoComplete(getModel(), wicketViewerSettings);
}
+
+ return new ObjectAdapterMementoProviderForReferenceObjectAutoComplete(getModel(), wicketViewerSettings);
}
// called by setProviderAndCurrAndPending
@@ -417,7 +387,8 @@ public class ReferencePanel extends ScalarPanelAbstract implements PanelWithChoi
}
// called by setProviderAndCurrAndPending
- private void resetIfCurrentNotInChoices(final Select2 select2, final List<ObjectAdapterMemento> choiceMementos) {
+ @Override
+ protected void resetIfCurrentNotInChoices(final Select2 select2, final List<ObjectAdapterMemento> choiceMementos) {
final ObjectAdapterMemento curr = select2.getModelObject();
if(!getModel().isCollection()) {
@@ -499,12 +470,11 @@ public class ReferencePanel extends ScalarPanelAbstract implements PanelWithChoi
*/
@Override
public boolean updateChoices(ObjectAdapter[] argsIfAvailable) {
- if(select2 != null) {
- setProviderAndCurrAndPending(select2, argsIfAvailable);
- return true;
- } else {
+ if (select2 == null) {
return false;
}
+ setProviderAndCurrAndPending(select2, argsIfAvailable);
+ return true;
}
http://git-wip-us.apache.org/repos/asf/isis/blob/ad6ce14e/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 fe823ec..b64b6cc 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
@@ -18,7 +18,6 @@ package org.apache.isis.viewer.wicket.ui.components.scalars.valuechoices;
import java.util.List;
-import com.google.common.base.Strings;
import com.google.common.collect.Lists;
import org.apache.wicket.AttributeModifier;
@@ -32,23 +31,21 @@ import org.apache.wicket.model.Model;
import org.wicketstuff.select2.ChoiceProvider;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
import org.apache.isis.viewer.wicket.model.models.ScalarModel;
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.scalars.ScalarPanelSelect2Abstract;
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 PanelWithChoices {
+public class ValueChoicesSelect2Panel extends ScalarPanelSelect2Abstract implements PanelWithChoices {
private static final long serialVersionUID = 1L;
- private Select2 select2;
public ValueChoicesSelect2Panel(final String id, final ScalarModel scalarModel) {
super(id, scalarModel);
@@ -62,45 +59,24 @@ public class ValueChoicesSelect2Panel extends ScalarPanelAbstract implements Pan
// same pattern as in ReferencePanel
if(select2 == null) {
- this.select2 = createSelect2AndSemantics();
-
- final ObjectAdapter[] actionArgsHint = scalarModel.getActionArgsHint();
- setProviderAndCurrAndPending(select2, actionArgsHint);
- addStandardSemantics(select2);
+ this.select2 = createSelect2(ID_SCALAR_VALUE);
} else {
select2.clearInput();
}
- final MarkupContainer scalarIfRegularFormGroup = createScalarIfRegularFormGroup();
- if(getModel().isRequired()) {
- scalarIfRegularFormGroup.add(new CssClassAppender("mandatory"));
- }
+ final String name = getModel().getName();
+ select2.setLabel(Model.of(name));
+
+ final FormGroup formGroup = createFormGroupAndName(select2.component(), ID_SCALAR_IF_REGULAR, ID_SCALAR_NAME);
- final Label scalarName = new Label(ID_SCALAR_NAME, getRendering().getLabelCaption(select2.component()));
if(getModel().isRequired()) {
- final String label = scalarName.getDefaultModelObjectAsString();
- if(!Strings.isNullOrEmpty(label)) {
- scalarName.add(new CssClassAppender("mandatory"));
- }
- }
- scalarIfRegularFormGroup.addOrReplace(scalarName);
- NamedFacet namedFacet = getModel().getFacet(NamedFacet.class);
- if (namedFacet != null) {
- scalarName.setEscapeModelStrings(namedFacet.escaped());
+ formGroup.add(new CssClassAppender("mandatory"));
}
- return scalarIfRegularFormGroup;
+ return formGroup;
}
- private Select2 createSelect2AndSemantics() {
- final Select2 select2 = createSelect2(ID_SCALAR_VALUE);
-
- final ObjectAdapter[] actionArgsHint = scalarModel.getActionArgsHint();
- setProviderAndCurrAndPending(select2, actionArgsHint);
- addStandardSemantics(select2);
- return select2;
- }
protected Component getScalarValueComponent() {
return select2.component();
@@ -114,32 +90,6 @@ public class ValueChoicesSelect2Panel extends ScalarPanelAbstract implements Pan
return Lists.newArrayList(Lists.transform(choices, ObjectAdapterMemento.Functions.fromAdapter()));
}
- protected void addStandardSemantics(final Select2 select2) {
- setRequiredIfSpecified(select2);
- }
-
- private void setRequiredIfSpecified(final Select2 select2) {
- final ScalarModel scalarModel = getModel();
- final boolean required = scalarModel.isRequired();
- select2.setRequired(required);
- }
-
- protected MarkupContainer createScalarIfRegularFormGroup() {
- final String name = getModel().getName();
- select2.setLabel(Model.of(name));
-
- final FormGroup formGroup = new FormGroup(ID_SCALAR_IF_REGULAR, select2.component());
-
- final String describedAs = getModel().getDescribedAs();
- if(describedAs != null) {
- formGroup.add(new AttributeModifier("title", Model.of(describedAs)));
- }
-
- formGroup.add(select2.component());
-
- return formGroup;
- }
-
// ///////////////////////////////////////////////////////////////////
@Override
@@ -160,7 +110,6 @@ public class ValueChoicesSelect2Panel extends ScalarPanelAbstract implements Pan
}
-
// ///////////////////////////////////////////////////////////////////
@Override
@@ -206,12 +155,11 @@ public class ValueChoicesSelect2Panel extends ScalarPanelAbstract implements Pan
@Override
public boolean updateChoices(ObjectAdapter[] argsIfAvailable) {
- if(select2 != null) {
- setProviderAndCurrAndPending(select2, argsIfAvailable);
- return true;
- } else {
+ if (select2 == null) {
return false;
}
+ setProviderAndCurrAndPending(select2, argsIfAvailable);
+ return true;
}
/**
@@ -224,42 +172,29 @@ public class ValueChoicesSelect2Panel extends ScalarPanelAbstract implements Pan
target.add(select2.component());
}
- /**
- * sets up the choices, also ensuring that any currently held value is compatible.
- */
- private void setProviderAndCurrAndPending(final Select2 select2, ObjectAdapter[] argsIfAvailable) {
-
- final ChoiceProvider<ObjectAdapterMemento> provider;
- // in corresponding code in ReferencePanelFactory, these is a branch for different types of providers
- // (choice vs autoComplete). Here though - because values don't currently support autoComplete - no branch is required
+ // in corresponding code in ReferencePanelFactory, these is a branch for different types of providers
+ // (choice vs autoComplete). Here though - because values don't currently support autoComplete - no branch is required
+ @Override
+ protected ChoiceProvider<ObjectAdapterMemento> buildChoiceProvider(final ObjectAdapter[] argsIfAvailable) {
final List<ObjectAdapterMemento> choicesMementos = getChoiceMementos(argsIfAvailable);
- provider = newChoiceProvider(choicesMementos);
-
- select2.setProvider(provider);
- getModel().clearPending();
-
- if(provider instanceof ObjectAdapterMementoProviderForValueChoices) {
- final ObjectAdapterMementoProviderForValueChoices providerFixed = (ObjectAdapterMementoProviderForValueChoices) provider;
- final List<ObjectAdapterMemento> choicesMementos1 = providerFixed.getChoicesMementos();
- resetIfCurrentNotInChoices(select2, choicesMementos1);
- }
- }
-
- 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) {
+ @Override
+ protected void resetIfCurrentNotInChoices(final Select2 select2, final List<ObjectAdapterMemento> choicesMementos) {
+ final ObjectAdapterMemento curr = getModel().getObjectAdapterMemento();
+
+ if(curr == null) {
+
select2.getModel().setObject(null);
+
} else {
if(!getModel().isCollection()) {
// if currently held value is not compatible with choices, then replace with the first choice
- if(!choicesMementos.contains(objectAdapterMemento)) {
+ if(!choicesMementos.contains(curr)) {
final ObjectAdapterMemento newAdapterMemento =
choicesMementos.isEmpty()
http://git-wip-us.apache.org/repos/asf/isis/blob/ad6ce14e/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 b2c89fe..5bfa8ee 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
@@ -34,6 +34,8 @@ import org.wicketstuff.select2.Settings;
import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
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;
/**
* Wrapper around either a {@link Select2Choice} or a {@link Select2MultiChoice}.
@@ -45,23 +47,16 @@ public class Select2 implements Serializable {
final Select2ChoiceExt select2Choice;
final Select2MultiChoiceExt select2MultiChoice;
- public static Select2 newSelect2Choice(
- final String id,
- final IModel<ObjectAdapterMemento> singleModel, final ScalarModel parentModel) {
- return new Select2(
- Select2ChoiceExt.create(id, singleModel, parentModel),
- null
- );
- }
-
- public static Select2 newSelect2MultiChoice(
- final String id,
- final IModel<ArrayList<ObjectAdapterMemento>> multiModel,
- final ScalarModel parentModel) {
- return new Select2(
- null,
- Select2MultiChoiceExt.create(id, multiModel, parentModel)
- );
+ public static Select2 createSelect2(final String id, final ScalarModel scalarModel) {
+ return scalarModel.isCollection()
+ ? new Select2(
+ null,
+ Select2MultiChoiceExt.create(id,
+ ScalarModelWithMultiPending.Util.createModel(scalarModel), scalarModel))
+ : new Select2(
+ Select2ChoiceExt.create(id,
+ ScalarModelWithPending.Util.createModel(scalarModel), scalarModel),
+ null);
}
private Select2(
http://git-wip-us.apache.org/repos/asf/isis/blob/ad6ce14e/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForChoices.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForChoices.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForChoices.java
new file mode 100644
index 0000000..36213eb
--- /dev/null
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForChoices.java
@@ -0,0 +1,48 @@
+/*
+ * 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.
+ */
+/*
+ * 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.widgets.select2.providers;
+
+import java.util.List;
+
+import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
+
+public interface ObjectAdapterMementoProviderForChoices {
+
+ List<ObjectAdapterMemento> getChoiceMementos();
+
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/ad6ce14e/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForReferenceChoices.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForReferenceChoices.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForReferenceChoices.java
index 3459fdb..361b1ca 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForReferenceChoices.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForReferenceChoices.java
@@ -48,7 +48,7 @@ import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
import org.apache.isis.viewer.wicket.model.models.ScalarModel;
public class ObjectAdapterMementoProviderForReferenceChoices
- extends ObjectAdapterMementoProviderAbstract {
+ extends ObjectAdapterMementoProviderAbstract implements ObjectAdapterMementoProviderForChoices {
private static final long serialVersionUID = 1L;
private final List<ObjectAdapterMemento> choiceMementos;
http://git-wip-us.apache.org/repos/asf/isis/blob/ad6ce14e/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForValueChoices.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForValueChoices.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForValueChoices.java
index e17a202..2dcd0ae 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForValueChoices.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForValueChoices.java
@@ -48,7 +48,7 @@ import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
import org.apache.isis.viewer.wicket.model.models.ScalarModel;
public class ObjectAdapterMementoProviderForValueChoices
- extends ObjectAdapterMementoProviderAbstract {
+ extends ObjectAdapterMementoProviderAbstract implements ObjectAdapterMementoProviderForChoices {
private static final long serialVersionUID = 1L;
private final List<ObjectAdapterMemento> choicesMementos;
@@ -66,7 +66,7 @@ public class ObjectAdapterMementoProviderForValueChoices
return obtainMementos(term, choicesMementos);
}
- public List<ObjectAdapterMemento> getChoicesMementos() {
+ public List<ObjectAdapterMemento> getChoiceMementos() {
return choicesMementos;
}
@@ -84,5 +84,4 @@ public class ObjectAdapterMementoProviderForValueChoices
return Lists.newArrayList(FluentIterable.from(mementos).filter(lookupOam).toList());
}
-
}