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/19 11:09:27 UTC
[21/24] isis git commit: ISIS-785: introduces
CollectionSemanticsFacet for both OneToManyParameter and also
OneToManyAssociation,
and use to capture from the param type/return type using FacetMethodParam or
FacetMethod, earlier on.
ISIS-785: introduces CollectionSemanticsFacet for both OneToManyParameter and also OneToManyAssociation, and use to capture from the param type/return type using FacetMethodParam or FacetMethod, earlier on.
The previous design, which attempted to infer CollectionSemantics later on, was broken because the TypedFacetHolder#getType / #setType capture only the element type of the collection, not the type of the collection itself.
This commit also extends CollectionSemantics to add in SORTED_SET as well as SET.
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/69753e24
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/69753e24
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/69753e24
Branch: refs/heads/maint-1.13.3
Commit: 69753e24b23e1e1c0b2682e54b047560b69226d6
Parents: a6a79e4
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Wed Jan 18 16:05:29 2017 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Wed Jan 18 16:05:29 2017 +0000
----------------------------------------------------------------------
.../core/metamodel/facets/FacetedMethod.java | 7 ++
...llectionAccessorFacetViaAccessorFactory.java | 3 +
.../semantics/CollectionSemantics.java | 104 +++++++++++++++++++
.../semantics/CollectionSemanticsFacet.java | 29 ++++++
.../CollectionSemanticsFacetDefault.java | 47 +++++++++
.../spec/feature/OneToManyFeature.java | 50 +--------
.../OneToManyActionParameterContributee.java | 6 +-
.../OneToManyActionParameterDefault.java | 6 +-
.../OneToManyActionParameterMixedIn.java | 6 +-
.../specimpl/OneToManyAssociationDefault.java | 6 +-
.../viewer/wicket/model/models/ScalarModel.java | 44 +++++++-
11 files changed, 246 insertions(+), 62 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/69753e24/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetedMethod.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetedMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetedMethod.java
index 490866d..c2d6410 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetedMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetedMethod.java
@@ -32,6 +32,8 @@ import org.apache.isis.core.metamodel.facetapi.FacetUtil;
import org.apache.isis.core.metamodel.facetapi.FeatureType;
import org.apache.isis.core.metamodel.facetapi.IdentifiedHolder;
import org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacet;
+import org.apache.isis.core.metamodel.facets.collparam.semantics.CollectionSemanticsFacet;
+import org.apache.isis.core.metamodel.facets.collparam.semantics.CollectionSemanticsFacetDefault;
import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
/**
@@ -124,6 +126,11 @@ public class FacetedMethod extends TypedHolderDefault implements IdentifiedHolde
// this is based on similar logic to ActionAnnotationFacetFactory#processTypeOf
if(featureType == FeatureType.ACTION_PARAMETER_COLLECTION) {
+
+ final CollectionSemanticsFacet semanticsFacet =
+ CollectionSemanticsFacetDefault.forParamType(parameterType, fmp);
+ FacetUtil.addFacet(semanticsFacet);
+
TypeOfFacet typeOfFacet = specificationLoader.inferFromGenericParamType(fmp, parameterType, genericParameterType);
if(typeOfFacet == null ) {
http://git-wip-us.apache.org/repos/asf/isis/blob/69753e24/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/accessor/CollectionAccessorFacetViaAccessorFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/accessor/CollectionAccessorFacetViaAccessorFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/accessor/CollectionAccessorFacetViaAccessorFactory.java
index 2b63b52..edf3083 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/accessor/CollectionAccessorFacetViaAccessorFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/accessor/CollectionAccessorFacetViaAccessorFactory.java
@@ -29,6 +29,7 @@ import org.apache.isis.core.metamodel.facetapi.FeatureType;
import org.apache.isis.core.metamodel.facetapi.MethodRemover;
import org.apache.isis.core.metamodel.facets.MethodPrefixConstants;
import org.apache.isis.core.metamodel.facets.PropertyOrCollectionIdentifyingFacetFactoryAbstract;
+import org.apache.isis.core.metamodel.facets.collparam.semantics.CollectionSemanticsFacetDefault;
import org.apache.isis.core.metamodel.methodutils.MethodScope;
import org.apache.isis.core.metamodel.services.ServicesInjector;
import org.apache.isis.core.metamodel.services.persistsession.PersistenceSessionServiceInternal;
@@ -58,6 +59,8 @@ public class CollectionAccessorFacetViaAccessorFactory
getDeploymentCategory(), getConfiguration(), getSpecificationLoader(),
getAuthenticationSessionProvider(), adapterManager
));
+
+ FacetUtil.addFacet(CollectionSemanticsFacetDefault.forCollection(accessorMethod, holder));
}
http://git-wip-us.apache.org/repos/asf/isis/blob/69753e24/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collparam/semantics/CollectionSemantics.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collparam/semantics/CollectionSemantics.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collparam/semantics/CollectionSemantics.java
new file mode 100644
index 0000000..9cb5887
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collparam/semantics/CollectionSemantics.java
@@ -0,0 +1,104 @@
+/*
+ * 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.facets.collparam.semantics;
+
+import java.lang.reflect.Array;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Queue;
+import java.util.Set;
+import java.util.SortedSet;
+import java.util.TreeSet;
+
+public enum CollectionSemantics {
+ LIST {
+ @Override
+ public Object emptyCollectionOf(final Class<?> elementClass) {
+ return new ArrayList<>();
+ }
+ }, ARRAY {
+ @Override
+ public Object emptyCollectionOf(final Class<?> elementClass) {
+ return Array.newInstance(elementClass, 0);
+ }
+ }, SORTED_SET {
+ @Override
+ public Object emptyCollectionOf(final Class<?> elementClass) {
+ return new TreeSet<>();
+ }
+ }, SET {
+ @Override
+ public Object emptyCollectionOf(final Class<?> elementClass) {
+ return new HashSet<>();
+ }
+ }, OTHER {
+ @Override
+ public Object emptyCollectionOf(final Class<?> elementClass) {
+ return new ArrayList<>();
+ }
+ };
+
+ public static CollectionSemantics of(final Class<?> accessorReturnType) {
+ if (!Collection.class.isAssignableFrom(accessorReturnType)) {
+ return ARRAY;
+ }
+ if (List.class.isAssignableFrom(accessorReturnType)) {
+ return LIST;
+ }
+ if (SortedSet.class.isAssignableFrom(accessorReturnType)) {
+ return SORTED_SET;
+ }
+ if (Set.class.isAssignableFrom(accessorReturnType)) {
+ return SET;
+ }
+ return OTHER;
+ }
+
+ /**
+ * The corresponding class is not a subclass of {@link Collection}.
+ */
+ public boolean isArray() {
+ return this == ARRAY;
+ }
+
+ public boolean isList() {
+ return this == LIST;
+ }
+
+ public boolean isSet() {
+ return this == SET || this == SORTED_SET;
+ }
+
+ /**
+ * For example, {@link Queue}, or some other 3rd party implementation of
+ * {@link Collection}.
+ */
+ public boolean isOther() {
+ return this == OTHER;
+ }
+
+ public boolean isListOrArray() {
+ return isList() || isArray();
+ }
+
+ public abstract Object emptyCollectionOf(final Class<?> elementClass);
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/69753e24/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collparam/semantics/CollectionSemanticsFacet.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collparam/semantics/CollectionSemanticsFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collparam/semantics/CollectionSemanticsFacet.java
new file mode 100644
index 0000000..258357f
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collparam/semantics/CollectionSemanticsFacet.java
@@ -0,0 +1,29 @@
+/*
+ * 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.facets.collparam.semantics;
+
+import org.apache.isis.core.metamodel.facets.SingleValueFacet;
+
+/**
+ * Represents the semantics of an collection.
+ */
+public interface CollectionSemanticsFacet extends SingleValueFacet<CollectionSemantics> {
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/69753e24/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collparam/semantics/CollectionSemanticsFacetDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collparam/semantics/CollectionSemanticsFacetDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collparam/semantics/CollectionSemanticsFacetDefault.java
new file mode 100644
index 0000000..6ef7655
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collparam/semantics/CollectionSemanticsFacetDefault.java
@@ -0,0 +1,47 @@
+/*
+ * 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.facets.collparam.semantics;
+
+import java.lang.reflect.Method;
+
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.SingleValueFacetAbstract;
+
+public class CollectionSemanticsFacetDefault extends SingleValueFacetAbstract<CollectionSemantics> implements
+ CollectionSemanticsFacet {
+
+ public static Class<? extends Facet> type() {
+ return CollectionSemanticsFacet.class;
+ }
+
+ public static CollectionSemanticsFacet forCollection(final Method collectionAccessorMethod, final FacetHolder holder) {
+ return new CollectionSemanticsFacetDefault(CollectionSemantics.of(collectionAccessorMethod.getReturnType()), holder);
+ }
+
+ public static CollectionSemanticsFacet forParamType(final Class<?> paramClass, final FacetHolder holder) {
+ return new CollectionSemanticsFacetDefault(CollectionSemantics.of(paramClass), holder);
+ }
+
+ private CollectionSemanticsFacetDefault(final CollectionSemantics collectionSemantics, final FacetHolder holder) {
+ super(type(), collectionSemantics, holder);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/69753e24/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/OneToManyFeature.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/OneToManyFeature.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/OneToManyFeature.java
index 3ffc9f9..017aa6b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/OneToManyFeature.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/OneToManyFeature.java
@@ -19,10 +19,7 @@
package org.apache.isis.core.metamodel.spec.feature;
-import java.util.Collection;
-import java.util.List;
-import java.util.Queue;
-import java.util.Set;
+import org.apache.isis.core.metamodel.facets.collparam.semantics.CollectionSemantics;
/**
* Base interface for {@link OneToManyAssociation} only.
@@ -38,51 +35,6 @@ import java.util.Set;
*/
public interface OneToManyFeature extends ObjectFeature {
- public enum CollectionSemantics {
- LIST, ARRAY, SET, OTHER;
-
- /**
- * The corresponding class is not a subclass of {@link Collection}.
- */
- public boolean isArray() {
- return this == ARRAY;
- }
-
- public boolean isList() {
- return this == LIST;
- }
-
- public boolean isSet() {
- return this == SET;
- }
-
- /**
- * For example, {@link Queue}, or some other 3rdparty implementation of
- * {@link Collection}.
- */
- public boolean isOther() {
- return this == OTHER;
- }
-
- public boolean isListOrArray() {
- return isList() || isArray();
- }
- }
-
CollectionSemantics getCollectionSemantics();
- public static class Util {
- public static CollectionSemantics semanticsOf(final Class<?> underlyingClass) {
- if (!Collection.class.isAssignableFrom(underlyingClass)) {
- return CollectionSemantics.ARRAY;
- }
- if (List.class.isAssignableFrom(underlyingClass)) {
- return CollectionSemantics.LIST;
- }
- if (Set.class.isAssignableFrom(underlyingClass)) {
- return CollectionSemantics.SET;
- }
- return CollectionSemantics.OTHER;
- }
- }
}
http://git-wip-us.apache.org/repos/asf/isis/blob/69753e24/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyActionParameterContributee.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyActionParameterContributee.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyActionParameterContributee.java
index afaa1a0..9707bd0 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyActionParameterContributee.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyActionParameterContributee.java
@@ -18,8 +18,9 @@ package org.apache.isis.core.metamodel.specloader.specimpl;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.facetapi.FeatureType;
+import org.apache.isis.core.metamodel.facets.collparam.semantics.CollectionSemantics;
+import org.apache.isis.core.metamodel.facets.collparam.semantics.CollectionSemanticsFacet;
import org.apache.isis.core.metamodel.spec.feature.OneToManyActionParameter;
-import org.apache.isis.core.metamodel.spec.feature.OneToManyFeature;
public class OneToManyActionParameterContributee
extends ObjectActionParameterContributeeAbstract
@@ -35,7 +36,6 @@ public class OneToManyActionParameterContributee
@Override
public CollectionSemantics getCollectionSemantics() {
- final Class<?> underlyingClass = getSpecification().getCorrespondingClass();
- return OneToManyFeature.Util.semanticsOf(underlyingClass);
+ return getFacet(CollectionSemanticsFacet.class).value();
}
}
http://git-wip-us.apache.org/repos/asf/isis/blob/69753e24/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
index 72ba757..dc30800 100644
--- 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
@@ -21,8 +21,9 @@ package org.apache.isis.core.metamodel.specloader.specimpl;
import org.apache.isis.core.metamodel.facetapi.FeatureType;
import org.apache.isis.core.metamodel.facets.TypedHolder;
+import org.apache.isis.core.metamodel.facets.collparam.semantics.CollectionSemantics;
+import org.apache.isis.core.metamodel.facets.collparam.semantics.CollectionSemanticsFacet;
import org.apache.isis.core.metamodel.spec.feature.OneToManyActionParameter;
-import org.apache.isis.core.metamodel.spec.feature.OneToManyFeature;
public class OneToManyActionParameterDefault extends ObjectActionParameterAbstract implements OneToManyActionParameter {
@@ -35,8 +36,7 @@ public class OneToManyActionParameterDefault extends ObjectActionParameterAbstra
@Override
public CollectionSemantics getCollectionSemantics() {
- final Class<?> underlyingClass = getSpecification().getCorrespondingClass();
- return OneToManyFeature.Util.semanticsOf(underlyingClass);
+ return getFacet(CollectionSemanticsFacet.class).value();
}
http://git-wip-us.apache.org/repos/asf/isis/blob/69753e24/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyActionParameterMixedIn.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyActionParameterMixedIn.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyActionParameterMixedIn.java
index f51a2a0..117067f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyActionParameterMixedIn.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyActionParameterMixedIn.java
@@ -17,8 +17,9 @@
package org.apache.isis.core.metamodel.specloader.specimpl;
import org.apache.isis.core.metamodel.facetapi.FeatureType;
+import org.apache.isis.core.metamodel.facets.collparam.semantics.CollectionSemantics;
+import org.apache.isis.core.metamodel.facets.collparam.semantics.CollectionSemanticsFacet;
import org.apache.isis.core.metamodel.spec.feature.OneToManyActionParameter;
-import org.apache.isis.core.metamodel.spec.feature.OneToManyFeature;
public class OneToManyActionParameterMixedIn
extends ObjectActionParameterMixedInAbstract
@@ -32,7 +33,6 @@ public class OneToManyActionParameterMixedIn
@Override
public CollectionSemantics getCollectionSemantics() {
- final Class<?> underlyingClass = getSpecification().getCorrespondingClass();
- return OneToManyFeature.Util.semanticsOf(underlyingClass);
+ return getFacet(CollectionSemanticsFacet.class).value();
}
}
http://git-wip-us.apache.org/repos/asf/isis/blob/69753e24/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationDefault.java
index ca55eee..fc3f2fd 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationDefault.java
@@ -32,6 +32,8 @@ import org.apache.isis.core.metamodel.facets.collections.modify.CollectionAddToF
import org.apache.isis.core.metamodel.facets.collections.modify.CollectionClearFacet;
import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacet;
import org.apache.isis.core.metamodel.facets.collections.modify.CollectionRemoveFromFacet;
+import org.apache.isis.core.metamodel.facets.collparam.semantics.CollectionSemantics;
+import org.apache.isis.core.metamodel.facets.collparam.semantics.CollectionSemanticsFacet;
import org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
import org.apache.isis.core.metamodel.interactions.CollectionAddToContext;
import org.apache.isis.core.metamodel.interactions.CollectionRemoveFromContext;
@@ -44,7 +46,6 @@ import org.apache.isis.core.metamodel.interactions.VisibilityContext;
import org.apache.isis.core.metamodel.services.ServicesInjector;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
-import org.apache.isis.core.metamodel.spec.feature.OneToManyFeature;
public class OneToManyAssociationDefault extends ObjectAssociationAbstract implements OneToManyAssociation {
@@ -65,8 +66,7 @@ public class OneToManyAssociationDefault extends ObjectAssociationAbstract imple
@Override
public CollectionSemantics getCollectionSemantics() {
- final Class<?> underlyingClass = getSpecification().getCorrespondingClass();
- return OneToManyFeature.Util.semanticsOf(underlyingClass);
+ return getFacet(CollectionSemanticsFacet.class).value();
}
//region > visible, usable
http://git-wip-us.apache.org/repos/asf/isis/blob/69753e24/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
index 1f60e44..fbfd78e 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
@@ -37,6 +37,9 @@ import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
import org.apache.isis.core.metamodel.facetapi.Facet;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facetapi.FeatureType;
+import org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacet;
+import org.apache.isis.core.metamodel.facets.collparam.semantics.CollectionSemantics;
import org.apache.isis.core.metamodel.facets.object.parseable.ParseableFacet;
import org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacet;
import org.apache.isis.core.metamodel.facets.objectvalue.fileaccept.FileAcceptFacet;
@@ -47,6 +50,7 @@ import org.apache.isis.core.metamodel.facets.value.string.StringValueSemanticsPr
import org.apache.isis.core.metamodel.spec.ObjectSpecId;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
+import org.apache.isis.core.metamodel.spec.feature.OneToManyActionParameter;
import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
import org.apache.isis.viewer.wicket.model.links.LinkAndLabel;
import org.apache.isis.viewer.wicket.model.links.LinksProvider;
@@ -280,6 +284,11 @@ public class ScalarModel extends EntityModel implements LinksProvider,HasExecuti
property.get(parentAdapter, InteractionInitiatedBy.USER);
scalarModel.setObject(associatedAdapter);
}
+
+ @Override
+ public ObjectAdapter load(final ScalarModel scalarModel) {
+ return scalarModel.loadFromSuper();
+ }
},
PARAMETER {
@Override
@@ -481,6 +490,29 @@ public class ScalarModel extends EntityModel implements LinksProvider,HasExecuti
final ObjectAdapter defaultAdapter = actionParameter.getDefault(parentAdapter);
scalarModel.setObject(defaultAdapter);
}
+
+ @Override
+ public ObjectAdapter load(final ScalarModel scalarModel) {
+ final ActionParameterMemento parameterMemento = scalarModel.getParameterMemento();
+ final ObjectActionParameter actionParameter = parameterMemento
+ .getActionParameter(scalarModel.getSpecificationLoader());
+ final ObjectAdapter objectAdapter = scalarModel.loadFromSuper();
+
+ if(objectAdapter != null) {
+ return objectAdapter;
+ }
+ if(actionParameter.getFeatureType() == FeatureType.ACTION_PARAMETER_SCALAR) {
+ return objectAdapter;
+ }
+
+ // return an empty collection
+ final OneToManyActionParameter otmap = (OneToManyActionParameter) actionParameter;
+ final CollectionSemantics collectionSemantics = otmap.getCollectionSemantics();
+ final TypeOfFacet typeOfFacet = actionParameter.getFacet(TypeOfFacet.class);
+ final Class<?> elementType = typeOfFacet.value();
+ final Object emptyCollection = collectionSemantics.emptyCollectionOf(elementType);
+ return scalarModel.getCurrentSession().getPersistenceSession().adapterFor(emptyCollection);
+ }
};
private static List<ObjectAdapter> choicesAsList(final ObjectAdapter[] choices) {
@@ -543,12 +575,22 @@ public class ScalarModel extends EntityModel implements LinksProvider,HasExecuti
public abstract void init(ScalarModel scalarModel);
public abstract void reset(ScalarModel scalarModel);
+ public abstract ObjectAdapter load(final ScalarModel scalarModel);
}
private final Kind kind;
private final ObjectAdapterMemento parentObjectAdapterMemento;
-
+
+ @Override
+ public ObjectAdapter load() {
+ return kind.load(this);
+ }
+
+ private ObjectAdapter loadFromSuper() {
+ return super.load();
+ }
+
/**
* Populated only if {@link #getKind()} is {@link Kind#PARAMETER}