You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2017/01/20 16:18:15 UTC
[08/36] isis git commit: ISIS-785: introduces
OneToManyActionParameter interface and OneToManyActionParameterDefault (WIP),
and refactors the OTOActionParameter{MixedIn/Contributee} so that they no
longer inherit from OTOActionParameterDefault.
ISIS-785: introduces OneToManyActionParameter interface and OneToManyActionParameterDefault (WIP), and refactors the OTOActionParameter{MixedIn/Contributee} so that they no longer inherit from OTOActionParameterDefault.
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/74750c63
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/74750c63
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/74750c63
Branch: refs/heads/master
Commit: 74750c63cb28002526faf6284b7fc3bc8cf68a67
Parents: 12c4726
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Wed Jan 18 11:09:44 2017 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Wed Jan 18 11:09:44 2017 +0000
----------------------------------------------------------------------
.../metamodel/spec/ObjectSpecification.java | 2 +-
.../spec/feature/OneToManyActionParameter.java | 28 +++++++++++++++
.../specimpl/ObjectActionDefault.java | 12 +++++--
.../specimpl/ObjectActionParameterAbstract.java | 10 ++++++
.../OneToManyActionParameterDefault.java | 38 ++++++++++++++++++++
.../OneToOneActionParameterContributee.java | 5 ++-
.../OneToOneActionParameterMixedIn.java | 6 +++-
7 files changed, 95 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/74750c63/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java
index 2869f0e..8491662 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java
@@ -265,7 +265,7 @@ public interface ObjectSpecification extends Specification, ObjectActionContaine
* In effect, means that it doesn't have the {@link CollectionFacet}, and
* therefore will return NOT {@link #isParentedOrFreeCollection()}
*
- * @see #isCollection().
+ * @see #isParentedOrFreeCollection().
*/
boolean isNotCollection();
http://git-wip-us.apache.org/repos/asf/isis/blob/74750c63/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/OneToManyActionParameter.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/OneToManyActionParameter.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/OneToManyActionParameter.java
new file mode 100644
index 0000000..c3a3d99
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/OneToManyActionParameter.java
@@ -0,0 +1,28 @@
+/*
+ * 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.metamodel.spec.feature;
+
+/**
+ * Modelled after {@link OneToOneAssociation} as a subinterface of
+ * {@link ObjectAssociation}.
+ */
+public interface OneToManyActionParameter extends ObjectActionParameter, OneToManyFeature {
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/74750c63/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionDefault.java
index 6e23f71..edae87e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionDefault.java
@@ -196,13 +196,19 @@ public class ObjectActionDefault extends ObjectMemberAbstract implements ObjectA
for (int i = 0; i < parameterCount; i++) {
final TypedHolder paramPeer = paramPeers.get(i);
+
+ @SuppressWarnings("unused")
final ObjectSpecification specification = ObjectMemberAbstract
.getSpecification(getSpecificationLoader(), paramPeer.getType());
- if (!specification.isNotCollection()) {
- throw new UnknownTypeException("collections not supported as parameters: " + getIdentifier());
+ // previously we threw an exception here if the specification represented a collection. No longer!
+ final ObjectActionParameter parameter;
+ if(specification.isNotCollection()) {
+ parameter = new OneToOneActionParameterDefault(i, this, paramPeer);
+ } else {
+ parameter = new OneToManyActionParameterDefault(i, this, paramPeer);
}
- final ObjectActionParameter parameter = new OneToOneActionParameterDefault(i, this, paramPeer);
+
parameters.add(parameter);
}
return parameters;
http://git-wip-us.apache.org/repos/asf/isis/blob/74750c63/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 2f4d704..1aaebff 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
@@ -42,8 +42,10 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facetapi.FeatureType;
import org.apache.isis.core.metamodel.facetapi.MultiTypedFacet;
import org.apache.isis.core.metamodel.facets.TypedHolder;
+import org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacet;
import org.apache.isis.core.metamodel.facets.all.describedas.DescribedAsFacet;
import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
+import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacet;
import org.apache.isis.core.metamodel.facets.object.choices.ChoicesFacetFromBoundedAbstract;
import org.apache.isis.core.metamodel.facets.objectvalue.mandatory.MandatoryFacet;
import org.apache.isis.core.metamodel.facets.param.autocomplete.ActionParameterAutoCompleteFacet;
@@ -422,6 +424,14 @@ public abstract class ObjectActionParameterAbstract implements ObjectActionParam
final ObjectSpecification choiceWrappedSpec = specificationLookup.loadSpecification(choiceWrappedClass);
final ObjectSpecification paramWrappedSpec = specificationLookup.loadSpecification(paramWrappedClass);
+
+ // TODO: remove this eventually... need to introduce OneToManyParameter
+ if(paramWrappedSpec.isParentedOrFreeCollection()) {
+ final CollectionFacet collectionFacet = paramWrappedSpec.getFacet(CollectionFacet.class);
+ final TypeOfFacet typeOfFacet = collectionFacet.getTypeOfFacet();
+ final ObjectSpecification collectionOfParamSpec = typeOfFacet.valueSpec();
+ System.out.println(collectionOfParamSpec.getFullIdentifier());
+ }
if (!choiceWrappedSpec.isOfType(paramWrappedSpec)) {
throw new DomainModelException("Type incompatible with parameter type; expected " + paramSpec.getFullIdentifier() + ", but was " + choiceClass.getName());
http://git-wip-us.apache.org/repos/asf/isis/blob/74750c63/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyActionParameterDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyActionParameterDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyActionParameterDefault.java
new file mode 100644
index 0000000..890ed2a
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyActionParameterDefault.java
@@ -0,0 +1,38 @@
+/*
+ * 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.metamodel.specloader.specimpl;
+
+import org.apache.isis.core.metamodel.facets.TypedHolder;
+import org.apache.isis.core.metamodel.spec.feature.OneToManyActionParameter;
+
+public class OneToManyActionParameterDefault extends ObjectActionParameterAbstract implements OneToManyActionParameter {
+
+ public OneToManyActionParameterDefault(
+ final int index,
+ final ObjectActionDefault actionImpl,
+ final TypedHolder peer) {
+ super(index, actionImpl, peer);
+ }
+
+ @Override
+ public CollectionSemantics getCollectionSemantics() {
+ throw new RuntimeException("TODO: not yet implemented");
+ }
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/74750c63/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 980147b..415abef 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
@@ -22,8 +22,11 @@ import org.apache.isis.core.commons.lang.ListExtensions;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
+import org.apache.isis.core.metamodel.spec.feature.OneToOneActionParameter;
-public class OneToOneActionParameterContributee extends OneToOneActionParameterDefault implements ObjectActionParameterContributee{
+public class OneToOneActionParameterContributee
+ extends ObjectActionParameterAbstract
+ implements ObjectActionParameterContributee, OneToOneActionParameter {
private final ObjectAdapter serviceAdapter;
private final ObjectActionParameter serviceActionParameter;
http://git-wip-us.apache.org/repos/asf/isis/blob/74750c63/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterMixedIn.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterMixedIn.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterMixedIn.java
index 7a16b20..b17e89d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterMixedIn.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterMixedIn.java
@@ -20,8 +20,12 @@ import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.isis.core.metamodel.interactions.ActionArgValidityContext;
import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
+import org.apache.isis.core.metamodel.spec.feature.OneToOneActionParameter;
-public class OneToOneActionParameterMixedIn extends OneToOneActionParameterDefault implements ObjectActionParameterMixedIn {
+public class OneToOneActionParameterMixedIn
+ extends ObjectActionParameterAbstract
+ implements ObjectActionParameterMixedIn,
+ OneToOneActionParameter {
private final ObjectActionParameter mixinParameter;
private final ObjectActionMixedIn mixedInAction;