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 2014/07/11 12:57:06 UTC
[54/61] ISIS-831: property and collection interactions stuff more or
less there...
http://git-wip-us.apache.org/repos/asf/isis/blob/d9b90204/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/InteractionWithPropertyFacetClearPostsPropertyChangedEventAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/InteractionWithPropertyFacetClearPostsPropertyChangedEventAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/InteractionWithPropertyFacetClearPostsPropertyChangedEventAnnotation.java
deleted file mode 100644
index eb75bf2..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/InteractionWithPropertyFacetClearPostsPropertyChangedEventAnnotation.java
+++ /dev/null
@@ -1,40 +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.properties.interaction;
-
-import org.apache.isis.applib.services.eventbus.PropertyInteractionEvent;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
-import org.apache.isis.core.metamodel.facets.properties.update.clear.PropertyClearFacet;
-import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
-
-public class InteractionWithPropertyFacetClearPostsPropertyChangedEventAnnotation
- extends InteractionWithPropertyClearFacetAbstract {
-
-
- public InteractionWithPropertyFacetClearPostsPropertyChangedEventAnnotation(
- final Class<? extends PropertyInteractionEvent<?, ?>> eventType,
- final PropertyOrCollectionAccessorFacet getterFacet,
- final PropertyClearFacet clearFacet,
- final ServicesInjector servicesInjector,
- final FacetHolder holder) {
- super(eventType, getterFacet, clearFacet, servicesInjector, holder);
- }
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/d9b90204/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/InteractionWithPropertyFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/InteractionWithPropertyFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/InteractionWithPropertyFacetFactory.java
deleted file mode 100644
index a3cd70a..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/InteractionWithPropertyFacetFactory.java
+++ /dev/null
@@ -1,134 +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.properties.interaction;
-
-import java.lang.reflect.Method;
-import java.util.Comparator;
-import java.util.List;
-import org.apache.isis.applib.annotation.InteractionWithProperty;
-import org.apache.isis.applib.annotation.PostsPropertyChangedEvent;
-import org.apache.isis.applib.services.eventbus.PropertyChangedEvent;
-import org.apache.isis.applib.services.eventbus.PropertyInteractionEvent;
-import org.apache.isis.core.commons.config.IsisConfiguration;
-import org.apache.isis.core.metamodel.facetapi.FacetUtil;
-import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.facetapi.MetaModelValidatorRefiner;
-import org.apache.isis.core.metamodel.facets.Annotations;
-import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
-import org.apache.isis.core.metamodel.facets.FacetedMethod;
-import org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
-import org.apache.isis.core.metamodel.facets.collections.sortedby.SortedByFacet;
-import org.apache.isis.core.metamodel.facets.properties.update.clear.PropertyClearFacet;
-import org.apache.isis.core.metamodel.facets.properties.update.modify.PropertySetterFacet;
-import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
-import org.apache.isis.core.metamodel.runtimecontext.ServicesInjectorAware;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.spec.feature.Contributed;
-import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
-import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorComposite;
-import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorVisiting;
-import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorVisiting.Visitor;
-import org.apache.isis.core.metamodel.specloader.validator.ValidationFailures;
-
-public class InteractionWithPropertyFacetFactory extends FacetFactoryAbstract implements ServicesInjectorAware, MetaModelValidatorRefiner {
-
- private ServicesInjector servicesInjector;
-
- public InteractionWithPropertyFacetFactory() {
- super(FeatureType.PROPERTIES_ONLY);
- }
-
- @Override
- public void process(final ProcessMethodContext processMethodContext) {
- final Method method = processMethodContext.getMethod();
- FacetedMethod holder = processMethodContext.getFacetHolder();
-
- final PropertyOrCollectionAccessorFacet getterFacet = holder.getFacet(PropertyOrCollectionAccessorFacet.class);
- if(getterFacet == null) {
- return;
- }
-
- final InteractionWithProperty interactionWithProperty = Annotations.getAnnotation(method, InteractionWithProperty.class);
- final PostsPropertyChangedEvent postsPropertyChangedEvent = Annotations.getAnnotation(method, PostsPropertyChangedEvent.class);
-
- final PropertySetterFacet setterFacet = holder.getFacet(PropertySetterFacet.class);
- if(setterFacet != null) {
- if(interactionWithProperty != null) {
- final Class<? extends PropertyInteractionEvent<?, ?>> eventType = interactionWithProperty.value();
- FacetUtil.addFacet(new InteractionWithPropertyFacetSetterAnnotation(eventType, getterFacet, setterFacet, servicesInjector, holder));
- } else if(postsPropertyChangedEvent != null) {
- final Class<? extends PropertyChangedEvent<?, ?>> eventType = postsPropertyChangedEvent.value();
- FacetUtil.addFacet(new InteractionWithPropertyFacetSetterPostsPropertyChangedEventAnnotation(eventType, getterFacet, setterFacet, servicesInjector, holder));
- } else {
- final Class<? extends PropertyInteractionEvent<?, ?>> eventType = PropertyInteractionEvent.Default.class;
- FacetUtil.addFacet(new InteractionWithPropertyFacetSetterDefault(eventType, getterFacet, setterFacet, servicesInjector, holder));
- }
- }
-
- final PropertyClearFacet clearFacet = holder.getFacet(PropertyClearFacet.class);
- if(clearFacet != null) {
- if(interactionWithProperty != null) {
- final Class<? extends PropertyInteractionEvent<?, ?>> eventType = interactionWithProperty.value();
- FacetUtil.addFacet(new InteractionWithPropertyFacetClearAnnotation(eventType, getterFacet, clearFacet, servicesInjector, holder));
- } else if(postsPropertyChangedEvent != null) {
- final Class<? extends PropertyChangedEvent<?, ?>> changedEventType = postsPropertyChangedEvent.value();
- FacetUtil.addFacet(new InteractionWithPropertyFacetClearAnnotation(changedEventType, getterFacet, clearFacet, servicesInjector, holder));
- } else {
- final Class<? extends PropertyInteractionEvent<?, ?>> eventType = PropertyInteractionEvent.Default.class;
- FacetUtil.addFacet(new InteractionWithPropertyFacetClearAnnotation(eventType, getterFacet, clearFacet, servicesInjector, holder));
- }
- }
- }
-
- // //////////////////////////////////////
-
- @Override
- public void refineMetaModelValidator(MetaModelValidatorComposite metaModelValidator, IsisConfiguration configuration) {
- metaModelValidator.add(new MetaModelValidatorVisiting(newValidatorVisitor()));
- }
-
- protected Visitor newValidatorVisitor() {
- return new MetaModelValidatorVisiting.Visitor() {
-
- @Override
- public boolean visit(ObjectSpecification objectSpec, ValidationFailures validationFailures) {
- List<OneToManyAssociation> objectCollections = objectSpec.getCollections(Contributed.EXCLUDED);
- for (OneToManyAssociation objectCollection : objectCollections) {
- final SortedByFacet facet = objectCollection.getFacet(SortedByFacet.class);
- if(facet != null) {
- final Class<? extends Comparator<?>> cls = facet.value();
- if(!Comparator.class.isAssignableFrom(cls)) {
- validationFailures.add("%s#%s is annotated with @SortedBy, but the class specified '%s' is not a Comparator", objectSpec.getIdentifier().getClassName(), objectCollection.getId(), facet.value().getName());
- }
- }
- }
- return true;
- }
- };
- }
-
- // //////////////////////////////////////
-
- @Override
- public void setServicesInjector(ServicesInjector servicesInjector) {
- this.servicesInjector = servicesInjector;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/d9b90204/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/InteractionWithPropertyFacetSetterAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/InteractionWithPropertyFacetSetterAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/InteractionWithPropertyFacetSetterAnnotation.java
deleted file mode 100644
index 38f1a96..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/InteractionWithPropertyFacetSetterAnnotation.java
+++ /dev/null
@@ -1,40 +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.properties.interaction;
-
-import org.apache.isis.applib.services.eventbus.PropertyInteractionEvent;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
-import org.apache.isis.core.metamodel.facets.properties.update.modify.PropertySetterFacet;
-import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
-
-public class InteractionWithPropertyFacetSetterAnnotation
- extends InteractionWithPropertySetterFacetAbstract {
-
-
- public InteractionWithPropertyFacetSetterAnnotation(
- final Class<? extends PropertyInteractionEvent<?, ?>> eventType,
- final PropertyOrCollectionAccessorFacet getterFacet,
- final PropertySetterFacet setterFacet,
- final ServicesInjector servicesInjector,
- final FacetHolder holder) {
- super(eventType, getterFacet, setterFacet, servicesInjector, holder);
- }
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/d9b90204/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/InteractionWithPropertyFacetSetterDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/InteractionWithPropertyFacetSetterDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/InteractionWithPropertyFacetSetterDefault.java
deleted file mode 100644
index 719f354..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/InteractionWithPropertyFacetSetterDefault.java
+++ /dev/null
@@ -1,40 +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.properties.interaction;
-
-import org.apache.isis.applib.services.eventbus.PropertyInteractionEvent;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
-import org.apache.isis.core.metamodel.facets.properties.update.modify.PropertySetterFacet;
-import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
-
-public class InteractionWithPropertyFacetSetterDefault
- extends InteractionWithPropertySetterFacetAbstract {
-
-
- public InteractionWithPropertyFacetSetterDefault(
- final Class<? extends PropertyInteractionEvent<?, ?>> eventType,
- final PropertyOrCollectionAccessorFacet getterFacet,
- final PropertySetterFacet setterFacet,
- final ServicesInjector servicesInjector,
- final FacetHolder holder) {
- super(eventType, getterFacet, setterFacet, servicesInjector, holder);
- }
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/d9b90204/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/InteractionWithPropertyFacetSetterPostsPropertyChangedEventAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/InteractionWithPropertyFacetSetterPostsPropertyChangedEventAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/InteractionWithPropertyFacetSetterPostsPropertyChangedEventAnnotation.java
deleted file mode 100644
index 1611dc5..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/InteractionWithPropertyFacetSetterPostsPropertyChangedEventAnnotation.java
+++ /dev/null
@@ -1,40 +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.properties.interaction;
-
-import org.apache.isis.applib.services.eventbus.PropertyInteractionEvent;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
-import org.apache.isis.core.metamodel.facets.properties.update.modify.PropertySetterFacet;
-import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
-
-public class InteractionWithPropertyFacetSetterPostsPropertyChangedEventAnnotation
- extends InteractionWithPropertySetterFacetAbstract {
-
-
- public InteractionWithPropertyFacetSetterPostsPropertyChangedEventAnnotation(
- final Class<? extends PropertyInteractionEvent<?, ?>> eventType,
- final PropertyOrCollectionAccessorFacet getterFacet,
- final PropertySetterFacet setterFacet,
- final ServicesInjector servicesInjector,
- final FacetHolder holder) {
- super(eventType, getterFacet, setterFacet, servicesInjector, holder);
- }
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/d9b90204/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/InteractionWithPropertySetterFacet.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/InteractionWithPropertySetterFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/InteractionWithPropertySetterFacet.java
deleted file mode 100644
index e39e7b8..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/InteractionWithPropertySetterFacet.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.properties.interaction;
-
-import java.lang.reflect.InvocationTargetException;
-import org.apache.isis.applib.Identifier;
-import org.apache.isis.applib.services.eventbus.EventBusService;
-import org.apache.isis.applib.services.eventbus.PropertyInteractionEvent;
-import org.apache.isis.core.metamodel.facets.SingleValueFacet;
-import org.apache.isis.core.metamodel.facets.properties.update.modify.PropertySetterFacet;
-
-/**
- * Indicates that (the specified subclass of) {@link PropertyInteractionEvent} should be posted to the
- * {@link EventBusService}.
- */
-public interface InteractionWithPropertySetterFacet extends SingleValueFacet<Class<? extends PropertyInteractionEvent<?,?>>>, PropertySetterFacet {
-
- public static class Util {
- private Util(){}
- public static <S,T> PropertyInteractionEvent<S,T> newEvent(
- final Class<? extends PropertyInteractionEvent<S, T>> type,
- final S source,
- final Identifier identifier,
- final T oldValue,
- final T newValue) throws NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
- return Utils.newEvent(type, source, identifier, oldValue, newValue);
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/d9b90204/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/InteractionWithPropertySetterFacetAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/InteractionWithPropertySetterFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/InteractionWithPropertySetterFacetAbstract.java
deleted file mode 100644
index 10bbbbd..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/InteractionWithPropertySetterFacetAbstract.java
+++ /dev/null
@@ -1,104 +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.properties.interaction;
-
-import com.google.common.base.Objects;
-import com.google.common.collect.Lists;
-import org.apache.isis.applib.services.eventbus.AbstractInteractionEvent;
-import org.apache.isis.applib.services.eventbus.PropertyInteractionEvent;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.facetapi.Facet;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facetapi.MultiTypedFacet;
-import org.apache.isis.core.metamodel.facets.InteractionHelper;
-import org.apache.isis.core.metamodel.facets.SingleValueFacetAbstract;
-import org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
-import org.apache.isis.core.metamodel.facets.properties.update.modify.PropertySetterFacet;
-import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
-
-public abstract class InteractionWithPropertySetterFacetAbstract
- extends SingleValueFacetAbstract<Class<? extends PropertyInteractionEvent<?,?>>>
- implements InteractionWithPropertySetterFacet, MultiTypedFacet {
-
-
- public static Class<? extends Facet> type() {
- return PropertySetterFacet.class;
- }
-
- private final PropertyOrCollectionAccessorFacet getterFacet;
- private final PropertySetterFacet setterFacet;
- private final InteractionHelper interactionHelper;
-
- public InteractionWithPropertySetterFacetAbstract(
- final Class<? extends PropertyInteractionEvent<?, ?>> eventType,
- final PropertyOrCollectionAccessorFacet getterFacet,
- final PropertySetterFacet setterFacet,
- final ServicesInjector servicesInjector,
- final FacetHolder holder) {
- super(type(), eventType, holder);
- this.getterFacet = getterFacet;
- this.setterFacet = setterFacet;
- this.interactionHelper = new InteractionHelper(servicesInjector, AbstractInteractionEvent.Mode.EXECUTE);
- }
-
- @Override
- public void setProperty(ObjectAdapter targetAdapter, ObjectAdapter valueAdapter) {
- if(setterFacet == null) {
- return;
- }
- if(!interactionHelper.hasEventBusService()) {
- setterFacet.setProperty(targetAdapter, valueAdapter);
- return;
- }
-
- final Object oldValue = getterFacet.getProperty(targetAdapter);
- setterFacet.setProperty(targetAdapter, valueAdapter);
- final Object newValue = getterFacet.getProperty(targetAdapter);
-
- if(Objects.equal(oldValue, newValue)) {
- // do nothing.
- return;
- }
-
- interactionHelper.postEventForPropertySet(value(), targetAdapter, getIdentified(), oldValue, newValue);
- }
-
-
-
- // //////////////////////////////////////
- // MultiTypedFacet
- // //////////////////////////////////////
-
- @SuppressWarnings("unchecked")
- @Override
- public Class<? extends Facet>[] facetTypes() {
- return Lists.newArrayList(
- type(),
- InteractionWithPropertySetterFacet.class
- ).toArray(new Class[]{});
- }
-
- @SuppressWarnings("unchecked")
- @Override
- public <T extends Facet> T getFacet(Class<T> facet) {
- return (T) this;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/d9b90204/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/PropertyClearFacetForInteractionAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/PropertyClearFacetForInteractionAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/PropertyClearFacetForInteractionAbstract.java
new file mode 100644
index 0000000..460b931
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/PropertyClearFacetForInteractionAbstract.java
@@ -0,0 +1,104 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.isis.core.metamodel.facets.properties.interaction;
+
+import com.google.common.base.Objects;
+import org.apache.isis.applib.services.eventbus.AbstractInteractionEvent;
+import org.apache.isis.applib.services.eventbus.PropertyInteractionEvent;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.InteractionHelper;
+import org.apache.isis.core.metamodel.facets.SingleValueFacetAbstract;
+import org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
+import org.apache.isis.core.metamodel.facets.properties.update.clear.PropertyClearFacet;
+import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
+
+public abstract class PropertyClearFacetForInteractionAbstract
+ extends SingleValueFacetAbstract<Class<? extends PropertyInteractionEvent<?,?>>>
+ implements PropertyClearFacet {
+
+
+ public static Class<? extends Facet> type() {
+ return PropertyClearFacet.class;
+ }
+
+ private final InteractionHelper interactionHelper;
+
+ private final PropertyOrCollectionAccessorFacet getterFacet;
+ private final PropertyClearFacet clearFacet;
+ private final PropertyInteractionFacetAbstract propertyInteractionFacet;
+
+ public PropertyClearFacetForInteractionAbstract(
+ final Class<? extends PropertyInteractionEvent<?, ?>> eventType,
+ final PropertyOrCollectionAccessorFacet getterFacet,
+ final PropertyClearFacet clearFacet,
+ final PropertyInteractionFacetAbstract propertyInteractionFacet,
+ final ServicesInjector servicesInjector,
+ final FacetHolder holder) {
+ super(type(), eventType, holder);
+ this.getterFacet = getterFacet;
+ this.clearFacet = clearFacet;
+ this.propertyInteractionFacet = propertyInteractionFacet;
+ this.interactionHelper = new InteractionHelper(servicesInjector);
+ }
+
+ @Override
+ public void clearProperty(ObjectAdapter targetAdapter) {
+ if(clearFacet == null) {
+ return;
+ }
+
+ if(!interactionHelper.hasEventBusService()) {
+ clearFacet.clearProperty(targetAdapter);
+ return;
+ }
+
+ final Object oldValue = getterFacet.getProperty(targetAdapter);
+ clearFacet.clearProperty(targetAdapter);
+ final Object newValue = getterFacet.getProperty(targetAdapter);
+
+ if(Objects.equal(oldValue, newValue)) {
+ // do nothing.
+ return;
+ }
+
+ // ... and post the event (reusing existing event if available)
+ final PropertyInteractionEvent<?, ?> event = propertyInteractionFacet.currentInteraction.get();
+ interactionHelper.postEventForProperty(value(), verify(event), AbstractInteractionEvent.Phase.EXECUTE, targetAdapter, getIdentified(), oldValue, newValue);
+
+ // clean up
+ propertyInteractionFacet.currentInteraction.set(null);
+ }
+
+ /**
+ * Optional hook to allow the facet implementation for the deprecated {@link org.apache.isis.applib.annotation.PostsPropertyChangedEvent} annotation
+ * to discard the event if of a different type.
+ */
+ protected PropertyInteractionEvent<?, ?> verify(PropertyInteractionEvent<?, ?> event) {
+ return event;
+ }
+
+ private Class<? extends PropertyInteractionEvent<?, ?>> eventType() {
+ return value();
+ }
+
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/d9b90204/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/PropertyClearFacetForPostsPropertyChangedEventAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/PropertyClearFacetForPostsPropertyChangedEventAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/PropertyClearFacetForPostsPropertyChangedEventAnnotation.java
new file mode 100644
index 0000000..3309e76
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/PropertyClearFacetForPostsPropertyChangedEventAnnotation.java
@@ -0,0 +1,48 @@
+/*
+ * 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.properties.interaction;
+
+import org.apache.isis.applib.services.eventbus.PropertyInteractionEvent;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
+import org.apache.isis.core.metamodel.facets.properties.update.clear.PropertyClearFacet;
+import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
+
+public class PropertyClearFacetForPostsPropertyChangedEventAnnotation
+ extends PropertyClearFacetForInteractionAbstract {
+
+
+ public PropertyClearFacetForPostsPropertyChangedEventAnnotation(
+ final Class<? extends PropertyInteractionEvent<?, ?>> eventType,
+ final PropertyOrCollectionAccessorFacet getterFacet,
+ final PropertyClearFacet clearFacet,
+ final PropertyInteractionFacetAbstract propertyInteractionFacet,
+ final ServicesInjector servicesInjector,
+ final FacetHolder holder) {
+ super(eventType, getterFacet, clearFacet, propertyInteractionFacet, servicesInjector, holder);
+ }
+
+ @Override
+ protected PropertyInteractionEvent<?, ?> verify(final PropertyInteractionEvent<?, ?> event) {
+ // will discard event if different type to that specified in the PostsPropertyChangedEvent annotation.
+ return event != null && value() == event.getClass() ? event : null;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/d9b90204/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/PropertyClearFacetForPropertyInteractionAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/PropertyClearFacetForPropertyInteractionAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/PropertyClearFacetForPropertyInteractionAnnotation.java
new file mode 100644
index 0000000..729bd33
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/PropertyClearFacetForPropertyInteractionAnnotation.java
@@ -0,0 +1,41 @@
+/*
+ * 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.properties.interaction;
+
+import org.apache.isis.applib.services.eventbus.PropertyInteractionEvent;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
+import org.apache.isis.core.metamodel.facets.properties.update.clear.PropertyClearFacet;
+import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
+
+public class PropertyClearFacetForPropertyInteractionAnnotation
+ extends PropertyClearFacetForInteractionAbstract {
+
+
+ public PropertyClearFacetForPropertyInteractionAnnotation(
+ final Class<? extends PropertyInteractionEvent<?, ?>> eventType,
+ final PropertyOrCollectionAccessorFacet getterFacet,
+ final PropertyClearFacet clearFacet,
+ final PropertyInteractionFacetAbstract propertyInteractionFacet,
+ final ServicesInjector servicesInjector,
+ final FacetHolder holder) {
+ super(eventType, getterFacet, clearFacet, propertyInteractionFacet, servicesInjector, holder);
+ }
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/d9b90204/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/PropertyClearFacetForPropertyInteractionDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/PropertyClearFacetForPropertyInteractionDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/PropertyClearFacetForPropertyInteractionDefault.java
new file mode 100644
index 0000000..8bc70bb
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/PropertyClearFacetForPropertyInteractionDefault.java
@@ -0,0 +1,41 @@
+/*
+ * 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.properties.interaction;
+
+import org.apache.isis.applib.services.eventbus.PropertyInteractionEvent;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
+import org.apache.isis.core.metamodel.facets.properties.update.clear.PropertyClearFacet;
+import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
+
+public class PropertyClearFacetForPropertyInteractionDefault
+ extends PropertyClearFacetForInteractionAbstract {
+
+
+ public PropertyClearFacetForPropertyInteractionDefault(
+ final Class<? extends PropertyInteractionEvent<?, ?>> eventType,
+ final PropertyOrCollectionAccessorFacet getterFacet,
+ final PropertyClearFacet clearFacet,
+ final PropertyInteractionFacetAbstract propertyInteractionFacet,
+ final ServicesInjector servicesInjector,
+ final FacetHolder holder) {
+ super(eventType, getterFacet, clearFacet, propertyInteractionFacet, servicesInjector, holder);
+ }
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/d9b90204/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/PropertyInteractionFacet.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/PropertyInteractionFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/PropertyInteractionFacet.java
new file mode 100644
index 0000000..939fe62
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/PropertyInteractionFacet.java
@@ -0,0 +1,33 @@
+/*
+ * 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.properties.interaction;
+
+import org.apache.isis.core.metamodel.facets.SingleClassValueFacet;
+import org.apache.isis.core.metamodel.interactions.DisablingInteractionAdvisor;
+import org.apache.isis.core.metamodel.interactions.HidingInteractionAdvisor;
+import org.apache.isis.core.metamodel.interactions.ValidatingInteractionAdvisor;
+
+/**
+ * Corresponds to <tt>@PropertyInteraction</tt> annotation in the Isis programming model.
+ */
+public interface PropertyInteractionFacet
+ extends SingleClassValueFacet, HidingInteractionAdvisor, DisablingInteractionAdvisor, ValidatingInteractionAdvisor {
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/d9b90204/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/PropertyInteractionFacetAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/PropertyInteractionFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/PropertyInteractionFacetAbstract.java
new file mode 100644
index 0000000..eb66867
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/PropertyInteractionFacetAbstract.java
@@ -0,0 +1,123 @@
+/*
+ * 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.properties.interaction;
+
+import org.apache.isis.applib.events.UsabilityEvent;
+import org.apache.isis.applib.events.ValidityEvent;
+import org.apache.isis.applib.events.VisibilityEvent;
+import org.apache.isis.applib.services.eventbus.AbstractInteractionEvent;
+import org.apache.isis.applib.services.eventbus.PropertyInteractionEvent;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.InteractionHelper;
+import org.apache.isis.core.metamodel.facets.SingleClassValueFacetAbstract;
+import org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
+import org.apache.isis.core.metamodel.interactions.ProposedHolder;
+import org.apache.isis.core.metamodel.interactions.UsabilityContext;
+import org.apache.isis.core.metamodel.interactions.ValidityContext;
+import org.apache.isis.core.metamodel.interactions.VisibilityContext;
+import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
+import org.apache.isis.core.metamodel.spec.SpecificationLoader;
+
+public abstract class PropertyInteractionFacetAbstract
+ extends SingleClassValueFacetAbstract implements PropertyInteractionFacet {
+
+ private final InteractionHelper interactionHelper;
+
+ final static ThreadLocal<PropertyInteractionEvent<?,?>> currentInteraction = new ThreadLocal<PropertyInteractionEvent<?,?>>();
+
+ private final PropertyOrCollectionAccessorFacet getterFacet;
+
+ public PropertyInteractionFacetAbstract(
+ final Class<? extends PropertyInteractionEvent<?, ?>> eventType,
+ final PropertyOrCollectionAccessorFacet getterFacet,
+ final FacetHolder holder,
+ final ServicesInjector servicesInjector,
+ final SpecificationLoader specificationLoader) {
+ super(PropertyInteractionFacet.class, holder, eventType, specificationLoader);
+ this.getterFacet = getterFacet;
+ interactionHelper = new InteractionHelper(servicesInjector);
+ }
+
+ @Override
+ public String hides(VisibilityContext<? extends VisibilityEvent> ic) {
+ if(!interactionHelper.hasEventBusService()) {
+ return null;
+ }
+
+ final PropertyInteractionEvent<?, ?> event =
+ interactionHelper.postEventForProperty(
+ eventType(), null, AbstractInteractionEvent.Phase.HIDE, ic.getTarget(), getIdentified(), null, null);
+ if (event == null || !event.isHidden()) {
+ // make available for next phase
+ currentInteraction.set(event);
+ return null;
+ } else {
+ // clean up
+ currentInteraction.set(null);
+ return "Hidden by subscriber";
+ }
+ }
+
+ @Override
+ public String disables(UsabilityContext<? extends UsabilityEvent> ic) {
+ final PropertyInteractionEvent<?, ?> existingEvent = currentInteraction.get();
+ final PropertyInteractionEvent<?, ?> event =
+ interactionHelper.postEventForProperty(
+ eventType(), existingEvent, AbstractInteractionEvent.Phase.DISABLE, ic.getTarget(), getIdentified(), null, null);
+ if (event == null || !event.isDisabled()) {
+ // make available for next phase
+ currentInteraction.set(event);
+ return null;
+ } else {
+ // clean up
+ currentInteraction.set(null);
+ return event.getDisabledReason();
+ }
+ }
+
+ @Override
+ public String invalidates(ValidityContext<? extends ValidityEvent> ic) {
+
+ final PropertyInteractionEvent<?, ?> existingEvent = currentInteraction.get();
+
+ final Object oldValue = getterFacet.getProperty(ic.getTarget());
+
+ final ProposedHolder ph = (ProposedHolder) ic;
+ final Object proposedValue = ph.getProposed().getObject();
+
+ final PropertyInteractionEvent<?, ?> event =
+ interactionHelper.postEventForProperty(
+ eventType(), existingEvent, AbstractInteractionEvent.Phase.VALIDATE, ic.getTarget(), getIdentified(), oldValue, proposedValue);
+ if(event == null || !event.isInvalid()) {
+ // make available for next phase
+ currentInteraction.set(event);
+ return null;
+ } else {
+ // clean up
+ currentInteraction.set(null);
+ return event.getInvalidityReason();
+ }
+ }
+
+ private Class<?> eventType() {
+ return value();
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/d9b90204/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/PropertyInteractionFacetAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/PropertyInteractionFacetAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/PropertyInteractionFacetAnnotation.java
new file mode 100644
index 0000000..84050af
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/PropertyInteractionFacetAnnotation.java
@@ -0,0 +1,39 @@
+/*
+ * 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.properties.interaction;
+
+import org.apache.isis.applib.services.eventbus.PropertyInteractionEvent;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
+import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
+import org.apache.isis.core.metamodel.spec.SpecificationLoader;
+
+public class PropertyInteractionFacetAnnotation extends PropertyInteractionFacetAbstract {
+
+ public PropertyInteractionFacetAnnotation(
+ final Class<? extends PropertyInteractionEvent<?, ?>> eventType,
+ final PropertyOrCollectionAccessorFacet getterFacet,
+ final FacetHolder holder,
+ final ServicesInjector servicesInjector,
+ final SpecificationLoader specificationLoader) {
+ super(eventType, getterFacet, holder, servicesInjector, specificationLoader);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/d9b90204/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/PropertyInteractionFacetDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/PropertyInteractionFacetDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/PropertyInteractionFacetDefault.java
new file mode 100644
index 0000000..0098182
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/PropertyInteractionFacetDefault.java
@@ -0,0 +1,39 @@
+/*
+ * 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.properties.interaction;
+
+import org.apache.isis.applib.services.eventbus.PropertyInteractionEvent;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
+import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
+import org.apache.isis.core.metamodel.spec.SpecificationLoader;
+
+public class PropertyInteractionFacetDefault extends PropertyInteractionFacetAbstract {
+
+ public PropertyInteractionFacetDefault(
+ final Class<? extends PropertyInteractionEvent<?, ?>> eventType,
+ final PropertyOrCollectionAccessorFacet getterFacet,
+ final FacetHolder holder,
+ final ServicesInjector servicesInjector,
+ final SpecificationLoader specificationLoader) {
+ super(eventType, getterFacet, holder, servicesInjector, specificationLoader);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/d9b90204/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/PropertyInteractionFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/PropertyInteractionFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/PropertyInteractionFacetFactory.java
new file mode 100644
index 0000000..a11bb2a
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/PropertyInteractionFacetFactory.java
@@ -0,0 +1,157 @@
+/*
+ * 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.properties.interaction;
+
+import java.lang.reflect.Method;
+import java.util.Comparator;
+import java.util.List;
+import org.apache.isis.applib.annotation.PostsPropertyChangedEvent;
+import org.apache.isis.applib.annotation.PropertyInteraction;
+import org.apache.isis.applib.services.eventbus.PropertyInteractionEvent;
+import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.core.metamodel.facetapi.FacetUtil;
+import org.apache.isis.core.metamodel.facetapi.FeatureType;
+import org.apache.isis.core.metamodel.facetapi.MetaModelValidatorRefiner;
+import org.apache.isis.core.metamodel.facets.Annotations;
+import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
+import org.apache.isis.core.metamodel.facets.FacetedMethod;
+import org.apache.isis.core.metamodel.facets.collections.sortedby.SortedByFacet;
+import org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
+import org.apache.isis.core.metamodel.facets.properties.update.clear.PropertyClearFacet;
+import org.apache.isis.core.metamodel.facets.properties.update.modify.PropertySetterFacet;
+import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
+import org.apache.isis.core.metamodel.runtimecontext.ServicesInjectorAware;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.metamodel.spec.feature.Contributed;
+import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
+import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorComposite;
+import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorVisiting;
+import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorVisiting.Visitor;
+import org.apache.isis.core.metamodel.specloader.validator.ValidationFailures;
+
+public class PropertyInteractionFacetFactory extends FacetFactoryAbstract implements ServicesInjectorAware, MetaModelValidatorRefiner {
+
+ private ServicesInjector servicesInjector;
+
+ public PropertyInteractionFacetFactory() {
+ super(FeatureType.PROPERTIES_ONLY);
+ }
+
+ @Override
+ public void process(final ProcessMethodContext processMethodContext) {
+ final Method method = processMethodContext.getMethod();
+ FacetedMethod holder = processMethodContext.getFacetHolder();
+
+ final PropertyOrCollectionAccessorFacet getterFacet = holder.getFacet(PropertyOrCollectionAccessorFacet.class);
+ if(getterFacet == null) {
+ return;
+ }
+
+ //
+ // Set up PropertyInteractionFacet, which will act as the hiding/disabling/validating advisor
+ //
+ final PropertyInteraction propertyInteraction = Annotations.getAnnotation(method, PropertyInteraction.class);
+ final Class<? extends PropertyInteractionEvent<?, ?>> propertyInteractionEventType;
+
+ final PropertyInteractionFacetAbstract propertyInteractionFacet;
+ if(propertyInteraction != null) {
+ propertyInteractionEventType = propertyInteraction.value();
+ propertyInteractionFacet = new PropertyInteractionFacetAnnotation(propertyInteractionEventType, getterFacet, holder, servicesInjector, getSpecificationLoader());
+ } else {
+ propertyInteractionEventType = PropertyInteractionEvent.Default.class;
+ propertyInteractionFacet = new PropertyInteractionFacetDefault(propertyInteractionEventType, getterFacet, holder, servicesInjector, getSpecificationLoader());
+ }
+ FacetUtil.addFacet(propertyInteractionFacet);
+
+
+ //
+ // if the property is mutable, then replace the existing setter and clear facets with equivalents that
+ // also post to the event bus.
+ //
+ // here we support the deprecated annotations
+ //
+
+
+ final PostsPropertyChangedEvent postsPropertyChangedEvent = Annotations.getAnnotation(method, PostsPropertyChangedEvent.class);
+
+ final PropertySetterFacet setterFacet = holder.getFacet(PropertySetterFacet.class);
+ if(setterFacet != null) {
+ // the current setter facet will end up as the underlying facet
+ final PropertySetterFacetForInteractionAbstract replacementFacet;
+ if(propertyInteraction != null) {
+ replacementFacet = new PropertySetterFacetForPropertyInteractionAnnotation(propertyInteractionEventType, getterFacet, setterFacet, propertyInteractionFacet, servicesInjector, holder);
+ } else if(postsPropertyChangedEvent != null) {
+ replacementFacet = new PropertySetterFacetForPostsPropertyChangedEventAnnotation(postsPropertyChangedEvent.value(), getterFacet, setterFacet, propertyInteractionFacet, servicesInjector, holder);
+ } else {
+ replacementFacet = new PropertySetterFacetForPropertyInteractionDefault(PropertyInteractionEvent.Default.class, getterFacet, setterFacet, propertyInteractionFacet, servicesInjector, holder);
+ }
+ FacetUtil.addFacet(replacementFacet);
+ }
+
+ final PropertyClearFacet clearFacet = holder.getFacet(PropertyClearFacet.class);
+ if(clearFacet != null) {
+ // the current clear facet will end up as the underlying facet
+ final PropertyClearFacetForInteractionAbstract replacementFacet;
+ if(propertyInteraction != null) {
+ replacementFacet = new PropertyClearFacetForPropertyInteractionAnnotation(propertyInteractionEventType, getterFacet, clearFacet, propertyInteractionFacet, servicesInjector, holder);
+ } else if(postsPropertyChangedEvent != null) {
+ replacementFacet = new PropertyClearFacetForPostsPropertyChangedEventAnnotation(postsPropertyChangedEvent.value(), getterFacet, clearFacet, propertyInteractionFacet, servicesInjector, holder);
+ } else {
+ replacementFacet = new PropertyClearFacetForPropertyInteractionDefault(PropertyInteractionEvent.Default.class, getterFacet, clearFacet, propertyInteractionFacet, servicesInjector, holder);
+ }
+ FacetUtil.addFacet(replacementFacet);
+ }
+ }
+
+ // //////////////////////////////////////
+
+ @Override
+ public void refineMetaModelValidator(MetaModelValidatorComposite metaModelValidator, IsisConfiguration configuration) {
+ metaModelValidator.add(new MetaModelValidatorVisiting(newValidatorVisitor()));
+ }
+
+ protected Visitor newValidatorVisitor() {
+ return new MetaModelValidatorVisiting.Visitor() {
+
+ @Override
+ public boolean visit(ObjectSpecification objectSpec, ValidationFailures validationFailures) {
+ List<OneToManyAssociation> objectCollections = objectSpec.getCollections(Contributed.EXCLUDED);
+ for (OneToManyAssociation objectCollection : objectCollections) {
+ final SortedByFacet facet = objectCollection.getFacet(SortedByFacet.class);
+ if(facet != null) {
+ final Class<? extends Comparator<?>> cls = facet.value();
+ if(!Comparator.class.isAssignableFrom(cls)) {
+ validationFailures.add("%s#%s is annotated with @SortedBy, but the class specified '%s' is not a Comparator", objectSpec.getIdentifier().getClassName(), objectCollection.getId(), facet.value().getName());
+ }
+ }
+ }
+ return true;
+ }
+ };
+ }
+
+ // //////////////////////////////////////
+
+ @Override
+ public void setServicesInjector(ServicesInjector servicesInjector) {
+ this.servicesInjector = servicesInjector;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/d9b90204/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/PropertySetterFacetForInteractionAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/PropertySetterFacetForInteractionAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/PropertySetterFacetForInteractionAbstract.java
new file mode 100644
index 0000000..d601ced
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/PropertySetterFacetForInteractionAbstract.java
@@ -0,0 +1,97 @@
+/*
+ * 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.properties.interaction;
+
+import com.google.common.base.Objects;
+import org.apache.isis.applib.services.eventbus.AbstractInteractionEvent;
+import org.apache.isis.applib.services.eventbus.PropertyInteractionEvent;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.InteractionHelper;
+import org.apache.isis.core.metamodel.facets.SingleValueFacetAbstract;
+import org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
+import org.apache.isis.core.metamodel.facets.properties.update.modify.PropertySetterFacet;
+import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
+
+public abstract class PropertySetterFacetForInteractionAbstract
+ extends SingleValueFacetAbstract<Class<? extends PropertyInteractionEvent<?,?>>>
+ implements PropertySetterFacet {
+
+ public static Class<? extends Facet> type() {
+ return PropertySetterFacet.class;
+ }
+
+ private final InteractionHelper interactionHelper;
+
+ private final PropertyOrCollectionAccessorFacet getterFacet;
+ private final PropertySetterFacet setterFacet;
+ private final PropertyInteractionFacetAbstract propertyInteractionFacet;
+
+ public PropertySetterFacetForInteractionAbstract(
+ final Class<? extends PropertyInteractionEvent<?, ?>> eventType,
+ final PropertyOrCollectionAccessorFacet getterFacet,
+ final PropertySetterFacet setterFacet,
+ final PropertyInteractionFacetAbstract propertyInteractionFacet,
+ final ServicesInjector servicesInjector,
+ final FacetHolder holder) {
+ super(type(), eventType, holder);
+ this.getterFacet = getterFacet;
+ this.setterFacet = setterFacet;
+ this.propertyInteractionFacet = propertyInteractionFacet;
+ this.interactionHelper = new InteractionHelper(servicesInjector);
+ }
+
+ @Override
+ public void setProperty(ObjectAdapter targetAdapter, ObjectAdapter valueAdapter) {
+ if(setterFacet == null) {
+ return;
+ }
+ if(!interactionHelper.hasEventBusService()) {
+ setterFacet.setProperty(targetAdapter, valueAdapter);
+ return;
+ }
+
+ final Object oldValue = getterFacet.getProperty(targetAdapter);
+ setterFacet.setProperty(targetAdapter, valueAdapter);
+ final Object newValue = getterFacet.getProperty(targetAdapter);
+
+ if(Objects.equal(oldValue, newValue)) {
+ // do nothing.
+ return;
+ }
+
+ // ... and post the event (reusing existing event if available)
+ final PropertyInteractionEvent<?, ?> event = propertyInteractionFacet.currentInteraction.get();
+ interactionHelper.postEventForProperty(value(), verify(event), AbstractInteractionEvent.Phase.EXECUTE, targetAdapter, getIdentified(), oldValue, newValue);
+
+ // clean up
+ propertyInteractionFacet.currentInteraction.set(null);
+ }
+
+ /**
+ * Optional hook to allow the facet implementation for the deprecated {@link org.apache.isis.applib.annotation.PostsPropertyChangedEvent} annotation
+ * to discard the event if of a different type.
+ */
+ protected PropertyInteractionEvent<?, ?> verify(PropertyInteractionEvent<?, ?> event) {
+ return event;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/d9b90204/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/PropertySetterFacetForPostsPropertyChangedEventAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/PropertySetterFacetForPostsPropertyChangedEventAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/PropertySetterFacetForPostsPropertyChangedEventAnnotation.java
new file mode 100644
index 0000000..8e6317c
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/PropertySetterFacetForPostsPropertyChangedEventAnnotation.java
@@ -0,0 +1,48 @@
+/*
+ * 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.properties.interaction;
+
+import org.apache.isis.applib.services.eventbus.PropertyInteractionEvent;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
+import org.apache.isis.core.metamodel.facets.properties.update.modify.PropertySetterFacet;
+import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
+
+public class PropertySetterFacetForPostsPropertyChangedEventAnnotation
+ extends PropertySetterFacetForInteractionAbstract {
+
+
+ public PropertySetterFacetForPostsPropertyChangedEventAnnotation(
+ final Class<? extends PropertyInteractionEvent<?, ?>> eventType,
+ final PropertyOrCollectionAccessorFacet getterFacet,
+ final PropertySetterFacet setterFacet,
+ final PropertyInteractionFacetAbstract propertyInteractionFacet,
+ final ServicesInjector servicesInjector,
+ final FacetHolder holder) {
+ super(eventType, getterFacet, setterFacet, propertyInteractionFacet, servicesInjector, holder);
+ }
+
+ @Override
+ protected PropertyInteractionEvent<?, ?> verify(final PropertyInteractionEvent<?, ?> event) {
+ // will discard event if different type to that specified in the PostsPropertyChangedEvent annotation.
+ return event != null && value() == event.getClass() ? event : null;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/d9b90204/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/PropertySetterFacetForPropertyInteractionAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/PropertySetterFacetForPropertyInteractionAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/PropertySetterFacetForPropertyInteractionAnnotation.java
new file mode 100644
index 0000000..824cc32
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/PropertySetterFacetForPropertyInteractionAnnotation.java
@@ -0,0 +1,41 @@
+/*
+ * 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.properties.interaction;
+
+import org.apache.isis.applib.services.eventbus.PropertyInteractionEvent;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
+import org.apache.isis.core.metamodel.facets.properties.update.modify.PropertySetterFacet;
+import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
+
+public class PropertySetterFacetForPropertyInteractionAnnotation
+ extends PropertySetterFacetForInteractionAbstract {
+
+
+ public PropertySetterFacetForPropertyInteractionAnnotation(
+ final Class<? extends PropertyInteractionEvent<?, ?>> eventType,
+ final PropertyOrCollectionAccessorFacet getterFacet,
+ final PropertySetterFacet setterFacet,
+ final PropertyInteractionFacetAbstract propertyInteractionFacet,
+ final ServicesInjector servicesInjector,
+ final FacetHolder holder) {
+ super(eventType, getterFacet, setterFacet, propertyInteractionFacet, servicesInjector, holder);
+ }
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/d9b90204/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/PropertySetterFacetForPropertyInteractionDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/PropertySetterFacetForPropertyInteractionDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/PropertySetterFacetForPropertyInteractionDefault.java
new file mode 100644
index 0000000..1869d12
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/PropertySetterFacetForPropertyInteractionDefault.java
@@ -0,0 +1,41 @@
+/*
+ * 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.properties.interaction;
+
+import org.apache.isis.applib.services.eventbus.PropertyInteractionEvent;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
+import org.apache.isis.core.metamodel.facets.properties.update.modify.PropertySetterFacet;
+import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
+
+public class PropertySetterFacetForPropertyInteractionDefault
+ extends PropertySetterFacetForInteractionAbstract {
+
+
+ public PropertySetterFacetForPropertyInteractionDefault(
+ final Class<? extends PropertyInteractionEvent<?, ?>> eventType,
+ final PropertyOrCollectionAccessorFacet getterFacet,
+ final PropertySetterFacet setterFacet,
+ final PropertyInteractionFacetAbstract propertyInteractionFacet,
+ final ServicesInjector servicesInjector,
+ final FacetHolder holder) {
+ super(eventType, getterFacet, setterFacet, propertyInteractionFacet, servicesInjector, holder);
+ }
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/d9b90204/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/Utils.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/Utils.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/Utils.java
index 11887e0..b039cac 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/Utils.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/interaction/Utils.java
@@ -18,41 +18,6 @@
*/
package org.apache.isis.core.metamodel.facets.properties.interaction;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-import org.apache.isis.applib.Identifier;
-import org.apache.isis.applib.services.eventbus.PropertyInteractionEvent;
-
class Utils {
private Utils(){}
- @SuppressWarnings("unchecked")
- public static <S,T> PropertyInteractionEvent<S,T> newEvent(
- final Class<? extends PropertyInteractionEvent<S, T>> type,
- final S source,
- final Identifier identifier,
- final T oldValue,
- final T newValue) throws NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
- final Constructor<?>[] constructors = type.getConstructors();
- for (final Constructor<?> constructor : constructors) {
- final Class<?>[] parameterTypes = constructor.getParameterTypes();
- if(parameterTypes.length != 4) {
- continue;
- }
- if(!parameterTypes[0].isAssignableFrom(source.getClass())) {
- continue;
- }
- if(!parameterTypes[1].isAssignableFrom(Identifier.class)) {
- continue;
- }
- if(oldValue != null && !parameterTypes[2].isAssignableFrom(oldValue.getClass())) {
- continue;
- }
- if(newValue != null && !parameterTypes[3].isAssignableFrom(newValue.getClass())) {
- continue;
- }
- final Object event = constructor.newInstance(source, identifier, oldValue, newValue);
- return (PropertyInteractionEvent<S, T>) event;
- }
- throw new NoSuchMethodException(type.getName()+".<init>(? super " + source.getClass().getName() + ", " + Identifier.class.getName() + ", java.lang.Object, java.lang.Object)");
- }
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/isis/blob/d9b90204/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/clear/PropertyClearFacetViaClearMethod.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/clear/PropertyClearFacetViaClearMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/clear/PropertyClearFacetViaClearMethod.java
index 86d979f..ce0db84 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/clear/PropertyClearFacetViaClearMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/clear/PropertyClearFacetViaClearMethod.java
@@ -24,7 +24,6 @@ import java.util.Collections;
import java.util.List;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.util.AdapterInvokeUtils;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.ImperativeFacet;
@@ -63,7 +62,7 @@ public class PropertyClearFacetViaClearMethod extends PropertyClearFacetAbstract
@Override
public void clearProperty(final ObjectAdapter owningAdapter) {
- AdapterInvokeUtils.invoke(method, owningAdapter);
+ ObjectAdapter.InvokeUtils.invoke(method, owningAdapter);
}
@Override
http://git-wip-us.apache.org/repos/asf/isis/blob/d9b90204/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/clear/PropertyClearFacetViaSetterMethod.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/clear/PropertyClearFacetViaSetterMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/clear/PropertyClearFacetViaSetterMethod.java
index bf2b041..856c1cf 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/clear/PropertyClearFacetViaSetterMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/clear/PropertyClearFacetViaSetterMethod.java
@@ -24,7 +24,6 @@ import java.util.Collections;
import java.util.List;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.util.AdapterInvokeUtils;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.ImperativeFacet;
@@ -63,7 +62,7 @@ public class PropertyClearFacetViaSetterMethod extends PropertyClearFacetAbstrac
@Override
public void clearProperty(final ObjectAdapter owningAdapter) {
- AdapterInvokeUtils.invoke(method, owningAdapter);
+ ObjectAdapter.InvokeUtils.invoke(method, owningAdapter);
}
@Override
http://git-wip-us.apache.org/repos/asf/isis/blob/d9b90204/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/init/PropertyInitializationFacetViaSetterMethod.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/init/PropertyInitializationFacetViaSetterMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/init/PropertyInitializationFacetViaSetterMethod.java
index 31ee0a0..badf1e6 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/init/PropertyInitializationFacetViaSetterMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/init/PropertyInitializationFacetViaSetterMethod.java
@@ -24,7 +24,6 @@ import java.util.Collections;
import java.util.List;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.util.AdapterInvokeUtils;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.ImperativeFacet;
@@ -65,7 +64,7 @@ public class PropertyInitializationFacetViaSetterMethod extends PropertyInitiali
@Override
public void initProperty(final ObjectAdapter owningAdapter, final ObjectAdapter initialAdapter) {
- AdapterInvokeUtils.invoke(method, owningAdapter, initialAdapter);
+ ObjectAdapter.InvokeUtils.invoke(method, owningAdapter, initialAdapter);
}
@Override
http://git-wip-us.apache.org/repos/asf/isis/blob/d9b90204/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/modify/PropertySetterFacetViaModifyMethod.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/modify/PropertySetterFacetViaModifyMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/modify/PropertySetterFacetViaModifyMethod.java
index d728131..ddaae14 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/modify/PropertySetterFacetViaModifyMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/modify/PropertySetterFacetViaModifyMethod.java
@@ -24,7 +24,6 @@ import java.util.Collections;
import java.util.List;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.util.AdapterInvokeUtils;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.ImperativeFacet;
@@ -63,7 +62,7 @@ public class PropertySetterFacetViaModifyMethod extends PropertySetterFacetAbstr
@Override
public void setProperty(final ObjectAdapter adapter, final ObjectAdapter valueAdapter) {
- AdapterInvokeUtils.invoke(method, adapter, valueAdapter);
+ ObjectAdapter.InvokeUtils.invoke(method, adapter, valueAdapter);
}
@Override
http://git-wip-us.apache.org/repos/asf/isis/blob/d9b90204/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/modify/PropertySetterFacetViaSetterMethod.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/modify/PropertySetterFacetViaSetterMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/modify/PropertySetterFacetViaSetterMethod.java
index b3b79ed..fd7d7d5 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/modify/PropertySetterFacetViaSetterMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/modify/PropertySetterFacetViaSetterMethod.java
@@ -24,7 +24,6 @@ import java.util.Collections;
import java.util.List;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.util.AdapterInvokeUtils;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.ImperativeFacet;
@@ -63,7 +62,7 @@ public class PropertySetterFacetViaSetterMethod extends PropertySetterFacetAbstr
@Override
public void setProperty(final ObjectAdapter adapter, final ObjectAdapter valueAdapter) {
- AdapterInvokeUtils.invoke(method, adapter, valueAdapter);
+ ObjectAdapter.InvokeUtils.invoke(method, adapter, valueAdapter);
}
@Override