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 2013/08/21 01:42:42 UTC
[1/5] git commit: ISIS-478: starting work on dependencies between
action parameters.
Updated Branches:
refs/heads/master a9ff5e66d -> 2ab9e6615
ISIS-478: starting work on dependencies between action parameters.
* ToDoItem now has category and subcategory properties
- disabled
- ToDoItem#updateCategory action now updates both
* introducing subscriber logic between ActionParametersFormPanel and the ScalarPanelAbstract (subclasses)
also:
- deleted ProcessObjectPanelAbstract, not formal API and not used
- deleted DropDownChoicesForXxx, superceded a while back by the Select2Choices
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/d114c453
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/d114c453
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/d114c453
Branch: refs/heads/master
Commit: d114c453c68845396a0fc31ad5cba4bcf16ebd14
Parents: a9ff5e6
Author: Dan Haywood <da...@apache.org>
Authored: Tue Aug 20 14:54:46 2013 +0100
Committer: Dan Haywood <da...@apache.org>
Committed: Tue Aug 20 15:19:59 2013 +0100
----------------------------------------------------------------------
STATUS | 8 +-
.../actions/ActionParametersFormPanel.java | 56 ++++++-
.../scalars/ScalarModelSubscriber.java | 25 +++
.../components/scalars/ScalarPanelAbstract.java | 34 +++-
.../scalars/ScalarPanelTextFieldAbstract.java | 7 +
.../isisapplib/IsisBlobOrClobPanelAbstract.java | 11 +-
.../scalars/isisapplib/IsisBlobPanel.java | 2 +
.../scalars/primitive/BooleanPanel.java | 12 +-
.../scalars/reference/ReferencePanel.java | 7 +
...DropDownChoicesForObjectAdapterMementos.java | 78 ----------
.../DropDownChoicesForValueMementos.java | 63 --------
.../valuechoices/ValueChoicesSelect2Panel.java | 17 +-
.../ui/panels/ProcessObjectPanelAbstract.java | 156 -------------------
.../dom/src/main/java/dom/todo/ToDoItem.java | 70 +++++++--
.../src/main/java/dom/todo/ToDoItem.layout.json | 1 +
.../java/dom/todo/ToDoItemContributions.java | 32 ++--
.../dom/src/main/java/dom/todo/ToDoItems.java | 13 +-
.../java/fixture/todo/ToDoItemsFixture.java | 27 ++--
.../tests/actions/ToDoItemTest_duplicate.java | 1 +
.../repo/ToDoItemsTest_newToDo_and_delete.java | 3 +-
20 files changed, 269 insertions(+), 354 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/d114c453/STATUS
----------------------------------------------------------------------
diff --git a/STATUS b/STATUS
index 1fa73c8..639ffd0 100644
--- a/STATUS
+++ b/STATUS
@@ -19,11 +19,11 @@ Description
TLP releases:
* isis-1.2.0 : 31 May 2013
- * isis-viewer-wicket-1.2.0 : 31 May 2013
- * isis-viewer-restfulobjects-2.0.0 : 31 May 2013
* isis-objectstore-jdo-1.1.0 : 31 May 2013
- * isis-security-shiro-1.1.1 : 31 May 2013
* isis-security-file-1.0.1 : 31 May 2013
+ * isis-security-shiro-1.1.1 : 31 May 2013
+ * isis-viewer-restfulobjects-2.0.0 : 31 May 2013
+ * isis-viewer-wicket-1.2.0 : 31 May 2013
* quickstart-wicket-restful_jdo-archetype-1.0.3 : 31 May 2013
* isis-1.1.0 : 31 Jan 2013
@@ -37,8 +37,8 @@ TLP releases:
* isis-1.0.0 : 24 Dec 2012
* isis-objectstore-jdo-1.0.0 : 24 Dec 2012
* isis-security-file-1.0.0 : 24 Dec 2012
- * isis-viewer-wicket-1.0.0 : 24 Dec 2012
* isis-viewer-restfulobjects-1.0.0 : 24 Dec 2012
+ * isis-viewer-wicket-1.0.0 : 24 Dec 2012
* quickstart-wicket-restful_jdo-archetype-1.0.0 : 24 Dec 2012
Incubating releases:
http://git-wip-us.apache.org/repos/asf/isis/blob/d114c453/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java
index 7e9d08c..0b692c8 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java
@@ -25,23 +25,33 @@ import static org.hamcrest.CoreMatchers.nullValue;
import java.util.List;
+import com.google.common.base.Function;
+import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
+import org.apache.wicket.Component;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.form.Button;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.repeater.RepeatingView;
+import org.apache.wicket.model.IModel;
import org.apache.isis.core.commons.ensure.Ensure;
+import org.apache.isis.core.commons.lang.CastUtils;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager.ConcurrencyChecking;
import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
import org.apache.isis.viewer.wicket.model.mementos.ActionParameterMemento;
+import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
import org.apache.isis.viewer.wicket.model.models.ActionExecutor;
import org.apache.isis.viewer.wicket.model.models.ActionModel;
import org.apache.isis.viewer.wicket.model.models.ScalarModel;
import org.apache.isis.viewer.wicket.model.util.Mementos;
import org.apache.isis.viewer.wicket.ui.ComponentType;
+import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarModelSubscriber;
+import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelAbstract;
+import org.apache.isis.viewer.wicket.ui.components.scalars.TextFieldValueModel.ScalarModelProvider;
import org.apache.isis.viewer.wicket.ui.components.widgets.formcomponent.FormFeedbackPanel;
import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
@@ -71,12 +81,14 @@ public class ActionParametersFormPanel extends PanelAbstract<ActionModel> {
add(new ActionParameterForm("inputForm", getModel()));
}
- class ActionParameterForm extends Form<ObjectAdapter> {
+ class ActionParameterForm extends Form<ObjectAdapter> implements ScalarModelSubscriber {
private static final long serialVersionUID = 1L;
private static final String ID_FEEDBACK = "feedback";
+ private final List<ScalarPanelAbstract> scalarPanels = Lists.newArrayList();
+
public ActionParameterForm(final String id, final ActionModel actionModel) {
super(id, actionModel);
@@ -107,12 +119,21 @@ public class ActionParametersFormPanel extends PanelAbstract<ActionModel> {
final RepeatingView rv = new RepeatingView(ID_ACTION_PARAMETERS);
add(rv);
+
+ scalarPanels.clear();
for (final ActionParameterMemento apm : mementos) {
final WebMarkupContainer container = new WebMarkupContainer(rv.newChildId());
rv.add(container);
final ScalarModel argumentModel = actionModel.getArgumentModel(apm);
- getComponentFactoryRegistry().addOrReplaceComponent(container, ComponentType.SCALAR_NAME_AND_VALUE, argumentModel);
+ final Component paramPanel = getComponentFactoryRegistry().addOrReplaceComponent(container, ComponentType.SCALAR_NAME_AND_VALUE, argumentModel);
+ final ScalarPanelAbstract scalarPanel = paramPanel instanceof ScalarPanelAbstract ? (ScalarPanelAbstract) paramPanel : null;
+ scalarPanels.add(scalarPanel);
+ }
+
+ // subscribe to all param panels
+ for (ScalarPanelAbstract scalarPanel : scalarPanels) {
+ scalarPanel.addScalarModelSubscriber(this);
}
}
@@ -136,5 +157,36 @@ public class ActionParametersFormPanel extends PanelAbstract<ActionModel> {
// reference to a non-serializable object
return Lists.newArrayList(parameterMementoList);
}
+
+ @Override
+ public void onUpdate(ScalarModelProvider provider) {
+ final ScalarModel scalarModel = provider.getModel();
+ String name = scalarModel.getName();
+ final ObjectAdapterMemento objectAdapterMemento = scalarModel.getObjectAdapterMemento();
+ final List<ObjectAdapter> pendingArgs =
+ Lists.newArrayList(
+ Iterables.transform(scalarPanels, new Function<ScalarPanelAbstract, ObjectAdapter>() {
+ @Override
+ public ObjectAdapter apply(ScalarPanelAbstract input) {
+ if(input == null) {
+ return null;
+ }
+ final ScalarModel model = input.getModel();
+ final ObjectAdapterMemento objectAdapterMemento = model.getObjectAdapterMemento();
+ if(objectAdapterMemento == null) {
+ return null;
+ }
+ return objectAdapterMemento.getObjectAdapter(ConcurrencyChecking.NO_CHECK);
+ }
+ })
+ );
+ //System.out.println(name + " = '" + (objectAdapterMemento != null? objectAdapterMemento.getTitleHint(): null) + "'");
+ System.out.println(pendingArgs);
+ final ActionModel actionModel = getActionModel();
+ actionModel.getArgumentsAsArray();
+ for (ScalarPanelAbstract scalarPanel : scalarPanels) {
+
+ }
+ }
}
}
http://git-wip-us.apache.org/repos/asf/isis/blob/d114c453/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarModelSubscriber.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarModelSubscriber.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarModelSubscriber.java
new file mode 100644
index 0000000..a42c227
--- /dev/null
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarModelSubscriber.java
@@ -0,0 +1,25 @@
+/**
+ * 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.viewer.wicket.ui.components.scalars.TextFieldValueModel.ScalarModelProvider;
+
+public interface ScalarModelSubscriber {
+
+ void onUpdate(ScalarModelProvider provider);
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/d114c453/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
index a16cdd6..0d841ae 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
@@ -25,7 +25,10 @@ import com.google.common.collect.Lists;
import org.apache.wicket.Component;
import org.apache.wicket.MarkupContainer;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
import org.apache.wicket.behavior.AttributeAppender;
+import org.apache.wicket.behavior.Behavior;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.form.FormComponentLabel;
import org.apache.wicket.markup.html.form.LabeledWebMarkupContainer;
@@ -117,6 +120,7 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
private Component componentIfRegular;
protected final ScalarModel scalarModel;
+
public ScalarPanelAbstract(final String id, final ScalarModel scalarModel) {
super(id, scalarModel);
this.scalarModel = scalarModel;
@@ -168,9 +172,28 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
componentIfCompact = addComponentForCompact();
getRendering().buildGui(this);
addCssForMetaModel();
+
+ if(!subscribers.isEmpty()) {
+ addFormComponentBehaviour(new AjaxFormComponentUpdatingBehavior("onchange"){
+
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ protected void onUpdate(AjaxRequestTarget target) {
+ for (ScalarModelSubscriber subscriber : subscribers) {
+ subscriber.onUpdate(ScalarPanelAbstract.this);
+ }
+ }
+ });
+ }
}
+ /**
+ * Mandatory hook.
+ */
+ protected abstract void addFormComponentBehaviour(Behavior behavior);
+
private void addCssForMetaModel() {
final String cssForMetaModel = getModel().getLongName();
if (cssForMetaModel != null) {
@@ -208,8 +231,6 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
addAdditionalLinks(labelIfRegular, entityActions);
}
-
-
private void addAdditionalLinks(MarkupContainer markupContainer, List<LinkAndLabel> links) {
if(links == null || links.isEmpty()) {
Components.permanentlyHide(markupContainer, ID_ADDITIONAL_LINKS);
@@ -239,4 +260,13 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
protected void onBeforeRenderWhenEnabled() {
}
+ // //////////////////////////////////////
+
+ private final List<ScalarModelSubscriber> subscribers = Lists.newArrayList();
+
+ public void addScalarModelSubscriber(final ScalarModelSubscriber subscriber) {
+ subscribers.add(subscriber);
+ }
+
+
}
http://git-wip-us.apache.org/repos/asf/isis/blob/d114c453/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
index d3f19b6..e7bca55 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
@@ -23,6 +23,7 @@ import java.io.Serializable;
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.Component;
+import org.apache.wicket.behavior.Behavior;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.AbstractTextComponent;
import org.apache.wicket.markup.html.form.FormComponentLabel;
@@ -206,4 +207,10 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
textField.add(new AttributeModifier("title", Model.of(titleAttribute)));
}
+ @Override
+ protected void addFormComponentBehaviour(Behavior behavior) {
+ textField.add(behavior);
+ }
+
}
+
http://git-wip-us.apache.org/repos/asf/isis/blob/d114c453/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java
index aceaa6d..b594126 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java
@@ -31,6 +31,7 @@ import org.apache.wicket.Component;
import org.apache.wicket.MarkupContainer;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxLink;
+import org.apache.wicket.behavior.Behavior;
import org.apache.wicket.extensions.markup.html.image.resource.ThumbnailImageResource;
import org.apache.wicket.markup.head.IHeaderResponse;
import org.apache.wicket.markup.head.JavaScriptHeaderItem;
@@ -76,13 +77,15 @@ public abstract class IsisBlobOrClobPanelAbstract<T extends NamedWithMimeType> e
private Image wicketImage;
+ private FileUploadField fileUploadField;
+
protected enum InputFieldVisibility {
VISIBLE, NOT_VISIBLE;
}
@Override
protected FormComponentLabel addComponentForRegular() {
- final FileUploadField fileUploadField = createFileUploadField(ID_SCALAR_VALUE);
+ fileUploadField = createFileUploadField(ID_SCALAR_VALUE);
fileUploadField.setLabel(Model.of(getModel().getName()));
final FormComponentLabel labelIfRegular = new FormComponentLabel(ID_SCALAR_IF_REGULAR, fileUploadField);
@@ -286,10 +289,16 @@ public abstract class IsisBlobOrClobPanelAbstract<T extends NamedWithMimeType> e
return new ResourceLink<Object>(id, bar);
}
+ @Override
+ protected void addFormComponentBehaviour(Behavior behavior) {
+ fileUploadField.add(behavior);
+ }
+
/**
* Mandatory hook method.
*/
protected abstract IResource newResource(final T namedWithMimeType);
+
}
http://git-wip-us.apache.org/repos/asf/isis/blob/d114c453/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobPanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobPanel.java
index a440d13..ee2420b 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobPanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobPanel.java
@@ -22,6 +22,7 @@ package org.apache.isis.viewer.wicket.ui.components.scalars.isisapplib;
import java.util.List;
+import org.apache.wicket.behavior.Behavior;
import org.apache.wicket.markup.html.form.upload.FileUpload;
import org.apache.wicket.request.resource.ByteArrayResource;
@@ -54,4 +55,5 @@ public class IsisBlobPanel extends IsisBlobOrClobPanelAbstract<Blob> {
}
+
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/isis/blob/d114c453/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java
index 226d7e4..f626707 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java
@@ -19,8 +19,12 @@
package org.apache.isis.viewer.wicket.ui.components.scalars.primitive;
+import java.util.List;
+
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.Component;
+import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
+import org.apache.wicket.behavior.Behavior;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.CheckBox;
import org.apache.wicket.markup.html.form.FormComponentLabel;
@@ -28,6 +32,7 @@ import org.apache.wicket.model.Model;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.viewer.wicket.model.models.ScalarModel;
+import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarModelSubscriber;
import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelAbstract;
import org.apache.isis.viewer.wicket.ui.util.CssClassAppender;
@@ -81,8 +86,6 @@ public class BooleanPanel extends ScalarPanelAbstract {
}
-
-
/**
* Mandatory hook method to build the component to render the model when in
* {@link Rendering#COMPACT compact} format.
@@ -135,4 +138,9 @@ public class BooleanPanel extends ScalarPanelAbstract {
checkBox.setEnabled(false);
}
+ @Override
+ protected void addFormComponentBehaviour(Behavior behavior) {
+ checkBox.add(behavior);
+ }
+
}
http://git-wip-us.apache.org/repos/asf/isis/blob/d114c453/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
index 8413c2a..5be6822 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
@@ -21,6 +21,7 @@ package org.apache.isis.viewer.wicket.ui.components.scalars.reference;
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.Component;
+import org.apache.wicket.behavior.Behavior;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.FormComponentLabel;
import org.apache.wicket.model.Model;
@@ -171,4 +172,10 @@ public class ReferencePanel extends ScalarPanelAbstract {
return labelIfCompact;
}
+
+ @Override
+ protected void addFormComponentBehaviour(Behavior behavior) {
+ entityLink.add(behavior);
+ }
+
}
http://git-wip-us.apache.org/repos/asf/isis/blob/d114c453/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/dropdownchoices/DropDownChoicesForObjectAdapterMementos.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/dropdownchoices/DropDownChoicesForObjectAdapterMementos.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/dropdownchoices/DropDownChoicesForObjectAdapterMementos.java
deleted file mode 100644
index 0f08da1..0000000
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/dropdownchoices/DropDownChoicesForObjectAdapterMementos.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * 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.dropdownchoices;
-
-import java.util.List;
-
-import org.apache.wicket.markup.html.form.DropDownChoice;
-import org.apache.wicket.markup.html.form.IChoiceRenderer;
-import org.apache.wicket.model.IModel;
-
-import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager.ConcurrencyChecking;
-import org.apache.isis.core.metamodel.adapter.oid.Oid;
-import org.apache.isis.core.metamodel.adapter.oid.OidMarshaller;
-import org.apache.isis.core.runtime.system.context.IsisContext;
-import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
-
-public class DropDownChoicesForObjectAdapterMementos extends DropDownChoice<ObjectAdapterMemento> {
-
- private final static class ObjectAdapterMementoRenderer implements IChoiceRenderer<ObjectAdapterMemento> {
-
- private static final long serialVersionUID = 1L;
-
- @Override
- public Object getDisplayValue(final ObjectAdapterMemento nom) {
- return nom.getObjectAdapter(ConcurrencyChecking.NO_CHECK).titleString();
- }
-
- @Override
- public String getIdValue(final ObjectAdapterMemento nom, final int index) {
- final Oid oid = nom.getObjectAdapter(ConcurrencyChecking.NO_CHECK).getOid();
- return oid.enString(getOidMarshaller());
- }
- }
-
-
-
- private static final long serialVersionUID = 1L;
-
- public DropDownChoicesForObjectAdapterMementos(final String id, final IModel<ObjectAdapterMemento> model, final IModel<? extends List<? extends ObjectAdapterMemento>> choices) {
- this(id, model, choices, new ObjectAdapterMementoRenderer());
- }
-
- private DropDownChoicesForObjectAdapterMementos(final String id, final IModel<ObjectAdapterMemento> model, final IModel<? extends List<? extends ObjectAdapterMemento>> choices, final IChoiceRenderer<? super ObjectAdapterMemento> renderer) {
- super(id, model, choices, renderer);
- }
-
- @Override
- protected boolean wantOnSelectionChangedNotifications() {
- return false;//true;
- }
-
-
-
- // //////////////////////////////////////////////////////////
- // Dependencies (from context)
- // //////////////////////////////////////////////////////////
-
- protected static OidMarshaller getOidMarshaller() {
- return IsisContext.getOidMarshaller();
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/isis/blob/d114c453/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/dropdownchoices/DropDownChoicesForValueMementos.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/dropdownchoices/DropDownChoicesForValueMementos.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/dropdownchoices/DropDownChoicesForValueMementos.java
deleted file mode 100755
index 4169fed..0000000
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/dropdownchoices/DropDownChoicesForValueMementos.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * 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.dropdownchoices;
-
-import java.util.List;
-
-import org.apache.wicket.markup.html.form.DropDownChoice;
-import org.apache.wicket.markup.html.form.IChoiceRenderer;
-import org.apache.wicket.model.IModel;
-
-import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager.ConcurrencyChecking;
-import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
-
-public class DropDownChoicesForValueMementos extends DropDownChoice<ObjectAdapterMemento> {
-
- private final static class ValueMementoRenderer implements IChoiceRenderer<ObjectAdapterMemento> {
-
- private static final long serialVersionUID = 1L;
-
- @Override
- public Object getDisplayValue(final ObjectAdapterMemento nom) {
- return nom.getObjectAdapter(ConcurrencyChecking.NO_CHECK).titleString();
- }
-
- @Override
- public String getIdValue(final ObjectAdapterMemento nom, final int index) {
- return String.valueOf(index);
- }
-
- }
-
- private static final long serialVersionUID = 1L;
-
- public DropDownChoicesForValueMementos(final String id, final IModel<ObjectAdapterMemento> model, final IModel<? extends List<? extends ObjectAdapterMemento>> choices) {
- this(id, model, choices, new ValueMementoRenderer());
- }
-
- private DropDownChoicesForValueMementos(final String id, final IModel<ObjectAdapterMemento> model, final IModel<? extends List<? extends ObjectAdapterMemento>> choices, final IChoiceRenderer<? super ObjectAdapterMemento> renderer) {
- super(id, model, choices, renderer);
- }
-
- @Override
- protected boolean wantOnSelectionChangedNotifications() {
- return false;
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/isis/blob/d114c453/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/ValueChoicesSelect2Panel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/ValueChoicesSelect2Panel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/ValueChoicesSelect2Panel.java
index e711780..4ab0837 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/ValueChoicesSelect2Panel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/ValueChoicesSelect2Panel.java
@@ -28,6 +28,9 @@ import com.vaynberg.wicket.select2.TextChoiceProvider;
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.Component;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
+import org.apache.wicket.behavior.Behavior;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.FormComponent;
import org.apache.wicket.markup.html.form.FormComponentLabel;
@@ -48,7 +51,7 @@ import org.apache.isis.viewer.wicket.ui.util.CssClassAppender;
/**
* Initial skeleton - trying to add support for value choices.
*/
-public class ValueChoicesSelect2Panel extends ScalarPanelAbstract { // ScalarPanelTextFieldAbstract
+public class ValueChoicesSelect2Panel extends ScalarPanelAbstract {
private static final Logger LOG = LoggerFactory.getLogger(ValueChoicesSelect2Panel.class);
private static final long serialVersionUID = 1L;
@@ -207,7 +210,8 @@ public class ValueChoicesSelect2Panel extends ScalarPanelAbstract { // ScalarPan
}
};
- return new Select2Choice<ObjectAdapterMemento>(id, modelObject, provider);
+ final Select2Choice<ObjectAdapterMemento> select2Choice = new Select2Choice<ObjectAdapterMemento>(id, modelObject, provider);
+ return select2Choice;
}
@Override
@@ -222,9 +226,6 @@ public class ValueChoicesSelect2Panel extends ScalarPanelAbstract { // ScalarPan
private IModel<List<ObjectAdapterMemento>> getChoicesModel() {
final List<ObjectAdapter> choices = scalarModel.getChoices();
- if (choices.size() == 0) {
- return null;
- }
// take a copy otherwise is only lazily evaluated
final List<ObjectAdapterMemento> choicesMementos = Lists.newArrayList(Lists.transform(choices, Mementos.fromAdapter()));
@@ -243,5 +244,11 @@ public class ValueChoicesSelect2Panel extends ScalarPanelAbstract { // ScalarPan
return getObject();
}};
}
+
+ @Override
+ protected void addFormComponentBehaviour(Behavior behavior) {
+ valueField.add(behavior);
+ }
+
}
http://git-wip-us.apache.org/repos/asf/isis/blob/d114c453/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/ProcessObjectPanelAbstract.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/ProcessObjectPanelAbstract.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/ProcessObjectPanelAbstract.java
deleted file mode 100644
index 4513eb7..0000000
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/ProcessObjectPanelAbstract.java
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
- * 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.panels;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import com.google.common.collect.Lists;
-
-import org.apache.wicket.MarkupContainer;
-import org.apache.wicket.markup.html.WebMarkupContainer;
-import org.apache.wicket.markup.html.form.Form;
-import org.apache.wicket.markup.repeater.RepeatingView;
-
-import org.apache.isis.applib.annotation.Where;
-import org.apache.isis.applib.filter.Filter;
-import org.apache.isis.applib.filter.Filters;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.spec.ActionType;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.spec.feature.Contributed;
-import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
-import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
-import org.apache.isis.core.metamodel.spec.feature.ObjectAssociationFilters;
-import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
-import org.apache.isis.core.runtime.memento.Memento;
-import org.apache.isis.viewer.wicket.model.mementos.ActionMemento;
-import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
-import org.apache.isis.viewer.wicket.model.mementos.PropertyMemento;
-import org.apache.isis.viewer.wicket.model.models.ActionModel;
-import org.apache.isis.viewer.wicket.model.models.ActionModel.SingleResultsMode;
-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.util.Mementos;
-import org.apache.isis.viewer.wicket.ui.ComponentType;
-import org.apache.isis.viewer.wicket.ui.pages.action.ActionPage;
-
-/**
- * Convenience adapter for building bespoke panels for process objects.
- */
-public abstract class ProcessObjectPanelAbstract extends PanelAbstract<EntityModel> {
-
- private static final long serialVersionUID = 1L;
-
- private final Where where;
-
- public ProcessObjectPanelAbstract(final String id, final EntityModel model, Where where) {
- super(id, model);
- this.where = where;
- }
-
- protected EntityModel getEntityModel() {
- return getModel();
- }
-
- protected void addProperties(final MarkupContainer mc, final String idProperties, final String idProperty) {
- final EntityModel entityModel = getModel();
- final ObjectAdapter adapter = entityModel.getObject();
- final ObjectSpecification noSpec = adapter.getSpecification();
-
- final List<OneToOneAssociation> properties = visibleProperties(adapter, noSpec);
-
- final RepeatingView rv = new RepeatingView(idProperties);
- mc.add(rv);
- final List<PropertyMemento> mementos = buildPropertyMementos(properties);
- for (final PropertyMemento pm : mementos) {
- final WebMarkupContainer container = new WebMarkupContainer(rv.newChildId());
- rv.add(container);
-
- final ScalarModel scalarModel = entityModel.getPropertyModel(pm);
- getComponentFactoryRegistry().addOrReplaceComponent(container, idProperty, ComponentType.SCALAR_NAME_AND_VALUE, scalarModel);
- }
- }
-
- @SuppressWarnings("unchecked")
- private List<OneToOneAssociation> visibleProperties(final ObjectAdapter adapter, final ObjectSpecification noSpec) {
- @SuppressWarnings("rawtypes")
- final List list = noSpec.getAssociations(Contributed.EXCLUDED, visiblePropertyFilter(adapter));
- return new ArrayList<OneToOneAssociation>(list);
- }
-
- private Filter<ObjectAssociation> visiblePropertyFilter(final ObjectAdapter adapter) {
- return Filters.and(ObjectAssociationFilters.PROPERTIES, ObjectAssociationFilters.dynamicallyVisible(getAuthenticationSession(), adapter, where));
- }
-
- private List<PropertyMemento> buildPropertyMementos(final List<OneToOneAssociation> properties) {
- final List<PropertyMemento> mementos = Lists.transform(properties, Mementos.fromProperty());
- // we copy into a new array list otherwise we get lazy evaluation =
- // reference to a non-serializable object
- return Lists.newArrayList(mementos);
- }
-
- /**
- * Validates the form properties and domain object (object-level
- * validation).
- */
- protected boolean isValid(final Form<?> form) {
-
- // check properties are all valid
- if (form.hasError()) {
- return false;
- }
-
- // check object is valid
-
- // to perform object-level validation, we must apply the changes first
- // Contrast this with ActionPanel (for validating action arguments)
- // where
- // we do the validation prior to the execution of the action.
- final ObjectAdapter object = getEntityModel().getObject();
- final Memento snapshotToRollbackToIfInvalid = new Memento(object);
-
- getEntityModel().apply();
- final String invalidReasonIfAny = getEntityModel().getReasonInvalidIfAny();
- if (invalidReasonIfAny != null) {
- form.error(invalidReasonIfAny);
- snapshotToRollbackToIfInvalid.recreateObject();
- return false;
- }
-
- // ok
- return true;
- }
-
- /**
- * Executes action; expected to take no arguments.
- */
- protected void executeNoArgAction(final String actionId) {
- final ObjectSpecification typeOfSpec = getModel().getTypeOfSpecification();
- final ObjectAction action = typeOfSpec.getObjectAction(ActionType.USER, actionId);
- final ObjectAdapterMemento adapterMemento = getModel().getObjectAdapterMemento();
- final ActionMemento actionMemento = new ActionMemento(action);
- final ActionModel.Mode actionMode = ActionModel.determineMode(action);
-
- final ActionModel actionModel = ActionModel.create(adapterMemento, actionMemento, actionMode, SingleResultsMode.INLINE);
- setResponsePage(new ActionPage(actionModel));
- }
-
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/d114c453/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItem.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItem.java b/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItem.java
index e89c638..36db01e 100644
--- a/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItem.java
+++ b/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItem.java
@@ -19,7 +19,9 @@
package dom.todo;
import java.math.BigDecimal;
+import java.util.Arrays;
import java.util.Collection;
+import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.SortedSet;
@@ -31,6 +33,7 @@ import javax.jdo.annotations.VersionStrategy;
import javax.jdo.spi.PersistenceCapable;
import com.google.common.base.Objects;
+import com.google.common.collect.Lists;
import com.google.common.collect.Ordering;
import org.joda.time.LocalDate;
@@ -153,35 +156,59 @@ public class ToDoItem implements Comparable<ToDoItem> /*, Locatable*/ { // GMAP3
}
// //////////////////////////////////////
- // Category (property)
+ // Category and Subcategory (property)
// //////////////////////////////////////
public static enum Category {
Professional {
@Override
- public int priority() {
- return 1;
+ public List<Subcategory> subcategories() {
+ return Arrays.asList(Subcategory.OpenSource, Subcategory.Consulting, Subcategory.Education);
}
}, Domestic {
@Override
- public int priority() {
- return 2;
+ public List<Subcategory> subcategories() {
+ return Arrays.asList(Subcategory.Shopping, Subcategory.Housework, Subcategory.Garden, Subcategory.Chores);
}
}, Other {
@Override
- public int priority() {
- return 3;
+ public List<Subcategory> subcategories() {
+ return Arrays.asList(Subcategory.Other);
}
};
- // this method is simply to demonstrate that anonymous
- // subtypes of enums are allowed
- public abstract int priority();
+ public abstract List<Subcategory> subcategories();
}
+ public static enum Subcategory {
+ // professional
+ OpenSource, Consulting, Education, Marketing,
+ // domestic
+ Shopping, Housework, Garden, Chores,
+ // other
+ Other;
+
+ public static List<Subcategory> listFor(Category category) {
+ return category != null? category.subcategories(): Collections.<Subcategory>emptyList();
+ }
+
+ static String validate(final Category category, final Subcategory subcategory) {
+ if(category == null) {
+ return "Enter category first";
+ }
+ return !category.subcategories().contains(subcategory)
+ ? "Invalid subcategory for category '" + category + "'"
+ : null;
+ }
+ }
+
+ // //////////////////////////////////////
+
+
private Category category;
@javax.jdo.annotations.Column(allowsNull="false")
+ @Disabled
public Category getCategory() {
return category;
}
@@ -191,6 +218,20 @@ public class ToDoItem implements Comparable<ToDoItem> /*, Locatable*/ { // GMAP3
}
// //////////////////////////////////////
+
+ private Subcategory subcategory;
+
+ @javax.jdo.annotations.Column(allowsNull="false")
+ @Disabled
+ public Subcategory getSubcategory() {
+ return subcategory;
+ }
+ public void setSubcategory(final Subcategory subcategory) {
+ this.subcategory = subcategory;
+ }
+
+
+ // //////////////////////////////////////
// OwnedBy (property)
// //////////////////////////////////////
@@ -446,13 +487,15 @@ public class ToDoItem implements Comparable<ToDoItem> /*, Locatable*/ { // GMAP3
String description,
@Named("Category")
ToDoItem.Category category,
+ @Named("Subcategory")
+ ToDoItem.Subcategory subcategory,
@Named("Due by")
@Optional
LocalDate dueBy,
@Named("Cost")
@Optional
BigDecimal cost) {
- return toDoItems.newToDo(description, category, dueBy, cost);
+ return toDoItems.newToDo(description, category, subcategory, dueBy, cost);
}
public String default0Duplicate() {
return getDescription() + " - Copy";
@@ -460,7 +503,10 @@ public class ToDoItem implements Comparable<ToDoItem> /*, Locatable*/ { // GMAP3
public Category default1Duplicate() {
return getCategory();
}
- public LocalDate default2Duplicate() {
+ public Subcategory default2Duplicate() {
+ return getSubcategory();
+ }
+ public LocalDate default3Duplicate() {
return getDueBy();
}
http://git-wip-us.apache.org/repos/asf/isis/blob/d114c453/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItem.layout.json
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItem.layout.json b/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItem.layout.json
index 1284a93..576ae44 100644
--- a/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItem.layout.json
+++ b/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItem.layout.json
@@ -23,6 +23,7 @@
members: {
description: {},
category: {},
+ subcategory: {},
complete: {
actions: {
completed: {},
http://git-wip-us.apache.org/repos/asf/isis/blob/d114c453/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItemContributions.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItemContributions.java b/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItemContributions.java
index 4d91bd1..86c7c3a 100644
--- a/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItemContributions.java
+++ b/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItemContributions.java
@@ -29,6 +29,7 @@ import com.google.common.collect.Lists;
import com.google.common.collect.Ordering;
import dom.todo.ToDoItem.Category;
+import dom.todo.ToDoItem.Subcategory;
import org.joda.time.LocalDate;
@@ -140,27 +141,36 @@ public class ToDoItemContributions extends AbstractFactoryAndRepository {
// UpdateCategory (contributed action)
// //////////////////////////////////////
- @DescribedAs("Demonstrates contributed actions; could also be implemented as a simple editable property")
+ @DescribedAs("Update category and subcategory")
@NotInServiceMenu
@ActionSemantics(Of.IDEMPOTENT)
@MemberOrder(sequence="1")
- public ToDoItem updateCategory(ToDoItem item, @Named("Category") Category category) {
+ public ToDoItem updateCategory(
+ final ToDoItem item,
+ final @Named("Category") Category category,
+ final @Named("Subcategory") Subcategory subcategory) {
item.setCategory(category);
+ item.setSubcategory(subcategory);
return item;
}
- public List<Category> choices1UpdateCategory(ToDoItem item, Category category) {
- // in principle we could fine-tune the choices.
- // here, though, we just return all categories
- return Arrays.asList(Category.values());
- }
-
- public Category default1UpdateCategory(ToDoItem item, Category category) {
+ public Category default1UpdateCategory(
+ final ToDoItem item, final Category category, final Subcategory subcategory) {
return item.getCategory();
}
+ public Subcategory default2UpdateCategory(
+ final ToDoItem item, final Category category, final Subcategory subcategory) {
+ return item.getSubcategory();
+ }
+
+ public List<Subcategory> choices2UpdateCategory(
+ final ToDoItem item, final Category category, final Subcategory subcategory) {
+ return Subcategory.listFor(category);
+ }
- public String validateUpdateCategory(final ToDoItem item, Category category) {
- return category == item.getCategory() ? "Already set to that value!" : null;
+ public String validateUpdateCategory(
+ final ToDoItem item, final Category category, final Subcategory subcategory) {
+ return Subcategory.validate(category, subcategory);
}
http://git-wip-us.apache.org/repos/asf/isis/blob/d114c453/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItems.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItems.java b/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItems.java
index 47df583..0411239 100644
--- a/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItems.java
+++ b/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItems.java
@@ -34,6 +34,7 @@ import com.google.common.collect.Lists;
import com.google.common.collect.Ordering;
import dom.todo.ToDoItem.Category;
+import dom.todo.ToDoItem.Subcategory;
import org.joda.time.LocalDate;
@@ -139,14 +140,15 @@ public class ToDoItems extends AbstractFactoryAndRepository {
@RegEx(validation = "\\w[@&:\\-\\,\\.\\+ \\w]*") // words, spaces and selected punctuation
@Named("Description") String description,
@Named("Category") Category category,
+ @Named("Subcategory") Subcategory subcategory,
@Optional
@Named("Due by") LocalDate dueBy,
@Optional
@Named("Cost") BigDecimal cost) {
final String ownedBy = currentUserName();
- return newToDo(description, category, ownedBy, dueBy, cost);
+ return newToDo(description, category, subcategory, ownedBy, dueBy, cost);
}
- public LocalDate default2NewToDo() {
+ public LocalDate default3NewToDo() {
return new LocalDate(Clock.getTime()).plusDays(14);
}
@@ -207,12 +209,13 @@ public class ToDoItems extends AbstractFactoryAndRepository {
public ToDoItem newToDo(
final String description,
final Category category,
- final String userName,
- final LocalDate dueBy,
- final BigDecimal cost) {
+ final Subcategory subcategory,
+ final String userName,
+ final LocalDate dueBy, final BigDecimal cost) {
final ToDoItem toDoItem = newTransientInstance(ToDoItem.class);
toDoItem.setDescription(description);
toDoItem.setCategory(category);
+ toDoItem.setSubcategory(subcategory);
toDoItem.setOwnedBy(userName);
toDoItem.setDueBy(dueBy);
toDoItem.setCost(cost);
http://git-wip-us.apache.org/repos/asf/isis/blob/d114c453/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/ToDoItemsFixture.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/ToDoItemsFixture.java b/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/ToDoItemsFixture.java
index 7a14f6d..b52d951 100644
--- a/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/ToDoItemsFixture.java
+++ b/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/ToDoItemsFixture.java
@@ -23,6 +23,7 @@ import java.math.BigDecimal;
import dom.todo.ToDoItem;
import dom.todo.ToDoItem.Category;
+import dom.todo.ToDoItem.Subcategory;
import dom.todo.ToDoItems;
import org.joda.time.LocalDate;
@@ -57,18 +58,20 @@ public class ToDoItemsFixture extends AbstractFixture {
private void installFor(String user) {
- createToDoItemForUser("Buy milk", Category.Domestic, user, daysFromToday(0), new BigDecimal("0.75"));
- createToDoItemForUser("Buy bread", Category.Domestic, user, daysFromToday(0), new BigDecimal("1.75"));
- createToDoItemForUser("Buy stamps", Category.Domestic, user, daysFromToday(0), new BigDecimal("10.00")).setComplete(true);
- createToDoItemForUser("Pick up laundry", Category.Domestic, user, daysFromToday(6), new BigDecimal("7.50"));
- createToDoItemForUser("Sharpen knives", Category.Domestic, user, daysFromToday(14), null);
+ createToDoItemForUser("Buy milk", Category.Domestic, Subcategory.Shopping, user, daysFromToday(0), new BigDecimal("0.75"));
+ createToDoItemForUser("Buy bread", Category.Domestic, Subcategory.Shopping, user, daysFromToday(0), new BigDecimal("1.75"));
+ createToDoItemForUser("Buy stamps", Category.Domestic, Subcategory.Shopping, user, daysFromToday(0), new BigDecimal("10.00")).setComplete(true);
+ createToDoItemForUser("Pick up laundry", Category.Domestic, Subcategory.Chores, user, daysFromToday(6), new BigDecimal("7.50"));
+ createToDoItemForUser("Mow lawn", Category.Domestic, Subcategory.Garden, user, daysFromToday(6), null);
+ createToDoItemForUser("Vacuum house", Category.Domestic, Subcategory.Housework, user, daysFromToday(3), null);
+ createToDoItemForUser("Sharpen knives", Category.Domestic, Subcategory.Chores, user, daysFromToday(14), null);
- createToDoItemForUser("Write to penpal", Category.Other, user, null, null);
+ createToDoItemForUser("Write to penpal", Category.Other, Subcategory.Other, user, null, null);
- createToDoItemForUser("Write blog post", Category.Professional, user, daysFromToday(7), null).setComplete(true);
- createToDoItemForUser("Organize brown bag", Category.Professional, user, daysFromToday(14), null);
- createToDoItemForUser("Submit conference session", Category.Professional, user, daysFromToday(21), null);
- createToDoItemForUser("Stage Isis release", Category.Professional, user, null, null);
+ createToDoItemForUser("Write blog post", Category.Professional, Subcategory.Marketing, user, daysFromToday(7), null).setComplete(true);
+ createToDoItemForUser("Organize brown bag", Category.Professional, Subcategory.Consulting, user, daysFromToday(14), null);
+ createToDoItemForUser("Submit conference session", Category.Professional, Subcategory.Education, user, daysFromToday(21), null);
+ createToDoItemForUser("Stage Isis release", Category.Professional, Subcategory.OpenSource, user, null, null);
getContainer().flush();
}
@@ -76,8 +79,8 @@ public class ToDoItemsFixture extends AbstractFixture {
// //////////////////////////////////////
- private ToDoItem createToDoItemForUser(final String description, final Category category, String user, final LocalDate dueBy, final BigDecimal cost) {
- return toDoItems.newToDo(description, category, user, dueBy, cost);
+ private ToDoItem createToDoItemForUser(final String description, final Category category, Subcategory subcategory, String user, final LocalDate dueBy, final BigDecimal cost) {
+ return toDoItems.newToDo(description, category, subcategory, user, dueBy, cost);
}
private static LocalDate daysFromToday(final int i) {
http://git-wip-us.apache.org/repos/asf/isis/blob/d114c453/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/actions/ToDoItemTest_duplicate.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/actions/ToDoItemTest_duplicate.java b/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/actions/ToDoItemTest_duplicate.java
index 2d3645b..c280aaa 100644
--- a/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/actions/ToDoItemTest_duplicate.java
+++ b/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/actions/ToDoItemTest_duplicate.java
@@ -60,6 +60,7 @@ public class ToDoItemTest_duplicate extends ToDoIntegTest {
unwrap(toDoItem).default0Duplicate(),
unwrap(toDoItem).default1Duplicate(),
unwrap(toDoItem).default2Duplicate(),
+ unwrap(toDoItem).default3Duplicate(),
new BigDecimal("987.65"));
// then
http://git-wip-us.apache.org/repos/asf/isis/blob/d114c453/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/repo/ToDoItemsTest_newToDo_and_delete.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/repo/ToDoItemsTest_newToDo_and_delete.java b/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/repo/ToDoItemsTest_newToDo_and_delete.java
index 3f51963..0fa2e35 100644
--- a/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/repo/ToDoItemsTest_newToDo_and_delete.java
+++ b/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/repo/ToDoItemsTest_newToDo_and_delete.java
@@ -24,6 +24,7 @@ import integration.tests.ToDoIntegTest;
import dom.todo.ToDoItem;
import dom.todo.ToDoItems;
import dom.todo.ToDoItem.Category;
+import dom.todo.ToDoItem.Subcategory;
import org.junit.Test;
@@ -36,7 +37,7 @@ public class ToDoItemsTest_newToDo_and_delete extends ToDoIntegTest {
int size = wrap(service(ToDoItems.class)).notYetComplete().size();
// when
- final ToDoItem newToDo = wrap(service(ToDoItems.class)).newToDo("new todo", Category.Professional, null, null);
+ final ToDoItem newToDo = wrap(service(ToDoItems.class)).newToDo("new todo", Category.Professional, Subcategory.OpenSource, null, null);
// then
assertThat(newToDo.getDescription(), is("new todo"));
[5/5] git commit: ISIS-478: choices and default methods can now take
partial parameter lists
Posted by da...@apache.org.
ISIS-478: choices and default methods can now take partial parameter lists
See ToDoItemContributions#updateCost and its supporting methods for example.
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/2ab9e661
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/2ab9e661
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/2ab9e661
Branch: refs/heads/master
Commit: 2ab9e661552dc14fc200656e548b3946ff325079
Parents: 6763bd4
Author: Dan Haywood <da...@apache.org>
Authored: Wed Aug 21 00:42:20 2013 +0100
Committer: Dan Haywood <da...@apache.org>
Committed: Wed Aug 21 00:42:20 2013 +0100
----------------------------------------------------------------------
.../isis/core/commons/lang/ListUtils.java | 36 ++++++++
.../adapter/util/AdapterInvokeUtils.java | 31 ++++++-
.../choices/ActionParameterChoicesFacet.java | 4 +-
.../defaults/ActionParameterDefaultsFacet.java | 4 +-
.../specimpl/ObjectActionParameterAbstract.java | 19 ++--
.../ObjectActionParameterContributee.java | 87 ++++++++++++++++--
...jectActionParameterParseableContributee.java | 16 ++--
.../OneToOneActionParameterContributee.java | 17 ++--
.../ActionParameterChoicesFacetNone.java | 4 +-
...eterChoicesFacetDerivedFromChoicesFacet.java | 4 +-
.../ActionParameterChoicesFacetFactory.java | 57 ++++++++----
.../ActionParameterChoicesFacetViaMethod.java | 12 +--
.../ActionParameterDefaultsFacetNone.java | 4 +-
.../ActionParameterDefaultsFacetFactory.java | 39 +++++++--
.../ActionParameterDefaultsFacetViaMethod.java | 9 +-
.../core/commons/lang/ListUtilsTest_adjust.java | 70 +++++++++++++++
.../core/commons/lang/ListUtilsTest_insert.java | 82 +++++++++++++++++
.../commons/lang/ListUtilsTest_mutableCopy.java | 92 ++++++++++++++++++++
.../java/dom/todo/ToDoItemContributions.java | 6 +-
19 files changed, 524 insertions(+), 69 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/2ab9e661/core/metamodel/src/main/java/org/apache/isis/core/commons/lang/ListUtils.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/lang/ListUtils.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/lang/ListUtils.java
index 4c7f337..3da6bdf 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/lang/ListUtils.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/commons/lang/ListUtils.java
@@ -22,8 +22,13 @@ package org.apache.isis.core.commons.lang;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
+import java.util.Collections;
import java.util.List;
+import com.google.common.collect.Lists;
+
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+
public final class ListUtils {
private static final String DEFAULT_DELIMITER = ",";
@@ -138,5 +143,36 @@ public final class ListUtils {
list.addAll(Arrays.asList(optionValues));
return list;
}
+
+ // //////////////////////////////////////
+
+ public static <T> List<T> mutableCopy(final List<T> input) {
+ return Lists.newArrayList(input != null? input: Collections.<T>emptyList());
+ }
+
+ public static <T> List<T> mutableCopy(T[] arr) {
+ return mutableCopy(arr != null? Arrays.asList(arr): Collections.<T>emptyList()) ;
+ }
+
+ public static <T> void insert(final List<T> list, final int insertionPoint, final T elementToInsert) {
+ extend(list, insertionPoint);
+ list.add(insertionPoint, elementToInsert);
+ }
+
+ public static <T> void adjust(final List<T> list, final int requiredLength) {
+ extend(list, requiredLength);
+ if(list.size() > requiredLength) {
+ list.subList(requiredLength, list.size()).clear();;
+ }
+ }
+
+ private static <T> void extend(final List<T> list, final int requiredLength) {
+ for(int i=list.size(); i<requiredLength; i++) {
+ list.add(null);
+ }
+ }
+
+
+
}
http://git-wip-us.apache.org/repos/asf/isis/blob/2ab9e661/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/util/AdapterInvokeUtils.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/util/AdapterInvokeUtils.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/util/AdapterInvokeUtils.java
index ff2c2a0..271a63f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/util/AdapterInvokeUtils.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/util/AdapterInvokeUtils.java
@@ -22,7 +22,11 @@ package org.apache.isis.core.metamodel.adapter.util;
import java.lang.reflect.Method;
import java.util.List;
+import com.google.common.collect.Lists;
+
+import org.apache.isis.core.commons.lang.ListUtils;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.specloader.specimpl.ObjectActionParameterContributee.Util;
public final class AdapterInvokeUtils {
@@ -50,6 +54,30 @@ public final class AdapterInvokeUtils {
}
/**
+ * Invokes the method, adjusting arguments as required to make them fit the method's parameters.
+ *
+ * <p>
+ * That is:
+ * <ul>
+ * <li>if the method declares parameters but arguments are missing, then will provide 'null' defaults for these.
+ * <li>if the method does not declare all parameters for arguments, then truncates arguments.
+ * </ul>
+ */
+ public static Object invokeAutofit(final Method method, final ObjectAdapter target, List<ObjectAdapter> argumentsIfAvailable) {
+ final List<ObjectAdapter> args = Lists.newArrayList();
+ if(argumentsIfAvailable != null) {
+ args.addAll(argumentsIfAvailable);
+ }
+
+ final int requiredLength = method.getParameterTypes().length;
+ ListUtils.adjust(args, requiredLength);
+
+ final ObjectAdapter[] argArray = args.toArray(new ObjectAdapter[]{});
+
+ return AdapterInvokeUtils.invoke(method, target, argArray);
+ }
+
+ /**
* Invokes the method, adjusting arguments as required.
*
* <p>
@@ -59,7 +87,8 @@ public final class AdapterInvokeUtils {
* <li>if the method does not declare parameters but arguments were provided, then will ignore those argumens.
* </ul>
*/
- public static Object invokeWithDefaults(final Method method, final ObjectAdapter adapter, final ObjectAdapter[] argumentAdapters) {
+ @SuppressWarnings("unused")
+ private static Object invokeWithDefaults(final Method method, final ObjectAdapter adapter, final ObjectAdapter[] argumentAdapters) {
final int numParams = method.getParameterTypes().length;
ObjectAdapter[] adapters;
http://git-wip-us.apache.org/repos/asf/isis/blob/2ab9e661/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/ActionParameterChoicesFacet.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/ActionParameterChoicesFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/ActionParameterChoicesFacet.java
index 4e40114..b92e976 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/ActionParameterChoicesFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/ActionParameterChoicesFacet.java
@@ -19,6 +19,8 @@
package org.apache.isis.core.metamodel.facets.param.choices;
+import java.util.List;
+
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.facetapi.Facet;
@@ -32,5 +34,5 @@ import org.apache.isis.core.metamodel.facetapi.Facet;
*/
public interface ActionParameterChoicesFacet extends Facet {
- public Object[] getChoices(ObjectAdapter target, ObjectAdapter[] arguments);
+ public Object[] getChoices(ObjectAdapter target, List<ObjectAdapter> arguments);
}
http://git-wip-us.apache.org/repos/asf/isis/blob/2ab9e661/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/defaults/ActionParameterDefaultsFacet.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/defaults/ActionParameterDefaultsFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/defaults/ActionParameterDefaultsFacet.java
index 130bf41..dc50133 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/defaults/ActionParameterDefaultsFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/defaults/ActionParameterDefaultsFacet.java
@@ -19,6 +19,8 @@
package org.apache.isis.core.metamodel.facets.param.defaults;
+import java.util.List;
+
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.facetapi.Facet;
@@ -32,5 +34,5 @@ import org.apache.isis.core.metamodel.facetapi.Facet;
*/
public interface ActionParameterDefaultsFacet extends Facet {
- public abstract Object getDefault(ObjectAdapter target, ObjectAdapter[] parameters);
+ public abstract Object getDefault(ObjectAdapter target, List<ObjectAdapter> parameters);
}
http://git-wip-us.apache.org/repos/asf/isis/blob/2ab9e661/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
index 325bcb7..bcb157b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
@@ -19,6 +19,7 @@
package org.apache.isis.core.metamodel.specloader.specimpl;
+import java.util.Arrays;
import java.util.List;
import com.google.common.collect.Lists;
@@ -30,6 +31,7 @@ import org.apache.isis.applib.query.Query;
import org.apache.isis.applib.query.QueryFindAllInstances;
import org.apache.isis.core.commons.authentication.AuthenticationSession;
import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
+import org.apache.isis.core.commons.lang.ListUtils;
import org.apache.isis.core.commons.lang.StringUtils;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.adapter.QuerySubmitter;
@@ -57,6 +59,7 @@ import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.SpecificationLoader;
import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
+import org.apache.isis.core.metamodel.specloader.specimpl.ObjectActionParameterContributee.Util;
import org.apache.isis.core.progmodel.facets.param.autocomplete.MinLengthUtil;
public abstract class ObjectActionParameterAbstract implements ObjectActionParameter {
@@ -292,13 +295,15 @@ public abstract class ObjectActionParameterAbstract implements ObjectActionParam
@Override
public ObjectAdapter[] getChoices(final ObjectAdapter adapter, final ObjectAdapter[] argumentsIfAvailable) {
- final ObjectAdapter target = targetForDefaultOrChoices(adapter, argumentsIfAvailable);
- final ObjectAdapter[] args = argsForDefaultOrChoices(adapter, argumentsIfAvailable);
+ final List<ObjectAdapter> argListIfAvailable = ListUtils.mutableCopy(argumentsIfAvailable);
+
+ final ObjectAdapter target = targetForDefaultOrChoices(adapter, argListIfAvailable);
+ final List<ObjectAdapter> args = argsForDefaultOrChoices(adapter, argListIfAvailable);
return findChoices(target, args);
}
- private ObjectAdapter[] findChoices(final ObjectAdapter target, final ObjectAdapter[] args) {
+ private ObjectAdapter[] findChoices(final ObjectAdapter target, final List<ObjectAdapter> args) {
final List<ObjectAdapter> adapters = Lists.newArrayList();
final ActionParameterChoicesFacet facet = getFacet(ActionParameterChoicesFacet.class);
@@ -323,14 +328,14 @@ public abstract class ObjectActionParameterAbstract implements ObjectActionParam
public ObjectAdapter getDefault(final ObjectAdapter adapter) {
final ObjectAdapter target = targetForDefaultOrChoices(adapter, null);
- final ObjectAdapter[] args = argsForDefaultOrChoices(adapter, null);
+ final List<ObjectAdapter> args = argsForDefaultOrChoices(adapter, null);
return findDefault(target, args);
}
private ObjectAdapter findDefault(
final ObjectAdapter target,
- final ObjectAdapter[] args) {
+ final List<ObjectAdapter> args) {
final ActionParameterDefaultsFacet defaultsFacet = getFacet(ActionParameterDefaultsFacet.class);
if (defaultsFacet != null) {
final Object dflt = defaultsFacet.getDefault(target, args);
@@ -347,14 +352,14 @@ public abstract class ObjectActionParameterAbstract implements ObjectActionParam
/**
* Hook method; {@link ObjectActionParameterContributee contributed action parameter}s override.
*/
- protected ObjectAdapter targetForDefaultOrChoices(ObjectAdapter adapter, final ObjectAdapter[] argumentsIfAvailable) {
+ protected ObjectAdapter targetForDefaultOrChoices(ObjectAdapter adapter, final List<ObjectAdapter> argumentsIfAvailable) {
return adapter;
}
/**
* Hook method; {@link ObjectActionParameterContributee contributed action parameter}s override.
*/
- protected ObjectAdapter[] argsForDefaultOrChoices(final ObjectAdapter adapter, final ObjectAdapter[] argumentsIfAvailable) {
+ protected List<ObjectAdapter> argsForDefaultOrChoices(final ObjectAdapter adapter, final List<ObjectAdapter> argumentsIfAvailable) {
return null;
}
http://git-wip-us.apache.org/repos/asf/isis/blob/2ab9e661/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterContributee.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterContributee.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterContributee.java
index 53873c8..dbc375e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterContributee.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterContributee.java
@@ -16,6 +16,7 @@
*/
package org.apache.isis.core.metamodel.specloader.specimpl;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
@@ -27,13 +28,20 @@ import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
public interface ObjectActionParameterContributee extends ObjectActionParameter {
+ // TODO: can probably remove this now?
public static class Util {
-
- static <T> List<T> toList(final T[] inputArray) {
+
+ @SuppressWarnings("unused")
+ private static <T> List<T> toList(final T[] inputArray) {
+ return Lists.newArrayList(asList(inputArray));
+ }
+
+ private static <T> List<T> asList(final T[] inputArray) {
return inputArray != null? Arrays.asList(inputArray): Collections.<T>emptyList();
}
- static <T> List<T> update(List<T> input, final int requiredLength, final int index, final T elementAtIndex) {
+ @SuppressWarnings("unused")
+ private static <T> List<T> adjust(final List<T> input, final int requiredLength, final int index, final T elementAtIndex) {
List<T> output;
if(input.isEmpty()) {
// nothing provided, so just create an empty list of the required length
@@ -50,13 +58,13 @@ public interface ObjectActionParameterContributee extends ObjectActionParameter
} else {
throw new IllegalArgumentException("Provided " + input.size() + " args for method taking " + requiredLength + " parameters");
}
-
+
// finally, overwrite the element
output.set(index, elementAtIndex);
return output;
}
- static <T> List<T> newList(final int requiredLength) {
+ private static <T> List<T> newList(final int requiredLength) {
List<T> output;
output = Lists.newArrayList();
for(int i=0; i<requiredLength; i++) {
@@ -64,5 +72,74 @@ public interface ObjectActionParameterContributee extends ObjectActionParameter
}
return output;
}
+
+// @Test
+// public void adjust_whenSameSize() throws Exception {
+// final List<Integer> input = Arrays.asList(Integer.valueOf(0), Integer.MAX_VALUE, Integer.MIN_VALUE);
+// final List<Integer> output = ObjectActionParameterContributee.Util.adjust(input, 3, 0, Integer.valueOf(10));
+//
+// assertThat(output.size(), is(3));
+// assertThat(output.get(0), is(Integer.valueOf(10)));
+// assertThat(output.get(1), is(Integer.MAX_VALUE));
+// assertThat(output.get(2), is(Integer.MIN_VALUE));
+// }
+ //
+// @Test
+// public void adjust_whenEmpty() throws Exception {
+// final List<Integer> input = Collections.emptyList();
+// final List<Integer> output = ObjectActionParameterContributee.Util.adjust(input, 3, 0, Integer.valueOf(10));
+//
+// assertThat(output.size(), is(3));
+// assertThat(output.get(0), is(Integer.valueOf(10)));
+// assertThat(output.get(1), is(nullValue()));
+// assertThat(output.get(2), is(nullValue()));
+// }
+ //
+// @Test
+// public void adjust_whenOneLess_replaceStart() throws Exception {
+// final List<Integer> input = Arrays.asList(Integer.MAX_VALUE, Integer.MIN_VALUE);
+// final List<Integer> output = ObjectActionParameterContributee.Util.adjust(input, 3, 0, Integer.valueOf(10));
+//
+// assertThat(output.size(), is(3));
+// assertThat(output.get(0), is(Integer.valueOf(10)));
+// assertThat(output.get(1), is(Integer.MAX_VALUE));
+// assertThat(output.get(2), is(Integer.MIN_VALUE));
+// }
+ //
+// @Test
+// public void adjust_whenOneLess_replaceMiddle() throws Exception {
+// final List<Integer> input = Arrays.asList(Integer.MAX_VALUE, Integer.MIN_VALUE);
+// final List<Integer> output = ObjectActionParameterContributee.Util.adjust(input, 3, 1, Integer.valueOf(10));
+//
+// assertThat(output.size(), is(3));
+// assertThat(output.get(0), is(Integer.MAX_VALUE));
+// assertThat(output.get(1), is(Integer.valueOf(10)));
+// assertThat(output.get(2), is(Integer.MIN_VALUE));
+// }
+ //
+// @Test
+// public void adjust_whenOneLess_replaceEnd() throws Exception {
+// final List<Integer> input = Arrays.asList(Integer.MAX_VALUE, Integer.MIN_VALUE);
+// final List<Integer> output = ObjectActionParameterContributee.Util.adjust(input, 3, 2, Integer.valueOf(10));
+//
+// assertThat(output.size(), is(3));
+// assertThat(output.get(0), is(Integer.MAX_VALUE));
+// assertThat(output.get(1), is(Integer.MIN_VALUE));
+// assertThat(output.get(2), is(Integer.valueOf(10)));
+// }
+
+
+
+
+ // @Test
+ // public void newList() throws Exception {
+// final List<Object> list = ObjectActionParameterContributee.Util.newList(3);
+// assertThat(list.size(), is(3));
+// assertThat(list.get(0), is(nullValue()));
+// assertThat(list.get(1), is(nullValue()));
+// assertThat(list.get(2), is(nullValue()));
+ // }
+
+
}
}
http://git-wip-us.apache.org/repos/asf/isis/blob/2ab9e661/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseableContributee.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseableContributee.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseableContributee.java
index 0de6bea..7ee83a4 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseableContributee.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseableContributee.java
@@ -22,6 +22,7 @@ import java.util.List;
import com.google.common.collect.Lists;
+import org.apache.isis.core.commons.lang.ListUtils;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.facets.object.bounded.BoundedFacetUtils;
import org.apache.isis.core.metamodel.facets.param.choices.ActionParameterChoicesFacet;
@@ -37,6 +38,7 @@ import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
public class ObjectActionParameterParseableContributee extends ObjectActionParameterParseable implements ObjectActionParameterContributee {
private final ObjectAdapter serviceAdapter;
+ @SuppressWarnings("unused")
private final ObjectActionImpl serviceAction;
private final ObjectActionParameter serviceActionParameter;
@SuppressWarnings("unused")
@@ -66,18 +68,18 @@ public class ObjectActionParameterParseableContributee extends ObjectActionParam
return serviceActionParameter.getAutoComplete(serviceAdapter, searchArg);
}
- protected ObjectAdapter targetForDefaultOrChoices(ObjectAdapter adapter, final ObjectAdapter[] argumentsIfAvailable) {
+ protected ObjectAdapter targetForDefaultOrChoices(ObjectAdapter adapter, final List<ObjectAdapter> argumentsIfAvailable) {
return serviceAdapter;
}
- protected ObjectAdapter[] argsForDefaultOrChoices(final ObjectAdapter adapter, final ObjectAdapter[] argumentsIfAvailable) {
- final int required = serviceAction.getParameterCount();
- final int existing = contributeeAction.getContributeeParam();
+ protected List<ObjectAdapter> argsForDefaultOrChoices(final ObjectAdapter contributee, final List<ObjectAdapter> argumentsIfAvailable) {
+
+ final List<ObjectAdapter> suppliedArgs = ListUtils.mutableCopy(argumentsIfAvailable);
- List<ObjectAdapter> input = Util.toList(argumentsIfAvailable);
- List<ObjectAdapter> output = Util.update(input, required, existing, adapter);
+ final int contributeeParam = contributeeAction.getContributeeParam();
+ ListUtils.insert(suppliedArgs, contributeeParam, contributee);
- return output.toArray(new ObjectAdapter[]{});
+ return suppliedArgs;
}
http://git-wip-us.apache.org/repos/asf/isis/blob/2ab9e661/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterContributee.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterContributee.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterContributee.java
index 6470df2..dbc4e5b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterContributee.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterContributee.java
@@ -18,13 +18,14 @@ package org.apache.isis.core.metamodel.specloader.specimpl;
import java.util.List;
+import org.apache.isis.core.commons.lang.ListUtils;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
-import org.apache.isis.core.metamodel.specloader.specimpl.ObjectActionParameterContributee.Util;
public class OneToOneActionParameterContributee extends OneToOneActionParameterImpl implements ObjectActionParameterContributee{
private final ObjectAdapter serviceAdapter;
+ @SuppressWarnings("unused")
private final ObjectActionImpl serviceAction;
private final ObjectActionParameter serviceActionParameter;
@SuppressWarnings("unused")
@@ -54,18 +55,18 @@ public class OneToOneActionParameterContributee extends OneToOneActionParameterI
return serviceActionParameter.getAutoComplete(serviceAdapter, searchArg);
}
- protected ObjectAdapter targetForDefaultOrChoices(ObjectAdapter adapter, final ObjectAdapter[] argumentsIfAvailable) {
+ protected ObjectAdapter targetForDefaultOrChoices(ObjectAdapter adapter, final List<ObjectAdapter> argumentsIfAvailable) {
return serviceAdapter;
}
- protected ObjectAdapter[] argsForDefaultOrChoices(final ObjectAdapter adapter, final ObjectAdapter[] argumentsIfAvailable) {
- final int required = serviceAction.getParameterCount();
- final int existing = contributeeAction.getContributeeParam();
+ protected List<ObjectAdapter> argsForDefaultOrChoices(final ObjectAdapter contributee, final List<ObjectAdapter> argumentsIfAvailable) {
+
+ final List<ObjectAdapter> suppliedArgs = ListUtils.mutableCopy(argumentsIfAvailable);
- List<ObjectAdapter> input = Util.toList(argumentsIfAvailable);
- List<ObjectAdapter> output = Util.update(input, required, existing, adapter);
+ final int contributeeParam = contributeeAction.getContributeeParam();
+ ListUtils.insert(suppliedArgs, contributeeParam, contributee);
- return output.toArray(new ObjectAdapter[]{});
+ return suppliedArgs;
}
}
http://git-wip-us.apache.org/repos/asf/isis/blob/2ab9e661/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/param/choices/ActionParameterChoicesFacetNone.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/param/choices/ActionParameterChoicesFacetNone.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/param/choices/ActionParameterChoicesFacetNone.java
index ae1112e..4f39e7a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/param/choices/ActionParameterChoicesFacetNone.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/param/choices/ActionParameterChoicesFacetNone.java
@@ -19,6 +19,8 @@
package org.apache.isis.core.progmodel.facets.param.choices;
+import java.util.List;
+
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
@@ -31,7 +33,7 @@ public class ActionParameterChoicesFacetNone extends ActionParameterChoicesFacet
}
@Override
- public Object[] getChoices(final ObjectAdapter adapter, final ObjectAdapter[] arguments) {
+ public Object[] getChoices(final ObjectAdapter adapter, final List<ObjectAdapter> arguments) {
return new ObjectAdapter[0];
}
http://git-wip-us.apache.org/repos/asf/isis/blob/2ab9e661/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/param/choices/enums/ActionParameterChoicesFacetDerivedFromChoicesFacet.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/param/choices/enums/ActionParameterChoicesFacetDerivedFromChoicesFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/param/choices/enums/ActionParameterChoicesFacetDerivedFromChoicesFacet.java
index 872d274..7701222 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/param/choices/enums/ActionParameterChoicesFacetDerivedFromChoicesFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/param/choices/enums/ActionParameterChoicesFacetDerivedFromChoicesFacet.java
@@ -19,6 +19,8 @@
package org.apache.isis.core.progmodel.facets.param.choices.enums;
+import java.util.List;
+
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
@@ -35,7 +37,7 @@ public class ActionParameterChoicesFacetDerivedFromChoicesFacet extends ActionPa
}
@Override
- public Object[] getChoices(final ObjectAdapter adapter, final ObjectAdapter[] arguments) {
+ public Object[] getChoices(final ObjectAdapter adapter, final List<ObjectAdapter> arguments) {
final FacetHolder facetHolder = getFacetHolder();
final TypedHolder paramPeer = (TypedHolder) facetHolder;
final ObjectSpecification noSpec = getSpecification(paramPeer.getType());
http://git-wip-us.apache.org/repos/asf/isis/blob/2ab9e661/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/param/choices/methodnum/ActionParameterChoicesFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/param/choices/methodnum/ActionParameterChoicesFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/param/choices/methodnum/ActionParameterChoicesFacetFactory.java
index b7efc07..5a4e5b5 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/param/choices/methodnum/ActionParameterChoicesFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/param/choices/methodnum/ActionParameterChoicesFacetFactory.java
@@ -24,6 +24,7 @@ import java.lang.reflect.Method;
import java.util.Collection;
import java.util.List;
+import org.apache.isis.core.commons.lang.ListUtils;
import org.apache.isis.core.commons.lang.NameUtils;
import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
import org.apache.isis.core.metamodel.adapter.mgr.AdapterManagerAware;
@@ -33,6 +34,7 @@ import org.apache.isis.core.metamodel.facetapi.FacetUtil;
import org.apache.isis.core.metamodel.facetapi.FeatureType;
import org.apache.isis.core.metamodel.facets.FacetedMethod;
import org.apache.isis.core.metamodel.facets.FacetedMethodParameter;
+import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessMethodContext;
import org.apache.isis.core.metamodel.facets.actions.choices.ActionChoicesFacet;
import org.apache.isis.core.metamodel.methodutils.MethodScope;
import org.apache.isis.core.progmodel.facets.MethodFinderUtils;
@@ -80,19 +82,7 @@ public class ActionParameterChoicesFacetFactory extends MethodPrefixBasedFacetFa
final Class<?> arrayOfParamType = (Array.newInstance(paramTypes[i], 0)).getClass();
- // four attempts to find matching method
- Method choicesMethod;
- choicesMethod = findChoicesNumMethodReturning(processMethodContext, i, paramTypes, arrayOfParamType);
- if (choicesMethod == null) {
- choicesMethod = findChoicesNumMethodReturning(processMethodContext, i, paramTypes, Collection.class);
- }
- if (choicesMethod == null) {
- // ... otherwise on method name + no params
- choicesMethod = findChoicesNumMethodReturning(processMethodContext, i, new Class[0], arrayOfParamType);
- }
- if (choicesMethod == null) {
- choicesMethod = findChoicesNumMethodReturning(processMethodContext, i, new Class[0], Collection.class);
- }
+ final Method choicesMethod = findChoicesNumMethodReturning(processMethodContext, i);
if (choicesMethod == null) {
continue;
}
@@ -111,12 +101,47 @@ public class ActionParameterChoicesFacetFactory extends MethodPrefixBasedFacetFa
}
}
- private static Method findChoicesNumMethodReturning(final ProcessMethodContext processMethodContext, final int i, Class<?>[] paramTypes, final Class<?> arrayOfParamType) {
+ /**
+ * search successively for the default method, trimming number of param types each loop
+ */
+ private static Method findChoicesNumMethodReturning(final ProcessMethodContext processMethodContext, final int n) {
+
+ final Method actionMethod = processMethodContext.getMethod();
+ final List<Class<?>> paramTypes = ListUtils.mutableCopy(actionMethod.getParameterTypes());
+
+ final Class<?> arrayOfParamType = (Array.newInstance(paramTypes.get(n), 0)).getClass();
+
+ final int numParamTypes = paramTypes.size();
+
+ for(int i=0; i< numParamTypes+1; i++) {
+ Method method;
+
+ method = findChoicesNumMethodReturning(processMethodContext, n, paramTypes.toArray(new Class<?>[]{}), arrayOfParamType);
+ if(method != null) {
+ return method;
+ }
+ method = findChoicesNumMethodReturning(processMethodContext, n, paramTypes.toArray(new Class<?>[]{}), Collection.class);
+ if(method != null) {
+ return method;
+ }
+
+ // remove last, and search again
+ if(!paramTypes.isEmpty()) {
+ paramTypes.remove(paramTypes.size()-1);
+ }
+ }
+
+ return null;
+ }
+
+
+
+ private static Method findChoicesNumMethodReturning(final ProcessMethodContext processMethodContext, final int n, Class<?>[] paramTypes, final Class<?> returnType) {
final Class<?> cls = processMethodContext.getCls();
final Method actionMethod = processMethodContext.getMethod();
final String capitalizedName = NameUtils.capitalizeName(actionMethod.getName());
- final String name = MethodPrefixConstants.CHOICES_PREFIX + i + capitalizedName;
- return MethodFinderUtils.findMethod(cls, MethodScope.OBJECT, name, arrayOfParamType, paramTypes);
+ final String name = MethodPrefixConstants.CHOICES_PREFIX + n + capitalizedName;
+ return MethodFinderUtils.findMethod(cls, MethodScope.OBJECT, name, returnType, paramTypes);
}
// ///////////////////////////////////////////////////////////////
http://git-wip-us.apache.org/repos/asf/isis/blob/2ab9e661/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethod.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethod.java
index 37ca5d7..7f78b52 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethod.java
@@ -65,16 +65,16 @@ public class ActionParameterChoicesFacetViaMethod extends ActionParameterChoices
}
@Override
- public Object[] getChoices(final ObjectAdapter adapter, final ObjectAdapter[] arguments) {
- final Object options = AdapterInvokeUtils.invokeWithDefaults(method, adapter, arguments);
- if (options == null) {
+ public Object[] getChoices(final ObjectAdapter adapter, final List<ObjectAdapter> argumentsIfAvailable) {
+ final Object choices = AdapterInvokeUtils.invokeAutofit(method, adapter, argumentsIfAvailable);
+ if (choices == null) {
return new Object[0];
}
- if (options.getClass().isArray()) {
- return ArrayUtil.getObjectAsObjectArray(options);
+ if (choices.getClass().isArray()) {
+ return ArrayUtil.getObjectAsObjectArray(choices);
} else {
final ObjectSpecification specification = getSpecification(choicesType);
- return CollectionUtils.getCollectionAsObjectArray(options, specification, getAdapterManager());
+ return CollectionUtils.getCollectionAsObjectArray(choices, specification, getAdapterManager());
}
}
http://git-wip-us.apache.org/repos/asf/isis/blob/2ab9e661/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/param/defaults/ActionParameterDefaultsFacetNone.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/param/defaults/ActionParameterDefaultsFacetNone.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/param/defaults/ActionParameterDefaultsFacetNone.java
index e71128b..6800f48 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/param/defaults/ActionParameterDefaultsFacetNone.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/param/defaults/ActionParameterDefaultsFacetNone.java
@@ -19,6 +19,8 @@
package org.apache.isis.core.progmodel.facets.param.defaults;
+import java.util.List;
+
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
@@ -29,7 +31,7 @@ public class ActionParameterDefaultsFacetNone extends ActionParameterDefaultsFac
}
@Override
- public Object getDefault(final ObjectAdapter inObject, ObjectAdapter[] parameters) {
+ public Object getDefault(final ObjectAdapter inObject, List<ObjectAdapter> parameters) {
return null;
}
http://git-wip-us.apache.org/repos/asf/isis/blob/2ab9e661/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/param/defaults/methodnum/ActionParameterDefaultsFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/param/defaults/methodnum/ActionParameterDefaultsFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/param/defaults/methodnum/ActionParameterDefaultsFacetFactory.java
index beba8b0..c4fd3b5 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/param/defaults/methodnum/ActionParameterDefaultsFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/param/defaults/methodnum/ActionParameterDefaultsFacetFactory.java
@@ -22,6 +22,7 @@ package org.apache.isis.core.progmodel.facets.param.defaults.methodnum;
import java.lang.reflect.Method;
import java.util.List;
+import org.apache.isis.core.commons.lang.ListUtils;
import org.apache.isis.core.commons.lang.NameUtils;
import org.apache.isis.core.metamodel.exceptions.MetaModelException;
import org.apache.isis.core.metamodel.facetapi.Facet;
@@ -74,12 +75,8 @@ public class ActionParameterDefaultsFacetFactory extends MethodPrefixBasedFacetF
for (int i = 0; i < paramTypes.length; i++) {
- // two attempts to match method...
- Method defaultMethod;
- defaultMethod = findDefaultNumMethod(processMethodContext, i, paramTypes);
- if (defaultMethod == null) {
- defaultMethod = findDefaultNumMethod(processMethodContext, i, new Class[0]);
- }
+ // attempt to match method...
+ Method defaultMethod = findDefaultNumMethod(processMethodContext, i);
if (defaultMethod == null) {
continue;
}
@@ -98,12 +95,36 @@ public class ActionParameterDefaultsFacetFactory extends MethodPrefixBasedFacetF
}
}
- private static Method findDefaultNumMethod(final ProcessMethodContext processMethodContext, int i, Class<?>[] paramTypes) {
+ /**
+ * search successively for the default method, trimming number of param types each loop
+ */
+ private static Method findDefaultNumMethod(ProcessMethodContext processMethodContext, int n) {
+
+ final Method actionMethod = processMethodContext.getMethod();
+ final List<Class<?>> paramTypes = ListUtils.mutableCopy(actionMethod.getParameterTypes());
+
+ final int numParamTypes = paramTypes.size();
+
+ for(int i=0; i< numParamTypes+1; i++) {
+ final Method method = findDefaultNumMethod(processMethodContext, n, paramTypes.toArray(new Class<?>[]{}));
+ if(method != null) {
+ return method;
+ }
+ // remove last, and search again
+ if(!paramTypes.isEmpty()) {
+ paramTypes.remove(paramTypes.size()-1);
+ }
+ }
+
+ return null;
+ }
+
+ private static Method findDefaultNumMethod(final ProcessMethodContext processMethodContext, int n, Class<?>[] paramTypes) {
final Class<?> cls = processMethodContext.getCls();
final Method actionMethod = processMethodContext.getMethod();
- final Class<?> returnType = actionMethod.getParameterTypes()[i];
+ final Class<?> returnType = actionMethod.getParameterTypes()[n];
final String capitalizedName = NameUtils.capitalizeName(actionMethod.getName());
- return MethodFinderUtils.findMethod(cls, MethodScope.OBJECT, MethodPrefixConstants.DEFAULT_PREFIX + i + capitalizedName, returnType, paramTypes);
+ return MethodFinderUtils.findMethod(cls, MethodScope.OBJECT, MethodPrefixConstants.DEFAULT_PREFIX + n + capitalizedName, returnType, paramTypes);
}
}
http://git-wip-us.apache.org/repos/asf/isis/blob/2ab9e661/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/param/defaults/methodnum/ActionParameterDefaultsFacetViaMethod.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/param/defaults/methodnum/ActionParameterDefaultsFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/param/defaults/methodnum/ActionParameterDefaultsFacetViaMethod.java
index d4134e2..94242bd 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/param/defaults/methodnum/ActionParameterDefaultsFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/param/defaults/methodnum/ActionParameterDefaultsFacetViaMethod.java
@@ -23,10 +23,13 @@ import java.lang.reflect.Method;
import java.util.Collections;
import java.util.List;
+import com.google.common.collect.Lists;
+
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.adapter.util.AdapterInvokeUtils;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.ImperativeFacet;
+import org.apache.isis.core.metamodel.specloader.specimpl.ObjectActionParameterContributee.Util;
import org.apache.isis.core.progmodel.facets.param.defaults.ActionParameterDefaultsFacetAbstract;
public class ActionParameterDefaultsFacetViaMethod extends ActionParameterDefaultsFacetAbstract implements ImperativeFacet {
@@ -58,10 +61,12 @@ public class ActionParameterDefaultsFacetViaMethod extends ActionParameterDefaul
}
@Override
- public Object getDefault(final ObjectAdapter target, ObjectAdapter[] argumentsIfAvailable) {
- return AdapterInvokeUtils.invokeWithDefaults(method, target, argumentsIfAvailable);
+ public Object getDefault(final ObjectAdapter target, List<ObjectAdapter> argumentsIfAvailable) {
+ return AdapterInvokeUtils.invokeAutofit(method, target, argumentsIfAvailable);
}
+
+
@Override
protected String toStringValues() {
return "method=" + method;
http://git-wip-us.apache.org/repos/asf/isis/blob/2ab9e661/core/metamodel/src/test/java/org/apache/isis/core/commons/lang/ListUtilsTest_adjust.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/commons/lang/ListUtilsTest_adjust.java b/core/metamodel/src/test/java/org/apache/isis/core/commons/lang/ListUtilsTest_adjust.java
new file mode 100644
index 0000000..08fbe68
--- /dev/null
+++ b/core/metamodel/src/test/java/org/apache/isis/core/commons/lang/ListUtilsTest_adjust.java
@@ -0,0 +1,70 @@
+/**
+ * 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.core.commons.lang;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.not;
+import static org.hamcrest.CoreMatchers.nullValue;
+import static org.junit.Assert.assertThat;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import com.google.common.collect.Lists;
+
+import org.junit.Test;
+
+import org.apache.isis.core.commons.lang.ListUtils;
+
+public class ListUtilsTest_adjust {
+
+
+ @Test
+ public void sameLength() throws Exception {
+ final List<Integer> list = Lists.newArrayList(Integer.valueOf(0), Integer.MAX_VALUE, Integer.MIN_VALUE);
+ ListUtils.adjust(list, 3);
+
+ assertThat(list.size(), is(3));
+ assertThat(list.get(0), is(Integer.valueOf(0)));
+ assertThat(list.get(1), is(Integer.MAX_VALUE));
+ assertThat(list.get(2), is(Integer.MIN_VALUE));
+ }
+
+ @Test
+ public void ifLonger() throws Exception {
+ final List<Integer> list = Lists.newArrayList(Integer.valueOf(0), Integer.MAX_VALUE, Integer.MIN_VALUE);
+ ListUtils.adjust(list, 4);
+
+ assertThat(list.size(), is(4));
+ assertThat(list.get(0), is(Integer.valueOf(0)));
+ assertThat(list.get(1), is(Integer.MAX_VALUE));
+ assertThat(list.get(2), is(Integer.MIN_VALUE));
+ assertThat(list.get(3), is(nullValue()));
+ }
+
+ @Test
+ public void ifShorter() throws Exception {
+ final List<Integer> list = Lists.newArrayList(Integer.valueOf(0), Integer.MAX_VALUE, Integer.MIN_VALUE);
+ ListUtils.adjust(list, 2);
+
+ assertThat(list.size(), is(2));
+ assertThat(list.get(0), is(Integer.valueOf(0)));
+ assertThat(list.get(1), is(Integer.MAX_VALUE));
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/2ab9e661/core/metamodel/src/test/java/org/apache/isis/core/commons/lang/ListUtilsTest_insert.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/commons/lang/ListUtilsTest_insert.java b/core/metamodel/src/test/java/org/apache/isis/core/commons/lang/ListUtilsTest_insert.java
new file mode 100644
index 0000000..851f527
--- /dev/null
+++ b/core/metamodel/src/test/java/org/apache/isis/core/commons/lang/ListUtilsTest_insert.java
@@ -0,0 +1,82 @@
+/**
+ * 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.core.commons.lang;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.nullValue;
+import static org.junit.Assert.assertThat;
+
+import java.util.List;
+
+import com.google.common.collect.Lists;
+
+import org.junit.Test;
+
+public class ListUtilsTest_insert {
+
+ @Test
+ public void insert_whenInsertionPointAtBeginning() throws Exception {
+ final List<Integer> list = Lists.newArrayList(Integer.valueOf(0), Integer.MAX_VALUE, Integer.MIN_VALUE);
+ ListUtils.insert(list, 0, Integer.valueOf(10));
+
+ assertThat(list.size(), is(4));
+ assertThat(list.get(0), is(Integer.valueOf(10)));
+ assertThat(list.get(1), is(Integer.valueOf(0)));
+ assertThat(list.get(2), is(Integer.MAX_VALUE));
+ assertThat(list.get(3), is(Integer.MIN_VALUE));
+ }
+
+ @Test
+ public void insert_whenInsertionPointInMiddle() throws Exception {
+ final List<Integer> list = Lists.newArrayList(Integer.valueOf(0), Integer.MAX_VALUE, Integer.MIN_VALUE);
+ ListUtils.insert(list, 1, Integer.valueOf(10));
+
+ assertThat(list.size(), is(4));
+ assertThat(list.get(0), is(Integer.valueOf(0)));
+ assertThat(list.get(1), is(Integer.valueOf(10)));
+ assertThat(list.get(2), is(Integer.MAX_VALUE));
+ assertThat(list.get(3), is(Integer.MIN_VALUE));
+ }
+
+ @Test
+ public void insert_whenInsertionPointAtEnd() throws Exception {
+ final List<Integer> list = Lists.newArrayList(Integer.valueOf(0), Integer.MAX_VALUE, Integer.MIN_VALUE);
+ ListUtils.insert(list, 3, Integer.valueOf(10));
+
+ assertThat(list.size(), is(4));
+ assertThat(list.get(0), is(Integer.valueOf(0)));
+ assertThat(list.get(1), is(Integer.MAX_VALUE));
+ assertThat(list.get(2), is(Integer.MIN_VALUE));
+ assertThat(list.get(3), is(Integer.valueOf(10)));
+ }
+
+ @Test
+ public void insert_whenInsertionPointBeyondEnd() throws Exception {
+ final List<Integer> list = Lists.newArrayList(Integer.valueOf(0), Integer.MAX_VALUE, Integer.MIN_VALUE);
+ ListUtils.insert(list, 4, Integer.valueOf(10));
+
+ assertThat(list.size(), is(5));
+ assertThat(list.get(0), is(Integer.valueOf(0)));
+ assertThat(list.get(1), is(Integer.MAX_VALUE));
+ assertThat(list.get(2), is(Integer.MIN_VALUE));
+ assertThat(list.get(3), is(nullValue()));
+ assertThat(list.get(4), is(Integer.valueOf(10)));
+ }
+
+
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/2ab9e661/core/metamodel/src/test/java/org/apache/isis/core/commons/lang/ListUtilsTest_mutableCopy.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/commons/lang/ListUtilsTest_mutableCopy.java b/core/metamodel/src/test/java/org/apache/isis/core/commons/lang/ListUtilsTest_mutableCopy.java
new file mode 100644
index 0000000..618b685
--- /dev/null
+++ b/core/metamodel/src/test/java/org/apache/isis/core/commons/lang/ListUtilsTest_mutableCopy.java
@@ -0,0 +1,92 @@
+/**
+ * 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.core.commons.lang;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.not;
+import static org.hamcrest.CoreMatchers.nullValue;
+import static org.junit.Assert.assertThat;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import com.google.common.collect.Lists;
+
+import org.junit.Test;
+
+import org.apache.isis.core.commons.lang.ListUtils;
+
+public class ListUtilsTest_mutableCopy {
+
+ @Test
+ public void mutableCopyOfList_whenNotNull() throws Exception {
+ List<Integer> input = Arrays.asList(Integer.valueOf(0), Integer.MAX_VALUE, Integer.MIN_VALUE);
+
+ final List<Integer> list = ListUtils.mutableCopy(input);
+
+ assertThat(list.size(), is(3));
+ assertThat(list.get(0), is(Integer.valueOf(0)));
+ assertThat(list.get(1), is(Integer.MAX_VALUE));
+ assertThat(list.get(2), is(Integer.MIN_VALUE));
+
+ // is mutable
+ list.add(Integer.valueOf(-1));
+ }
+
+ @Test
+ public void mutableCopyOfList_whenNull() throws Exception {
+ List<Integer> input = null;
+
+ final List<Integer> list = ListUtils.mutableCopy(input);
+
+ assertThat(list, is(not(nullValue())));
+ assertThat(list.size(), is(0));
+
+ // is mutable
+ list.add(Integer.valueOf(-1));
+ }
+
+ @Test
+ public void mutableCopyOfArray_whenNotNull() throws Exception {
+ Integer[] input = {Integer.valueOf(0), Integer.MAX_VALUE, Integer.MIN_VALUE};
+
+ final List<Integer> list = ListUtils.mutableCopy(input);
+
+ assertThat(list.size(), is(3));
+ assertThat(list.get(0), is(Integer.valueOf(0)));
+ assertThat(list.get(1), is(Integer.MAX_VALUE));
+ assertThat(list.get(2), is(Integer.MIN_VALUE));
+
+ // is mutable
+ list.add(Integer.valueOf(-1));
+ }
+
+ @Test
+ public void mutableCopyOfArray_whenNull() throws Exception {
+ Integer[] input = null;
+
+ final List<Integer> list = ListUtils.mutableCopy(input);
+
+ assertThat(list, is(not(nullValue())));
+ assertThat(list.size(), is(0));
+
+ // is mutable
+ list.add(Integer.valueOf(-1));
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/2ab9e661/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItemContributions.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItemContributions.java b/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItemContributions.java
index d7319b9..f0d45d0 100644
--- a/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItemContributions.java
+++ b/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItemContributions.java
@@ -155,16 +155,16 @@ public class ToDoItemContributions extends AbstractFactoryAndRepository {
}
public Category default1UpdateCategory(
- final ToDoItem item, final Category category, final Subcategory subcategory) {
+ final ToDoItem item) {
return item.getCategory();
}
public Subcategory default2UpdateCategory(
- final ToDoItem item, final Category category, final Subcategory subcategory) {
+ final ToDoItem item) {
return item.getSubcategory();
}
public List<Subcategory> choices2UpdateCategory(
- final ToDoItem item, final Category category, final Subcategory subcategory) {
+ final ToDoItem item, final Category category) {
return Subcategory.listFor(category);
}
[4/5] git commit: ISIS-478: dependent choices now refreshed in UI ok.
Posted by da...@apache.org.
ISIS-478: dependent choices now refreshed in UI ok.
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/6763bd4e
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/6763bd4e
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/6763bd4e
Branch: refs/heads/master
Commit: 6763bd4eb76ee9ab4d845af0201262ee113b2c1e
Parents: cbd4f35
Author: Dan Haywood <da...@apache.org>
Authored: Tue Aug 20 20:43:26 2013 +0100
Committer: Dan Haywood <da...@apache.org>
Committed: Tue Aug 20 20:43:26 2013 +0100
----------------------------------------------------------------------
.../actions/ActionParametersFormPanel.java | 2 +-
.../valuechoices/ValueChoicesSelect2Panel.java | 33 ++++++++++++++------
.../java/dom/todo/ToDoItemContributions.java | 2 +-
3 files changed, 25 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/6763bd4e/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java
index a9bcea4..c168ec5 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java
@@ -131,8 +131,8 @@ public class ActionParametersFormPanel extends PanelAbstract<ActionModel> {
final ScalarPanelAbstract paramPanel = component instanceof ScalarPanelAbstract ? (ScalarPanelAbstract) component : null;
paramPanels.add(paramPanel);
if(paramPanel != null) {
- paramPanel.notifyOnChange(this);
paramPanel.setOutputMarkupId(true);
+ paramPanel.notifyOnChange(this);
}
}
}
http://git-wip-us.apache.org/repos/asf/isis/blob/6763bd4e/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/ValueChoicesSelect2Panel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/ValueChoicesSelect2Panel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/ValueChoicesSelect2Panel.java
index d0d5110..7f04de4 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/ValueChoicesSelect2Panel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/ValueChoicesSelect2Panel.java
@@ -74,7 +74,8 @@ public class ValueChoicesSelect2Panel extends ScalarPanelAbstract {
final IModel<ObjectAdapterMemento> modelObject = createModel();
select2ChoiceField = new Select2Choice<ObjectAdapterMemento>(ID_VALUE_ID, modelObject);
- select2ChoiceField.setProvider(newChoiceProviderForArgs(null));
+ final List<ObjectAdapterMemento> choicesMementos = getChoiceMementos(null);
+ setChoices(choicesMementos);
addStandardSemantics();
@@ -90,8 +91,7 @@ public class ValueChoicesSelect2Panel extends ScalarPanelAbstract {
return labelIfRegular;
}
- private ChoiceProvider<ObjectAdapterMemento> newChoiceProviderForArgs(final ObjectAdapter[] argumentsIfAvailable) {
- final List<ObjectAdapterMemento> choicesMementos = getChoiceMementos(argumentsIfAvailable);
+ protected ChoiceProvider<ObjectAdapterMemento> newChoiceProvider(final List<ObjectAdapterMemento> choicesMementos) {
final IModel<List<ObjectAdapterMemento>> choicesModel = newModel(choicesMementos);
final ChoiceProvider<ObjectAdapterMemento> choiceProvider = newChoiceProvider(choicesModel);
return choiceProvider;
@@ -112,11 +112,6 @@ public class ValueChoicesSelect2Panel extends ScalarPanelAbstract {
// take a copy otherwise is only lazily evaluated
final List<ObjectAdapterMemento> choicesMementos = Lists.newArrayList(Lists.transform(choices, Mementos.fromAdapter()));
-
- final ObjectAdapterMemento currentValue = getModel().getObjectAdapterMemento();
- if(currentValue != null && !choicesMementos.contains(currentValue)) {
- choicesMementos.add(currentValue);
- }
return choicesMementos;
}
@@ -260,9 +255,27 @@ public class ValueChoicesSelect2Panel extends ScalarPanelAbstract {
@Override
public void updateChoices(ObjectAdapter[] arguments) {
- select2ChoiceField.setProvider(newChoiceProviderForArgs(arguments));
+ final List<ObjectAdapterMemento> choicesMementos = getChoiceMementos(arguments);
+ setChoices(choicesMementos);
+ }
+
+ /**
+ * sets up the choices, also ensuring that any currently held value
+ * is compatible.
+ */
+ private void setChoices(final List<ObjectAdapterMemento> choicesMementos) {
+ select2ChoiceField.setProvider(newChoiceProvider(choicesMementos));
getModel().setPending(null);
- select2ChoiceField.clearInput();
+ final ObjectAdapterMemento objectAdapterMemento = getModel().getObjectAdapterMemento();
+ if(!choicesMementos.contains(objectAdapterMemento)) {
+ final ObjectAdapterMemento newAdapterMemento =
+ !choicesMementos.isEmpty()
+ ? choicesMementos.get(0)
+ : null;
+ select2ChoiceField.getModel().setObject(newAdapterMemento);
+ getModel().setObject(
+ newAdapterMemento != null? newAdapterMemento.getObjectAdapter(ConcurrencyChecking.NO_CHECK): null);
+ }
}
}
http://git-wip-us.apache.org/repos/asf/isis/blob/6763bd4e/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItemContributions.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItemContributions.java b/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItemContributions.java
index 86c7c3a..d7319b9 100644
--- a/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItemContributions.java
+++ b/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItemContributions.java
@@ -144,7 +144,7 @@ public class ToDoItemContributions extends AbstractFactoryAndRepository {
@DescribedAs("Update category and subcategory")
@NotInServiceMenu
@ActionSemantics(Of.IDEMPOTENT)
- @MemberOrder(sequence="1")
+ @MemberOrder(name="Subcategory", sequence="1")
public ToDoItem updateCategory(
final ToDoItem item,
final @Named("Category") Category category,
[3/5] git commit: ISIS-478: fixing quickstart example app tests
Posted by da...@apache.org.
ISIS-478: fixing quickstart example app tests
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/cbd4f355
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/cbd4f355
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/cbd4f355
Branch: refs/heads/master
Commit: cbd4f355cf61676016603cb77655d0354abd7628
Parents: db418f5
Author: Dan Haywood <da...@apache.org>
Authored: Tue Aug 20 19:42:42 2013 +0100
Committer: Dan Haywood <da...@apache.org>
Committed: Tue Aug 20 19:42:42 2013 +0100
----------------------------------------------------------------------
...oDoItemContributionsTest_updateCategory.java | 99 ++++++++++++++++++++
.../ToDoItemContributionsTest_similarTo.java | 66 +++++++++++++
.../ToDoItemContributionsTest_priority.java | 68 ++++++++++++++
.../tests/props/ToDoItemTest_category.java | 29 +-----
.../tests/props/ToDoItemTest_ownedBy.java | 3 +
.../tests/props/ToDoItemTest_subcategory.java | 55 +++++++++++
6 files changed, 295 insertions(+), 25 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/cbd4f355/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/actions/ToDoItemContributionsTest_updateCategory.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/actions/ToDoItemContributionsTest_updateCategory.java b/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/actions/ToDoItemContributionsTest_updateCategory.java
new file mode 100644
index 0000000..dd5fba5
--- /dev/null
+++ b/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/actions/ToDoItemContributionsTest_updateCategory.java
@@ -0,0 +1,99 @@
+/*
+ * 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 integration.tests.actions;
+
+import static org.hamcrest.CoreMatchers.*;
+import static org.junit.Assert.assertThat;
+import integration.tests.ToDoIntegTest;
+
+import java.util.List;
+
+import dom.todo.ToDoItem;
+import dom.todo.ToDoItemContributions;
+import dom.todo.ToDoItems;
+import dom.todo.ToDoItem.Category;
+import dom.todo.ToDoItem.Subcategory;
+import fixture.todo.ToDoItemsFixture;
+
+import org.joda.time.LocalDate;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import org.apache.isis.applib.clock.Clock;
+
+public class ToDoItemContributionsTest_updateCategory extends ToDoIntegTest {
+
+ private ToDoItem toDoItem;
+ private ToDoItemContributions toDoItemContributions;
+
+ @Before
+ public void setUp() throws Exception {
+ scenarioExecution().install(new ToDoItemsFixture());
+
+ final ToDoItems toDoItems = wrap(service(ToDoItems.class));
+ toDoItemContributions = wrap(service(ToDoItemContributions.class));
+ final List<ToDoItem> all = toDoItems.notYetComplete();
+ toDoItem = wrap(all.get(0));
+ }
+
+ @Test
+ public void happyCase() throws Exception {
+
+ // when
+ toDoItemContributions.updateCategory(toDoItem, Category.Professional, Subcategory.Consulting);
+
+ // then
+ assertThat(toDoItem.getCategory(), is(Category.Professional));
+ assertThat(toDoItem.getSubcategory(), is(Subcategory.Consulting));
+
+ // when
+ toDoItemContributions.updateCategory(toDoItem, Category.Domestic, Subcategory.Chores);
+
+ // then
+ assertThat(toDoItem.getCategory(), is(Category.Domestic));
+ assertThat(toDoItem.getSubcategory(), is(Subcategory.Chores));
+ }
+
+
+ @Test
+ public void categoryCannotBeNull() throws Exception {
+
+ // when, then
+ expectedExceptions.expectMessage("Mandatory");
+ toDoItemContributions.updateCategory(toDoItem, null, Subcategory.Chores);
+ }
+
+ @Test
+ public void subcategoryCannotBeNull() throws Exception {
+
+ // when, then
+ expectedExceptions.expectMessage("Mandatory");
+ toDoItemContributions.updateCategory(toDoItem, Category.Professional, null);
+ }
+
+ @Test
+ public void subcategoryMustBelongToCategory() throws Exception {
+
+ // when, then
+ expectedExceptions.expectMessage(containsString("Invalid subcategory"));
+ toDoItemContributions.updateCategory(toDoItem, Category.Professional, Subcategory.Chores);
+ }
+
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/isis/blob/cbd4f355/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/colls/ToDoItemContributionsTest_similarTo.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/colls/ToDoItemContributionsTest_similarTo.java b/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/colls/ToDoItemContributionsTest_similarTo.java
new file mode 100644
index 0000000..dd292cd
--- /dev/null
+++ b/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/colls/ToDoItemContributionsTest_similarTo.java
@@ -0,0 +1,66 @@
+/*
+ * 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 integration.tests.colls;
+
+import static org.hamcrest.CoreMatchers.*;
+import static org.junit.Assert.assertThat;
+import integration.tests.ToDoIntegTest;
+
+import java.util.List;
+
+import dom.todo.ToDoItem;
+import dom.todo.ToDoItemContributions;
+import dom.todo.ToDoItems;
+import dom.todo.ToDoItem.Category;
+import dom.todo.ToDoItem.Subcategory;
+import fixture.todo.ToDoItemsFixture;
+
+import org.joda.time.LocalDate;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import org.apache.isis.applib.clock.Clock;
+
+public class ToDoItemContributionsTest_similarTo extends ToDoIntegTest {
+
+ private ToDoItem toDoItem;
+ private ToDoItemContributions toDoItemContributions;
+
+ @Before
+ public void setUp() throws Exception {
+ scenarioExecution().install(new ToDoItemsFixture());
+
+ final ToDoItems toDoItems = wrap(service(ToDoItems.class));
+ toDoItemContributions = wrap(service(ToDoItemContributions.class));
+ final List<ToDoItem> all = toDoItems.notYetComplete();
+ toDoItem = wrap(all.get(0));
+ }
+
+ @Test
+ public void happyCase() throws Exception {
+
+ // when
+ List<ToDoItem> similarItems = toDoItemContributions.similarTo(toDoItem);
+
+ // then
+ assertThat(similarItems.size(), is(6));
+ }
+
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/isis/blob/cbd4f355/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/props/ToDoItemContributionsTest_priority.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/props/ToDoItemContributionsTest_priority.java b/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/props/ToDoItemContributionsTest_priority.java
new file mode 100644
index 0000000..9df9784
--- /dev/null
+++ b/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/props/ToDoItemContributionsTest_priority.java
@@ -0,0 +1,68 @@
+/*
+ * 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 integration.tests.props;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import integration.tests.ToDoIntegTest;
+
+import java.util.List;
+
+import dom.todo.ToDoItem;
+import dom.todo.ToDoItemContributions;
+import dom.todo.ToDoItems;
+import fixture.todo.ToDoItemsFixture;
+
+import org.junit.Before;
+import org.junit.Test;
+
+public class ToDoItemContributionsTest_priority extends ToDoIntegTest {
+
+ private ToDoItemContributions toDoItemContributions;
+
+ private List<ToDoItem> notYetComplete;
+
+ @Before
+ public void setUp() throws Exception {
+ scenarioExecution().install(new ToDoItemsFixture());
+
+ final ToDoItems toDoItems = wrap(service(ToDoItems.class));
+ toDoItemContributions = wrap(service(ToDoItemContributions.class));
+ notYetComplete = toDoItems.notYetComplete();
+ }
+
+ @Test
+ public void happyCase() throws Exception {
+ assertPriority(0, 1);
+ assertPriority(1, 2);
+ assertPriority(2, 4);
+ assertPriority(3, 6);
+ assertPriority(4, 5);
+ assertPriority(5, 7);
+ assertPriority(6, 9);
+ assertPriority(7, 8);
+ assertPriority(8, 3);
+ assertPriority(9, 10);
+ }
+
+ private void assertPriority(final int n, final int priority) {
+ assertThat(toDoItemContributions.priority(notYetComplete.get(n)), is(Integer.valueOf(priority)));
+ }
+
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/isis/blob/cbd4f355/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/props/ToDoItemTest_category.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/props/ToDoItemTest_category.java b/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/props/ToDoItemTest_category.java
index 91214af..119b2e9 100644
--- a/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/props/ToDoItemTest_category.java
+++ b/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/props/ToDoItemTest_category.java
@@ -18,8 +18,7 @@
*/
package integration.tests.props;
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.CoreMatchers.containsString;
import integration.tests.ToDoIntegTest;
import java.util.List;
@@ -29,13 +28,9 @@ import dom.todo.ToDoItems;
import dom.todo.ToDoItem.Category;
import fixture.todo.ToDoItemsFixture;
-import org.joda.time.LocalDate;
-import org.junit.After;
import org.junit.Before;
import org.junit.Test;
-import org.apache.isis.applib.clock.Clock;
-
public class ToDoItemTest_category extends ToDoIntegTest {
private ToDoItem toDoItem;
@@ -49,28 +44,12 @@ public class ToDoItemTest_category extends ToDoIntegTest {
}
@Test
- public void happyCase() throws Exception {
+ public void cannotModify() throws Exception {
- // when
+ // when, then
+ expectedExceptions.expectMessage(containsString("Always disabled"));
toDoItem.setCategory(Category.Professional);
-
- // then
- assertThat(toDoItem.getCategory(), is(Category.Professional));
-
- // when
- toDoItem.setCategory(Category.Domestic);
-
- // then
- assertThat(toDoItem.getCategory(), is(Category.Domestic));
}
- @Test
- public void cannotBeNull() throws Exception {
-
- // when, then
- expectedExceptions.expectMessage("Mandatory");
- toDoItem.setCategory(null);
- }
-
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/isis/blob/cbd4f355/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/props/ToDoItemTest_ownedBy.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/props/ToDoItemTest_ownedBy.java b/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/props/ToDoItemTest_ownedBy.java
index fface0b..034d7f7 100644
--- a/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/props/ToDoItemTest_ownedBy.java
+++ b/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/props/ToDoItemTest_ownedBy.java
@@ -18,12 +18,15 @@
*/
package integration.tests.props;
+import static org.hamcrest.CoreMatchers.*;
+import static org.junit.Assert.assertThat;
import integration.tests.ToDoIntegTest;
import java.util.List;
import dom.todo.ToDoItem;
import dom.todo.ToDoItems;
+import dom.todo.ToDoItem.Category;
import fixture.todo.ToDoItemsFixture;
import org.junit.Before;
http://git-wip-us.apache.org/repos/asf/isis/blob/cbd4f355/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/props/ToDoItemTest_subcategory.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/props/ToDoItemTest_subcategory.java b/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/props/ToDoItemTest_subcategory.java
new file mode 100644
index 0000000..2df8358
--- /dev/null
+++ b/example/application/quickstart_wicket_restful_jdo/integtests/src/test/java/integration/tests/props/ToDoItemTest_subcategory.java
@@ -0,0 +1,55 @@
+/*
+ * 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 integration.tests.props;
+
+import static org.hamcrest.CoreMatchers.containsString;
+import integration.tests.ToDoIntegTest;
+
+import java.util.List;
+
+import dom.todo.ToDoItem;
+import dom.todo.ToDoItem.Subcategory;
+import dom.todo.ToDoItems;
+import fixture.todo.ToDoItemsFixture;
+
+import org.junit.Before;
+import org.junit.Test;
+
+public class ToDoItemTest_subcategory extends ToDoIntegTest {
+
+ private ToDoItem toDoItem;
+
+ @Before
+ public void setUp() throws Exception {
+ scenarioExecution().install(new ToDoItemsFixture());
+
+ final List<ToDoItem> all = wrap(service(ToDoItems.class)).notYetComplete();
+ toDoItem = wrap(all.get(0));
+ }
+
+ @Test
+ public void cannotModify() throws Exception {
+
+ // when, then
+ expectedExceptions.expectMessage(containsString("Always disabled"));
+ toDoItem.setSubcategory(Subcategory.Chores);
+ }
+
+
+}
\ No newline at end of file
[2/5] git commit: ISIS-478: further work to getting choices to be
updated between action parameters
Posted by da...@apache.org.
ISIS-478: further work to getting choices to be updated between action parameters
* completed subscriber logic between ActionParametersFormPanel and the ScalarPanelAbstracts
* ObjectActionParameterContributee subtype's getChoices() now takes argumentsIfAvailable
* used when invoke facet
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/db418f5d
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/db418f5d
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/db418f5d
Branch: refs/heads/master
Commit: db418f5d5fef87b41c61d7298a5d472e1410cc3e
Parents: d114c45
Author: Dan Haywood <da...@apache.org>
Authored: Tue Aug 20 17:03:33 2013 +0100
Committer: Dan Haywood <da...@apache.org>
Committed: Tue Aug 20 17:03:33 2013 +0100
----------------------------------------------------------------------
.../viewer/dnd/view/action/ActionHelper.java | 2 +-
.../domainobjects/ObjectActionReprRenderer.java | 2 +-
.../viewer/wicket/model/models/ScalarModel.java | 12 +--
.../actions/ActionParametersFormPanel.java | 63 ++++++-------
.../scalars/ScalarModelSubscriber.java | 4 +-
.../components/scalars/ScalarPanelAbstract.java | 15 +++-
.../entitylink/EntityLinkSelect2Panel.java | 2 +-
.../valuechoices/ValueChoicesSelect2Panel.java | 94 +++++++++++---------
.../spec/feature/ObjectActionParameter.java | 39 ++++----
.../specimpl/ObjectActionParameterAbstract.java | 22 ++---
.../ObjectActionParameterContributee.java | 44 +++++++++
...jectActionParameterParseableContributee.java | 17 ++--
.../OneToOneActionParameterContributee.java | 20 +++--
13 files changed, 206 insertions(+), 130 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/db418f5d/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/view/action/ActionHelper.java
----------------------------------------------------------------------
diff --git a/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/view/action/ActionHelper.java b/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/view/action/ActionHelper.java
index 6055598..e82c631 100644
--- a/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/view/action/ActionHelper.java
+++ b/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/view/action/ActionHelper.java
@@ -45,7 +45,7 @@ public class ActionHelper {
for (int i = 0; i < parameterSpecs.size(); i++) {
defaultValues[i] = parameterSpecs.get(i).getDefault(target);
- options[i] = parameterSpecs.get(i).getChoices(target);
+ options[i] = parameterSpecs.get(i).getChoices(target, null);
}
if (!hasValues(defaultValues) && !hasValues(options)) {
http://git-wip-us.apache.org/repos/asf/isis/blob/db418f5d/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectActionReprRenderer.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectActionReprRenderer.java b/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectActionReprRenderer.java
index c36645c..0408484 100644
--- a/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectActionReprRenderer.java
+++ b/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectActionReprRenderer.java
@@ -160,7 +160,7 @@ public class ObjectActionReprRenderer extends AbstractObjectMemberReprRenderer<O
}
private Object choicesFor(final ObjectActionParameter param) {
- final ObjectAdapter[] choiceAdapters = param.getChoices(objectAdapter);
+ final ObjectAdapter[] choiceAdapters = param.getChoices(objectAdapter, null);
if (choiceAdapters == null || choiceAdapters.length == 0) {
return null;
}
http://git-wip-us.apache.org/repos/asf/isis/blob/db418f5d/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
index aad39bc..30667de 100644
--- a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
+++ b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
@@ -159,7 +159,7 @@ public class ScalarModel extends EntityModel implements LinksProvider {
}
@Override
- public List<ObjectAdapter> getChoices(final ScalarModel scalarModel) {
+ public List<ObjectAdapter> getChoices(final ScalarModel scalarModel, final ObjectAdapter[] argumentsIfAvailable) {
final PropertyMemento propertyMemento = scalarModel.getPropertyMemento();
final OneToOneAssociation property = propertyMemento.getProperty();
final ObjectAdapter[] choices = property.getChoices(scalarModel.parentObjectAdapterMemento.getObjectAdapter(ConcurrencyChecking.NO_CHECK));
@@ -300,10 +300,10 @@ public class ScalarModel extends EntityModel implements LinksProvider {
return actionParameter.hasChoices();
}
@Override
- public List<ObjectAdapter> getChoices(final ScalarModel scalarModel) {
+ public List<ObjectAdapter> getChoices(final ScalarModel scalarModel, final ObjectAdapter[] argumentsIfAvailable) {
final ActionParameterMemento parameterMemento = scalarModel.getParameterMemento();
final ObjectActionParameter actionParameter = parameterMemento.getActionParameter();
- final ObjectAdapter[] choices = actionParameter.getChoices(scalarModel.parentObjectAdapterMemento.getObjectAdapter(ConcurrencyChecking.NO_CHECK));
+ final ObjectAdapter[] choices = actionParameter.getChoices(scalarModel.parentObjectAdapterMemento.getObjectAdapter(ConcurrencyChecking.NO_CHECK), argumentsIfAvailable);
return choicesAsList(choices);
}
@@ -392,7 +392,7 @@ public class ScalarModel extends EntityModel implements LinksProvider {
}
public abstract boolean hasChoices(ScalarModel scalarModel);
- public abstract List<ObjectAdapter> getChoices(ScalarModel scalarModel);
+ public abstract List<ObjectAdapter> getChoices(ScalarModel scalarModel, final ObjectAdapter[] argumentsIfAvailable);
public abstract boolean hasAutoComplete(ScalarModel scalarModel);
public abstract List<ObjectAdapter> getAutoComplete(ScalarModel scalarModel, String searchArg);
@@ -586,8 +586,8 @@ public class ScalarModel extends EntityModel implements LinksProvider {
return kind.hasChoices(this);
}
- public List<ObjectAdapter> getChoices() {
- return kind.getChoices(this);
+ public List<ObjectAdapter> getChoices(final ObjectAdapter[] argumentsIfAvailable) {
+ return kind.getChoices(this, argumentsIfAvailable);
}
public boolean hasAutoComplete() {
http://git-wip-us.apache.org/repos/asf/isis/blob/db418f5d/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java
index 0b692c8..a9bcea4 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java
@@ -30,6 +30,7 @@ import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import org.apache.wicket.Component;
+import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.form.Button;
import org.apache.wicket.markup.html.form.Form;
@@ -86,8 +87,8 @@ public class ActionParametersFormPanel extends PanelAbstract<ActionModel> {
private static final long serialVersionUID = 1L;
private static final String ID_FEEDBACK = "feedback";
-
- private final List<ScalarPanelAbstract> scalarPanels = Lists.newArrayList();
+
+ private final List<ScalarPanelAbstract> paramPanels = Lists.newArrayList();
public ActionParameterForm(final String id, final ActionModel actionModel) {
super(id, actionModel);
@@ -120,20 +121,19 @@ public class ActionParametersFormPanel extends PanelAbstract<ActionModel> {
final RepeatingView rv = new RepeatingView(ID_ACTION_PARAMETERS);
add(rv);
- scalarPanels.clear();
+ paramPanels.clear();
for (final ActionParameterMemento apm : mementos) {
final WebMarkupContainer container = new WebMarkupContainer(rv.newChildId());
rv.add(container);
final ScalarModel argumentModel = actionModel.getArgumentModel(apm);
- final Component paramPanel = getComponentFactoryRegistry().addOrReplaceComponent(container, ComponentType.SCALAR_NAME_AND_VALUE, argumentModel);
- final ScalarPanelAbstract scalarPanel = paramPanel instanceof ScalarPanelAbstract ? (ScalarPanelAbstract) paramPanel : null;
- scalarPanels.add(scalarPanel);
- }
-
- // subscribe to all param panels
- for (ScalarPanelAbstract scalarPanel : scalarPanels) {
- scalarPanel.addScalarModelSubscriber(this);
+ final Component component = getComponentFactoryRegistry().addOrReplaceComponent(container, ComponentType.SCALAR_NAME_AND_VALUE, argumentModel);
+ final ScalarPanelAbstract paramPanel = component instanceof ScalarPanelAbstract ? (ScalarPanelAbstract) component : null;
+ paramPanels.add(paramPanel);
+ if(paramPanel != null) {
+ paramPanel.notifyOnChange(this);
+ paramPanel.setOutputMarkupId(true);
+ }
}
}
@@ -159,34 +159,23 @@ public class ActionParametersFormPanel extends PanelAbstract<ActionModel> {
}
@Override
- public void onUpdate(ScalarModelProvider provider) {
- final ScalarModel scalarModel = provider.getModel();
- String name = scalarModel.getName();
- final ObjectAdapterMemento objectAdapterMemento = scalarModel.getObjectAdapterMemento();
- final List<ObjectAdapter> pendingArgs =
- Lists.newArrayList(
- Iterables.transform(scalarPanels, new Function<ScalarPanelAbstract, ObjectAdapter>() {
- @Override
- public ObjectAdapter apply(ScalarPanelAbstract input) {
- if(input == null) {
- return null;
- }
- final ScalarModel model = input.getModel();
- final ObjectAdapterMemento objectAdapterMemento = model.getObjectAdapterMemento();
- if(objectAdapterMemento == null) {
- return null;
- }
- return objectAdapterMemento.getObjectAdapter(ConcurrencyChecking.NO_CHECK);
- }
- })
- );
- //System.out.println(name + " = '" + (objectAdapterMemento != null? objectAdapterMemento.getTitleHint(): null) + "'");
- System.out.println(pendingArgs);
+ public void onUpdate(AjaxRequestTarget target, ScalarModelProvider provider) {
+
final ActionModel actionModel = getActionModel();
- actionModel.getArgumentsAsArray();
- for (ScalarPanelAbstract scalarPanel : scalarPanels) {
-
+
+ final ObjectAdapter[] pendingArguments = actionModel.getArgumentsAsArray();
+ System.out.println(pendingArguments);
+
+ final ObjectAction action = actionModel.getActionMemento().getAction();
+ final int numParams = action.getParameterCount();
+ for (int i = 0; i < numParams; i++) {
+ final ScalarPanelAbstract paramPanel = paramPanels.get(i);
+ if(paramPanel != null) {
+ paramPanel.updateChoices(pendingArguments);
+ target.add(paramPanel);
+ }
}
+
}
}
}
http://git-wip-us.apache.org/repos/asf/isis/blob/db418f5d/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarModelSubscriber.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarModelSubscriber.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarModelSubscriber.java
index a42c227..88b9a7c 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarModelSubscriber.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarModelSubscriber.java
@@ -16,10 +16,12 @@
*/
package org.apache.isis.viewer.wicket.ui.components.scalars;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+
import org.apache.isis.viewer.wicket.ui.components.scalars.TextFieldValueModel.ScalarModelProvider;
public interface ScalarModelSubscriber {
- void onUpdate(ScalarModelProvider provider);
+ void onUpdate(AjaxRequestTarget target, ScalarModelProvider provider);
}
http://git-wip-us.apache.org/repos/asf/isis/blob/db418f5d/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
index 0d841ae..a5d0cfd 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
@@ -36,8 +36,11 @@ import org.apache.wicket.markup.html.panel.ComponentFeedbackPanel;
import org.apache.wicket.model.Model;
import org.apache.isis.applib.annotation.Where;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacet;
+import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
import org.apache.isis.viewer.wicket.model.links.LinkAndLabel;
+import org.apache.isis.viewer.wicket.model.mementos.ActionParameterMemento;
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.EntityModel.RenderingHint;
@@ -181,7 +184,7 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
@Override
protected void onUpdate(AjaxRequestTarget target) {
for (ScalarModelSubscriber subscriber : subscribers) {
- subscriber.onUpdate(ScalarPanelAbstract.this);
+ subscriber.onUpdate(target, ScalarPanelAbstract.this);
}
}
});
@@ -264,9 +267,17 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
private final List<ScalarModelSubscriber> subscribers = Lists.newArrayList();
- public void addScalarModelSubscriber(final ScalarModelSubscriber subscriber) {
+ public void notifyOnChange(final ScalarModelSubscriber subscriber) {
subscribers.add(subscriber);
}
+ // //////////////////////////////////////
+
+ /**
+ * Optional hook method
+ */
+ public void updateChoices(ObjectAdapter[] pendingArguments) {
+ }
+
}
http://git-wip-us.apache.org/repos/asf/isis/blob/db418f5d/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitylink/EntityLinkSelect2Panel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitylink/EntityLinkSelect2Panel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitylink/EntityLinkSelect2Panel.java
index f5dbfe9..92270ff 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitylink/EntityLinkSelect2Panel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitylink/EntityLinkSelect2Panel.java
@@ -318,7 +318,7 @@ public class EntityLinkSelect2Panel extends FormComponentPanelAbstract<ObjectAda
if(!hasChoices) {
return Collections.emptyList();
}
- final List<ObjectAdapter> choices = scalarModel.getChoices();
+ final List<ObjectAdapter> choices = scalarModel.getChoices(null);
if(choices.isEmpty()) {
return Collections.emptyList();
}
http://git-wip-us.apache.org/repos/asf/isis/blob/db418f5d/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/ValueChoicesSelect2Panel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/ValueChoicesSelect2Panel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/ValueChoicesSelect2Panel.java
index 4ab0837..d0d5110 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/ValueChoicesSelect2Panel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/ValueChoicesSelect2Panel.java
@@ -28,11 +28,8 @@ import com.vaynberg.wicket.select2.TextChoiceProvider;
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.Component;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
import org.apache.wicket.behavior.Behavior;
import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.html.form.FormComponent;
import org.apache.wicket.markup.html.form.FormComponentLabel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
@@ -63,7 +60,7 @@ public class ValueChoicesSelect2Panel extends ScalarPanelAbstract {
private static final String ID_VALUE_ID = "valueId";
- private FormComponent<ObjectAdapterMemento> valueField;
+ private Select2Choice<ObjectAdapterMemento> select2ChoiceField;
private ObjectAdapterMemento pending;
public ValueChoicesSelect2Panel(final String id, final ScalarModel scalarModel) {
@@ -75,8 +72,9 @@ public class ValueChoicesSelect2Panel extends ScalarPanelAbstract {
protected FormComponentLabel addComponentForRegular() {
final IModel<ObjectAdapterMemento> modelObject = createModel();
- final IModel<List<ObjectAdapterMemento>> choicesMementos = getChoicesModel();
- valueField = createDropDownChoices(choicesMementos, modelObject);
+
+ select2ChoiceField = new Select2Choice<ObjectAdapterMemento>(ID_VALUE_ID, modelObject);
+ select2ChoiceField.setProvider(newChoiceProviderForArgs(null));
addStandardSemantics();
@@ -86,12 +84,42 @@ public class ValueChoicesSelect2Panel extends ScalarPanelAbstract {
}
addOrReplace(labelIfRegular);
- addFeedbackTo(labelIfRegular, valueField);
+ addFeedbackTo(labelIfRegular, select2ChoiceField);
addAdditionalLinksTo(labelIfRegular);
return labelIfRegular;
}
+ private ChoiceProvider<ObjectAdapterMemento> newChoiceProviderForArgs(final ObjectAdapter[] argumentsIfAvailable) {
+ final List<ObjectAdapterMemento> choicesMementos = getChoiceMementos(argumentsIfAvailable);
+ final IModel<List<ObjectAdapterMemento>> choicesModel = newModel(choicesMementos);
+ final ChoiceProvider<ObjectAdapterMemento> choiceProvider = newChoiceProvider(choicesModel);
+ return choiceProvider;
+ }
+
+ private IModel<List<ObjectAdapterMemento>> newModel(final List<ObjectAdapterMemento> choicesMementos) {
+ return new ModelAbstract<List<ObjectAdapterMemento>>(choicesMementos){
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ protected List<ObjectAdapterMemento> load() {
+ return getObject();
+ }};
+ }
+
+ private List<ObjectAdapterMemento> getChoiceMementos(final ObjectAdapter[] argumentsIfAvailable) {
+ final List<ObjectAdapter> choices = scalarModel.getChoices(argumentsIfAvailable);
+
+ // take a copy otherwise is only lazily evaluated
+ final List<ObjectAdapterMemento> choicesMementos = Lists.newArrayList(Lists.transform(choices, Mementos.fromAdapter()));
+
+ final ObjectAdapterMemento currentValue = getModel().getObjectAdapterMemento();
+ if(currentValue != null && !choicesMementos.contains(currentValue)) {
+ choicesMementos.add(currentValue);
+ }
+ return choicesMementos;
+ }
+
private Model<ObjectAdapterMemento> createModel() {
return new Model<ObjectAdapterMemento>() {
@@ -137,23 +165,23 @@ public class ValueChoicesSelect2Panel extends ScalarPanelAbstract {
private void setRequiredIfSpecified() {
final ScalarModel scalarModel = getModel();
final boolean required = scalarModel.isRequired();
- valueField.setRequired(required);
+ select2ChoiceField.setRequired(required);
}
protected FormComponentLabel createFormComponentLabel() {
final String name = getModel().getName();
- valueField.setLabel(Model.of(name));
+ select2ChoiceField.setLabel(Model.of(name));
- final FormComponentLabel labelIfRegular = new FormComponentLabel(ID_SCALAR_IF_REGULAR, valueField);
+ final FormComponentLabel labelIfRegular = new FormComponentLabel(ID_SCALAR_IF_REGULAR, select2ChoiceField);
final String describedAs = getModel().getDescribedAs();
if(describedAs != null) {
labelIfRegular.add(new AttributeModifier("title", Model.of(describedAs)));
}
- final Label scalarName = new Label(ID_SCALAR_NAME, getRendering().getLabelCaption(valueField));
+ final Label scalarName = new Label(ID_SCALAR_NAME, getRendering().getLabelCaption(select2ChoiceField));
labelIfRegular.add(scalarName);
- labelIfRegular.add(valueField);
+ labelIfRegular.add(select2ChoiceField);
return labelIfRegular;
}
@@ -170,9 +198,7 @@ public class ValueChoicesSelect2Panel extends ScalarPanelAbstract {
return scalarModel.getObject();
}
- private FormComponent<ObjectAdapterMemento> createDropDownChoices(final IModel<List<ObjectAdapterMemento>> choicesMementos, final IModel<ObjectAdapterMemento> modelObject) {
- final String id = ID_VALUE_ID;
-
+ protected ChoiceProvider<ObjectAdapterMemento> newChoiceProvider(final IModel<List<ObjectAdapterMemento>> choicesMementos) {
ChoiceProvider<ObjectAdapterMemento> provider = new TextChoiceProvider<ObjectAdapterMemento>() {
private static final long serialVersionUID = 1L;
@@ -210,45 +236,33 @@ public class ValueChoicesSelect2Panel extends ScalarPanelAbstract {
}
};
- final Select2Choice<ObjectAdapterMemento> select2Choice = new Select2Choice<ObjectAdapterMemento>(id, modelObject, provider);
- return select2Choice;
+ return provider;
}
@Override
protected void onBeforeRenderWhenViewMode() { // View: Read only
- valueField.setEnabled(false);
+ select2ChoiceField.setEnabled(false);
}
@Override
protected void onBeforeRenderWhenEnabled() { // Edit: read/write
- valueField.setEnabled(true);
+ select2ChoiceField.setEnabled(true);
}
- private IModel<List<ObjectAdapterMemento>> getChoicesModel() {
- final List<ObjectAdapter> choices = scalarModel.getChoices();
-
- // take a copy otherwise is only lazily evaluated
- final List<ObjectAdapterMemento> choicesMementos = Lists.newArrayList(Lists.transform(choices, Mementos.fromAdapter()));
-
- final ObjectAdapterMemento currentValue = getModel().getObjectAdapterMemento();
- if(currentValue != null && !choicesMementos.contains(currentValue)) {
- choicesMementos.add(currentValue);
- }
-
-
- return new ModelAbstract<List<ObjectAdapterMemento>>(choicesMementos){
- private static final long serialVersionUID = 1L;
-
- @Override
- protected List<ObjectAdapterMemento> load() {
- return getObject();
- }};
- }
@Override
protected void addFormComponentBehaviour(Behavior behavior) {
- valueField.add(behavior);
+ select2ChoiceField.add(behavior);
}
+ // //////////////////////////////////////
+
+ @Override
+ public void updateChoices(ObjectAdapter[] arguments) {
+ select2ChoiceField.setProvider(newChoiceProviderForArgs(arguments));
+ getModel().setPending(null);
+ select2ChoiceField.clearInput();
+ }
+
}
http://git-wip-us.apache.org/repos/asf/isis/blob/db418f5d/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionParameter.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionParameter.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionParameter.java
index 956b4bd..322e530 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionParameter.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionParameter.java
@@ -86,43 +86,46 @@ public interface ObjectActionParameter extends ObjectFeature, CurrentHolder {
ActionArgumentContext createProposedArgumentInteractionContext(AuthenticationSession session, InteractionInvocationMethod invocationMethod, ObjectAdapter targetObject, ObjectAdapter[] args, int position);
- /**
- * Whether proposed value for this parameter is valid.
- *
- * @param adapter
- * @param proposedValue
- * @return
- */
- String isValid(ObjectAdapter adapter, Object proposedValue, Localization localization);
/**
- * Whether there are any choices provided (eg <tt>choicesXxx</tt> supporting
+ * Whether there is an autoComplete provided (eg <tt>autoCompleteXxx</tt> supporting
* method) for the parameter.
*/
- boolean hasChoices();
-
+ boolean hasAutoComplete();
+
/**
* Returns a list of possible references/values for this parameter, which the
- * user can choose from.
+ * user can choose from, based on the input search argument.
*/
- ObjectAdapter[] getChoices(ObjectAdapter adapter);
+ ObjectAdapter[] getAutoComplete(ObjectAdapter adapter, String searchArg);
+
+
+ int getAutoCompleteMinLength();
/**
- * Whether there is an autoComplete provided (eg <tt>autoCompleteXxx</tt> supporting
+ * Whether there are any choices provided (eg <tt>choicesXxx</tt> supporting
* method) for the parameter.
*/
- boolean hasAutoComplete();
+ boolean hasChoices();
/**
* Returns a list of possible references/values for this parameter, which the
- * user can choose from, based on the input search argument.
+ * user can choose from.
*/
- ObjectAdapter[] getAutoComplete(ObjectAdapter adapter, String searchArg);
+ ObjectAdapter[] getChoices(ObjectAdapter adapter, final ObjectAdapter[] argumentsIfAvailable);
- int getAutoCompleteMinLength();
ObjectAdapter getDefault(ObjectAdapter adapter);
+
+ /**
+ * Whether proposed value for this parameter is valid.
+ *
+ * @param adapter
+ * @param proposedValue
+ * @return
+ */
+ String isValid(ObjectAdapter adapter, Object proposedValue, Localization localization);
}
http://git-wip-us.apache.org/repos/asf/isis/blob/db418f5d/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
index 1da4772..325bcb7 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
@@ -291,14 +291,14 @@ public abstract class ObjectActionParameterAbstract implements ObjectActionParam
}
@Override
- public ObjectAdapter[] getChoices(final ObjectAdapter adapter) {
- final ObjectAdapter target = targetForDefaultOrChoices(adapter);
- final ObjectAdapter[] args = argsForDefaultOrChoices(adapter);
+ public ObjectAdapter[] getChoices(final ObjectAdapter adapter, final ObjectAdapter[] argumentsIfAvailable) {
+ final ObjectAdapter target = targetForDefaultOrChoices(adapter, argumentsIfAvailable);
+ final ObjectAdapter[] args = argsForDefaultOrChoices(adapter, argumentsIfAvailable);
- return getChoices(target, args);
+ return findChoices(target, args);
}
- private ObjectAdapter[] getChoices(final ObjectAdapter target, final ObjectAdapter[] args) {
+ private ObjectAdapter[] findChoices(final ObjectAdapter target, final ObjectAdapter[] args) {
final List<ObjectAdapter> adapters = Lists.newArrayList();
final ActionParameterChoicesFacet facet = getFacet(ActionParameterChoicesFacet.class);
@@ -322,13 +322,13 @@ public abstract class ObjectActionParameterAbstract implements ObjectActionParam
@Override
public ObjectAdapter getDefault(final ObjectAdapter adapter) {
- final ObjectAdapter target = targetForDefaultOrChoices(adapter);;
- final ObjectAdapter[] args = argsForDefaultOrChoices(adapter);
+ final ObjectAdapter target = targetForDefaultOrChoices(adapter, null);
+ final ObjectAdapter[] args = argsForDefaultOrChoices(adapter, null);
- return getDefault(target, args);
+ return findDefault(target, args);
}
- private ObjectAdapter getDefault(
+ private ObjectAdapter findDefault(
final ObjectAdapter target,
final ObjectAdapter[] args) {
final ActionParameterDefaultsFacet defaultsFacet = getFacet(ActionParameterDefaultsFacet.class);
@@ -347,14 +347,14 @@ public abstract class ObjectActionParameterAbstract implements ObjectActionParam
/**
* Hook method; {@link ObjectActionParameterContributee contributed action parameter}s override.
*/
- protected ObjectAdapter targetForDefaultOrChoices(ObjectAdapter adapter) {
+ protected ObjectAdapter targetForDefaultOrChoices(ObjectAdapter adapter, final ObjectAdapter[] argumentsIfAvailable) {
return adapter;
}
/**
* Hook method; {@link ObjectActionParameterContributee contributed action parameter}s override.
*/
- protected ObjectAdapter[] argsForDefaultOrChoices(final ObjectAdapter adapter) {
+ protected ObjectAdapter[] argsForDefaultOrChoices(final ObjectAdapter adapter, final ObjectAdapter[] argumentsIfAvailable) {
return null;
}
http://git-wip-us.apache.org/repos/asf/isis/blob/db418f5d/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterContributee.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterContributee.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterContributee.java
index 4930fa1..53873c8 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterContributee.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterContributee.java
@@ -16,9 +16,53 @@
*/
package org.apache.isis.core.metamodel.specloader.specimpl;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import com.google.common.collect.Lists;
+
import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
public interface ObjectActionParameterContributee extends ObjectActionParameter {
+ public static class Util {
+
+ static <T> List<T> toList(final T[] inputArray) {
+ return inputArray != null? Arrays.asList(inputArray): Collections.<T>emptyList();
+ }
+
+ static <T> List<T> update(List<T> input, final int requiredLength, final int index, final T elementAtIndex) {
+ List<T> output;
+ if(input.isEmpty()) {
+ // nothing provided, so just create an empty list of the required length
+ output = newList(requiredLength);
+ } else if(input.size() == requiredLength) {
+ // exactly correct length, so just use
+ output = input;
+ } else if(input.size() == requiredLength - 1) {
+ // one short, so split the input at the index
+ output = Lists.newArrayList();
+ output.addAll(input.subList(0, index));
+ output.add(null);
+ output.addAll(input.subList(index, input.size()));
+ } else {
+ throw new IllegalArgumentException("Provided " + input.size() + " args for method taking " + requiredLength + " parameters");
+ }
+
+ // finally, overwrite the element
+ output.set(index, elementAtIndex);
+ return output;
+ }
+
+ static <T> List<T> newList(final int requiredLength) {
+ List<T> output;
+ output = Lists.newArrayList();
+ for(int i=0; i<requiredLength; i++) {
+ output.add(null);
+ }
+ return output;
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/isis/blob/db418f5d/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseableContributee.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseableContributee.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseableContributee.java
index cad997b..0de6bea 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseableContributee.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseableContributee.java
@@ -16,6 +16,8 @@
*/
package org.apache.isis.core.metamodel.specloader.specimpl;
+import java.util.Arrays;
+import java.util.Collections;
import java.util.List;
import com.google.common.collect.Lists;
@@ -64,14 +66,19 @@ public class ObjectActionParameterParseableContributee extends ObjectActionParam
return serviceActionParameter.getAutoComplete(serviceAdapter, searchArg);
}
- protected ObjectAdapter targetForDefaultOrChoices(ObjectAdapter adapter) {
+ protected ObjectAdapter targetForDefaultOrChoices(ObjectAdapter adapter, final ObjectAdapter[] argumentsIfAvailable) {
return serviceAdapter;
}
- protected ObjectAdapter[] argsForDefaultOrChoices(final ObjectAdapter adapter) {
- ObjectAdapter[] args = new ObjectAdapter[serviceAction.getParameterCount()];
- args[contributeeAction.getContributeeParam()] = adapter;
- return args;
+ protected ObjectAdapter[] argsForDefaultOrChoices(final ObjectAdapter adapter, final ObjectAdapter[] argumentsIfAvailable) {
+ final int required = serviceAction.getParameterCount();
+ final int existing = contributeeAction.getContributeeParam();
+
+ List<ObjectAdapter> input = Util.toList(argumentsIfAvailable);
+ List<ObjectAdapter> output = Util.update(input, required, existing, adapter);
+
+ return output.toArray(new ObjectAdapter[]{});
}
+
}
http://git-wip-us.apache.org/repos/asf/isis/blob/db418f5d/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterContributee.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterContributee.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterContributee.java
index b706a1c..6470df2 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterContributee.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterContributee.java
@@ -16,9 +16,11 @@
*/
package org.apache.isis.core.metamodel.specloader.specimpl;
+import java.util.List;
+
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.facets.param.defaults.ActionParameterDefaultsFacet;
import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
+import org.apache.isis.core.metamodel.specloader.specimpl.ObjectActionParameterContributee.Util;
public class OneToOneActionParameterContributee extends OneToOneActionParameterImpl implements ObjectActionParameterContributee{
@@ -52,14 +54,18 @@ public class OneToOneActionParameterContributee extends OneToOneActionParameterI
return serviceActionParameter.getAutoComplete(serviceAdapter, searchArg);
}
- protected ObjectAdapter targetForDefaultOrChoices(ObjectAdapter adapter) {
+ protected ObjectAdapter targetForDefaultOrChoices(ObjectAdapter adapter, final ObjectAdapter[] argumentsIfAvailable) {
return serviceAdapter;
}
- protected ObjectAdapter[] argsForDefaultOrChoices(final ObjectAdapter adapter) {
- ObjectAdapter[] args = new ObjectAdapter[serviceAction.getParameterCount()];
- args[contributeeAction.getContributeeParam()] = adapter;
- return args;
+ protected ObjectAdapter[] argsForDefaultOrChoices(final ObjectAdapter adapter, final ObjectAdapter[] argumentsIfAvailable) {
+ final int required = serviceAction.getParameterCount();
+ final int existing = contributeeAction.getContributeeParam();
+
+ List<ObjectAdapter> input = Util.toList(argumentsIfAvailable);
+ List<ObjectAdapter> output = Util.update(input, required, existing, adapter);
+
+ return output.toArray(new ObjectAdapter[]{});
}
-
+
}