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/09/17 00:22:49 UTC
git commit: ISIS-478,ISIS-503: various fixes.
Updated Branches:
refs/heads/master 4bdc6adb4 -> d82f3d3c7
ISIS-478,ISIS-503: various fixes.
ISIS_478, for conditional choices, for EntitySelect:
* clear link now should work
* if no choices/autocomplete then doesn't NPE (BankMandates#newBankMandate)
* removed ID_ENTITY_TITLE_NULL label, since never visible
* sets up a placeholder text
for conditional choices, for ValueSelect:
* correctly initializes second dropdown based
ISIS-503, for contributee actions/associations, calculate identifier
* was causing stack trace when go back to list, caused by call to getIdentifier() incorrectly returning the wrong value for a contributed association.
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/d82f3d3c
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/d82f3d3c
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/d82f3d3c
Branch: refs/heads/master
Commit: d82f3d3c7655f9a825a070f0f9cd3aa5e189b2c3
Parents: 4bdc6ad
Author: Dan Haywood <da...@apache.org>
Authored: Mon Sep 16 23:22:27 2013 +0100
Committer: Dan Haywood <da...@apache.org>
Committed: Mon Sep 16 23:22:27 2013 +0100
----------------------------------------------------------------------
.../model/models/ScalarModelWithPending.java | 10 +-
.../scalars/reference/ReferencePanel.java | 3 +-
.../entitylink/EntityLinkSelect2Panel.html | 6 +-
.../entitylink/EntityLinkSelect2Panel.java | 125 +++++++++----------
.../EntityLinkSelect2PanelFactory.java | 5 +-
.../valuechoices/ValueChoicesSelect2Panel.java | 6 +-
.../specimpl/ObjectActionContributee.java | 20 +++
.../specimpl/ObjectSpecificationAbstract.java | 8 +-
.../OneToManyAssociationContributee.java | 27 +++-
.../OneToOneAssociationContributee.java | 28 +++--
.../java/dom/todo/ToDoItemContributions.java | 1 +
11 files changed, 137 insertions(+), 102 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/d82f3d3c/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModelWithPending.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModelWithPending.java b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModelWithPending.java
index 3e0109a..47b4455 100644
--- a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModelWithPending.java
+++ b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModelWithPending.java
@@ -61,19 +61,15 @@ public interface ScalarModelWithPending extends Serializable {
final ObjectAdapterMemento objectAdapterMemento = owner.getScalarModel().getObjectAdapterMemento();
owner.setPending(objectAdapterMemento);
-// final ObjectAdapter adapter = scalarModel.getObject();
-// return ObjectAdapterMemento.createOrNull(adapter);
return objectAdapterMemento;
}
@Override
public void setObject(final ObjectAdapterMemento adapterMemento) {
- if (adapterMemento != null) {
- if (LOG.isDebugEnabled()) {
- LOG.debug("setting to: " + adapterMemento.toString());
- }
- owner.setPending(adapterMemento);
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("setting to: " + adapterMemento!=null?adapterMemento.toString():null);
}
+ owner.setPending(adapterMemento);
if (owner.getScalarModel() != null && owner.getPending() != null) {
if (LOG.isDebugEnabled()) {
LOG.debug("setting to pending: " + owner.getPending().toString());
http://git-wip-us.apache.org/repos/asf/isis/blob/d82f3d3c/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 09faa65..c15bd1d 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
@@ -160,7 +160,8 @@ public class ReferencePanel extends ScalarPanelAbstract {
final ScalarModel scalarModel = getModel();
final String name = scalarModel.getName();
- entityLink = (EntityLinkSelect2Panel) getComponentFactoryRegistry().createComponent(ComponentType.ENTITY_LINK, getModel());
+ final Component entityLinkComponent = getComponentFactoryRegistry().createComponent(ComponentType.ENTITY_LINK, getModel());
+ entityLink = (EntityLinkSelect2Panel) entityLinkComponent;
entityLink.setOutputMarkupId(true);
entityLink.setLabel(Model.of(name));
http://git-wip-us.apache.org/repos/asf/isis/blob/d82f3d3c/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitylink/EntityLinkSelect2Panel.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitylink/EntityLinkSelect2Panel.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitylink/EntityLinkSelect2Panel.html
index c3109ca..a46232b 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitylink/EntityLinkSelect2Panel.html
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitylink/EntityLinkSelect2Panel.html
@@ -33,17 +33,13 @@
<div>
<input wicket:id="autoComplete" type="hidden" class="autoComplete" />
<span wicket:id="entityIconAndTitle">[icon and title]</span>
- <span wicket:id="entityTitleNull">(null)</span>
- <div class="findUsingClearDetails">
+ <div>
<a href="#" wicket:id="entityClearLink" class="entityClearLink">
<span>clear</span>
</a>
</div>
<div class="clear"/>
</div>
- <div class="xfeedbackPanel">
- <span xwicket:id="feedback"/>
- </div>
</div>
</wicket:panel>
</body>
http://git-wip-us.apache.org/repos/asf/isis/blob/d82f3d3c/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 51dac92..0ec864a 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
@@ -19,7 +19,6 @@
package org.apache.isis.viewer.wicket.ui.components.widgets.entitylink;
-import java.util.Collections;
import java.util.List;
import com.google.common.collect.Lists;
@@ -29,7 +28,6 @@ import com.vaynberg.wicket.select2.Settings;
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.FormComponentPanel;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.model.IModel;
@@ -37,16 +35,13 @@ import org.apache.wicket.model.IModel;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager.ConcurrencyChecking;
import org.apache.isis.core.metamodel.facets.object.autocomplete.AutoCompleteFacet;
-import org.apache.isis.core.metamodel.spec.ActionType;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
-import org.apache.isis.core.runtime.system.DeploymentType;
-import org.apache.isis.core.runtime.system.context.IsisContext;
import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
import org.apache.isis.viewer.wicket.model.models.ActionModel;
import org.apache.isis.viewer.wicket.model.models.EntityModel;
import org.apache.isis.viewer.wicket.model.models.EntityModel.RenderingHint;
import org.apache.isis.viewer.wicket.model.models.ScalarModel;
+import org.apache.isis.viewer.wicket.model.models.ScalarModelWithPending;
import org.apache.isis.viewer.wicket.model.models.ScalarModelWithPending.Util;
import org.apache.isis.viewer.wicket.model.util.MementoFunctions;
import org.apache.isis.viewer.wicket.ui.ComponentFactory;
@@ -66,10 +61,13 @@ public class EntityLinkSelect2Panel extends FormComponentPanelAbstract<ObjectAda
private static final String ID_AUTO_COMPLETE = "autoComplete";
private static final String ID_ENTITY_ICON_AND_TITLE = "entityIconAndTitle";
- private static final String ID_ENTITY_TITLE_NULL = "entityTitleNull";
+ //private static final String ID_ENTITY_TITLE_NULL = "entityTitleNull";
private static final String ID_ENTITY_CLEAR_LINK = "entityClearLink";
+ /**
+ * This component may be null if there are no choices or autoComplete, or if in read-only mode.
+ */
private Select2Choice<ObjectAdapterMemento> select2Field;
private Link<String> entityDetailsLink;
private Link<String> entityClearLink;
@@ -170,9 +168,6 @@ public class EntityLinkSelect2Panel extends FormComponentPanelAbstract<ObjectAda
syncLinkWithInput(adapter);
- // represent no object by a simple label displaying '(null)'
- syncEntityTitleNullWithInput(adapter);
-
syncEntityClearLinksWithInput(adapter);
doSyncWithInputIfAutoCompleteOrChoices();
@@ -187,29 +182,28 @@ public class EntityLinkSelect2Panel extends FormComponentPanelAbstract<ObjectAda
return;
}
-
- final IModel<ObjectAdapterMemento> model = Util.createModel(getScalarModel().asScalarModelWithPending());
+ final IModel<ObjectAdapterMemento> model = ScalarModelWithPending.Util.createModel(getScalarModel().asScalarModelWithPending());
if(select2Field == null) {
select2Field = new Select2Choice<ObjectAdapterMemento>(ID_AUTO_COMPLETE, model);
- setChoices(getScalarModel().getActionArgsHint());
+ setProviderAndCurrAndPending(select2Field, getScalarModel().getActionArgsHint());
if(!getScalarModel().hasChoices()) {
final Settings settings = select2Field.getSettings();
- ScalarModel scalarModel = (ScalarModel) getScalarModel();
+ ScalarModel scalarModel = getScalarModel();
final int minLength = scalarModel.getAutoCompleteMinLength();
settings.setMinimumInputLength(minLength);
+ settings.setPlaceholder(scalarModel.getName());
}
addOrReplace(select2Field);
}
-
// no need for link, since can see in drop-down
permanentlyHide(ID_ENTITY_ICON_AND_TITLE);
// no need for the 'null' title, since if there is no object yet
// can represent this fact in the drop-down
- permanentlyHide(ID_ENTITY_TITLE_NULL);
+ // permanentlyHide(ID_ENTITY_TITLE_NULL);
}
@@ -238,14 +232,10 @@ public class EntityLinkSelect2Panel extends FormComponentPanelAbstract<ObjectAda
@Override
protected List<ObjectAdapterMemento> obtainMementos(String term) {
+ final List<ObjectAdapter> autoCompleteChoices = Lists.newArrayList();
final ScalarModel scalarModel = (ScalarModel) entityModel;
- final boolean hasAutoComplete = scalarModel.hasAutoComplete();
- if(!hasAutoComplete) {
- return Collections.emptyList();
- }
- final List<ObjectAdapter> autoCompleteChoices = scalarModel.getAutoComplete(term);
- if(autoCompleteChoices.isEmpty()) {
- return Collections.emptyList();
+ if(scalarModel.hasAutoComplete()) {
+ autoCompleteChoices.addAll(scalarModel.getAutoComplete(term));
}
// take a copy otherwise is only lazily evaluated
return Lists.newArrayList(Lists.transform(autoCompleteChoices, MementoFunctions.fromAdapter()));
@@ -256,14 +246,10 @@ public class EntityLinkSelect2Panel extends FormComponentPanelAbstract<ObjectAda
private List<ObjectAdapterMemento> getChoiceMementos(final ObjectAdapter[] argsIfAvailable) {
+ final List<ObjectAdapter> choices = Lists.newArrayList();
final ScalarModel scalarModel = (ScalarModel) getScalarModel();;
- final boolean hasChoices = scalarModel.hasChoices();
- if(!hasChoices) {
- return Collections.emptyList();
- }
- final List<ObjectAdapter> choices = scalarModel.getChoices(argsIfAvailable);
- if(choices.isEmpty()) {
- return Collections.emptyList();
+ if(scalarModel.hasChoices()) {
+ choices.addAll(scalarModel.getChoices(argsIfAvailable));
}
// take a copy otherwise is only lazily evaluated
return Lists.newArrayList(Lists.transform(choices, MementoFunctions.fromAdapter()));
@@ -277,14 +263,6 @@ public class EntityLinkSelect2Panel extends FormComponentPanelAbstract<ObjectAda
}
}
- private void syncEntityTitleNullWithInput(final ObjectAdapter adapter) {
- if (adapter != null) {
- permanentlyHide(ID_ENTITY_TITLE_NULL);
- } else {
- addOrReplace(new Label(ID_ENTITY_TITLE_NULL, ""));
- }
- }
-
private void syncEntityClearLinksWithInput(final ObjectAdapter adapter) {
if (adapter == null) {
@@ -325,6 +303,10 @@ public class EntityLinkSelect2Panel extends FormComponentPanelAbstract<ObjectAda
public void onSelected(final ObjectAdapterMemento selectedAdapterMemento) {
getScalarModel().setPending(selectedAdapterMemento);
+ getScalarModel().setObject(selectedAdapterMemento!=null?selectedAdapterMemento.getObjectAdapter(ConcurrencyChecking.NO_CHECK):null);
+ if(this.select2Field != null) {
+ select2Field.getModel().setObject(selectedAdapterMemento);
+ }
renderSamePage();
}
@@ -379,45 +361,56 @@ public class EntityLinkSelect2Panel extends FormComponentPanelAbstract<ObjectAda
// //////////////////////////////////////
public void addFormComponentBehavior(Behavior behavior) {
- select2Field.add(behavior);
+ if(select2Field != null) {
+ select2Field.add(behavior);
+ }
}
public void updateChoices(ObjectAdapter[] argsIfAvailable) {
- setChoices(argsIfAvailable);
+ if(select2Field != null) {
+ setProviderAndCurrAndPending(select2Field, argsIfAvailable);
+ }
}
- private void setChoices(final ObjectAdapter[] argsIfAvailable) {
+ private void setProviderAndCurrAndPending(
+ final Select2Choice<ObjectAdapterMemento> select2Field,
+ final ObjectAdapter[] argsIfAvailable) {
- final ChoiceProvider<ObjectAdapterMemento> provider;
if (getScalarModel().hasChoices()) {
final List<ObjectAdapterMemento> choiceMementos = getChoiceMementos(argsIfAvailable);
- provider = new ObjectAdapterMementoProviderAbstract() {
- private static final long serialVersionUID = 1L;
- @Override
- protected List<ObjectAdapterMemento> obtainMementos(String unused) {
- return choiceMementos;
- }
- };
- final ObjectAdapterMemento curr = select2Field.getModelObject();
- select2Field.setProvider(provider);
+ select2Field.setProvider(providerForChoices(choiceMementos));
getScalarModel().clearPending();
- if(curr == null || !curr.containedIn(choiceMementos)) {
- final ObjectAdapterMemento newAdapterMemento =
- !choiceMementos.isEmpty()
- ? choiceMementos.get(0)
- : null;
- select2Field.getModel().setObject(newAdapterMemento);
- getModel().setObject(
- newAdapterMemento != null? newAdapterMemento.getObjectAdapter(ConcurrencyChecking.NO_CHECK): null);
- }
+ resetIfCurrentNotInChoices(select2Field, choiceMementos);
} else if(hasParamOrPropertyAutoComplete()) {
- provider = providerForParamOrPropertyAutoComplete();
- select2Field.setProvider(provider);
- getScalarModel().setPending(null);
+ select2Field.setProvider(providerForParamOrPropertyAutoComplete());
+ getScalarModel().clearPending();
} else {
- provider = providerForObjectAutoComplete();
- select2Field.setProvider(provider);
- getScalarModel().setPending(null);
+ select2Field.setProvider(providerForObjectAutoComplete());
+ getScalarModel().clearPending();
+ }
+ }
+
+ private ObjectAdapterMementoProviderAbstract providerForChoices(final List<ObjectAdapterMemento> choiceMementos) {
+ return new ObjectAdapterMementoProviderAbstract() {
+ private static final long serialVersionUID = 1L;
+ @Override
+ protected List<ObjectAdapterMemento> obtainMementos(String unused) {
+ return choiceMementos;
+ }
+ };
+ }
+
+ private void resetIfCurrentNotInChoices(final Select2Choice<ObjectAdapterMemento> select2Field, final List<ObjectAdapterMemento> choiceMementos) {
+ final ObjectAdapterMemento curr = select2Field.getModelObject();
+ if(curr == null || !curr.containedIn(choiceMementos)) {
+ if(!choiceMementos.isEmpty()) {
+ final ObjectAdapterMemento newAdapterMemento = choiceMementos.get(0);
+ select2Field.getModel().setObject(newAdapterMemento);
+ getModel().setObject(newAdapterMemento.getObjectAdapter(ConcurrencyChecking.NO_CHECK));
+ } else {
+ select2Field.getModel().setObject(null);
+ getModel().setObject(null);
+ }
}
}
http://git-wip-us.apache.org/repos/asf/isis/blob/d82f3d3c/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitylink/EntityLinkSelect2PanelFactory.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitylink/EntityLinkSelect2PanelFactory.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitylink/EntityLinkSelect2PanelFactory.java
index cbe4f34..7f75eb7 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitylink/EntityLinkSelect2PanelFactory.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitylink/EntityLinkSelect2PanelFactory.java
@@ -24,7 +24,6 @@ import org.apache.wicket.model.IModel;
import org.apache.isis.core.metamodel.facets.object.value.ValueFacet;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.viewer.wicket.model.models.EntityModel;
import org.apache.isis.viewer.wicket.model.models.ScalarModel;
import org.apache.isis.viewer.wicket.ui.ComponentFactoryAbstract;
import org.apache.isis.viewer.wicket.ui.ComponentType;
@@ -42,8 +41,8 @@ public class EntityLinkSelect2PanelFactory extends ComponentFactoryAbstract {
if (!(model instanceof ScalarModel)) {
return ApplicationAdvice.DOES_NOT_APPLY;
}
- final ScalarModel entityModel = (ScalarModel) model;
- final ObjectSpecification specification = entityModel.getTypeOfSpecification();
+ final ScalarModel scalarModel = (ScalarModel) model;
+ final ObjectSpecification specification = scalarModel.getTypeOfSpecification();
return appliesIf(specification != null && !specification.containsFacet(ValueFacet.class));
}
http://git-wip-us.apache.org/repos/asf/isis/blob/d82f3d3c/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 8a6b8ce..f2cdf6a 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
@@ -70,10 +70,10 @@ public class ValueChoicesSelect2Panel extends ScalarPanelAbstract implements Sca
@Override
protected FormComponentLabel addComponentForRegular() {
- final IModel<ObjectAdapterMemento> modelObject = Util.createModel(this);
-
+ final IModel<ObjectAdapterMemento> modelObject = ScalarModelWithPending.Util.createModel(this);
+ final ObjectAdapter[] actionArgsHint = getScalarModel().getActionArgsHint();
select2Field = new Select2Choice<ObjectAdapterMemento>(ID_VALUE_ID, modelObject);
- setChoices(null);
+ setChoices(actionArgsHint);
addStandardSemantics();
http://git-wip-us.apache.org/repos/asf/isis/blob/d82f3d3c/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionContributee.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionContributee.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionContributee.java
index 20cb118..de00892 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionContributee.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionContributee.java
@@ -21,6 +21,7 @@ import java.util.List;
import com.google.common.collect.Lists;
+import org.apache.isis.applib.Identifier;
import org.apache.isis.applib.annotation.Where;
import org.apache.isis.applib.filter.Filter;
import org.apache.isis.core.commons.authentication.AuthenticationSession;
@@ -53,6 +54,9 @@ public class ObjectActionContributee extends ObjectActionImpl implements Contrib
* Lazily initialized by {@link #getParameters()} (so don't use directly!)
*/
private List<ObjectActionParameterContributee> parameters;
+
+
+ private final Identifier identifier;
/**
* @param contributeeParam - the parameter number which corresponds to the contributee, and so should be suppressed.
@@ -72,6 +76,12 @@ public class ObjectActionContributee extends ObjectActionImpl implements Contrib
// copy over facets from contributed to own.
FacetUtil.copyFacets(serviceAction.getFacetedMethod(), facetHolder);
+
+ // calculate the identifier
+ final Identifier contributorIdentifier = serviceAction.getFacetedMethod().getIdentifier();
+ final String memberName = contributorIdentifier.getMemberName();
+ List<String> memberParameterNames = contributorIdentifier.getMemberParameterNames();
+ identifier = Identifier.actionIdentifier(getOnType().getCorrespondingClass().getName(), memberName, memberParameterNames);
}
@Override
@@ -212,6 +222,16 @@ public class ObjectActionContributee extends ObjectActionImpl implements Contrib
// //////////////////////////////////////
+
+ /* (non-Javadoc)
+ * @see org.apache.isis.core.metamodel.specloader.specimpl.ObjectMemberAbstract#getIdentifier()
+ */
+ @Override
+ public Identifier getIdentifier() {
+ return identifier;
+ }
+
+ // //////////////////////////////////////
static <T> T[] addElementToArray(T[] array, final int n, final T element, final T[] type) {
List<T> list = Lists.newArrayList(Arrays.asList(array));
http://git-wip-us.apache.org/repos/asf/isis/blob/d82f3d3c/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
index 481170c..e4fe466 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
@@ -932,19 +932,19 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
contributedActions.add((ObjectActionImpl) serviceAction);
}
- return Lists.newArrayList(Iterables.transform(contributedActions, createContributeeAssociationFunctor(serviceAdapter)));
+ return Lists.newArrayList(Iterables.transform(contributedActions, createContributeeAssociationFunctor(serviceAdapter, this)));
}
private Function<ObjectActionImpl, ObjectAssociation> createContributeeAssociationFunctor(
- final ObjectAdapter serviceAdapter) {
+ final ObjectAdapter serviceAdapter, final ObjectSpecification contributeeType) {
return new Function<ObjectActionImpl, ObjectAssociation>(){
@Override
public ObjectAssociation apply(ObjectActionImpl input) {
final ObjectSpecification returnType = input.getReturnType();
final ObjectAssociationAbstract association = returnType.isNotCollection()
- ? new OneToOneAssociationContributee(serviceAdapter, input, objectMemberContext)
- : new OneToManyAssociationContributee(serviceAdapter, input, objectMemberContext);
+ ? new OneToOneAssociationContributee(serviceAdapter, input, contributeeType, objectMemberContext)
+ : new OneToManyAssociationContributee(serviceAdapter, input, contributeeType, objectMemberContext);
facetProcessor.processMemberOrder(metadataProperties, association);
return association;
}
http://git-wip-us.apache.org/repos/asf/isis/blob/d82f3d3c/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationContributee.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationContributee.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationContributee.java
index 3883f8d..4c66147 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationContributee.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationContributee.java
@@ -18,6 +18,7 @@ package org.apache.isis.core.metamodel.specloader.specimpl;
import java.util.List;
+import org.apache.isis.applib.Identifier;
import org.apache.isis.applib.annotation.Render;
import org.apache.isis.applib.filter.Filter;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
@@ -50,27 +51,40 @@ public class OneToManyAssociationContributee extends OneToManyAssociationImpl im
* use layout metadata to position the contributee in different ways)
*/
private final FacetHolder facetHolder = new FacetHolderImpl();
+
+ private final Identifier identifier;
private static ObjectSpecification typeOfSpec(final ObjectActionImpl objectAction, ObjectMemberContext objectMemberContext) {
final TypeOfFacet actionTypeOfFacet = objectAction.getFacet(TypeOfFacet.class);
return objectMemberContext.getSpecificationLookup().loadSpecification(actionTypeOfFacet.value());
}
- public OneToManyAssociationContributee(ObjectAdapter serviceAdapter, ObjectActionImpl objectAction, ObjectMemberContext objectMemberContext) {
- super(objectAction.getFacetedMethod(), typeOfSpec(objectAction, objectMemberContext), objectMemberContext);
+ public OneToManyAssociationContributee(
+ final ObjectAdapter serviceAdapter,
+ final ObjectActionImpl serviceAction,
+ final ObjectSpecification contributeeType,
+ final ObjectMemberContext objectMemberContext) {
+ super(serviceAction.getFacetedMethod(), typeOfSpec(serviceAction, objectMemberContext), objectMemberContext);
this.serviceAdapter = serviceAdapter;
- this.objectAction = objectAction;
+ this.objectAction = serviceAction;
renderFacet = new RenderFacetAbstract(Render.Type.EAGERLY, this) {};
notPersistedFacet = new NotPersistedFacetAbstract(this) {};
typeOfFacet = new TypeOfFacetAbstract(getSpecification().getCorrespondingClass(), this, objectMemberContext.getSpecificationLookup()) {};
// copy over facets from contributed to own.
- FacetUtil.copyFacets(objectAction.getFacetedMethod(), facetHolder);
+ FacetUtil.copyFacets(serviceAction.getFacetedMethod(), facetHolder);
FacetUtil.addFacet(renderFacet);
FacetUtil.addFacet(notPersistedFacet);
FacetUtil.addFacet(typeOfFacet);
+
+ // calculate the identifier
+ final Identifier contributorIdentifier = serviceAction.getFacetedMethod().getIdentifier();
+ final String memberName = contributorIdentifier.getMemberName();
+ List<String> memberParameterNames = contributorIdentifier.getMemberParameterNames();
+
+ identifier = Identifier.actionIdentifier(contributeeType.getCorrespondingClass().getName(), memberName, memberParameterNames);
}
@@ -79,7 +93,10 @@ public class OneToManyAssociationContributee extends OneToManyAssociationImpl im
return objectAction.execute(serviceAdapter, new ObjectAdapter[]{ownerAdapter});
}
-
+ @Override
+ public Identifier getIdentifier() {
+ return identifier;
+ }
// //////////////////////////////////////
// FacetHolder
http://git-wip-us.apache.org/repos/asf/isis/blob/d82f3d3c/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationContributee.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationContributee.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationContributee.java
index a835a95..5d21f60 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationContributee.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationContributee.java
@@ -18,6 +18,7 @@ package org.apache.isis.core.metamodel.specloader.specimpl;
import java.util.List;
+import org.apache.isis.applib.Identifier;
import org.apache.isis.applib.filter.Filter;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.facetapi.Facet;
@@ -27,6 +28,7 @@ import org.apache.isis.core.metamodel.facetapi.FacetUtil;
import org.apache.isis.core.metamodel.facetapi.MultiTypedFacet;
import org.apache.isis.core.metamodel.facets.notpersisted.NotPersistedFacet;
import org.apache.isis.core.metamodel.facets.notpersisted.NotPersistedFacetAbstract;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
import org.apache.isis.core.metamodel.spec.feature.ObjectMemberContext;
@@ -42,31 +44,41 @@ public class OneToOneAssociationContributee extends OneToOneAssociationImpl impl
* use layout metadata to position the contributee in different ways)
*/
private final FacetHolder facetHolder = new FacetHolderImpl();
+
+ private final Identifier identifier;
public OneToOneAssociationContributee(
final ObjectAdapter serviceAdapter,
- final ObjectActionImpl objectAction,
+ final ObjectActionImpl servceAction,
+ final ObjectSpecification contributeeType,
final ObjectMemberContext objectMemberContext) {
- super(objectAction.getFacetedMethod(), objectAction.getReturnType(), objectMemberContext);
+ super(servceAction.getFacetedMethod(), servceAction.getReturnType(), objectMemberContext);
this.serviceAdapter = serviceAdapter;
- this.objectAction = objectAction;
+ this.objectAction = servceAction;
notPersistedFacet = new NotPersistedFacetAbstract(this) {};
// copy over facets from contributed to own.
- FacetUtil.copyFacets(objectAction.getFacetedMethod(), facetHolder);
+ FacetUtil.copyFacets(servceAction.getFacetedMethod(), facetHolder);
FacetUtil.addFacet(notPersistedFacet);
+
+ // calculate the identifier
+ final Identifier contributorIdentifier = servceAction.getFacetedMethod().getIdentifier();
+ final String memberName = contributorIdentifier.getMemberName();
+ List<String> memberParameterNames = contributorIdentifier.getMemberParameterNames();
+
+ identifier = Identifier.actionIdentifier(contributeeType.getCorrespondingClass().getName(), memberName, memberParameterNames);
}
@Override
public ObjectAdapter get(final ObjectAdapter ownerAdapter) {
return objectAction.execute(serviceAdapter, new ObjectAdapter[]{ownerAdapter});
}
-
-
-
-
+ @Override
+ public Identifier getIdentifier() {
+ return identifier;
+ }
// //////////////////////////////////////
// FacetHolder
http://git-wip-us.apache.org/repos/asf/isis/blob/d82f3d3c/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 6bc670d..75531c5 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
@@ -168,6 +168,7 @@ public class ToDoItemContributions extends AbstractFactoryAndRepository {
// UpdateCategory (contributed action)
// //////////////////////////////////////
+ @Named("Update")
@DescribedAs("Update category and subcategory")
@NotInServiceMenu
@ActionSemantics(Of.IDEMPOTENT)