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;