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 2021/01/20 07:29:22 UTC
[isis] 01/02: ISIS-439: completely removes concept of mutable
collections
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git
commit c1f90a906c501f96bd2aa8723ded85bfcab30157
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Wed Jan 20 06:51:15 2021 +0000
ISIS-439: completely removes concept of mutable collections
- CollectionAddToFacet, CollectionValidateAddToFacet, CollectionRemoveFromFacet, CollectionValidateRemoveFromFacet, CollectionClearFacet
- remove support in Restful objects
- remove support in WrapperFactory.
---
.../core/metamodel/facets/ImperativeFacet.java | 7 +-
.../clear/CollectionClearFacetFactory.java | 70 ----
.../clear/CollectionClearFacetViaAccessor.java | 80 -----
.../clear/CollectionClearFacetViaClearMethod.java | 71 ----
.../CollectionAnnotationFacetFactory.java | 50 ---
...ectionAddToFacetForDomainEventFromAbstract.java | 127 -------
...acetForDomainEventFromCollectionAnnotation.java | 43 ---
...lectionAddToFacetForDomainEventFromDefault.java | 41 ---
...nRemoveFromFacetForDomainEventFromAbstract.java | 126 -------
...acetForDomainEventFromCollectionAnnotation.java | 43 ---
...onRemoveFromFacetForDomainEventFromDefault.java | 41 ---
...abledFacetOnCollectionDerivedFromImmutable.java | 39 ---
...cetOnCollectionDerivedFromImmutableFactory.java | 45 ---
.../collections/modify/CollectionAddToFacet.java | 37 --
.../modify/CollectionAddToFacetAbstract.java | 36 --
.../modify/CollectionAddToFacetViaAccessor.java | 79 -----
.../modify/CollectionAddToFacetViaMethod.java | 75 ----
...tionAddToRemoveFromAndValidateFacetFactory.java | 177 ----------
.../collections/modify/CollectionClearFacet.java | 36 --
.../modify/CollectionClearFacetAbstract.java | 36 --
.../modify/CollectionRemoveFromFacet.java | 39 ---
.../modify/CollectionRemoveFromFacetAbstract.java | 36 --
.../CollectionRemoveFromFacetViaAccessor.java | 82 -----
.../modify/CollectionRemoveFromFacetViaMethod.java | 75 ----
.../TypeOfFacetInferredFromSupportingMethods.java | 31 --
...etOnCollectionDerivedFromRecreatableObject.java | 46 ---
...CollectionDerivedFromViewModelFacetFactory.java | 54 ---
.../param/DeriveFacetsPostProcessor.java | 85 ++---
.../dflt/ProgrammingModelFacetsJava8.java | 12 +-
.../ApplicationFeatureRepositoryDefault.java | 34 +-
.../spec/feature/OneToManyAssociation.java | 71 ----
.../specimpl/OneToManyAssociationDefault.java | 98 ------
.../CollectionFieldMethodsFacetFactoryTest.java | 383 +--------------------
.../CollectionAnnotationFacetFactoryTest.java | 269 ---------------
.../objects/OneToManyAssociationDefaultTest.java | 107 ++----
.../handlers/DomainObjectInvocationHandler.java | 166 +++------
.../rendering/domainobjects/MemberType.java | 9 +-
.../resources/DomainObjectResourceServerside.java | 118 ++-----
38 files changed, 146 insertions(+), 2828 deletions(-)
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/ImperativeFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/ImperativeFacet.java
index 18255be..0a78d1a1 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/ImperativeFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/ImperativeFacet.java
@@ -83,8 +83,6 @@ public interface ImperativeFacet extends Facet {
* Modify property using modify/clear rather than simply using set.
*/
MODIFY_PROPERTY_SUPPORTING,
- MODIFY_COLLECTION_ADD,
- MODIFY_COLLECTION_REMOVE,
CHOICES_OR_AUTOCOMPLETE,
DEFAULTS,
INITIALIZATION,
@@ -108,8 +106,7 @@ public interface ImperativeFacet extends Facet {
/**
* Returns the provided {@link Facet facet} as an {@link ImperativeFacet} if
- * it either is one or if it is a {@link DecoratingFacet} that in turn wraps
- * an {@link ImperativeFacet}.
+ * it either is one or if it wraps one.
*
* <p>
* Otherwise, returns <tt>null</tt>.
@@ -134,7 +131,7 @@ public interface ImperativeFacet extends Facet {
.filter(_NullSafe::isPresent)
.filter(imperativeFacet->imperativeFacet.getMethods().contains(method))
.collect(Collectors.toList());
-
+
switch(imperativeFacets.size()) {
case 0:
break;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/clear/CollectionClearFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/clear/CollectionClearFacetFactory.java
deleted file mode 100644
index 5771bd1..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/clear/CollectionClearFacetFactory.java
+++ /dev/null
@@ -1,70 +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.core.metamodel.facets.collections.clear;
-
-import java.lang.reflect.Method;
-
-import org.apache.isis.commons.collections.Can;
-import org.apache.isis.core.metamodel.commons.StringExtensions;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.facets.MethodFinderUtils;
-import org.apache.isis.core.metamodel.facets.MethodLiteralConstants;
-import org.apache.isis.core.metamodel.facets.MethodPrefixBasedFacetFactoryAbstract;
-import org.apache.isis.core.metamodel.facets.collections.modify.CollectionClearFacet;
-
-public class CollectionClearFacetFactory extends MethodPrefixBasedFacetFactoryAbstract {
-
- private static final Can<String> PREFIXES = Can.ofSingleton(MethodLiteralConstants.CLEAR_PREFIX);
-
- public CollectionClearFacetFactory() {
- super(FeatureType.COLLECTIONS_ONLY, OrphanValidation.VALIDATE, PREFIXES);
- }
-
- @Override
- public void process(final ProcessMethodContext processMethodContext) {
- attachCollectionClearFacets(processMethodContext);
-
- }
-
- private void attachCollectionClearFacets(final ProcessMethodContext processMethodContext) {
-
- final Method getMethod = processMethodContext.getMethod();
- final String capitalizedName = StringExtensions.asJavaBaseName(getMethod.getName());
-
- final Class<?> cls = processMethodContext.getCls();
- final Method method = MethodFinderUtils.findMethod(cls, MethodLiteralConstants.CLEAR_PREFIX + capitalizedName, void.class, null);
- processMethodContext.removeMethod(method);
-
- final FacetHolder collection = processMethodContext.getFacetHolder();
- super.addFacet(createCollectionClearFacet(method, getMethod, collection));
- }
-
- private CollectionClearFacet createCollectionClearFacet(
- final Method clearMethodIfAny, final Method accessorMethod, final FacetHolder collection) {
-
- if (clearMethodIfAny != null) {
- return new CollectionClearFacetViaClearMethod(clearMethodIfAny, collection);
- } else {
- return new CollectionClearFacetViaAccessor(accessorMethod, collection);
- }
- }
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/clear/CollectionClearFacetViaAccessor.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/clear/CollectionClearFacetViaAccessor.java
deleted file mode 100644
index 339de42..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/clear/CollectionClearFacetViaAccessor.java
+++ /dev/null
@@ -1,80 +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.core.metamodel.facets.collections.clear;
-
-import java.lang.reflect.Method;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.ImperativeFacet;
-import org.apache.isis.core.metamodel.facets.collections.modify.CollectionClearFacetAbstract;
-import org.apache.isis.core.metamodel.spec.ManagedObject;
-import org.apache.isis.core.metamodel.spec.ManagedObjects;
-
-public class CollectionClearFacetViaAccessor extends CollectionClearFacetAbstract implements ImperativeFacet {
-
- private final Method method;
-
- public CollectionClearFacetViaAccessor(
- final Method method,
- final FacetHolder holder) {
-
- super(holder);
- this.method = method;
- }
-
- /**
- * Returns a singleton list of the {@link Method} provided in the
- * constructor.
- */
- @Override
- public List<Method> getMethods() {
- return Collections.singletonList(method);
- }
-
- @Override
- public Intent getIntent(final Method method) {
- return Intent.ACCESSOR;
- }
-
- @Override
- public void clear(final ManagedObject owningAdapter) {
- final Collection<?> collection = (Collection<?>) ManagedObjects.InvokeUtil.invoke(method, owningAdapter);
- collection.clear();
- }
-
- @Override
- protected String toStringValues() {
- return "method=" + method;
- }
-
- // /////////////////////////////////////////////////////////
- // Dependencies (from constructor)
- // /////////////////////////////////////////////////////////
-
- @Override public void appendAttributesTo(final Map<String, Object> attributeMap) {
- super.appendAttributesTo(attributeMap);
- ImperativeFacet.Util.appendAttributesTo(this, attributeMap);
- }
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/clear/CollectionClearFacetViaClearMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/clear/CollectionClearFacetViaClearMethod.java
deleted file mode 100644
index 3222402..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/clear/CollectionClearFacetViaClearMethod.java
+++ /dev/null
@@ -1,71 +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.core.metamodel.facets.collections.clear;
-
-import java.lang.reflect.Method;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.ImperativeFacet;
-import org.apache.isis.core.metamodel.facets.collections.modify.CollectionClearFacetAbstract;
-import org.apache.isis.core.metamodel.spec.ManagedObject;
-import org.apache.isis.core.metamodel.spec.ManagedObjects;
-
-public class CollectionClearFacetViaClearMethod extends CollectionClearFacetAbstract implements ImperativeFacet {
-
- private final Method method;
-
- public CollectionClearFacetViaClearMethod(final Method method, final FacetHolder holder) {
- super(holder);
- this.method = method;
- }
-
- /**
- * Returns a singleton list of the {@link Method} provided in the
- * constructor.
- */
- @Override
- public List<Method> getMethods() {
- return Collections.singletonList(method);
- }
-
- @Override
- public Intent getIntent(final Method method) {
- return Intent.MODIFY_COLLECTION_ADD;
- }
-
- @Override
- public void clear(final ManagedObject owningAdapter) {
- ManagedObjects.InvokeUtil.invoke(method, owningAdapter);
- }
-
- @Override
- protected String toStringValues() {
- return "method=" + method;
- }
-
- @Override public void appendAttributesTo(final Map<String, Object> attributeMap) {
- super.appendAttributesTo(attributeMap);
- ImperativeFacet.Util.appendAttributesTo(this, attributeMap);
- }
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactory.java
index c9dea13..568dfec 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactory.java
@@ -38,18 +38,10 @@ import org.apache.isis.core.metamodel.facets.actions.contributing.ContributingFa
import org.apache.isis.core.metamodel.facets.actions.contributing.ContributingFacetAbstract;
import org.apache.isis.core.metamodel.facets.actions.semantics.ActionSemanticsFacetAbstract;
import org.apache.isis.core.metamodel.facets.collections.collection.hidden.HiddenFacetForCollectionAnnotation;
-import org.apache.isis.core.metamodel.facets.collections.collection.modify.CollectionAddToFacetForDomainEventFromAbstract;
-import org.apache.isis.core.metamodel.facets.collections.collection.modify.CollectionAddToFacetForDomainEventFromCollectionAnnotation;
-import org.apache.isis.core.metamodel.facets.collections.collection.modify.CollectionAddToFacetForDomainEventFromDefault;
import org.apache.isis.core.metamodel.facets.collections.collection.modify.CollectionDomainEventFacetAbstract;
import org.apache.isis.core.metamodel.facets.collections.collection.modify.CollectionDomainEventFacetDefault;
import org.apache.isis.core.metamodel.facets.collections.collection.modify.CollectionDomainEventFacetForCollectionAnnotation;
-import org.apache.isis.core.metamodel.facets.collections.collection.modify.CollectionRemoveFromFacetForDomainEventFromAbstract;
-import org.apache.isis.core.metamodel.facets.collections.collection.modify.CollectionRemoveFromFacetForDomainEventFromCollectionAnnotation;
-import org.apache.isis.core.metamodel.facets.collections.collection.modify.CollectionRemoveFromFacetForDomainEventFromDefault;
import org.apache.isis.core.metamodel.facets.collections.collection.typeof.TypeOfFacetOnCollectionFromCollectionAnnotation;
-import org.apache.isis.core.metamodel.facets.collections.modify.CollectionAddToFacet;
-import org.apache.isis.core.metamodel.facets.collections.modify.CollectionRemoveFromFacet;
import org.apache.isis.core.metamodel.facets.object.domainobject.domainevents.CollectionDomainEventDefaultFacetForDomainObjectAnnotation;
import org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -139,48 +131,6 @@ public class CollectionAnnotationFacetFactory extends FacetFactoryAbstract {
super.addFacet(collectionDomainEventFacet);
}
-
- //
- // if the collection is mutable, then replace the existing addTo and removeFrom facets with equivalents that
- // also post to the event bus.
- //
- // here we support the deprecated annotations
- //
- final CollectionAddToFacet collectionAddToFacet = holder.getFacet(CollectionAddToFacet.class);
- if (collectionAddToFacet != null) {
- // the current collectionAddToFacet will end up as the underlying facet of
- // one of these facets to be created.
- final CollectionAddToFacetForDomainEventFromAbstract replacementFacet;
-
- if(collectionDomainEventFacet instanceof CollectionDomainEventFacetForCollectionAnnotation) {
- replacementFacet = new CollectionAddToFacetForDomainEventFromCollectionAnnotation(
- collectionDomainEventFacet.getEventType(), getterFacet, collectionAddToFacet,
- collectionDomainEventFacet, holder, getServiceRegistry());
- } else
- // default
- {
- replacementFacet = new CollectionAddToFacetForDomainEventFromDefault(
- collectionDomainEventFacet.getEventType(), getterFacet,
- collectionAddToFacet, collectionDomainEventFacet, holder, getServiceRegistry());
- }
- super.addFacet(replacementFacet);
- }
-
- final CollectionRemoveFromFacet collectionRemoveFromFacet = holder.getFacet(CollectionRemoveFromFacet.class);
- if (collectionRemoveFromFacet != null) {
- // the current collectionRemoveFromFacet will end up as the underlying facet of the PostsCollectionRemovedFromEventFacetAnnotation
-
- final CollectionRemoveFromFacetForDomainEventFromAbstract replacementFacet;
-
- if(collectionDomainEventFacet instanceof CollectionDomainEventFacetForCollectionAnnotation) {
- replacementFacet = new CollectionRemoveFromFacetForDomainEventFromCollectionAnnotation(collectionDomainEventFacet.getEventType(), getterFacet, collectionRemoveFromFacet, collectionDomainEventFacet, getServiceRegistry(), holder);
- } else {
- // default
- replacementFacet = new CollectionRemoveFromFacetForDomainEventFromDefault(collectionDomainEventFacet.getEventType(), getterFacet, collectionRemoveFromFacet, collectionDomainEventFacet, getServiceRegistry(), holder);
- }
- super.addFacet(replacementFacet);
- }
-
}
public static Class<? extends CollectionDomainEvent<?,?>> defaultFromDomainObjectIfRequired(
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/modify/CollectionAddToFacetForDomainEventFromAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/modify/CollectionAddToFacetForDomainEventFromAbstract.java
deleted file mode 100644
index facac72..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/modify/CollectionAddToFacetForDomainEventFromAbstract.java
+++ /dev/null
@@ -1,127 +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.core.metamodel.facets.collections.collection.modify;
-
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.isis.applib.events.domain.AbstractDomainEvent;
-import org.apache.isis.applib.events.domain.CollectionDomainEvent;
-import org.apache.isis.applib.services.registry.ServiceRegistry;
-import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
-import org.apache.isis.core.metamodel.facetapi.Facet;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.DomainEventHelper;
-import org.apache.isis.core.metamodel.facets.SingleValueFacetAbstract;
-import org.apache.isis.core.metamodel.facets.collections.modify.CollectionAddToFacet;
-import org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
-import org.apache.isis.core.metamodel.interactions.InteractionHead;
-import org.apache.isis.core.metamodel.spec.ManagedObject;
-import org.apache.isis.core.metamodel.spec.ManagedObjects.UnwrapUtil;
-
-import static org.apache.isis.commons.internal.base._Casts.uncheckedCast;
-
-public abstract class CollectionAddToFacetForDomainEventFromAbstract
-extends SingleValueFacetAbstract<Class<? extends CollectionDomainEvent<?,?>>>
-implements CollectionAddToFacet {
-
- private final DomainEventHelper domainEventHelper;
-
- public static Class<? extends Facet> type() {
- return CollectionAddToFacet.class;
- }
-
- private final PropertyOrCollectionAccessorFacet getterFacet;
- private final CollectionAddToFacet collectionAddToFacet;
-
- public CollectionAddToFacetForDomainEventFromAbstract(
- final Class<? extends CollectionDomainEvent<?, ?>> eventType,
- final PropertyOrCollectionAccessorFacet getterFacet,
- final CollectionAddToFacet collectionAddToFacet,
- final CollectionDomainEventFacetAbstract collectionDomainEventFacet,
- final ServiceRegistry serviceRegistry,
- final FacetHolder holder) {
-
- super(type(), eventType, holder);
- this.getterFacet = getterFacet;
- this.collectionAddToFacet = collectionAddToFacet;
- this.domainEventHelper = DomainEventHelper.ofServiceRegistry(serviceRegistry);
- }
-
- @Override
- public void add(
- final ManagedObject targetAdapter,
- final ManagedObject referencedObjectAdapter,
- final InteractionInitiatedBy interactionInitiatedBy) {
- if (this.collectionAddToFacet == null) {
- return;
- }
-
- final Object referencedObject = UnwrapUtil.single(referencedObjectAdapter);
-
- // get hold of underlying collection
- final Object collection = getterFacet.getProperty(targetAdapter, interactionInitiatedBy);
-
- // don't post event if has set semantics and already contains object
- if(collection instanceof Set) {
- Set<?> set = (Set<?>) collection;
- if(set.contains(referencedObject)) {
- return;
- }
- }
-
- final InteractionHead head = InteractionHead.simple(targetAdapter);
-
- // either doesn't contain object, or doesn't have set semantics, so
- // execute the add wrapped between the executing and executed events ...
-
- // ... post the executing event
-
- final CollectionDomainEvent<?, ?> event =
- domainEventHelper.postEventForCollection(
- AbstractDomainEvent.Phase.EXECUTING,
- getEventType(), null,
- getIdentified(), head,
- CollectionDomainEvent.Of.ADD_TO,
- referencedObject);
-
- // ... perform add
- collectionAddToFacet.add(targetAdapter, referencedObjectAdapter, interactionInitiatedBy);
-
- // ... post the executed event
- domainEventHelper.postEventForCollection(
- AbstractDomainEvent.Phase.EXECUTED,
- getEventType(), uncheckedCast(event),
- getIdentified(), head,
- CollectionDomainEvent.Of.ADD_TO,
- referencedObject);
- }
-
- public <S, T> Class<? extends CollectionDomainEvent<S, T>> getEventType() {
- return uncheckedCast(value());
- }
-
-
- @Override public void appendAttributesTo(final Map<String, Object> attributeMap) {
- super.appendAttributesTo(attributeMap);
- attributeMap.put("getterFacet", getterFacet);
- attributeMap.put("collectionAddToFacet", collectionAddToFacet);
- }
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/modify/CollectionAddToFacetForDomainEventFromCollectionAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/modify/CollectionAddToFacetForDomainEventFromCollectionAnnotation.java
deleted file mode 100644
index 71cbfe9..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/modify/CollectionAddToFacetForDomainEventFromCollectionAnnotation.java
+++ /dev/null
@@ -1,43 +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.core.metamodel.facets.collections.collection.modify;
-
-import org.apache.isis.applib.events.domain.CollectionDomainEvent;
-import org.apache.isis.applib.services.registry.ServiceRegistry;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.collections.modify.CollectionAddToFacet;
-import org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
-
-public class CollectionAddToFacetForDomainEventFromCollectionAnnotation
-extends CollectionAddToFacetForDomainEventFromAbstract {
-
- public CollectionAddToFacetForDomainEventFromCollectionAnnotation(
- final Class<? extends CollectionDomainEvent<?, ?>> eventType,
- final PropertyOrCollectionAccessorFacet getterFacet,
- final CollectionAddToFacet collectionAddToFacet,
- final CollectionDomainEventFacetAbstract collectionInteractionFacet,
- final FacetHolder holder,
- final ServiceRegistry serviceRegistry) {
-
- super(eventType, getterFacet, collectionAddToFacet, collectionInteractionFacet, serviceRegistry, holder);
- }
-
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/modify/CollectionAddToFacetForDomainEventFromDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/modify/CollectionAddToFacetForDomainEventFromDefault.java
deleted file mode 100644
index 29c2a0d..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/modify/CollectionAddToFacetForDomainEventFromDefault.java
+++ /dev/null
@@ -1,41 +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.core.metamodel.facets.collections.collection.modify;
-
-import org.apache.isis.applib.events.domain.CollectionDomainEvent;
-import org.apache.isis.applib.services.registry.ServiceRegistry;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.collections.modify.CollectionAddToFacet;
-import org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
-
-public class CollectionAddToFacetForDomainEventFromDefault
-extends CollectionAddToFacetForDomainEventFromAbstract {
-
- public CollectionAddToFacetForDomainEventFromDefault(
- final Class<? extends CollectionDomainEvent<?, ?>> eventType,
- final PropertyOrCollectionAccessorFacet getterFacet,
- final CollectionAddToFacet collectionAddToFacet,
- final CollectionDomainEventFacetAbstract collectionInteractionFacet,
- final FacetHolder holder, final ServiceRegistry serviceRegistry) {
- super(eventType, getterFacet, collectionAddToFacet, collectionInteractionFacet, serviceRegistry, holder);
- }
-
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/modify/CollectionRemoveFromFacetForDomainEventFromAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/modify/CollectionRemoveFromFacetForDomainEventFromAbstract.java
deleted file mode 100644
index 18f5324..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/modify/CollectionRemoveFromFacetForDomainEventFromAbstract.java
+++ /dev/null
@@ -1,126 +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.core.metamodel.facets.collections.collection.modify;
-
-import java.util.Collection;
-import java.util.Map;
-
-import org.apache.isis.applib.events.domain.AbstractDomainEvent;
-import org.apache.isis.applib.events.domain.CollectionDomainEvent;
-import org.apache.isis.applib.services.registry.ServiceRegistry;
-import org.apache.isis.commons.internal.base._Casts;
-import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
-import org.apache.isis.core.metamodel.facetapi.Facet;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.DomainEventHelper;
-import org.apache.isis.core.metamodel.facets.SingleValueFacetAbstract;
-import org.apache.isis.core.metamodel.facets.collections.modify.CollectionRemoveFromFacet;
-import org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
-import org.apache.isis.core.metamodel.interactions.InteractionHead;
-import org.apache.isis.core.metamodel.spec.ManagedObject;
-import org.apache.isis.core.metamodel.spec.ManagedObjects.UnwrapUtil;
-
-import static org.apache.isis.commons.internal.base._Casts.uncheckedCast;
-
-
-public abstract class CollectionRemoveFromFacetForDomainEventFromAbstract
-extends SingleValueFacetAbstract<Class<? extends CollectionDomainEvent<?,?>>>
-implements CollectionRemoveFromFacet {
-
- public static Class<? extends Facet> type() {
- return CollectionRemoveFromFacet.class;
- }
-
- private final PropertyOrCollectionAccessorFacet getterFacet;
- private final CollectionRemoveFromFacet collectionRemoveFromFacet;
-
- private final DomainEventHelper domainEventHelper;
-
- public CollectionRemoveFromFacetForDomainEventFromAbstract(
- final Class<? extends CollectionDomainEvent<?, ?>> eventType,
- final PropertyOrCollectionAccessorFacet getterFacet,
- final CollectionRemoveFromFacet collectionRemoveFromFacet,
- final CollectionDomainEventFacetAbstract collectionDomainEventFacet,
- final ServiceRegistry serviceRegistry,
- final FacetHolder holder) {
-
- super(type(), eventType, holder);
- this.getterFacet = getterFacet;
- this.collectionRemoveFromFacet = collectionRemoveFromFacet;
- this.domainEventHelper = DomainEventHelper.ofServiceRegistry(serviceRegistry);
- }
-
- @Override
- public void remove(
- final ManagedObject targetAdapter,
- final ManagedObject referencedObjectAdapter,
- final InteractionInitiatedBy interactionInitiatedBy) {
- if (this.collectionRemoveFromFacet == null) {
- return;
- }
-
-
- final Object referencedObject = UnwrapUtil.single(referencedObjectAdapter);
-
- // get hold of underlying collection
- // passing null through for authentication/deploymentType means to avoid any visibility filtering.
- final Object collection = getterFacet.getProperty(targetAdapter, interactionInitiatedBy);
-
- // don't post event if the collections does not contain object
- if (!((Collection<?>) collection).contains(referencedObject)) {
- return;
- }
-
- final InteractionHead head = InteractionHead.simple(targetAdapter);
-
- // contains the element, so
- // execute the remove wrapped between the executing and executed events ...
-
- // ... post the executing event
- final CollectionDomainEvent<?, ?> event =
- domainEventHelper.postEventForCollection(
- AbstractDomainEvent.Phase.EXECUTING,
- getEventType(), null,
- getIdentified(), head,
- CollectionDomainEvent.Of.REMOVE_FROM,
- referencedObject);
-
- // ... perform remove
- collectionRemoveFromFacet.remove(targetAdapter, referencedObjectAdapter, interactionInitiatedBy);
-
- // ... and post the executed event
- domainEventHelper.postEventForCollection(
- AbstractDomainEvent.Phase.EXECUTED,
- getEventType(), uncheckedCast(event),
- getIdentified(), head,
- CollectionDomainEvent.Of.REMOVE_FROM,
- referencedObject);
- }
-
- public <S, T> Class<? extends CollectionDomainEvent<S, T>> getEventType() {
- return _Casts.uncheckedCast(value());
- }
-
- @Override public void appendAttributesTo(final Map<String, Object> attributeMap) {
- super.appendAttributesTo(attributeMap);
- attributeMap.put("getterFacet", getterFacet);
- attributeMap.put("collectionRemoveFromFacet", collectionRemoveFromFacet);
- }
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/modify/CollectionRemoveFromFacetForDomainEventFromCollectionAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/modify/CollectionRemoveFromFacetForDomainEventFromCollectionAnnotation.java
deleted file mode 100644
index 8739eda..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/modify/CollectionRemoveFromFacetForDomainEventFromCollectionAnnotation.java
+++ /dev/null
@@ -1,43 +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.core.metamodel.facets.collections.collection.modify;
-
-import org.apache.isis.applib.events.domain.CollectionDomainEvent;
-import org.apache.isis.applib.services.registry.ServiceRegistry;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.collections.modify.CollectionRemoveFromFacet;
-import org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
-
-public class CollectionRemoveFromFacetForDomainEventFromCollectionAnnotation extends
-CollectionRemoveFromFacetForDomainEventFromAbstract {
-
- public CollectionRemoveFromFacetForDomainEventFromCollectionAnnotation(
- final Class<? extends CollectionDomainEvent<?, ?>> eventType,
- final PropertyOrCollectionAccessorFacet getterFacet,
- final CollectionRemoveFromFacet collectionRemoveFromFacet,
- final CollectionDomainEventFacetAbstract collectionInteractionFacet,
- final ServiceRegistry serviceRegistry,
- final FacetHolder holder) {
-
- super(eventType, getterFacet, collectionRemoveFromFacet, collectionInteractionFacet,
- serviceRegistry, holder);
- }
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/modify/CollectionRemoveFromFacetForDomainEventFromDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/modify/CollectionRemoveFromFacetForDomainEventFromDefault.java
deleted file mode 100644
index 046e5aa..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/modify/CollectionRemoveFromFacetForDomainEventFromDefault.java
+++ /dev/null
@@ -1,41 +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.core.metamodel.facets.collections.collection.modify;
-
-import org.apache.isis.applib.events.domain.CollectionDomainEvent;
-import org.apache.isis.applib.services.registry.ServiceRegistry;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.collections.modify.CollectionRemoveFromFacet;
-import org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
-
-public class CollectionRemoveFromFacetForDomainEventFromDefault extends
-CollectionRemoveFromFacetForDomainEventFromAbstract {
-
- public CollectionRemoveFromFacetForDomainEventFromDefault(
- final Class<? extends CollectionDomainEvent<?, ?>> eventType,
- final PropertyOrCollectionAccessorFacet getterFacet,
- final CollectionRemoveFromFacet collectionRemoveFromFacet,
- final CollectionDomainEventFacetAbstract collectionInteractionFacet,
- final ServiceRegistry serviceRegistry,
- final FacetHolder holder) {
- super(eventType, getterFacet, collectionRemoveFromFacet, collectionInteractionFacet, serviceRegistry, holder);
- }
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/disabled/fromimmutable/DisabledFacetOnCollectionDerivedFromImmutable.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/disabled/fromimmutable/DisabledFacetOnCollectionDerivedFromImmutable.java
deleted file mode 100644
index 36b0c55..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/disabled/fromimmutable/DisabledFacetOnCollectionDerivedFromImmutable.java
+++ /dev/null
@@ -1,39 +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.core.metamodel.facets.collections.disabled.fromimmutable;
-
-import org.apache.isis.applib.annotation.Where;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.members.disabled.DisabledFacetAbstract;
-import org.apache.isis.core.metamodel.facets.object.immutable.ImmutableFacet;
-import org.apache.isis.core.metamodel.spec.ManagedObject;
-
-public class DisabledFacetOnCollectionDerivedFromImmutable extends DisabledFacetAbstract {
-
- public DisabledFacetOnCollectionDerivedFromImmutable(final ImmutableFacet immutableFacet, final FacetHolder holder) {
- super(Where.ANYWHERE, holder);
- }
-
- @Override
- public String disabledReason(final ManagedObject target) {
- return "Immutable";
- }
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/disabled/fromimmutable/DisabledFacetOnCollectionDerivedFromImmutableFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/disabled/fromimmutable/DisabledFacetOnCollectionDerivedFromImmutableFactory.java
deleted file mode 100644
index f343b63..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/disabled/fromimmutable/DisabledFacetOnCollectionDerivedFromImmutableFactory.java
+++ /dev/null
@@ -1,45 +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.core.metamodel.facets.collections.disabled.fromimmutable;
-
-import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
-import org.apache.isis.core.metamodel.facets.FacetedMethod;
-import org.apache.isis.core.metamodel.facets.object.immutable.ImmutableFacet;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-
-public class DisabledFacetOnCollectionDerivedFromImmutableFactory extends FacetFactoryAbstract {
-
- public DisabledFacetOnCollectionDerivedFromImmutableFactory() {
- super(FeatureType.COLLECTIONS_ONLY);
- }
-
- @Override
- public void process(final ProcessMethodContext processMethodContext) {
- final Class<?> declaringClass = processMethodContext.getMethod().getDeclaringClass();
- final ObjectSpecification spec = getSpecificationLoader().loadSpecification(declaringClass);
- if (spec.containsNonFallbackFacet(ImmutableFacet.class)) {
- final ImmutableFacet immutableFacet = spec.getFacet(ImmutableFacet.class);
- final FacetedMethod facetHolder = processMethodContext.getFacetHolder();
- super.addFacet(new DisabledFacetOnCollectionDerivedFromImmutable(immutableFacet, facetHolder));
- }
- }
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/modify/CollectionAddToFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/modify/CollectionAddToFacet.java
deleted file mode 100644
index 2d63ad8..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/modify/CollectionAddToFacet.java
+++ /dev/null
@@ -1,37 +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.core.metamodel.facets.collections.modify;
-
-import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
-import org.apache.isis.core.metamodel.facetapi.Facet;
-import org.apache.isis.core.metamodel.spec.ManagedObject;
-
-/**
- * Add object to a collection.
- *
- * <p>
- * In the standard Apache Isis Programming Model, corresponds to invoking the
- * <tt>addToXxx</tt> support method for a collection.
- */
-public interface CollectionAddToFacet extends Facet {
-
- public void add(ManagedObject inObject, ManagedObject value, InteractionInitiatedBy interactionInitiatedBy);
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/modify/CollectionAddToFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/modify/CollectionAddToFacetAbstract.java
deleted file mode 100644
index fe688fc..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/modify/CollectionAddToFacetAbstract.java
+++ /dev/null
@@ -1,36 +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.core.metamodel.facets.collections.modify;
-
-import org.apache.isis.core.metamodel.facetapi.Facet;
-import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-
-public abstract class CollectionAddToFacetAbstract extends FacetAbstract implements CollectionAddToFacet {
-
- public static Class<? extends Facet> type() {
- return CollectionAddToFacet.class;
- }
-
- public CollectionAddToFacetAbstract(final FacetHolder holder) {
- super(type(), holder, Derivation.NOT_DERIVED);
- }
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/modify/CollectionAddToFacetViaAccessor.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/modify/CollectionAddToFacetViaAccessor.java
deleted file mode 100644
index 0016146..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/modify/CollectionAddToFacetViaAccessor.java
+++ /dev/null
@@ -1,79 +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.core.metamodel.facets.collections.modify;
-
-import java.lang.reflect.Method;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.ImperativeFacet;
-import org.apache.isis.core.metamodel.spec.ManagedObject;
-import org.apache.isis.core.metamodel.spec.ManagedObjects;
-import org.apache.isis.core.metamodel.spec.ManagedObjects.UnwrapUtil;
-
-public class CollectionAddToFacetViaAccessor extends CollectionAddToFacetAbstract implements ImperativeFacet {
-
- private final Method method;
-
- public CollectionAddToFacetViaAccessor(final Method method, final FacetHolder holder) {
- super(holder);
- this.method = method;
- }
-
- /**
- * Returns a singleton list of the {@link Method} provided in the
- * constructor.
- */
- @Override
- public List<Method> getMethods() {
- return Collections.singletonList(method);
- }
-
- @Override
- public Intent getIntent(final Method method) {
- return Intent.MODIFY_COLLECTION_ADD;
- }
-
- @Override
- public void add(
- final ManagedObject owningAdapter,
- final ManagedObject elementAdapter,
- final InteractionInitiatedBy interactionInitiatedBy) {
- @SuppressWarnings("unchecked")
- final Collection<? super Object> collection = (Collection<? super Object>) ManagedObjects.InvokeUtil.invoke(method, owningAdapter);
- final Object elementPojo = UnwrapUtil.single(elementAdapter);
- collection.add(elementPojo);
- }
-
- @Override
- protected String toStringValues() {
- return "method=" + method;
- }
-
- @Override public void appendAttributesTo(final Map<String, Object> attributeMap) {
- super.appendAttributesTo(attributeMap);
- ImperativeFacet.Util.appendAttributesTo(this, attributeMap);
- }
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/modify/CollectionAddToFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/modify/CollectionAddToFacetViaMethod.java
deleted file mode 100644
index aaef556..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/modify/CollectionAddToFacetViaMethod.java
+++ /dev/null
@@ -1,75 +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.core.metamodel.facets.collections.modify;
-
-import java.lang.reflect.Method;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.ImperativeFacet;
-import org.apache.isis.core.metamodel.spec.ManagedObject;
-import org.apache.isis.core.metamodel.spec.ManagedObjects;
-
-public class CollectionAddToFacetViaMethod extends CollectionAddToFacetAbstract implements ImperativeFacet {
-
- private final Method method;
-
- public CollectionAddToFacetViaMethod(final Method method, final FacetHolder holder) {
- super(holder);
- this.method = method;
- }
-
- /**
- * Returns a singleton list of the {@link Method} provided in the
- * constructor.
- */
- @Override
- public List<Method> getMethods() {
- return Collections.singletonList(method);
- }
-
- @Override
- public Intent getIntent(final Method method) {
- return Intent.MODIFY_COLLECTION_ADD;
- }
-
- @Override
- public void add(
- final ManagedObject owningAdapter,
- final ManagedObject elementAdapter,
- final InteractionInitiatedBy interactionInitiatedBy) {
-
- ManagedObjects.InvokeUtil.invoke(method, owningAdapter, elementAdapter);
- }
-
- @Override
- protected String toStringValues() {
- return "method=" + method;
- }
-
- @Override public void appendAttributesTo(final Map<String, Object> attributeMap) {
- super.appendAttributesTo(attributeMap);
- ImperativeFacet.Util.appendAttributesTo(this, attributeMap);
- }
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/modify/CollectionAddToRemoveFromAndValidateFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/modify/CollectionAddToRemoveFromAndValidateFacetFactory.java
deleted file mode 100644
index 836750f..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/modify/CollectionAddToRemoveFromAndValidateFacetFactory.java
+++ /dev/null
@@ -1,177 +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.core.metamodel.facets.collections.modify;
-
-import java.lang.reflect.Method;
-
-import org.apache.isis.applib.services.i18n.TranslationService;
-import org.apache.isis.commons.collections.Can;
-import org.apache.isis.core.metamodel.commons.StringExtensions;
-import org.apache.isis.core.metamodel.exceptions.MetaModelException;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.facetapi.IdentifiedHolder;
-import org.apache.isis.core.metamodel.facets.FacetFactory;
-import org.apache.isis.core.metamodel.facets.MethodFinderUtils;
-import org.apache.isis.core.metamodel.facets.MethodLiteralConstants;
-import org.apache.isis.core.metamodel.facets.MethodPrefixBasedFacetFactoryAbstract;
-import org.apache.isis.core.metamodel.facets.collections.validate.CollectionValidateAddToFacetViaMethod;
-import org.apache.isis.core.metamodel.facets.collections.validate.CollectionValidateRemoveFromFacetViaMethod;
-
-/**
- * TODO: should probably split out into two {@link FacetFactory}s, one for
- * <tt>addTo()</tt>/<tt>removeFrom()</tt> and one for <tt>validateAddTo()</tt>/
- * <tt>validateRemoveFrom()</tt>.
- */
-public class CollectionAddToRemoveFromAndValidateFacetFactory extends MethodPrefixBasedFacetFactoryAbstract {
-
- private static final Can<String> PREFIXES = Can.empty();
-
- public CollectionAddToRemoveFromAndValidateFacetFactory() {
- super(FeatureType.COLLECTIONS_ONLY, OrphanValidation.VALIDATE, PREFIXES);
- }
-
- @Override
- public void process(final ProcessMethodContext processMethodContext) {
-
- final Class<?> collectionType = attachAddToFacetAndRemoveFromFacet(processMethodContext);
- attachValidateAddToAndRemoveFromFacetIfMethodsFound(processMethodContext, collectionType);
- }
-
- private Class<?> attachAddToFacetAndRemoveFromFacet(final ProcessMethodContext processMethodContext) {
-
- final Method accessorMethod = processMethodContext.getMethod();
- final String capitalizedName = StringExtensions.asJavaBaseName(accessorMethod.getName());
-
- final Class<?> cls = processMethodContext.getCls();
-
- // add
- final Method addToMethod = MethodFinderUtils.findSingleArgMethod(cls, MethodLiteralConstants.ADD_TO_PREFIX + capitalizedName, void.class).orElse(null);
- processMethodContext.removeMethod(addToMethod);
-
- // remove
- final Method removeFromMethod = MethodFinderUtils.findSingleArgMethod(cls, MethodLiteralConstants.REMOVE_FROM_PREFIX + capitalizedName, void.class).orElse(null);
- processMethodContext.removeMethod(removeFromMethod);
-
- // add facets
- final FacetHolder collection = processMethodContext.getFacetHolder();
- super.addFacet(createAddToFacet(addToMethod, accessorMethod, collection));
- super.addFacet(createRemoveFromFacet(removeFromMethod, accessorMethod, collection));
-
- // infer typ
- final Class<?> addToType = ((addToMethod == null || addToMethod.getParameterTypes().length != 1) ? null : addToMethod.getParameterTypes()[0]);
- final Class<?> removeFromType = ((removeFromMethod == null || removeFromMethod.getParameterTypes().length != 1) ? null : removeFromMethod.getParameterTypes()[0]);
-
- return inferTypeOfIfPossible(accessorMethod, addToType, removeFromType, collection);
- }
-
- /**
- * TODO need to distinguish between Java collections, arrays and other
- * collections!
- */
- private CollectionAddToFacet createAddToFacet(final Method addToMethodIfAny, final Method accessorMethod, final FacetHolder holder) {
- if (addToMethodIfAny != null) {
- return new CollectionAddToFacetViaMethod(addToMethodIfAny, holder);
- } else {
- return new CollectionAddToFacetViaAccessor(accessorMethod, holder);
- }
- }
-
- /**
- * TODO need to distinguish between Java collections, arrays and other
- * collections!
- */
- private CollectionRemoveFromFacet createRemoveFromFacet(final Method removeFromMethodIfAny, final Method accessorMethod, final FacetHolder holder) {
- if (removeFromMethodIfAny != null) {
- return new CollectionRemoveFromFacetViaMethod(removeFromMethodIfAny, holder);
- } else {
- return new CollectionRemoveFromFacetViaAccessor(accessorMethod, holder);
- }
- }
-
- private Class<?> inferTypeOfIfPossible(final Method getMethod, final Class<?> addType, final Class<?> removeType, final FacetHolder collection) {
-
- if (addType != null && removeType != null && addType != removeType) {
- throw new MetaModelException("The addTo/removeFrom methods for " + getMethod.getDeclaringClass() + " must " + "both deal with same type of object: " + addType + "; " + removeType);
- }
-
- final Class<?> type = addType != null ? addType : removeType;
- if (type != null) {
- super.addFacet(new TypeOfFacetInferredFromSupportingMethods(type, collection));
- }
- return type;
- }
-
- private void attachValidateAddToAndRemoveFromFacetIfMethodsFound(final ProcessMethodContext processMethodContext, final Class<?> collectionType) {
- attachValidateAddToFacetIfValidateAddToMethodIsFound(processMethodContext, collectionType);
- attachValidateRemoveFacetIfValidateRemoveFromMethodIsFound(processMethodContext, collectionType);
- }
-
- private void attachValidateAddToFacetIfValidateAddToMethodIsFound(final ProcessMethodContext processMethodContext, final Class<?> collectionType) {
-
- final Method getMethod = processMethodContext.getMethod();
- final String capitalizedName = StringExtensions.asJavaBaseName(getMethod.getName());
-
- final Class<?> cls = processMethodContext.getCls();
- final Class<?>[] paramTypes = MethodFinderUtils.paramTypesOrNull(collectionType);
- Method validateAddToMethod = MethodFinderUtils.findMethod_returningText(
- cls,
- MethodLiteralConstants.VALIDATE_ADD_TO_PREFIX + capitalizedName,
- paramTypes);
- if (validateAddToMethod == null) {
- return;
- }
- processMethodContext.removeMethod(validateAddToMethod);
-
- final IdentifiedHolder facetHolder = processMethodContext.getFacetHolder();
- final TranslationService translationService = getTranslationService();
- // sadness: same as in TranslationFactory
- final String translationContext = facetHolder.getIdentifier().toClassAndNameIdentityString();
-
- final CollectionValidateAddToFacetViaMethod facet = new CollectionValidateAddToFacetViaMethod(validateAddToMethod, translationService, translationContext, facetHolder);
- super.addFacet(facet);
- }
-
- private void attachValidateRemoveFacetIfValidateRemoveFromMethodIsFound(final ProcessMethodContext processMethodContext, final Class<?> collectionType) {
-
- final Method getMethod = processMethodContext.getMethod();
- final String capitalizedName = StringExtensions.asJavaBaseName(getMethod.getName());
-
- final Class<?> cls = processMethodContext.getCls();
- final Class<?>[] paramTypes = MethodFinderUtils.paramTypesOrNull(collectionType);
- Method validateRemoveFromMethod = MethodFinderUtils.findMethod_returningText(
- cls,
- MethodLiteralConstants.VALIDATE_REMOVE_FROM_PREFIX + capitalizedName,
- paramTypes);
- if (validateRemoveFromMethod == null) {
- return;
- }
- processMethodContext.removeMethod(validateRemoveFromMethod);
-
- final IdentifiedHolder facetHolder = processMethodContext.getFacetHolder();
- final TranslationService translationService = getTranslationService();
- // sadness: same as in TranslationFactory
- final String translationContext = facetHolder.getIdentifier().toClassAndNameIdentityString();
-
- final CollectionValidateRemoveFromFacetViaMethod facet = new CollectionValidateRemoveFromFacetViaMethod(validateRemoveFromMethod, translationService, translationContext, facetHolder);
- super.addFacet(facet);
- }
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/modify/CollectionClearFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/modify/CollectionClearFacet.java
deleted file mode 100644
index 601b8fd..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/modify/CollectionClearFacet.java
+++ /dev/null
@@ -1,36 +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.core.metamodel.facets.collections.modify;
-
-import org.apache.isis.core.metamodel.facetapi.Facet;
-import org.apache.isis.core.metamodel.spec.ManagedObject;
-
-/**
- * Clear all objects from a collection.
- *
- * <p>
- * In the standard Apache Isis Programming Model, corresponds to either invoking
- * the <tt>clearXxx</tt> support method, or just invoking <tt>clear</tt> on the
- * collection returned by the accessor method.
- */
-public interface CollectionClearFacet extends Facet {
-
- public void clear(ManagedObject inObject);
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/modify/CollectionClearFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/modify/CollectionClearFacetAbstract.java
deleted file mode 100644
index 274e279..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/modify/CollectionClearFacetAbstract.java
+++ /dev/null
@@ -1,36 +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.core.metamodel.facets.collections.modify;
-
-import org.apache.isis.core.metamodel.facetapi.Facet;
-import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-
-public abstract class CollectionClearFacetAbstract extends FacetAbstract implements CollectionClearFacet {
-
- public static Class<? extends Facet> type() {
- return CollectionClearFacet.class;
- }
-
- public CollectionClearFacetAbstract(final FacetHolder holder) {
- super(type(), holder, Derivation.NOT_DERIVED);
- }
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/modify/CollectionRemoveFromFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/modify/CollectionRemoveFromFacet.java
deleted file mode 100644
index 85352c7..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/modify/CollectionRemoveFromFacet.java
+++ /dev/null
@@ -1,39 +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.core.metamodel.facets.collections.modify;
-
-import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
-import org.apache.isis.core.metamodel.facetapi.Facet;
-import org.apache.isis.core.metamodel.spec.ManagedObject;
-
-/**
- * Remove object to a collection.
- *
- * <p>
- * In the standard Apache Isis Programming Model, corresponds to invoking the
- * <tt>removeFromXxx</tt> support method for an action.
- */
-public interface CollectionRemoveFromFacet extends Facet {
-
- public void remove(
- ManagedObject inObject,
- ManagedObject element,
- InteractionInitiatedBy interactionInitiatedBy);
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/modify/CollectionRemoveFromFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/modify/CollectionRemoveFromFacetAbstract.java
deleted file mode 100644
index 4f304a8..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/modify/CollectionRemoveFromFacetAbstract.java
+++ /dev/null
@@ -1,36 +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.core.metamodel.facets.collections.modify;
-
-import org.apache.isis.core.metamodel.facetapi.Facet;
-import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-
-public abstract class CollectionRemoveFromFacetAbstract extends FacetAbstract implements CollectionRemoveFromFacet {
-
- public static Class<? extends Facet> type() {
- return CollectionRemoveFromFacet.class;
- }
-
- public CollectionRemoveFromFacetAbstract(final FacetHolder holder) {
- super(type(), holder, Derivation.NOT_DERIVED);
- }
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/modify/CollectionRemoveFromFacetViaAccessor.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/modify/CollectionRemoveFromFacetViaAccessor.java
deleted file mode 100644
index 10c75a9..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/modify/CollectionRemoveFromFacetViaAccessor.java
+++ /dev/null
@@ -1,82 +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.core.metamodel.facets.collections.modify;
-
-import java.lang.reflect.Method;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.ImperativeFacet;
-import org.apache.isis.core.metamodel.spec.ManagedObject;
-import org.apache.isis.core.metamodel.spec.ManagedObjects;
-import org.apache.isis.core.metamodel.spec.ManagedObjects.UnwrapUtil;
-
-public class CollectionRemoveFromFacetViaAccessor extends CollectionRemoveFromFacetAbstract implements ImperativeFacet {
-
- private final Method method;
-
- public CollectionRemoveFromFacetViaAccessor(
- final Method method,
- final FacetHolder holder) {
- super(holder);
- this.method = method;
- }
-
- /**
- * Returns a singleton list of the {@link Method} provided in the
- * constructor.
- */
- @Override
- public List<Method> getMethods() {
- return Collections.singletonList(method);
- }
-
- @Override
- public Intent getIntent(final Method method) {
- return Intent.MODIFY_COLLECTION_REMOVE;
- }
-
- @Override
- public void remove(
- final ManagedObject owningAdapter,
- final ManagedObject elementAdapter,
- final InteractionInitiatedBy interactionInitiatedBy) {
-
- @SuppressWarnings("unchecked")
- final Collection<? super Object> collection = (Collection<? super Object>) ManagedObjects.InvokeUtil.invoke(method, owningAdapter);
- collection.remove(UnwrapUtil.single(elementAdapter));
- }
-
- @Override
- protected String toStringValues() {
- return "method=" + method;
- }
-
-
- @Override public void appendAttributesTo(final Map<String, Object> attributeMap) {
- super.appendAttributesTo(attributeMap);
- ImperativeFacet.Util.appendAttributesTo(this, attributeMap);
- }
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/modify/CollectionRemoveFromFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/modify/CollectionRemoveFromFacetViaMethod.java
deleted file mode 100644
index f0b36f6..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/modify/CollectionRemoveFromFacetViaMethod.java
+++ /dev/null
@@ -1,75 +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.core.metamodel.facets.collections.modify;
-
-import java.lang.reflect.Method;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.ImperativeFacet;
-import org.apache.isis.core.metamodel.spec.ManagedObject;
-import org.apache.isis.core.metamodel.spec.ManagedObjects;
-
-public class CollectionRemoveFromFacetViaMethod extends CollectionRemoveFromFacetAbstract implements ImperativeFacet {
-
- private final Method method;
-
- public CollectionRemoveFromFacetViaMethod(final Method method, final FacetHolder holder) {
- super(holder);
- this.method = method;
- }
-
- /**
- * Returns a singleton list of the {@link Method} provided in the
- * constructor.
- */
- @Override
- public List<Method> getMethods() {
- return Collections.singletonList(method);
- }
-
- @Override
- public Intent getIntent(final Method method) {
- return Intent.MODIFY_COLLECTION_REMOVE;
- }
-
- @Override
- public void remove(
- final ManagedObject owningAdapter,
- final ManagedObject elementAdapter,
- final InteractionInitiatedBy interactionInitiatedBy) {
-
- ManagedObjects.InvokeUtil.invoke(method, owningAdapter, elementAdapter);
- }
-
- @Override
- protected String toStringValues() {
- return "method=" + method;
- }
-
- @Override public void appendAttributesTo(final Map<String, Object> attributeMap) {
- super.appendAttributesTo(attributeMap);
- attributeMap.put("method", method);
- }
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/modify/TypeOfFacetInferredFromSupportingMethods.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/modify/TypeOfFacetInferredFromSupportingMethods.java
deleted file mode 100644
index 2e236fd..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/modify/TypeOfFacetInferredFromSupportingMethods.java
+++ /dev/null
@@ -1,31 +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.core.metamodel.facets.collections.modify;
-
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacetAbstract;
-
-public class TypeOfFacetInferredFromSupportingMethods extends TypeOfFacetAbstract {
-
- public TypeOfFacetInferredFromSupportingMethods(final Class<?> type, final FacetHolder holder) {
- super(type, holder);
- }
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/DisabledFacetOnCollectionDerivedFromRecreatableObject.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/DisabledFacetOnCollectionDerivedFromRecreatableObject.java
deleted file mode 100644
index 6b1e5fc..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/DisabledFacetOnCollectionDerivedFromRecreatableObject.java
+++ /dev/null
@@ -1,46 +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.core.metamodel.facets.object.recreatable;
-
-import org.apache.isis.applib.annotation.Where;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.members.disabled.DisabledFacetAbstract;
-import org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacet;
-import org.apache.isis.core.metamodel.spec.ManagedObject;
-
-public class DisabledFacetOnCollectionDerivedFromRecreatableObject extends DisabledFacetAbstract {
-
- public DisabledFacetOnCollectionDerivedFromRecreatableObject(
- final FacetHolder holder,
- final Semantics semantics) {
- super(
- DisabledFacetOnCollectionDerivedFromRecreatableObject.class, // so don't clobber any other DisabledFacet's
- Where.ANYWHERE, holder, semantics);
- }
-
- @Override
- public String disabledReason(final ManagedObject target) {
- final ViewModelFacet facet = target.getSpecification().getFacet(ViewModelFacet.class);
- final Object targetObject = target.getPojo();
- final boolean cloneable = facet.isCloneable(targetObject);
- return !cloneable ? "Non-cloneable view models are read-only" : null;
- }
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/DisabledFacetOnCollectionDerivedFromViewModelFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/DisabledFacetOnCollectionDerivedFromViewModelFacetFactory.java
deleted file mode 100644
index dd2e7d4..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/DisabledFacetOnCollectionDerivedFromViewModelFacetFactory.java
+++ /dev/null
@@ -1,54 +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.core.metamodel.facets.object.recreatable;
-
-import java.lang.reflect.Method;
-
-import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
-import org.apache.isis.core.metamodel.facets.FacetedMethod;
-import org.apache.isis.core.metamodel.facets.members.disabled.DisabledFacetAbstract;
-import org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacet;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-
-public class DisabledFacetOnCollectionDerivedFromViewModelFacetFactory extends FacetFactoryAbstract {
-
- public DisabledFacetOnCollectionDerivedFromViewModelFacetFactory() {
- super(FeatureType.COLLECTIONS_ONLY);
- }
-
- @Override
- public void process(final ProcessMethodContext processMethodContext) {
- final Method method = processMethodContext.getMethod();
- final Class<?> declaringClass = method.getDeclaringClass();
- final ObjectSpecification spec = getSpecificationLoader().loadSpecification(declaringClass);
-
- if (!spec.containsNonFallbackFacet(ViewModelFacet.class)) {
- return;
- }
- final ViewModelFacet facet = spec.getFacet(ViewModelFacet.class);
- final DisabledFacetAbstract.Semantics semantics = Util.inferSemanticsFrom(facet);
-
- final FacetedMethod facetHolder = processMethodContext.getFacetHolder();
- super.addFacet(new DisabledFacetOnCollectionDerivedFromRecreatableObject(facetHolder, semantics));
- }
-
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/param/DeriveFacetsPostProcessor.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/param/DeriveFacetsPostProcessor.java
index be12dcf..611e352 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/param/DeriveFacetsPostProcessor.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/param/DeriveFacetsPostProcessor.java
@@ -43,8 +43,6 @@ import org.apache.isis.core.metamodel.facets.collections.collection.CollectionAn
import org.apache.isis.core.metamodel.facets.collections.collection.modify.CollectionDomainEventFacet;
import org.apache.isis.core.metamodel.facets.collections.collection.modify.CollectionDomainEventFacetAbstract;
import org.apache.isis.core.metamodel.facets.collections.collection.modify.CollectionDomainEventFacetForCollectionAnnotation;
-import org.apache.isis.core.metamodel.facets.collections.disabled.fromimmutable.DisabledFacetOnCollectionDerivedFromImmutable;
-import org.apache.isis.core.metamodel.facets.collections.disabled.fromimmutable.DisabledFacetOnCollectionDerivedFromImmutableFactory;
import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacet;
import org.apache.isis.core.metamodel.facets.members.describedas.annotprop.DescribedAsFacetOnMemberDerivedFromType;
import org.apache.isis.core.metamodel.facets.members.describedas.annotprop.DescribedAsFacetOnMemberFactory;
@@ -61,8 +59,6 @@ import org.apache.isis.core.metamodel.facets.object.immutable.ImmutableFacet;
import org.apache.isis.core.metamodel.facets.object.projection.ProjectionFacetFromProjectingProperty;
import org.apache.isis.core.metamodel.facets.object.projection.ident.IconFacetDerivedFromProjectionFacet;
import org.apache.isis.core.metamodel.facets.object.projection.ident.TitleFacetDerivedFromProjectionFacet;
-import org.apache.isis.core.metamodel.facets.object.recreatable.DisabledFacetOnCollectionDerivedFromRecreatableObject;
-import org.apache.isis.core.metamodel.facets.object.recreatable.DisabledFacetOnCollectionDerivedFromViewModelFacetFactory;
import org.apache.isis.core.metamodel.facets.object.recreatable.DisabledFacetOnPropertyDerivedFromRecreatableObject;
import org.apache.isis.core.metamodel.facets.object.recreatable.DisabledFacetOnPropertyDerivedFromRecreatableObjectFacetFactory;
import org.apache.isis.core.metamodel.facets.object.title.TitleFacet;
@@ -117,9 +113,9 @@ import lombok.val;
/**
* Sets up all the {@link Facet}s for an action in a single shot.
*/
-public class DeriveFacetsPostProcessor
+public class DeriveFacetsPostProcessor
implements ObjectSpecificationPostProcessor, MetaModelContextAware {
-
+
@Setter(onMethod = @__(@Override))
private MetaModelContext metaModelContext;
@@ -176,8 +172,6 @@ implements ObjectSpecificationPostProcessor, MetaModelContextAware {
collections.forEach(collection->{
derivePropertyOrCollectionDescribedAsFromType(collection);
- deriveCollectionDisabledFromViewModel(collection);
- deriveCollectionDisabledFromImmutable(collection);
// ... see if any of its actions has a collection parameter of the same type
//
@@ -283,19 +277,19 @@ implements ObjectSpecificationPostProcessor, MetaModelContextAware {
if(method != null) {
// this is basically a subset of the code that is in CollectionAnnotationFacetFactory,
// ignoring stuff which is deprecated for Isis v2
-
- final Collection collectionAnnot =
+
+ final Collection collectionAnnot =
_Annotations.synthesizeInherited(method, Collection.class)
.orElse(null);
-
+
// _Assert.assertEquals("expected same", collectionAnnot,
// Annotations.getAnnotation(method, Collection.class));
-
+
if(collectionAnnot != null) {
final Class<? extends CollectionDomainEvent<?, ?>> collectionDomainEventType =
CollectionAnnotationFacetFactory.defaultFromDomainObjectIfRequired(
objectSpecification, collectionAnnot.domainEvent());
- final CollectionDomainEventFacetForCollectionAnnotation collectionDomainEventFacet =
+ final CollectionDomainEventFacetForCollectionAnnotation collectionDomainEventFacet =
new CollectionDomainEventFacetForCollectionAnnotation(
collectionDomainEventType, collection);
this.addFacet(collectionDomainEventFacet);
@@ -329,14 +323,14 @@ implements ObjectSpecificationPostProcessor, MetaModelContextAware {
if(method != null) {
// this is basically a subset of the code that is in CollectionAnnotationFacetFactory,
// ignoring stuff which is deprecated for Isis v2
-
- final Property propertyAnnot =
+
+ final Property propertyAnnot =
_Annotations.synthesizeInherited(method, Property.class)
.orElse(null);
-
+
// _Assert.assertEquals("expected same", propertyAnnot,
// Annotations.getAnnotation(method, Property.class));
-
+
if(propertyAnnot != null) {
final Class<? extends PropertyDomainEvent<?, ?>> propertyDomainEventType =
PropertyAnnotationFacetFactory.defaultFromDomainObjectIfRequired(
@@ -391,9 +385,9 @@ implements ObjectSpecificationPostProcessor, MetaModelContextAware {
.lookupNonFallbackFacet(DescribedAsFacet.class)
.ifPresent(specFacet->
this.addFacet(
- new DescribedAsFacetOnMemberDerivedFromType(specFacet,
+ new DescribedAsFacetOnMemberDerivedFromType(specFacet,
facetedMethodFor(objectAction))));
-
+
}
/**
@@ -465,7 +459,7 @@ implements ObjectSpecificationPostProcessor, MetaModelContextAware {
.lookupNonFallbackFacet(TypicalLengthFacet.class)
.ifPresent(specFacet->
this.addFacet(
- new TypicalLengthFacetOnParameterDerivedFromType(specFacet,
+ new TypicalLengthFacetOnParameterDerivedFromType(specFacet,
peerFor(parameter))));
}
@@ -512,7 +506,7 @@ implements ObjectSpecificationPostProcessor, MetaModelContextAware {
this.addFacet(
new TypicalLengthFacetOnPropertyDerivedFromType(
specFacet, facetedMethodFor(property))));
-
+
}
/**
@@ -554,66 +548,35 @@ implements ObjectSpecificationPostProcessor, MetaModelContextAware {
if(property.containsNonFallbackFacet(DisabledFacet.class)) {
return;
}
-
+
val typeSpec = property.getOnType();
-
+
typeSpec
.lookupNonFallbackFacet(ImmutableFacet.class)
.ifPresent(immutableFacet->{
-
+
if(immutableFacet instanceof ImmutableFacetFromConfiguration) {
-
+
val isEditingEnabledOnType = typeSpec.lookupNonFallbackFacet(EditingEnabledFacet.class)
.isPresent();
-
+
if(isEditingEnabledOnType) {
// @DomainObject(editing=ENABLED)
return;
}
-
+
}
-
+
this.addFacet(
DisabledFacetOnPropertyDerivedFromImmutable
.forImmutable(facetedMethodFor(property), immutableFacet));
});
}
- /**
- * Replaces {@link DisabledFacetOnCollectionDerivedFromViewModelFacetFactory}
- * @param collection
- */
- private void deriveCollectionDisabledFromViewModel(final OneToManyAssociation collection) {
- if(collection.containsNonFallbackFacet(DisabledFacet.class)){
- return;
- }
- collection.getOnType()
- .lookupNonFallbackFacet(ViewModelFacet.class)
- .ifPresent(specFacet->
- this.addFacet(
- new DisabledFacetOnCollectionDerivedFromRecreatableObject(
- facetedMethodFor(collection), inferSemanticsFrom(specFacet))));
- }
-
- /**
- * Replaces {@link DisabledFacetOnCollectionDerivedFromImmutableFactory}
- */
- private void deriveCollectionDisabledFromImmutable(final OneToManyAssociation collection) {
- if(collection.containsNonFallbackFacet(DisabledFacet.class)) {
- return;
- }
- collection.getOnType()
- .lookupNonFallbackFacet(ImmutableFacet.class)
- .ifPresent(specFacet->
- this.addFacet(
- new DisabledFacetOnCollectionDerivedFromImmutable(
- specFacet, facetedMethodFor(collection))));
- }
-
private void addCollectionParamDefaultsFacetIfNoneAlready(final ObjectActionParameter collectionParam) {
if(collectionParam.getNumber()!=0) {
- return; // with current programming model this can only be the first parameter of an action dialog
+ return; // with current programming model this can only be the first parameter of an action dialog
}
if(collectionParam.containsNonFallbackFacet(ActionParameterDefaultsFacet.class)) {
return;
@@ -640,7 +603,7 @@ implements ObjectSpecificationPostProcessor, MetaModelContextAware {
}
return ActionType.USER_ONLY;
}
-
+
private void addFacet(Facet facet) {
FacetUtil.addFacet(facet);
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodels/dflt/ProgrammingModelFacetsJava8.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodels/dflt/ProgrammingModelFacetsJava8.java
index 5c0ac38..13659cd 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodels/dflt/ProgrammingModelFacetsJava8.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodels/dflt/ProgrammingModelFacetsJava8.java
@@ -34,11 +34,9 @@ import org.apache.isis.core.metamodel.facets.actions.notinservicemenu.derived.No
import org.apache.isis.core.metamodel.facets.actions.validate.method.ActionValidationFacetViaMethodFactory;
import org.apache.isis.core.metamodel.facets.all.i18n.TranslationFacetFactory;
import org.apache.isis.core.metamodel.facets.collections.accessor.CollectionAccessorFacetViaAccessorFactory;
-import org.apache.isis.core.metamodel.facets.collections.clear.CollectionClearFacetFactory;
import org.apache.isis.core.metamodel.facets.collections.collection.CollectionAnnotationFacetFactory;
import org.apache.isis.core.metamodel.facets.collections.javautilcollection.CollectionFacetFactory;
import org.apache.isis.core.metamodel.facets.collections.layout.CollectionLayoutFacetFactory;
-import org.apache.isis.core.metamodel.facets.collections.modify.CollectionAddToRemoveFromAndValidateFacetFactory;
import org.apache.isis.core.metamodel.facets.collections.parented.ParentedFacetSinceCollectionFactory;
import org.apache.isis.core.metamodel.facets.collections.sortedby.annotation.SortedByFacetAnnotationFactory;
import org.apache.isis.core.metamodel.facets.fallback.FallbackFacetFactory;
@@ -162,7 +160,7 @@ public final class ProgrammingModelFacetsJava8 extends ProgrammingModelAbstract
// must be first, so any Facets created can be replaced by other
// FacetFactorys later.
addFactory(FacetProcessingOrder.A1_FALLBACK_DEFAULTS, FallbackFacetFactory.class);
-
+
addFactory(FacetProcessingOrder.B1_OBJECT_NAMING, ObjectSpecIdFacetDerivedFromClassNameFactory.class);
addFactory(FacetProcessingOrder.B1_OBJECT_NAMING, DomainServiceFacetAnnotationFactory.class);
@@ -194,8 +192,6 @@ public final class ProgrammingModelFacetsJava8 extends ProgrammingModelAbstract
// collections
addFactory(FacetProcessingOrder.E1_MEMBER_MODELLING, CollectionAccessorFacetViaAccessorFactory.class);
- addFactory(FacetProcessingOrder.E1_MEMBER_MODELLING, CollectionClearFacetFactory.class);
- addFactory(FacetProcessingOrder.E1_MEMBER_MODELLING, CollectionAddToRemoveFromAndValidateFacetFactory.class);
addFactory(FacetProcessingOrder.E1_MEMBER_MODELLING, SortedByFacetAnnotationFactory.class);
// actions
@@ -359,19 +355,19 @@ public final class ProgrammingModelFacetsJava8 extends ProgrammingModelAbstract
addFactory(FacetProcessingOrder.Z1_FINALLY, TranslationFacetFactory.class);
addFactory(FacetProcessingOrder.Z1_FINALLY, ViewModelSemanticCheckingFacetFactory.class);
-
+
addPostProcessor(PostProcessingOrder.A1_BUILTIN, DeriveFacetsPostProcessor.class);
addValidator(new TitlesAndTranslationsValidator());
addValidator((objectSpec, validator) -> {
final long numActions = objectSpec.streamObjectActions(MixedIn.INCLUDED).count();
if (numActions > 0L) {
-
+
val actionIds = objectSpec.streamObjectActions(MixedIn.INCLUDED)
.map(ObjectAction::getIdentifier)
.map(Identifier::toString)
.collect(Collectors.joining(", "));
-
+
validator.onFailure(objectSpec, objectSpec.getIdentifier(),
"%s: is a (concrete) but UNKNOWN sort, yet has %d actions: {%s}",
objectSpec.getCorrespondingClass().getName(),
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureRepositoryDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureRepositoryDefault.java
index d6caf39..3a5cebf 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureRepositoryDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureRepositoryDefault.java
@@ -45,8 +45,6 @@ import org.apache.isis.core.config.metamodel.services.ApplicationFeaturesInitCon
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.SingleIntValueFacet;
import org.apache.isis.core.metamodel.facets.all.hide.HiddenFacet;
-import org.apache.isis.core.metamodel.facets.collections.modify.CollectionAddToFacet;
-import org.apache.isis.core.metamodel.facets.collections.modify.CollectionRemoveFromFacet;
import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxLengthFacet;
import org.apache.isis.core.metamodel.facets.objectvalue.typicallen.TypicalLengthFacet;
import org.apache.isis.core.metamodel.facets.properties.update.modify.PropertySetterFacet;
@@ -134,7 +132,7 @@ public class ApplicationFeatureRepositoryDefault implements ApplicationFeatureRe
}
void createApplicationFeaturesFor(final ObjectSpecification spec) {
-
+
if (exclude(spec)) {
return;
}
@@ -171,7 +169,7 @@ public class ApplicationFeatureRepositoryDefault implements ApplicationFeatureRe
addedMembers = newProperty(classFeatureId, property, returnType, maxLength, typicalLength, derived) || addedMembers;
}
for (final ObjectAssociation collection : collections) {
- final boolean derived = !(collection.containsNonFallbackFacet(CollectionAddToFacet.class) || collection.containsNonFallbackFacet(CollectionRemoveFromFacet.class));
+ final boolean derived = false;
final Class<?> elementType = correspondingClassFor(collection.getSpecification());
addedMembers = newCollection(classFeatureId, collection, elementType, derived) || addedMembers;
}
@@ -247,7 +245,7 @@ public class ApplicationFeatureRepositoryDefault implements ApplicationFeatureRe
final ApplicationFeatureId classFeatureId,
final ObjectMember objectMember,
final Class<?> returnType,
- final Integer maxLength,
+ final Integer maxLength,
final Integer typicalLength,
final boolean derived) {
return newMember(classFeatureId, objectMember, ApplicationMemberType.PROPERTY, returnType, derived, maxLength, typicalLength, null);
@@ -275,7 +273,7 @@ public class ApplicationFeatureRepositoryDefault implements ApplicationFeatureRe
final ApplicationMemberType memberType,
final Class<?> returnType,
final Boolean derived,
- final Integer maxLength,
+ final Integer maxLength,
final Integer typicalLength,
final SemanticsOf actionSemantics) {
if (objectMember.isAlwaysHidden()) {
@@ -332,14 +330,14 @@ public class ApplicationFeatureRepositoryDefault implements ApplicationFeatureRe
protected boolean exclude(final ObjectSpecification spec) {
-
+
val excluded = spec.isAbstract() ||
spec.getBeanSort().isUnknown() ||
isBuiltIn(spec) ||
isHidden(spec);
-
+
if(excluded && log.isDebugEnabled()) {
- log.debug("{} excluded because: abstract:{} unknown-sort:{} builtIn:{} hidden:{}",
+ log.debug("{} excluded because: abstract:{} unknown-sort:{} builtIn:{} hidden:{}",
spec.getCorrespondingClass().getSimpleName(),
spec.isAbstract(),
spec.getBeanSort().isUnknown(),
@@ -347,7 +345,7 @@ public class ApplicationFeatureRepositoryDefault implements ApplicationFeatureRe
isHidden(spec)
);
}
-
+
return excluded;
}
@@ -355,14 +353,14 @@ public class ApplicationFeatureRepositoryDefault implements ApplicationFeatureRe
// /**
// * Ignore the (strict) super-classes of any services.
// * <p>
-// * For example, we want to ignore <code>ExceptionRecognizerComposite</code>
+// * For example, we want to ignore <code>ExceptionRecognizerComposite</code>
// * because there is no service of that type (only of subtypes of that).
// * </p>
// */
// private boolean isSuperClassOfService(final ObjectSpecification spec) {
//
// val specClass = spec.getCorrespondingClass();
-//
+//
// // is this class a supertype or the actual type of one of the services?
// boolean serviceCls = false;
// for (final ManagedBeanAdapter bean : registeredServices.get()) {
@@ -490,7 +488,7 @@ public class ApplicationFeatureRepositoryDefault implements ApplicationFeatureRe
// -- packageNames, packageNamesContainingClasses, classNamesContainedIn, memberNamesOf
- @Override
+ @Override
public SortedSet<String> packageNames() {
initializeIfRequired();
return stream(allFeatures(ApplicationFeatureType.PACKAGE))
@@ -498,7 +496,7 @@ public class ApplicationFeatureRepositoryDefault implements ApplicationFeatureRe
.collect(_Sets.toUnmodifiableSorted());
}
- @Override
+ @Override
public SortedSet<String> packageNamesContainingClasses(final ApplicationMemberType memberType) {
initializeIfRequired();
final Collection<ApplicationFeature> packages = allFeatures(ApplicationFeatureType.PACKAGE);
@@ -509,7 +507,7 @@ public class ApplicationFeatureRepositoryDefault implements ApplicationFeatureRe
.collect(_Sets.toUnmodifiableSorted());
}
- @Override
+ @Override
public SortedSet<String> classNamesContainedIn(final String packageFqn, final ApplicationMemberType memberType) {
initializeIfRequired();
final ApplicationFeatureId packageId = ApplicationFeatureId.newPackage(packageFqn);
@@ -524,7 +522,7 @@ public class ApplicationFeatureRepositoryDefault implements ApplicationFeatureRe
.collect(_Sets.toUnmodifiableSorted());
}
- @Override
+ @Override
public SortedSet<String> classNamesRecursivelyContainedIn(final String packageFqn) {
initializeIfRequired();
final ApplicationFeatureId packageId = ApplicationFeatureId.newPackage(packageFqn);
@@ -539,7 +537,7 @@ public class ApplicationFeatureRepositoryDefault implements ApplicationFeatureRe
.collect(_Sets.toUnmodifiableSorted());
}
- @Override
+ @Override
public SortedSet<String> memberNamesOf(
final String packageFqn,
final String className,
@@ -557,4 +555,4 @@ public class ApplicationFeatureRepositoryDefault implements ApplicationFeatureRe
}
-}
\ No newline at end of file
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/OneToManyAssociation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/OneToManyAssociation.java
index 7bbc340..3d97e62 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/OneToManyAssociation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/OneToManyAssociation.java
@@ -25,76 +25,5 @@ import org.apache.isis.core.metamodel.spec.ManagedObject;
public interface OneToManyAssociation extends ObjectAssociation, OneToManyFeature {
- // /////////////////////////////////////////////////////////////
- // add
- // /////////////////////////////////////////////////////////////
-
-
- /**
- * Determines if the specified element can be added to the collection field,
- * represented as a {@link Consent}.
- *
- * <p>
- * If allowed the {@link #addElement(ManagedObject, ManagedObject, InteractionInitiatedBy) add}
- * method can be called with the same parameters.
- *
- * @see #addElement(ManagedObject, ManagedObject, InteractionInitiatedBy)
- */
- Consent isValidToAdd(
- ManagedObject owningObjectAdapter,
- ManagedObject proposedObjectToAdd,
- InteractionInitiatedBy interactionInitiatedBy);
-
- /**
- * Add the specified element to this collection field in the specified
- * object.
- *
- * <p>
- * Should be preceded by call to {@link #isValidToAdd(ManagedObject, ManagedObject)}.
- * </p>
- *
- * @see #isValidToAdd(ManagedObject, ManagedObject)
- */
- void addElement(
- ManagedObject owningObjectAdapter,
- ManagedObject objectToAdd,
- InteractionInitiatedBy interactionInitiatedBy);
-
- // /////////////////////////////////////////////////////////////
- // remove
- // /////////////////////////////////////////////////////////////
-
-
- /**
- * Determines if the specified element can be removed from the collection
- * field, represented as a {@link Consent}.
- *
- * <p>
- * If allowed the {@link #removeElement(ManagedObject, ManagedObject, InteractionInitiatedBy)
- * remove} method can be called with the same parameters.
- *
- * @see #removeElement(ManagedObject, ManagedObject, InteractionInitiatedBy)
- */
- Consent isValidToRemove(
- ManagedObject owningObjectAdapter,
- ManagedObject proposedObjectToRemove,
- InteractionInitiatedBy interactionInitiatedBy);
-
- /**
- * Remove the specified element from this collection field in the specified
- * object.
- *
- * <p>
- * Should be preceded by call to {@link #isValidToRemove(ManagedObject, ManagedObject)}.
- * </p>
- *
- * @see #isValidToRemove(ManagedObject, ManagedObject)
- */
- void removeElement(
- ManagedObject owningObjectAdapter,
- ManagedObject oObjectToRemove,
- InteractionInitiatedBy interactionInitiatedBy);
-
-
}
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 4c93c91..9d86c70 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
@@ -28,9 +28,6 @@ import org.apache.isis.core.metamodel.consent.InteractionResult;
import org.apache.isis.core.metamodel.facetapi.FeatureType;
import org.apache.isis.core.metamodel.facets.FacetedMethod;
import org.apache.isis.core.metamodel.facets.collections.CollectionFacet;
-import org.apache.isis.core.metamodel.facets.collections.modify.CollectionAddToFacet;
-import org.apache.isis.core.metamodel.facets.collections.modify.CollectionClearFacet;
-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;
@@ -93,64 +90,6 @@ extends ObjectAssociationAbstract implements OneToManyAssociation {
- // -- Validate Add
- // Not API
- private ValidityContext createValidateAddInteractionContext(
- final InteractionInitiatedBy interactionInitiatedBy,
- final ManagedObject ownerAdapter,
- final ManagedObject proposedToAddAdapter) {
- return new CollectionAddToContext(
- headFor(ownerAdapter), getIdentifier(), proposedToAddAdapter,
- interactionInitiatedBy);
- }
-
- @Override
- public Consent isValidToAdd(
- final ManagedObject ownerAdapter,
- final ManagedObject proposedToAddAdapter,
- final InteractionInitiatedBy interactionInitiatedBy) {
- return isValidToAddResult(ownerAdapter, proposedToAddAdapter, interactionInitiatedBy).createConsent();
- }
-
- private InteractionResult isValidToAddResult(
- final ManagedObject ownerAdapter,
- final ManagedObject proposedToAddAdapter,
- final InteractionInitiatedBy interactionInitiatedBy) {
- final ValidityContext validityContext = createValidateAddInteractionContext(
- interactionInitiatedBy, ownerAdapter, proposedToAddAdapter);
- return InteractionUtils.isValidResult(this, validityContext);
- }
-
-
-
- // -- Validate Remove
- private ValidityContext createValidateRemoveInteractionContext(
- final ManagedObject ownerAdapter,
- final ManagedObject proposedToRemoveAdapter,
- final InteractionInitiatedBy interactionInitiatedBy) {
- return new CollectionRemoveFromContext(
- headFor(ownerAdapter), getIdentifier(), proposedToRemoveAdapter, interactionInitiatedBy);
- }
-
- @Override
- public Consent isValidToRemove(
- final ManagedObject ownerAdapter,
- final ManagedObject proposedToRemoveAdapter,
- final InteractionInitiatedBy interactionInitiatedBy) {
- return isValidToRemoveResult(
- ownerAdapter, proposedToRemoveAdapter, interactionInitiatedBy).createConsent();
- }
-
- private InteractionResult isValidToRemoveResult(
- final ManagedObject ownerAdapter,
- final ManagedObject proposedToRemoveAdapter,
- final InteractionInitiatedBy interactionInitiatedBy) {
- final ValidityContext validityContext = createValidateRemoveInteractionContext(
- ownerAdapter, proposedToRemoveAdapter, interactionInitiatedBy);
- return InteractionUtils.isValidResult(this, validityContext);
- }
-
-
// -- get, isEmpty, add, clear
@@ -180,41 +119,6 @@ extends ObjectAssociationAbstract implements OneToManyAssociation {
return CollectionFacet.elementCount(collection) == 0;
}
- // -- add, clear
-
- @Override
- public void addElement(
- final ManagedObject ownerAdapter,
- final ManagedObject referencedAdapter,
- final InteractionInitiatedBy interactionInitiatedBy) {
-
- if (referencedAdapter == null) {
- throw new IllegalArgumentException("Can't use null to add an item to a collection");
- }
- EntityUtil.requiresWhenFirstIsBookmarkableSecondIsAttached(
- ownerAdapter,
- referencedAdapter);
-
- val facet = getFacet(CollectionAddToFacet.class);
- facet.add(ownerAdapter, referencedAdapter, interactionInitiatedBy);
- }
-
- @Override
- public void removeElement(
- final ManagedObject ownerAdapter,
- final ManagedObject referencedAdapter,
- final InteractionInitiatedBy interactionInitiatedBy) {
- if (referencedAdapter == null) {
- throw new IllegalArgumentException("element should not be null");
- }
- final CollectionRemoveFromFacet facet = getFacet(CollectionRemoveFromFacet.class);
- facet.remove(ownerAdapter, referencedAdapter, interactionInitiatedBy);
- }
-
- public void removeAllAssociations(final ManagedObject ownerAdapter) {
- final CollectionClearFacet facet = getFacet(CollectionClearFacet.class);
- facet.clear(ownerAdapter);
- }
// -- defaults
@Override
@@ -276,6 +180,4 @@ extends ObjectAssociationAbstract implements OneToManyAssociation {
}
-
-
}
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/collections/CollectionFieldMethodsFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/collections/CollectionFieldMethodsFacetFactoryTest.java
index 983a7ab..b4005f1 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/collections/CollectionFieldMethodsFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/collections/CollectionFieldMethodsFacetFactoryTest.java
@@ -31,25 +31,8 @@ import org.apache.isis.core.internaltestsupport.jmocking.JUnitRuleMockery2.Mode;
import org.apache.isis.core.metamodel.facetapi.Facet;
import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryTest;
import org.apache.isis.core.metamodel.facets.FacetFactory;
-import org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacet;
import org.apache.isis.core.metamodel.facets.collections.accessor.CollectionAccessorFacetViaAccessor;
import org.apache.isis.core.metamodel.facets.collections.accessor.CollectionAccessorFacetViaAccessorFactory;
-import org.apache.isis.core.metamodel.facets.collections.clear.CollectionClearFacetFactory;
-import org.apache.isis.core.metamodel.facets.collections.clear.CollectionClearFacetViaAccessor;
-import org.apache.isis.core.metamodel.facets.collections.clear.CollectionClearFacetViaClearMethod;
-import org.apache.isis.core.metamodel.facets.collections.modify.CollectionAddToFacet;
-import org.apache.isis.core.metamodel.facets.collections.modify.CollectionAddToFacetViaAccessor;
-import org.apache.isis.core.metamodel.facets.collections.modify.CollectionAddToFacetViaMethod;
-import org.apache.isis.core.metamodel.facets.collections.modify.CollectionAddToRemoveFromAndValidateFacetFactory;
-import org.apache.isis.core.metamodel.facets.collections.modify.CollectionClearFacet;
-import org.apache.isis.core.metamodel.facets.collections.modify.CollectionRemoveFromFacet;
-import org.apache.isis.core.metamodel.facets.collections.modify.CollectionRemoveFromFacetViaAccessor;
-import org.apache.isis.core.metamodel.facets.collections.modify.CollectionRemoveFromFacetViaMethod;
-import org.apache.isis.core.metamodel.facets.collections.modify.TypeOfFacetInferredFromSupportingMethods;
-import org.apache.isis.core.metamodel.facets.collections.validate.CollectionValidateAddToFacet;
-import org.apache.isis.core.metamodel.facets.collections.validate.CollectionValidateAddToFacetViaMethod;
-import org.apache.isis.core.metamodel.facets.collections.validate.CollectionValidateRemoveFromFacet;
-import org.apache.isis.core.metamodel.facets.collections.validate.CollectionValidateRemoveFromFacetViaMethod;
import org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -97,7 +80,7 @@ public class CollectionFieldMethodsFacetFactoryTest extends AbstractFacetFactory
public void testPropertyAccessorFacetIsInstalledForJavaUtilListAndMethodRemoved() {
val facetFactory = new CollectionAccessorFacetViaAccessorFactory();
facetFactory.setMetaModelContext(super.metaModelContext);
-
+
class Customer {
@SuppressWarnings({ "rawtypes", "unused" })
public List getOrders() {
@@ -190,319 +173,6 @@ public class CollectionFieldMethodsFacetFactoryTest extends AbstractFacetFactory
assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(collectionAccessorMethod));
}
- public void testAddToFacetIsInstalledViaAccessorIfNoExplicitAddToMethodExists() {
- val facetFactory = new CollectionAddToRemoveFromAndValidateFacetFactory();
- facetFactory.setMetaModelContext(super.metaModelContext);
-
- @SuppressWarnings("hiding")
- class Order {
- }
- class Customer {
- @SuppressWarnings("unused")
- public Collection<Order> getOrders() {
- return null;
- }
- }
- final Method collectionAccessorMethod = findMethod(Customer.class, "getOrders");
-
- facetFactory.process(new FacetFactory.ProcessMethodContext(Customer.class, null, collectionAccessorMethod, methodRemover, facetedMethod));
-
- final Facet facet = facetedMethod.getFacet(CollectionAddToFacet.class);
- assertNotNull(facet);
- assertTrue(facet instanceof CollectionAddToFacetViaAccessor);
- final CollectionAddToFacetViaAccessor collectionAddToFacetViaAccessor = (CollectionAddToFacetViaAccessor) facet;
- assertEquals(collectionAccessorMethod, collectionAddToFacetViaAccessor.getMethods().get(0));
- }
-
- public void testCannotInferTypeOfFacetIfNoExplicitAddToOrRemoveFromMethods() {
- val facetFactory = new CollectionAddToRemoveFromAndValidateFacetFactory();
- facetFactory.setMetaModelContext(super.metaModelContext);
-
- @SuppressWarnings("hiding")
- class Order {
- }
- class Customer {
- @SuppressWarnings("unused")
- public Collection<Order> getOrders() {
- return null;
- }
- }
- final Method collectionAccessorMethod = findMethod(Customer.class, "getOrders");
-
- facetFactory.process(new FacetFactory.ProcessMethodContext(Customer.class, null, collectionAccessorMethod, methodRemover, facetedMethod));
-
- assertNull(facetedMethod.getFacet(TypeOfFacet.class));
- }
-
- public void testRemoveFromFacetIsInstalledViaAccessorIfNoExplicitRemoveFromMethodExists() {
- val facetFactory = new CollectionAddToRemoveFromAndValidateFacetFactory();
- facetFactory.setMetaModelContext(super.metaModelContext);
-
- @SuppressWarnings("hiding")
- class Order {
- }
- class Customer {
- @SuppressWarnings("unused")
- public Collection<Order> getOrders() {
- return null;
- }
- }
- final Method collectionAccessorMethod = findMethod(Customer.class, "getOrders");
-
- facetFactory.process(new FacetFactory.ProcessMethodContext(Customer.class, null, collectionAccessorMethod, methodRemover, facetedMethod));
-
- final Facet facet = facetedMethod.getFacet(CollectionRemoveFromFacet.class);
- assertNotNull(facet);
- assertTrue(facet instanceof CollectionRemoveFromFacetViaAccessor);
- final CollectionRemoveFromFacetViaAccessor collectionRemoveFromFacetViaAccessor = (CollectionRemoveFromFacetViaAccessor) facet;
- assertEquals(collectionAccessorMethod, collectionRemoveFromFacetViaAccessor.getMethods().get(0));
- }
-
- public void testAddToFacetIsInstalledAndMethodRemoved() {
- val facetFactory = new CollectionAddToRemoveFromAndValidateFacetFactory();
- facetFactory.setMetaModelContext(super.metaModelContext);
-
- @SuppressWarnings("hiding")
- class Order {
- }
- class Customer {
- @SuppressWarnings("unused")
- public Collection<Order> getOrders() {
- return null;
- }
-
- @SuppressWarnings("unused")
- public void addToOrders(final Order o) {
- };
- }
- final Method collectionAccessorMethod = findMethod(Customer.class, "getOrders");
- final Method addToMethod = findMethod(Customer.class, "addToOrders", new Class[] { Order.class });
-
- facetFactory.process(new FacetFactory.ProcessMethodContext(Customer.class, null, collectionAccessorMethod, methodRemover, facetedMethod));
-
- final Facet facet = facetedMethod.getFacet(CollectionAddToFacet.class);
- assertNotNull(facet);
- assertTrue(facet instanceof CollectionAddToFacetViaMethod);
- final CollectionAddToFacetViaMethod collectionAddToFacetViaMethod = (CollectionAddToFacetViaMethod) facet;
- assertEquals(addToMethod, collectionAddToFacetViaMethod.getMethods().get(0));
-
- assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(addToMethod));
- }
-
- public void testCanInferTypeOfFacetFromExplicitAddToMethod() {
- val facetFactory = new CollectionAddToRemoveFromAndValidateFacetFactory();
- facetFactory.setMetaModelContext(super.metaModelContext);
-
- @SuppressWarnings("hiding")
- class Order {
- }
- class Customer {
- @SuppressWarnings("unused")
- public Collection<Order> getOrders() {
- return null;
- }
-
- @SuppressWarnings("unused")
- public void addToOrders(final Order o) {
- };
- }
- final Method collectionAccessorMethod = findMethod(Customer.class, "getOrders");
-
- facetFactory.process(new FacetFactory.ProcessMethodContext(Customer.class, null, collectionAccessorMethod, methodRemover, facetedMethod));
-
- final Facet facet = facetedMethod.getFacet(TypeOfFacet.class);
- assertNotNull(facet);
- assertTrue(facet instanceof TypeOfFacetInferredFromSupportingMethods);
- final TypeOfFacetInferredFromSupportingMethods typeOfFacetInferredFromSupportingMethods = (TypeOfFacetInferredFromSupportingMethods) facet;
- assertEquals(Order.class, typeOfFacetInferredFromSupportingMethods.value());
- }
-
- public void testRemoveFromFacetIsInstalledAndMethodRemoved() {
- val facetFactory = new CollectionAddToRemoveFromAndValidateFacetFactory();
- facetFactory.setMetaModelContext(super.metaModelContext);
-
- @SuppressWarnings("hiding")
- class Order {
- }
- class Customer {
- @SuppressWarnings({ "rawtypes", "unused" })
- public Collection getOrders() {
- return null;
- }
-
- @SuppressWarnings("unused")
- public void removeFromOrders(final Order o) {
- };
- }
- final Method collectionAccessorMethod = findMethod(Customer.class, "getOrders");
- final Method removeFromMethod = findMethod(Customer.class, "removeFromOrders", new Class[] { Order.class });
-
- facetFactory.process(new FacetFactory.ProcessMethodContext(Customer.class, null, collectionAccessorMethod, methodRemover, facetedMethod));
-
- final Facet facet = facetedMethod.getFacet(CollectionRemoveFromFacet.class);
- assertNotNull(facet);
- assertTrue(facet instanceof CollectionRemoveFromFacetViaMethod);
- final CollectionRemoveFromFacetViaMethod collectionRemoveFromFacetViaMethod = (CollectionRemoveFromFacetViaMethod) facet;
- assertEquals(removeFromMethod, collectionRemoveFromFacetViaMethod.getMethods().get(0));
-
- assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(removeFromMethod));
- }
-
- public void testCanInferTypeOfFacetFromExplicitRemoveFromMethod() {
- val facetFactory = new CollectionAddToRemoveFromAndValidateFacetFactory();
- facetFactory.setMetaModelContext(super.metaModelContext);
-
- @SuppressWarnings("hiding")
- class Order {
- }
- class Customer {
- @SuppressWarnings("unused")
- public Collection<Order> getOrders() {
- return null;
- };
-
- @SuppressWarnings("unused")
- public void removeFromOrders(final Order o) {
- };
- }
- final Method collectionAccessorMethod = findMethod(Customer.class, "getOrders");
-
- facetFactory.process(new FacetFactory.ProcessMethodContext(Customer.class, null, collectionAccessorMethod, methodRemover, facetedMethod));
-
- final Facet facet = facetedMethod.getFacet(TypeOfFacet.class);
- assertNotNull(facet);
- assertTrue(facet instanceof TypeOfFacetInferredFromSupportingMethods);
- final TypeOfFacetInferredFromSupportingMethods typeOfFacetInferredFromSupportingMethods = (TypeOfFacetInferredFromSupportingMethods) facet;
- assertEquals(Order.class, typeOfFacetInferredFromSupportingMethods.value());
- }
-
- public void testClearFacetIsInstalledAndMethodRemoved() {
- val facetFactory = new CollectionClearFacetFactory();
- facetFactory.setMetaModelContext(super.metaModelContext);
-
- @SuppressWarnings({ "hiding", "unused" })
- class Order {
- }
- class Customer {
- @SuppressWarnings({ "rawtypes", "unused" })
- public Collection getOrders() {
- return null;
- }
-
- @SuppressWarnings("unused")
- public void clearOrders() {
- };
- }
- final Method collectionAccessorMethod = findMethod(Customer.class, "getOrders");
- final Method clearMethod = findMethod(Customer.class, "clearOrders");
-
- facetFactory.process(new FacetFactory.ProcessMethodContext(Customer.class, null, collectionAccessorMethod, methodRemover, facetedMethod));
-
- final Facet facet = facetedMethod.getFacet(CollectionClearFacet.class);
- assertNotNull(facet);
- assertTrue(facet instanceof CollectionClearFacetViaClearMethod);
- final CollectionClearFacetViaClearMethod collectionClearFacetViaClearMethod = (CollectionClearFacetViaClearMethod) facet;
- assertEquals(clearMethod, collectionClearFacetViaClearMethod.getMethods().get(0));
-
- assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(clearMethod));
- }
-
- public void testClearFacetIsInstalledViaAccessorIfNoExplicitClearMethod() {
- val facetFactory = new CollectionClearFacetFactory();
- facetFactory.setMetaModelContext(super.metaModelContext);
-
- @SuppressWarnings({ "hiding", "unused" })
- class Order {
- }
- class Customer {
- @SuppressWarnings({ "rawtypes", "unused" })
- public Collection getOrders() {
- return null;
- }
- }
- final Method collectionAccessorMethod = findMethod(Customer.class, "getOrders");
-
- facetFactory.process(new FacetFactory.ProcessMethodContext(Customer.class, null, collectionAccessorMethod, methodRemover, facetedMethod));
-
- final Facet facet = facetedMethod.getFacet(CollectionClearFacet.class);
- assertNotNull(facet);
- assertTrue(facet instanceof CollectionClearFacetViaAccessor);
- final CollectionClearFacetViaAccessor collectionClearFacetViaAccessor = (CollectionClearFacetViaAccessor) facet;
- assertEquals(collectionAccessorMethod, collectionClearFacetViaAccessor.getMethods().get(0));
- }
-
- public void testValidateAddToFacetIsInstalledAndMethodRemoved() {
- val facetFactory = new CollectionAddToRemoveFromAndValidateFacetFactory();
- facetFactory.setMetaModelContext(super.metaModelContext);
-
- @SuppressWarnings("hiding")
- class Order {
- }
- class Customer {
- @SuppressWarnings({ "rawtypes", "unused" })
- public Collection getOrders() {
- return null;
- }
-
- @SuppressWarnings("unused")
- public void addToOrders(final Order o) {
- };
-
- @SuppressWarnings("unused")
- public String validateAddToOrders(final Order o) {
- return null;
- };
- }
- final Method collectionAccessorMethod = findMethod(Customer.class, "getOrders");
- final Method validateAddToMethod = findMethod(Customer.class, "validateAddToOrders", new Class[] { Order.class });
-
- facetFactory.process(new FacetFactory.ProcessMethodContext(Customer.class, null, collectionAccessorMethod, methodRemover, facetedMethod));
-
- final Facet facet = facetedMethod.getFacet(CollectionValidateAddToFacet.class);
- assertNotNull(facet);
- assertTrue(facet instanceof CollectionValidateAddToFacetViaMethod);
- final CollectionValidateAddToFacetViaMethod collectionValidateAddToFacetViaMethod = (CollectionValidateAddToFacetViaMethod) facet;
- assertEquals(validateAddToMethod, collectionValidateAddToFacetViaMethod.getMethods().get(0));
-
- assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(validateAddToMethod));
- }
-
- public void testValidateRemoveFromFacetIsInstalledAndMethodRemoved() {
- val facetFactory = new CollectionAddToRemoveFromAndValidateFacetFactory();
- facetFactory.setMetaModelContext(super.metaModelContext);
-
- @SuppressWarnings("hiding")
- class Order {
- }
- class Customer {
- @SuppressWarnings("unused")
- public Collection<Order> getOrders() {
- return null;
- }
-
- @SuppressWarnings("unused")
- public void removeFromOrders(final Order o) {
- };
-
- @SuppressWarnings("unused")
- public String validateRemoveFromOrders(final Order o) {
- return null;
- };
- }
- final Method collectionAccessorMethod = findMethod(Customer.class, "getOrders");
- final Method validateRemoveFromMethod = findMethod(Customer.class, "validateRemoveFromOrders", new Class[] { Order.class });
-
- facetFactory.process(new FacetFactory.ProcessMethodContext(Customer.class, null, collectionAccessorMethod, methodRemover, facetedMethod));
-
- final Facet facet = facetedMethod.getFacet(CollectionValidateRemoveFromFacet.class);
- assertNotNull(facet);
- assertTrue(facet instanceof CollectionValidateRemoveFromFacetViaMethod);
- final CollectionValidateRemoveFromFacetViaMethod collectionValidateRemoveFromFacetViaMethod = (CollectionValidateRemoveFromFacetViaMethod) facet;
- assertEquals(validateRemoveFromMethod, collectionValidateRemoveFromFacetViaMethod.getMethods().get(0));
-
- assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(validateRemoveFromMethod));
- }
-
public void testMethodFoundInSuperclass() {
val facetFactory = new CollectionAccessorFacetViaAccessorFactory();
facetFactory.setMetaModelContext(super.metaModelContext);
@@ -531,57 +201,6 @@ public class CollectionFieldMethodsFacetFactoryTest extends AbstractFacetFactory
assertEquals(collectionAccessorMethod, collectionAccessorFacetViaMethod.getMethods().get(0));
}
- public void testMethodFoundInSuperclassButHelpeMethodsFoundInSubclasses() {
- val facetFactoryForAccessor = new CollectionAccessorFacetViaAccessorFactory();
- val facetFactoryForHelpers = new CollectionAddToRemoveFromAndValidateFacetFactory();
- facetFactoryForAccessor.setMetaModelContext(super.metaModelContext);
- facetFactoryForHelpers.setMetaModelContext(super.metaModelContext);
-
- @SuppressWarnings("hiding")
- class Order {
- }
- class Customer {
- @SuppressWarnings("unused")
- public Collection<Order> getOrders() {
- return null;
- }
- }
-
- class CustomerEx extends Customer {
- @SuppressWarnings("unused")
- public void removeFromOrders(final Order o) {
- };
-
- @SuppressWarnings("unused")
- public String validateRemoveFromOrders(final Order o) {
- return null;
- };
- }
-
- final Method collectionAccessorMethod = findMethod(Customer.class, "getOrders");
- final Method removeFromMethod = findMethod(CustomerEx.class, "removeFromOrders", new Class[] { Order.class });
- final Method validateRemoveFromMethod = findMethod(CustomerEx.class, "validateRemoveFromOrders", new Class[] { Order.class });
-
- facetFactoryForAccessor.process(new FacetFactory.ProcessMethodContext(CustomerEx.class, null, collectionAccessorMethod, methodRemover, facetedMethod));
- facetFactoryForHelpers.process(new FacetFactory.ProcessMethodContext(CustomerEx.class, null, collectionAccessorMethod, methodRemover, facetedMethod));
-
- final Facet facet = facetedMethod.getFacet(CollectionRemoveFromFacet.class);
- assertNotNull(facet);
- assertTrue(facet instanceof CollectionRemoveFromFacetViaMethod);
- final CollectionRemoveFromFacetViaMethod collectionRemoveFromFacetViaMethod = (CollectionRemoveFromFacetViaMethod) facet;
- assertEquals(removeFromMethod, collectionRemoveFromFacetViaMethod.getMethods().get(0));
-
- assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(removeFromMethod));
-
- final Facet facet1 = facetedMethod.getFacet(CollectionValidateRemoveFromFacet.class);
- assertNotNull(facet1);
- assertTrue(facet1 instanceof CollectionValidateRemoveFromFacetViaMethod);
- final CollectionValidateRemoveFromFacetViaMethod collectionValidateRemoveFromFacetViaMethod = (CollectionValidateRemoveFromFacetViaMethod) facet1;
- assertEquals(validateRemoveFromMethod, collectionValidateRemoveFromFacetViaMethod.getMethods().get(0));
-
- assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(validateRemoveFromMethod));
- }
-
static class Order {
}
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactoryTest.java
index ba5dbf0..c5f8b9c 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactoryTest.java
@@ -44,19 +44,10 @@ import org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacetInferredF
import org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacetInferredFromGenerics;
import org.apache.isis.core.metamodel.facets.all.hide.HiddenFacet;
import org.apache.isis.core.metamodel.facets.collections.collection.hidden.HiddenFacetForCollectionAnnotation;
-import org.apache.isis.core.metamodel.facets.collections.collection.modify.CollectionAddToFacetForDomainEventFromCollectionAnnotation;
-import org.apache.isis.core.metamodel.facets.collections.collection.modify.CollectionAddToFacetForDomainEventFromDefault;
import org.apache.isis.core.metamodel.facets.collections.collection.modify.CollectionDomainEventFacet;
import org.apache.isis.core.metamodel.facets.collections.collection.modify.CollectionDomainEventFacetDefault;
import org.apache.isis.core.metamodel.facets.collections.collection.modify.CollectionDomainEventFacetForCollectionAnnotation;
-import org.apache.isis.core.metamodel.facets.collections.collection.modify.CollectionRemoveFromFacetForDomainEventFromCollectionAnnotation;
-import org.apache.isis.core.metamodel.facets.collections.collection.modify.CollectionRemoveFromFacetForDomainEventFromDefault;
import org.apache.isis.core.metamodel.facets.collections.collection.typeof.TypeOfFacetOnCollectionFromCollectionAnnotation;
-import org.apache.isis.core.metamodel.facets.collections.modify.CollectionAddToFacet;
-import org.apache.isis.core.metamodel.facets.collections.modify.CollectionAddToFacetAbstract;
-import org.apache.isis.core.metamodel.facets.collections.modify.CollectionRemoveFromFacet;
-import org.apache.isis.core.metamodel.facets.collections.modify.CollectionRemoveFromFacetAbstract;
-import org.apache.isis.core.metamodel.facets.members.disabled.DisabledFacet;
import org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacetAbstract;
import org.apache.isis.core.metamodel.spec.ManagedObject;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -125,266 +116,6 @@ public class CollectionAnnotationFacetFactoryTest extends AbstractFacetFactoryJU
facetFactory = null;
}
- public static class Modify extends CollectionAnnotationFacetFactoryTest {
-
- private void addGetterFacet(final FacetHolder holder) {
- FacetUtil.addFacet(new PropertyOrCollectionAccessorFacetAbstract(mockOnType, holder) {
- @Override
- public Object getProperty(
- final ManagedObject inObject,
- final InteractionInitiatedBy interactionInitiatedBy) {
- return null;
- }
- });
- }
-
- private void addAddToFacet(final FacetHolder holder) {
- FacetUtil.addFacet(new CollectionAddToFacetAbstract(holder) {
- @Override
- public void add(
- final ManagedObject inObject,
- final ManagedObject value,
- final InteractionInitiatedBy interactionInitiatedBy) {
- }
- });
- }
-
- private void addRemoveFromFacet(final FacetHolder holder) {
- FacetUtil.addFacet(new CollectionRemoveFromFacetAbstract(holder) {
- @Override
- public void remove(
- final ManagedObject inObject,
- final ManagedObject element,
- final InteractionInitiatedBy interactionInitiatedBy) {
- }
- });
- }
-
- // @Test
- public void withDeprecatedPostsCollectionAddedToEvent_andGetterFacet_andSetterFacet() {
-
- class Order {
- }
- class Customer {
- class OrdersAddedToOrRemovedFromDomainEvent extends CollectionDomainEvent<Customer, Order> {
- }
-
- @Collection(domainEvent = OrdersAddedToOrRemovedFromDomainEvent.class)
- public List<Order> getOrders() {
- return null;
- }
-
- public void setOrders(final List<Order> orders) {
- }
- }
-
- // given
- final Class<?> cls = Customer.class;
- collectionMethod = findMethod(Customer.class, "getOrders");
-
- addGetterFacet(facetedMethod);
- addAddToFacet(facetedMethod);
- addRemoveFromFacet(facetedMethod);
-
- // expect
- allowingLoadSpecificationRequestsFor(cls, collectionMethod.getReturnType());
-
- // when
- final FacetFactory.ProcessMethodContext processMethodContext = new FacetFactory.ProcessMethodContext(cls,
- null, collectionMethod, mockMethodRemover, facetedMethod);
- processModify(facetFactory, processMethodContext);
-
- // then
- final Facet domainEventFacet = facetedMethod.getFacet(CollectionDomainEventFacet.class);
- Assert.assertNotNull(domainEventFacet);
- Assert.assertTrue(domainEventFacet instanceof CollectionDomainEventFacetDefault);
- final CollectionDomainEventFacetDefault domainEventFacetDefault = (CollectionDomainEventFacetDefault) domainEventFacet;
- assertThat(domainEventFacetDefault.getEventType(), IsisMatchers.classEqualTo(CollectionDomainEvent.Default.class)); // this
- // is
- // discarded
- // at
- // runtime,
- // see
- // PropertySetterFacetForPostsPropertyChangedEventAnnotation#verify(...)
-
- // then
- final Facet addToFacet = facetedMethod.getFacet(CollectionAddToFacet.class);
- Assert.assertNotNull(addToFacet);
- Assert.assertTrue(addToFacet instanceof CollectionAddToFacetForDomainEventFromCollectionAnnotation);
- final CollectionAddToFacetForDomainEventFromCollectionAnnotation addToFacetImpl = (CollectionAddToFacetForDomainEventFromCollectionAnnotation) addToFacet;
- assertThat(addToFacetImpl.value(), IsisMatchers.classEqualTo(Customer.OrdersAddedToOrRemovedFromDomainEvent.class));
-
- // then
- final Facet removeFromFacet = facetedMethod.getFacet(CollectionRemoveFromFacet.class);
- Assert.assertNotNull(removeFromFacet);
- Assert.assertTrue(removeFromFacet instanceof CollectionRemoveFromFacetForDomainEventFromCollectionAnnotation);
- final CollectionRemoveFromFacetForDomainEventFromCollectionAnnotation removeFromFacetImpl = (CollectionRemoveFromFacetForDomainEventFromCollectionAnnotation) removeFromFacet;
- assertThat(removeFromFacetImpl.value(), IsisMatchers.classEqualTo(Customer.OrdersAddedToOrRemovedFromDomainEvent.class));
- }
-
- // @Test
- public void withCollectionInteractionEvent() {
-
- class Order {
- }
- class Customer {
- class OrdersChangedDomainEvent extends CollectionDomainEvent<Customer, Order> {
- }
-
- @Collection(domainEvent = OrdersChangedDomainEvent.class)
- public List<Order> getOrders() {
- return null;
- }
-
- public void setOrders(final List<Order> orders) {
- }
- }
-
- // given
- final Class<?> cls = Customer.class;
- collectionMethod = findMethod(Customer.class, "getOrders");
-
- addGetterFacet(facetedMethod);
- addAddToFacet(facetedMethod);
- addRemoveFromFacet(facetedMethod);
-
- // expect
- allowingLoadSpecificationRequestsFor(cls, collectionMethod.getReturnType());
-
- // when
- final FacetFactory.ProcessMethodContext processMethodContext = new FacetFactory.ProcessMethodContext(cls,
- null, collectionMethod, mockMethodRemover, facetedMethod);
- processModify(facetFactory, processMethodContext);
-
- // then
- final Facet domainEventFacet = facetedMethod.getFacet(CollectionDomainEventFacet.class);
- Assert.assertNotNull(domainEventFacet);
- Assert.assertTrue(domainEventFacet instanceof CollectionDomainEventFacetForCollectionAnnotation);
- final CollectionDomainEventFacetForCollectionAnnotation domainEventFacetImpl = (CollectionDomainEventFacetForCollectionAnnotation) domainEventFacet;
- assertThat(domainEventFacetImpl.value(), IsisMatchers.classEqualTo(Customer.OrdersChangedDomainEvent.class));
-
- // then
- final Facet addToFacet = facetedMethod.getFacet(CollectionAddToFacet.class);
- Assert.assertNotNull(addToFacet);
- Assert.assertTrue(addToFacet instanceof CollectionAddToFacetForDomainEventFromCollectionAnnotation);
- final CollectionAddToFacetForDomainEventFromCollectionAnnotation addToFacetImpl = (CollectionAddToFacetForDomainEventFromCollectionAnnotation) addToFacet;
- assertThat(addToFacetImpl.value(), IsisMatchers.classEqualTo(Customer.OrdersChangedDomainEvent.class));
-
- // then
- final Facet removeFromFacet = facetedMethod.getFacet(CollectionRemoveFromFacet.class);
- Assert.assertNotNull(removeFromFacet);
- Assert.assertTrue(removeFromFacet instanceof CollectionRemoveFromFacetForDomainEventFromCollectionAnnotation);
- final CollectionRemoveFromFacetForDomainEventFromCollectionAnnotation removeFromFacetImpl = (CollectionRemoveFromFacetForDomainEventFromCollectionAnnotation) removeFromFacet;
- assertThat(removeFromFacetImpl.value(), IsisMatchers.classEqualTo(Customer.OrdersChangedDomainEvent.class));
- }
-
- // @Test
- public void withCollectionDomainEvent() {
-
- class Order {
- }
- class Customer {
- class OrdersChanged extends CollectionDomainEvent<Customer, Order> {
- }
- @Collection(domainEvent = OrdersChanged.class)
- public List<Order> getOrders() {
- return null;
- }
-
- public void setOrders(final List<Order> orders) {
- }
- }
-
- // given
- final Class<?> cls = Customer.class;
- collectionMethod = findMethod(Customer.class, "getOrders");
-
- addGetterFacet(facetedMethod);
- addAddToFacet(facetedMethod);
- addRemoveFromFacet(facetedMethod);
-
- // expect
- allowingLoadSpecificationRequestsFor(cls, collectionMethod.getReturnType());
-
- // when
- final FacetFactory.ProcessMethodContext processMethodContext = new FacetFactory.ProcessMethodContext(cls,
- null, collectionMethod, mockMethodRemover, facetedMethod);
- processModify(facetFactory, processMethodContext);
-
- // then
- final Facet domainEventFacet = facetedMethod.getFacet(CollectionDomainEventFacet.class);
- Assert.assertNotNull(domainEventFacet);
- Assert.assertTrue(domainEventFacet instanceof CollectionDomainEventFacetForCollectionAnnotation);
- final CollectionDomainEventFacetForCollectionAnnotation domainEventFacetImpl = (CollectionDomainEventFacetForCollectionAnnotation) domainEventFacet;
- assertThat(domainEventFacetImpl.value(), IsisMatchers.classEqualTo(Customer.OrdersChanged.class));
-
- // then
- final Facet addToFacet = facetedMethod.getFacet(CollectionAddToFacet.class);
- Assert.assertNotNull(addToFacet);
- Assert.assertTrue(addToFacet instanceof CollectionAddToFacetForDomainEventFromCollectionAnnotation);
- final CollectionAddToFacetForDomainEventFromCollectionAnnotation addToFacetImpl = (CollectionAddToFacetForDomainEventFromCollectionAnnotation) addToFacet;
- assertThat(addToFacetImpl.value(), IsisMatchers.classEqualTo(Customer.OrdersChanged.class));
-
- // then
- final Facet removeFromFacet = facetedMethod.getFacet(CollectionRemoveFromFacet.class);
- Assert.assertNotNull(removeFromFacet);
- Assert.assertTrue(removeFromFacet instanceof CollectionRemoveFromFacetForDomainEventFromCollectionAnnotation);
- final CollectionRemoveFromFacetForDomainEventFromCollectionAnnotation removeFromFacetImpl = (CollectionRemoveFromFacetForDomainEventFromCollectionAnnotation) removeFromFacet;
- assertThat(removeFromFacetImpl.value(), IsisMatchers.classEqualTo(Customer.OrdersChanged.class));
- }
-
- // @Test
- public void withDefaultEvent() {
-
- class Order {
- }
- class Customer {
- public List<Order> getOrders() {
- return null;
- }
-
- public void setOrders(final List<Order> orders) {
- }
- }
-
- // given
- final Class<?> cls = Customer.class;
- collectionMethod = findMethod(Customer.class, "getOrders");
-
- addGetterFacet(facetedMethod);
- addAddToFacet(facetedMethod);
- addRemoveFromFacet(facetedMethod);
-
- // expect
- allowingLoadSpecificationRequestsFor(cls, collectionMethod.getReturnType());
-
- // when
- final FacetFactory.ProcessMethodContext processMethodContext = new FacetFactory.ProcessMethodContext(cls,
- null, collectionMethod, mockMethodRemover, facetedMethod);
- processModify(facetFactory, processMethodContext);
-
- // then
- final Facet domainEventFacet = facetedMethod.getFacet(CollectionDomainEventFacet.class);
- Assert.assertNotNull(domainEventFacet);
- Assert.assertTrue(domainEventFacet instanceof CollectionDomainEventFacetDefault);
- final CollectionDomainEventFacetDefault domainEventFacetImpl = (CollectionDomainEventFacetDefault) domainEventFacet;
- assertThat(domainEventFacetImpl.value(), IsisMatchers.classEqualTo(CollectionDomainEvent.Default.class));
-
- // then
- final Facet addToFacet = facetedMethod.getFacet(CollectionAddToFacet.class);
- Assert.assertNotNull(addToFacet);
- Assert.assertTrue(addToFacet instanceof CollectionAddToFacetForDomainEventFromDefault);
- final CollectionAddToFacetForDomainEventFromDefault addToFacetImpl = (CollectionAddToFacetForDomainEventFromDefault) addToFacet;
- assertThat(addToFacetImpl.value(), IsisMatchers.classEqualTo(CollectionDomainEvent.Default.class));
-
- // then
- final Facet removeFromFacet = facetedMethod.getFacet(CollectionRemoveFromFacet.class);
- Assert.assertNotNull(removeFromFacet);
- Assert.assertTrue(removeFromFacet instanceof CollectionRemoveFromFacetForDomainEventFromDefault);
- final CollectionRemoveFromFacetForDomainEventFromDefault removeFromFacetImpl = (CollectionRemoveFromFacetForDomainEventFromDefault) removeFromFacet;
- assertThat(removeFromFacetImpl.value(), IsisMatchers.classEqualTo(CollectionDomainEvent.Default.class));
- }
- }
public static class Hidden extends CollectionAnnotationFacetFactoryTest {
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/objects/OneToManyAssociationDefaultTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/objects/OneToManyAssociationDefaultTest.java
index bf0b088..d631635 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/objects/OneToManyAssociationDefaultTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/objects/OneToManyAssociationDefaultTest.java
@@ -38,7 +38,6 @@ import org.apache.isis.core.metamodel._testing.MetaModelContext_forTesting;
import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.isis.core.metamodel.facets.FacetedMethod;
import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
-import org.apache.isis.core.metamodel.facets.collections.modify.CollectionAddToFacet;
import org.apache.isis.core.metamodel.spec.ManagedObject;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
@@ -61,15 +60,14 @@ public class OneToManyAssociationDefaultTest {
@Rule
public JUnitRuleMockery2 context = JUnitRuleMockery2.createFor(Mode.INTERFACES_AND_CLASSES);
- @Mock private ManagedObject mockOwnerAdapter;
- @Mock private ManagedObject mockAssociatedAdapter;
- @Mock private AuthenticationContext mockAuthenticationContext;
- @Mock private SpecificationLoader mockSpecificationLoader;
- @Mock private ObjectSpecification mockOwnerAdapterSpec;
- @Mock private MessageService mockMessageService;
- @Mock private FacetedMethod mockPeer;
- @Mock private NamedFacet mockNamedFacet;
- @Mock private CollectionAddToFacet mockCollectionAddToFacet;
+ @Mock ManagedObject mockOwnerAdapter;
+ @Mock ManagedObject mockAssociatedAdapter;
+ @Mock AuthenticationContext mockAuthenticationContext;
+ @Mock SpecificationLoader mockSpecificationLoader;
+ @Mock ObjectSpecification mockOwnerAdapterSpec;
+ @Mock MessageService mockMessageService;
+ @Mock FacetedMethod mockPeer;
+ @Mock NamedFacet mockNamedFacet;
private OneToManyAssociation association;
private MetaModelContext_forTesting metaModelContext;
@@ -83,23 +81,23 @@ public class OneToManyAssociationDefaultTest {
.singleton(mockMessageService)
.build();
- allowingPeerToReturnCollectionType();
+// allowingPeerToReturnCollectionType();
allowingPeerToReturnIdentifier();
- allowingSpecLoaderToReturnSpecs();
+// allowingSpecLoaderToReturnSpecs();
association = new OneToManyAssociationDefault(mockPeer);
}
- private void allowingSpecLoaderToReturnSpecs() {
- context.checking(new Expectations() {
- {
- allowing(mockSpecificationLoader).loadSpecification(Order.class);
-
- allowing(mockPeer).getMetaModelContext();
- will(returnValue(metaModelContext));
-
- }
- });
- }
+// private void allowingSpecLoaderToReturnSpecs() {
+// context.checking(new Expectations() {
+// {
+// allowing(mockSpecificationLoader).loadSpecification(Order.class);
+//
+// allowing(mockPeer).getMetaModelContext();
+// will(returnValue(metaModelContext));
+//
+// }
+// });
+// }
@Test
public void id() {
@@ -112,61 +110,14 @@ public class OneToManyAssociationDefaultTest {
assertThat(association.getName(), is(equalTo("My name")));
}
- @Test
- public void delegatesToUnderlying() {
- final ObjectSpecification spec = association.getSpecification();
- assertNotNull(spec); // looks like an incomplete testcase
- }
-
- @Test
- public void canAddPersistable() {
- context.checking(new Expectations() {
- {
-// oneOf(mockPeer).containsFacet(NotPersistedFacet.class);
-// will(returnValue(false));
-
- oneOf(mockOwnerAdapter).getSpecification();
- will(returnValue(mockOwnerAdapterSpec));
-
- oneOf(mockOwnerAdapterSpec).isParented();
- will(returnValue(false));
-
- oneOf(mockOwnerAdapterSpec).isEntity();
- will(returnValue(false));
-
- oneOf(mockOwnerAdapterSpec).isIdentifiable();
- will(returnValue(true));
-
- oneOf(mockAssociatedAdapter).getSpecification();
- will(returnValue(mockOwnerAdapterSpec));
-
- oneOf(mockPeer).getFacet(CollectionAddToFacet.class);
- will(returnValue(mockCollectionAddToFacet));
-
- oneOf(mockCollectionAddToFacet).add(mockOwnerAdapter, mockAssociatedAdapter, InteractionInitiatedBy.USER);
- }
- });
- association.addElement(mockOwnerAdapter, mockAssociatedAdapter, InteractionInitiatedBy.USER);
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void cannotRemoveNull() {
- association.removeElement(mockOwnerAdapter, null, InteractionInitiatedBy.USER);
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void cannotAddNull() {
- association.addElement(mockOwnerAdapter, null, InteractionInitiatedBy.USER);
- }
-
- private void allowingPeerToReturnCollectionType() {
- context.checking(new Expectations() {
- {
- allowing(mockPeer).getType();
- will(returnValue(COLLECTION_TYPE));
- }
- });
- }
+// private void allowingPeerToReturnCollectionType() {
+// context.checking(new Expectations() {
+// {
+// allowing(mockPeer).getType();
+// will(returnValue(COLLECTION_TYPE));
+// }
+// });
+// }
private void allowingPeerToReturnIdentifier() {
context.checking(new Expectations() {
diff --git a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/wrapper/handlers/DomainObjectInvocationHandler.java b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/wrapper/handlers/DomainObjectInvocationHandler.java
index bd1ca0b..523627d 100644
--- a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/wrapper/handlers/DomainObjectInvocationHandler.java
+++ b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/wrapper/handlers/DomainObjectInvocationHandler.java
@@ -69,7 +69,7 @@ import lombok.val;
import lombok.extern.log4j.Log4j2;
@Log4j2
-public class DomainObjectInvocationHandler<T>
+public class DomainObjectInvocationHandler<T>
extends DelegatingInvocationHandlerDefault<T> {
private final ProxyContextHandler proxyContextHandler;
@@ -95,7 +95,7 @@ extends DelegatingInvocationHandlerDefault<T> {
*/
protected Method __isis_executionModes;
- private EntityFacet entityFacet;
+ private EntityFacet entityFacet;
public DomainObjectInvocationHandler(
final T domainObject,
@@ -116,7 +116,7 @@ extends DelegatingInvocationHandlerDefault<T> {
__isis_saveMethod = WrappingObject.class.getMethod("__isis_save", _Constants.emptyClasses);
__isis_wrappedMethod = WrappingObject.class.getMethod("__isis_wrapped", _Constants.emptyClasses);
__isis_executionModes = WrappingObject.class.getMethod("__isis_executionModes", _Constants.emptyClasses);
-
+
} catch (final NoSuchMethodException nsme) {
throw new IllegalStateException(
@@ -208,12 +208,6 @@ extends DelegatingInvocationHandlerDefault<T> {
if (intent == Intent.ACCESSOR) {
return handleGetterMethodOnCollection(targetAdapter, args, otma, memberName);
}
- if (intent == Intent.MODIFY_COLLECTION_ADD) {
- return handleCollectionAddToMethod(targetAdapter, args, otma);
- }
- if (intent == Intent.MODIFY_COLLECTION_REMOVE) {
- return handleCollectionRemoveFromMethod(targetAdapter, args, otma);
- }
}
if (objectMember instanceof ObjectAction) {
@@ -264,7 +258,7 @@ extends DelegatingInvocationHandlerDefault<T> {
private static ObjectMember determineMixinMember(
final ManagedObject domainObjectAdapter,
final ObjectAction objectAction) {
-
+
if(domainObjectAdapter == null) {
return null;
}
@@ -290,7 +284,7 @@ extends DelegatingInvocationHandlerDefault<T> {
}
private boolean isEnhancedEntityMethod(final Method method) {
- return entityFacet!=null
+ return entityFacet!=null
? entityFacet.isProxyEnhancement(method)
: false;
}
@@ -323,17 +317,17 @@ extends DelegatingInvocationHandlerDefault<T> {
targetNoSpec.isValidResult(targetAdapter, getInteractionInitiatedBy());
notifyListenersAndVetoIfRequired(interactionResult);
});
-
-
+
+
val spec = targetAdapter.getSpecification();
if(spec.isEntity()) {
return runExecutionTask(()->{
EntityUtil.persistInCurrentTransaction(targetAdapter);
return null;
- });
+ });
}
return null;
-
+
}
// /////////////////////////////////////////////////////////////////
@@ -352,9 +346,9 @@ extends DelegatingInvocationHandlerDefault<T> {
});
resolveIfRequired(targetAdapter);
-
+
return runExecutionTask(()->{
-
+
val interactionInitiatedBy = getInteractionInitiatedBy();
val currentReferencedAdapter = property.get(targetAdapter, interactionInitiatedBy);
@@ -364,9 +358,9 @@ extends DelegatingInvocationHandlerDefault<T> {
getDelegate(), property.getIdentifier(), currentReferencedObj);
notifyListeners(propertyAccessEvent);
return currentReferencedObj;
-
+
});
-
+
}
@@ -377,19 +371,19 @@ extends DelegatingInvocationHandlerDefault<T> {
private Object handleSetterMethodOnProperty(
- final ManagedObject targetAdapter,
+ final ManagedObject targetAdapter,
final Object[] args,
final OneToOneAssociation property) {
-
+
val singleArg = singleArgUnderlyingElseNull(args, "setter");
-
+
runValidationTask(()->{
checkVisibility(targetAdapter, property);
checkUsability(targetAdapter, property);
});
-
+
val argumentAdapter = getObjectManager().adapt(singleArg);
-
+
resolveIfRequired(targetAdapter);
runValidationTask(()->{
@@ -398,12 +392,12 @@ extends DelegatingInvocationHandlerDefault<T> {
.getInteractionResult();
notifyListenersAndVetoIfRequired(interactionResult);
});
-
+
return runExecutionTask(()->{
property.set(targetAdapter, argumentAdapter, getInteractionInitiatedBy());
return null;
});
-
+
}
@@ -424,9 +418,9 @@ extends DelegatingInvocationHandlerDefault<T> {
});
resolveIfRequired(targetAdapter);
-
+
return runExecutionTask(()->{
-
+
val interactionInitiatedBy = getInteractionInitiatedBy();
val currentReferencedAdapter = collection.get(targetAdapter, interactionInitiatedBy);
@@ -445,12 +439,12 @@ extends DelegatingInvocationHandlerDefault<T> {
notifyListeners(collectionAccessEvent);
return mapViewObject;
}
-
- val msg = String.format("Collection type '%s' not supported by framework", currentReferencedObj.getClass().getName());
+
+ val msg = String.format("Collection type '%s' not supported by framework", currentReferencedObj.getClass().getName());
throw new IllegalArgumentException(msg);
-
+
});
-
+
}
private Collection<?> lookupWrappingObject(
@@ -479,81 +473,13 @@ extends DelegatingInvocationHandlerDefault<T> {
return proxyContextHandler.proxy(mapToLookup, memberName, this, otma);
}
- // /////////////////////////////////////////////////////////////////
- // collection - add to
- // /////////////////////////////////////////////////////////////////
-
- private Object handleCollectionAddToMethod(
- final ManagedObject targetAdapter,
- final Object[] args,
- final OneToManyAssociation otma) {
-
- val singleArg = singleArgUnderlyingElseThrow(args, "addTo");
-
- runValidationTask(()->{
- checkVisibility(targetAdapter, otma);
- checkUsability(targetAdapter, otma);
- });
-
- resolveIfRequired(targetAdapter);
- val argumentAdapter = getObjectManager().adapt(singleArg);
-
- runValidationTask(()->{
- val interactionResult = otma.isValidToAdd(targetAdapter, argumentAdapter,
- getInteractionInitiatedBy()).getInteractionResult();
- notifyListenersAndVetoIfRequired(interactionResult);
- });
-
- return runExecutionTask(()->{
- otma.addElement(targetAdapter, argumentAdapter, getInteractionInitiatedBy());
- return null;
- });
-
- }
-
-
-
- // /////////////////////////////////////////////////////////////////
- // collection - remove from
- // /////////////////////////////////////////////////////////////////
-
-
-
- private Object handleCollectionRemoveFromMethod(
- final ManagedObject targetAdapter,
- final Object[] args,
- final OneToManyAssociation collection) {
-
- val singleArg = singleArgUnderlyingElseThrow(args, "removeFrom");
-
- runValidationTask(()->{
- checkVisibility(targetAdapter, collection);
- checkUsability(targetAdapter, collection);
- });
-
- resolveIfRequired(targetAdapter);
- val argumentAdapter = getObjectManager().adapt(singleArg);
-
- runValidationTask(()->{
- val interactionResult = collection.isValidToRemove(targetAdapter, argumentAdapter,
- getInteractionInitiatedBy()).getInteractionResult();
- notifyListenersAndVetoIfRequired(interactionResult);
- });
-
- return runExecutionTask(()->{
- collection.removeElement(targetAdapter, argumentAdapter, getInteractionInitiatedBy());
- return null;
- });
-
-
- }
// /////////////////////////////////////////////////////////////////
// action
// /////////////////////////////////////////////////////////////////
private Object handleActionMethod(
- final ManagedObject targetAdapter,
+ final ManagedObject targetAdapter,
final Object[] args,
final ObjectAction objectAction) {
@@ -565,24 +491,24 @@ extends DelegatingInvocationHandlerDefault<T> {
checkUsability(targetAdapter, objectAction);
checkValidity(head, objectAction, argAdapters);
});
-
+
return runExecutionTask(()->{
val interactionInitiatedBy = getInteractionInitiatedBy();
-
+
val returnedAdapter = objectAction.execute(
head, argAdapters,
interactionInitiatedBy);
return UnwrapUtil.single(returnedAdapter);
-
+
});
-
+
}
private void checkValidity(
- final ActionInteractionHead head,
- final ObjectAction objectAction,
+ final ActionInteractionHead head,
+ final ObjectAction objectAction,
final Can<ManagedObject> argAdapters) {
-
+
val interactionResult = objectAction
.isArgumentSetValid(head, argAdapters,getInteractionInitiatedBy())
.getInteractionResult();
@@ -593,7 +519,7 @@ extends DelegatingInvocationHandlerDefault<T> {
val argAdapters = _NullSafe.stream(args)
.map(getObjectManager()::adapt)
.collect(Can.toCan());
-
+
return argAdapters;
}
@@ -619,7 +545,7 @@ extends DelegatingInvocationHandlerDefault<T> {
private void checkVisibility(
final ManagedObject targetObjectAdapter,
final ObjectMember objectMember) {
-
+
val visibleConsent = objectMember.isVisible(targetObjectAdapter, getInteractionInitiatedBy(), where);
val interactionResult = visibleConsent.getInteractionResult();
notifyListenersAndVetoIfRequired(interactionResult);
@@ -628,10 +554,10 @@ extends DelegatingInvocationHandlerDefault<T> {
private void checkUsability(
final ManagedObject targetObjectAdapter,
final ObjectMember objectMember) {
-
+
val interactionResult = objectMember.isUsable(
targetObjectAdapter,
- getInteractionInitiatedBy(),
+ getInteractionInitiatedBy(),
where)
.getInteractionResult();
notifyListenersAndVetoIfRequired(interactionResult);
@@ -672,15 +598,15 @@ extends DelegatingInvocationHandlerDefault<T> {
}
// -- HELPER
-
+
private boolean shouldEnforceRules() {
return !getSyncControl().getExecutionModes().contains(ExecutionMode.SKIP_RULE_VALIDATION);
}
-
+
private boolean shouldExecute() {
return !getSyncControl().getExecutionModes().contains(ExecutionMode.SKIP_EXECUTION);
}
-
+
private void runValidationTask(Runnable task) {
if(!shouldEnforceRules()) {
return;
@@ -707,11 +633,11 @@ extends DelegatingInvocationHandlerDefault<T> {
private Object handleException(Exception ex) {
val exceptionHandler = getSyncControl().getExceptionHandler()
.orElse(null);
-
+
if(exceptionHandler==null) {
log.warn("No ExceptionHandler was setup to handle this Exception", ex);
}
-
+
return exceptionHandler!=null
? exceptionHandler.handle(ex)
: null;
@@ -729,7 +655,7 @@ extends DelegatingInvocationHandlerDefault<T> {
}
return argumentObj;
}
-
+
private Object singleArgUnderlyingElseNull(Object[] args, String name) {
if (args.length != 1) {
throw new IllegalArgumentException(String.format(
@@ -738,14 +664,14 @@ extends DelegatingInvocationHandlerDefault<T> {
val argumentObj = underlying(args[0]);
return argumentObj;
}
-
+
private void zeroArgsElseThrow(Object[] args, String name) {
if (args.length != 0) {
throw new IllegalArgumentException(String.format(
"Invoking '%s' should have no arguments", name));
}
}
-
+
// -- DEPENDENCIES
private ObjectManager getObjectManager() {
diff --git a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/MemberType.java b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/MemberType.java
index 36b1654..42207b7 100644
--- a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/MemberType.java
+++ b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/MemberType.java
@@ -18,14 +18,13 @@
*/
package org.apache.isis.viewer.restfulobjects.rendering.domainobjects;
+import java.util.Collections;
import java.util.Map;
import org.apache.isis.applib.util.Enums;
import org.apache.isis.commons.internal.collections._Maps;
import org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacet;
import org.apache.isis.core.metamodel.facets.actions.validate.ActionValidationFacet;
-import org.apache.isis.core.metamodel.facets.collections.modify.CollectionAddToFacet;
-import org.apache.isis.core.metamodel.facets.collections.modify.CollectionRemoveFromFacet;
import org.apache.isis.core.metamodel.facets.collections.validate.CollectionValidateAddToFacet;
import org.apache.isis.core.metamodel.facets.collections.validate.CollectionValidateRemoveFromFacet;
import org.apache.isis.core.metamodel.facets.properties.update.clear.PropertyClearFacet;
@@ -57,9 +56,8 @@ public enum MemberType {
* {@link CollectionSemantics#getAddToKey()}
*/
COLLECTION("collections/", RepresentationType.OBJECT_COLLECTION,
- _Maps.unmodifiable(
- "addToSet", MutatorSpec.of(Rel.ADD_TO, CollectionValidateAddToFacet.class, CollectionAddToFacet.class, RestfulHttpMethod.PUT, BodyArgs.ONE),
- "addToList", MutatorSpec.of(Rel.ADD_TO, CollectionValidateAddToFacet.class, CollectionAddToFacet.class, RestfulHttpMethod.POST, BodyArgs.ONE), "removeFrom", MutatorSpec.of(Rel.REMOVE_FROM, CollectionValidateRemoveFromFacet.class, CollectionRemoveFromFacet.class, RestfulHttpMethod.DELETE, BodyArgs.ONE))) {
+ Collections.emptyMap()
+ ) {
@Override
public ObjectSpecification specFor(final ObjectMember objectMember) {
return objectMember.getSpecification();
@@ -67,7 +65,6 @@ public enum MemberType {
},
/**
* {@link #getMutators()} are keyed by
- * {@link ActionSemantics#getInvokeKey()}
*/
ACTION("actions/", RepresentationType.OBJECT_ACTION,
_Maps.unmodifiable(
diff --git a/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/DomainObjectResourceServerside.java b/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/DomainObjectResourceServerside.java
index 5eec342..5b8bdea 100644
--- a/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/DomainObjectResourceServerside.java
+++ b/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/DomainObjectResourceServerside.java
@@ -119,7 +119,7 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
throw RestfulObjectsApplicationException.createWithMessage(HttpStatusCode.BAD_REQUEST, "Could not determine type of domain object to persist (no class with domainType Id of '%s')", domainType);
}
- final ManagedObject adapter = domainTypeSpec.createObject();
+ final ManagedObject adapter = domainTypeSpec.createObject();
final ObjectAdapterUpdateHelper updateHelper = new ObjectAdapterUpdateHelper(resourceContext, adapter);
@@ -138,7 +138,7 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
}
EntityUtil.persistInCurrentTransaction(adapter);
-
+
val domainResourceHelper = DomainResourceHelper.ofObjectResource(resourceContext, adapter);
return domainResourceHelper.objectRepresentation();
@@ -158,7 +158,7 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
MediaType.APPLICATION_XML, RestfulMediaType.APPLICATION_XML_OBJECT, RestfulMediaType.APPLICATION_XML_ERROR
})
public Response object(@PathParam("domainType") String domainType, @PathParam("instanceId") final String instanceId) {
-
+
val resourceContext = createResourceContext(
RepresentationType.DOMAIN_OBJECT, Where.OBJECT_FORMS, RepresentationService.Intent.ALREADY_PERSISTENT);
@@ -201,7 +201,7 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
}
val domainResourceHelper = DomainResourceHelper.ofObjectResource(resourceContext, objectAdapter);
-
+
return domainResourceHelper.objectRepresentation();
}
@@ -329,14 +329,14 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
.map(grid->{
addLinks(resourceContext, domainType, instanceId, grid);
-
+
return Response.status(Response.Status.OK)
.entity(serializationStrategy.entity(grid))
.type(serializationStrategy.type(RepresentationType.OBJECT_LAYOUT));
})
.orElseGet(Responses::ofNotFound)
.build();
-
+
}
private Optional<Grid> layoutAsGrid(
@@ -345,10 +345,10 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
val objectSpec = getSpecificationLoader().lookupBySpecIdElseLoad(ObjectSpecId.of(domainType));
val gridFacet = objectSpec.getFacet(GridFacet.class);
-
+
if(gridFacet == null) {
return Optional.empty();
- }
+ }
val objectAdapter = getObjectAdapterElseThrowNotFound(domainType, instanceId);
val grid = gridFacet.getGrid(objectAdapter);
return Optional.of(grid);
@@ -425,7 +425,7 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
MediaType.APPLICATION_XML, RestfulMediaType.APPLICATION_XML_OBJECT_PROPERTY, RestfulMediaType.APPLICATION_XML_ERROR
})
public Response propertyDetails(@PathParam("domainType") String domainType, @PathParam("instanceId") final String instanceId, @PathParam("propertyId") final String propertyId) {
-
+
val resourceContext = createResourceContext(
RepresentationType.OBJECT_PROPERTY, Where.OBJECT_FORMS, RepresentationService.Intent.NOT_APPLICABLE);
@@ -447,19 +447,19 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
MediaType.APPLICATION_XML, RestfulMediaType.APPLICATION_XML_OBJECT_PROPERTY, RestfulMediaType.APPLICATION_XML_ERROR
})
public Response modifyProperty(@PathParam("domainType") String domainType, @PathParam("instanceId") final String instanceId, @PathParam("propertyId") final String propertyId, final InputStream body) {
-
+
val resourceContext = createResourceContext(
ResourceDescriptor.generic(Where.OBJECT_FORMS, RepresentationService.Intent.NOT_APPLICABLE));
val objectAdapter = getObjectAdapterElseThrowNotFound(domainType, instanceId);
-
+
PropertyInteraction.start(objectAdapter, propertyId, resourceContext.getWhere())
.checkVisibility()
.checkUsability(AccessIntent.MUTATE)
.modifyProperty(property->{
val proposedNewValue = new JsonParserHelper(resourceContext, property.getSpecification())
.parseAsMapWithSingleValue(Util.asStringUtf8(body));
-
+
return proposedNewValue;
})
.validateElseThrow(InteractionFailureHandler::onFailure);
@@ -477,12 +477,12 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
MediaType.APPLICATION_XML, RestfulMediaType.APPLICATION_XML_OBJECT_PROPERTY, RestfulMediaType.APPLICATION_XML_ERROR
})
public Response clearProperty(@PathParam("domainType") String domainType, @PathParam("instanceId") final String instanceId, @PathParam("propertyId") final String propertyId) {
-
+
val resourceContext = createResourceContext(
ResourceDescriptor.generic(Where.OBJECT_FORMS, RepresentationService.Intent.NOT_APPLICABLE));
val objectAdapter = getObjectAdapterElseThrowNotFound(domainType, instanceId);
-
+
PropertyInteraction.start(objectAdapter, propertyId, resourceContext.getWhere())
.checkVisibility()
.checkUsability(AccessIntent.MUTATE)
@@ -513,14 +513,14 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
MediaType.APPLICATION_XML, RestfulMediaType.APPLICATION_XML_OBJECT_COLLECTION, RestfulMediaType.APPLICATION_XML_ERROR
})
public Response accessCollection(@PathParam("domainType") String domainType, @PathParam("instanceId") final String instanceId, @PathParam("collectionId") final String collectionId) {
-
+
val resourceContext = createResourceContext(
RepresentationType.OBJECT_COLLECTION, Where.PARENTED_TABLES, RepresentationService.Intent.NOT_APPLICABLE);
val objectAdapter = getObjectAdapterElseThrowNotFound(domainType, instanceId);
val domainResourceHelper = DomainResourceHelper.ofObjectResource(resourceContext, objectAdapter);
-
+
return domainResourceHelper.collectionDetails(collectionId, ManagedMember.RepresentationMode.READ);
}
@@ -533,35 +533,8 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
MediaType.APPLICATION_XML, RestfulMediaType.APPLICATION_XML_OBJECT_COLLECTION, RestfulMediaType.APPLICATION_XML_ERROR
})
public Response addToSet(@PathParam("domainType") String domainType, @PathParam("instanceId") final String instanceId, @PathParam("collectionId") final String collectionId, final InputStream body) {
-
- val resourceContext = createResourceContext(
- ResourceDescriptor.generic(Where.PARENTED_TABLES, RepresentationService.Intent.NOT_APPLICABLE));
-
- val objectAdapter = getObjectAdapterElseThrowNotFound(domainType, instanceId);
- val domainResourceHelper = DomainResourceHelper.ofObjectResource(resourceContext, objectAdapter);
- final ObjectAdapterAccessHelper accessHelper = ObjectAdapterAccessHelper.of(resourceContext, objectAdapter);
-
- val collection = accessHelper.getCollectionThatIsVisibleForIntent(
- collectionId, AccessIntent.MUTATE)
- .getCollection();
-
- if (!collection.getCollectionSemantics().isAnySet()) {
- throw RestfulObjectsApplicationException.createWithMessage(HttpStatusCode.BAD_REQUEST, "Collection '%s' does not have set semantics", collectionId);
- }
-
- final ObjectSpecification collectionSpec = collection.getSpecification();
- final String bodyAsString = Util.asStringUtf8(body);
- final ManagedObject argAdapter = new JsonParserHelper(resourceContext, collectionSpec)
- .parseAsMapWithSingleValue(bodyAsString);
-
- final Consent consent = collection.isValidToAdd(objectAdapter, argAdapter, InteractionInitiatedBy.USER);
- if (consent.isVetoed()) {
- throw RestfulObjectsApplicationException.createWithMessage(HttpStatusCode.UNAUTHORIZED, consent.getReason());
- }
-
- collection.addElement(objectAdapter, argAdapter, InteractionInitiatedBy.USER);
- return domainResourceHelper.collectionDetails(collectionId, ManagedMember.RepresentationMode.WRITE);
+ throw RestfulObjectsApplicationException.createWithMessage(HttpStatusCode.METHOD_NOT_ALLOWED, "The framework no longer supports mutable collections.");
}
@Override
@@ -573,35 +546,8 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
MediaType.APPLICATION_XML, RestfulMediaType.APPLICATION_XML_OBJECT_COLLECTION, RestfulMediaType.APPLICATION_XML_ERROR
})
public Response addToList(@PathParam("domainType") String domainType, @PathParam("instanceId") final String instanceId, @PathParam("collectionId") final String collectionId, final InputStream body) {
-
- val resourceContext = createResourceContext(
- ResourceDescriptor.generic(Where.PARENTED_TABLES, RepresentationService.Intent.NOT_APPLICABLE));
-
- val objectAdapter = getObjectAdapterElseThrowNotFound(domainType, instanceId);
- val domainResourceHelper = DomainResourceHelper.ofObjectResource(resourceContext, objectAdapter);
- final ObjectAdapterAccessHelper accessHelper = ObjectAdapterAccessHelper.of(resourceContext, objectAdapter);
-
- val collection = accessHelper.getCollectionThatIsVisibleForIntent(
- collectionId, AccessIntent.MUTATE)
- .getCollection();
-
- if (!collection.getCollectionSemantics().isListOrArray()) {
- throw RestfulObjectsApplicationException.createWithMessage(HttpStatusCode.METHOD_NOT_ALLOWED, "Collection '%s' does not have list or array semantics", collectionId);
- }
-
- final ObjectSpecification collectionSpec = collection.getSpecification();
- final String bodyAsString = Util.asStringUtf8(body);
- final ManagedObject argAdapter = new JsonParserHelper(resourceContext, collectionSpec).parseAsMapWithSingleValue(
- bodyAsString);
-
- final Consent consent = collection.isValidToAdd(objectAdapter, argAdapter, InteractionInitiatedBy.USER);
- if (consent.isVetoed()) {
- throw RestfulObjectsApplicationException.createWithMessage(HttpStatusCode.UNAUTHORIZED, consent.getReason());
- }
- collection.addElement(objectAdapter, argAdapter, InteractionInitiatedBy.USER);
-
- return domainResourceHelper.collectionDetails(collectionId, ManagedMember.RepresentationMode.WRITE);
+ throw RestfulObjectsApplicationException.createWithMessage(HttpStatusCode.METHOD_NOT_ALLOWED, "The framework no longer supports mutable collections.");
}
@Override
@@ -613,30 +559,8 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
MediaType.APPLICATION_XML, RestfulMediaType.APPLICATION_XML_OBJECT_COLLECTION, RestfulMediaType.APPLICATION_XML_ERROR
})
public Response removeFromCollection(@PathParam("domainType") String domainType, @PathParam("instanceId") final String instanceId, @PathParam("collectionId") final String collectionId) {
-
- val resourceContext = createResourceContext(
- ResourceDescriptor.generic(Where.PARENTED_TABLES, RepresentationService.Intent.NOT_APPLICABLE));
-
- val objectAdapter = getObjectAdapterElseThrowNotFound(domainType, instanceId);
- val domainResourceHelper = DomainResourceHelper.ofObjectResource(resourceContext, objectAdapter);
- final ObjectAdapterAccessHelper accessHelper = ObjectAdapterAccessHelper.of(resourceContext, objectAdapter);
-
- val collection = accessHelper.getCollectionThatIsVisibleForIntent(
- collectionId, AccessIntent.MUTATE)
- .getCollection();
- final ObjectSpecification collectionSpec = collection.getSpecification();
- final ManagedObject argAdapter = new JsonParserHelper(resourceContext, collectionSpec)
- .parseAsMapWithSingleValue(resourceContext.getUrlUnencodedQueryString());
-
- final Consent consent = collection.isValidToRemove(objectAdapter, argAdapter, InteractionInitiatedBy.USER);
- if (consent.isVetoed()) {
- throw RestfulObjectsApplicationException.createWithMessage(HttpStatusCode.UNAUTHORIZED, consent.getReason());
- }
-
- collection.removeElement(objectAdapter, argAdapter, InteractionInitiatedBy.USER);
-
- return domainResourceHelper.collectionDetails(collectionId, ManagedMember.RepresentationMode.WRITE);
+ throw RestfulObjectsApplicationException.createWithMessage(HttpStatusCode.METHOD_NOT_ALLOWED, "The framework no longer supports mutable collections.");
}
// //////////////////////////////////////////////////////////
@@ -652,7 +576,7 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
MediaType.APPLICATION_XML, RestfulMediaType.APPLICATION_XML_OBJECT_ACTION, RestfulMediaType.APPLICATION_XML_ERROR
})
public Response actionPrompt(@PathParam("domainType") String domainType, @PathParam("instanceId") final String instanceId, @PathParam("actionId") final String actionId) {
-
+
val resourceContext = createResourceContext(
RepresentationType.OBJECT_ACTION, Where.OBJECT_FORMS, RepresentationService.Intent.NOT_APPLICABLE);
@@ -754,7 +678,7 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
@PathParam("instanceId") final String instanceId,
@PathParam("actionId") final String actionId,
final InputStream body) {
-
+
val resourceContext = createResourceContext(
ResourceDescriptor.of(RepresentationType.ACTION_RESULT, Where.STANDALONE_TABLES, RepresentationService.Intent.NOT_APPLICABLE),
body);