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/05/11 19:41:57 UTC
[12/16] git commit: ISIS-550: working on ActionInvokedEvent,
adding integration tests.
ISIS-550: working on ActionInvokedEvent, adding integration tests.
This is nearly there, but there is an issue with the open/close of services in the integration tests that needs addressing.
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/e1f19baa
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/e1f19baa
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/e1f19baa
Branch: refs/heads/master
Commit: e1f19baaac4138800c77499cb056015101d0aa79
Parents: c2b250f
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Sun May 11 12:08:20 2014 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Sun May 11 12:08:20 2014 +0100
----------------------------------------------------------------------
.../services/eventbus/ActionInvokedEvent.java | 47 +++----
.../eventbus/CollectionAddedToEvent.java | 14 +-
.../eventbus/CollectionRemovedFromEvent.java | 13 +-
.../services/eventbus/PropertyChangedEvent.java | 24 ++--
.../core/metamodel/adapter/ObjectAdapter.java | 68 +++++++++-
.../metamodel/adapter/util/AdapterUtils.java | 84 ++++++------
.../event/PostsActionInvokedEventFacet.java | 66 ++++++++++
.../PostsActionInvokedEventFacetAbstract.java | 44 +++++++
.../event/PostsActionInvokedEventFacet.java | 32 -----
.../PostsActionInvokedEventFacetAbstract.java | 42 ------
.../event/PostsCollectionAddedToEventFacet.java | 37 ++++++
...ostsCollectionAddedToEventFacetAbstract.java | 6 +
.../PostsCollectionRemovedFromEventFacet.java | 38 ++++++
...CollectionRemovedFromEventFacetAbstract.java | 3 +
.../event/PostsPropertyChangedEventFacet.java | 38 ++++++
.../PostsPropertyChangedEventFacetAbstract.java | 4 +
.../invoke/ActionInvocationFacetViaMethod.java | 3 -
.../PostsActionInvokedEventFacetAnnotation.java | 112 ++++++++++++++++
.../PostsActionInvokedEventFacetFactory.java | 8 +-
.../PostsActionInvokedEventFacetViaMethod.java | 129 -------------------
...ctionAddedToEventAnnotationFacetFactory.java | 14 +-
...tsCollectionAddedToEventFacetAnnotation.java | 60 ++-------
...nRemovedFromEventAnnotationFacetFactory.java | 14 +-
...llectionRemovedFromEventFacetAnnotation.java | 58 +++------
...pertyChangedEventAnnotationFacetFactory.java | 23 ++--
...ostsPropertyChangedEventFacetAnnotation.java | 48 ++-----
...tionInvokedEventFacet_UtilTest_newEvent.java | 70 ++++++++++
...tionAddedToEventFacet_UtilTest_newEvent.java | 72 +++++++++++
...RemovedFromEventFacet_UtilTest_newEvent.java | 70 ++++++++++
...ertyChangedEventFacet_UtilTest_newEvent.java | 73 +++++++++++
...nAddedEventFacetAnnotationTest_newEvent.java | 53 --------
...emovedEventFacetAnnotationTest_newEvent.java | 52 --------
...hangedEventFacetAnnotationTest_newEvent.java | 52 --------
.../dom/src/main/java/dom/todo/ToDoItem.java | 72 ++++++-----
.../java/dom/todo/ToDoItemSubscriptions.java | 59 ++++++++-
.../java/integration/ToDoSystemInitializer.java | 2 +
.../java/integration/tests/ToDoIntegTest.java | 8 +-
.../tests/actions/ToDoItemTest_completed.java | 30 ++++-
.../colls/ToDoItemTest_dependencies_add.java | 24 +++-
.../colls/ToDoItemTest_dependencies_remove.java | 27 +++-
.../tests/props/ToDoItemTest_description.java | 25 ++++
.../tests/props/ToDoItemTest_notes.java | 20 +++
42 files changed, 1074 insertions(+), 664 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/e1f19baa/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/ActionInvokedEvent.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/ActionInvokedEvent.java b/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/ActionInvokedEvent.java
index 7dabf9b..cbfa948 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/ActionInvokedEvent.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/ActionInvokedEvent.java
@@ -18,6 +18,11 @@
*/
package org.apache.isis.applib.services.eventbus;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.isis.applib.Identifier;
import org.apache.isis.applib.annotation.PostsActionInvokedEvent;
import org.apache.isis.applib.util.ObjectContracts;
@@ -27,29 +32,28 @@ public abstract class ActionInvokedEvent<S> extends java.util.EventObject {
public static class Default extends ActionInvokedEvent<Object> {
private static final long serialVersionUID = 1L;
+ public Default(Object source, Identifier identifier, Object... arguments) {
+ super(source, identifier, arguments);
+ }
}
- private final String action;
- private final String parameters;
-
- /**
- * To instantiate reflectively when the {@link PostsActionInvokedEvent} annotation
- * is used.
- *
- * <p>
- * The fields ({@link #source} and {@link #value} are then set reflectively.
- */
- public ActionInvokedEvent() {
- this(null, null, null);
+ private final Identifier identifier;
+ private final List<Object> arguments;
+
+ public ActionInvokedEvent(
+ final S source,
+ final Identifier identifier,
+ final Object... arguments) {
+ this(source, identifier, arguments != null? Arrays.asList(arguments): Collections.emptyList());
}
public ActionInvokedEvent(
final S source,
- final String action,
- final String parameters) {
+ final Identifier identifier,
+ final List<Object> arguments) {
super(source);
- this.action = action;
- this.parameters = parameters;
+ this.identifier = identifier;
+ this.arguments = Collections.unmodifiableList(arguments);
}
@Override
@@ -57,15 +61,14 @@ public abstract class ActionInvokedEvent<S> extends java.util.EventObject {
public S getSource() {
return (S)source;
}
- public String getAction() {
- return action;
+ public Identifier getIdentifier() {
+ return identifier;
}
- public String getParameters() {
- return parameters;
+ public List<Object> getArguments() {
+ return arguments;
}
-
@Override
public String toString() {
- return ObjectContracts.toString(this, "source,action,parameters");
+ return ObjectContracts.toString(this, "source,identifier");
}
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/isis/blob/e1f19baa/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/CollectionAddedToEvent.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/CollectionAddedToEvent.java b/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/CollectionAddedToEvent.java
index 2b4302d..ca8f2ee 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/CollectionAddedToEvent.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/CollectionAddedToEvent.java
@@ -28,22 +28,14 @@ public abstract class CollectionAddedToEvent<S,T> extends java.util.EventObject
public static class Default extends CollectionAddedToEvent<Object, Object> {
private static final long serialVersionUID = 1L;
+ public Default(Object source, Identifier identifier, Object value) {
+ super(source, identifier, value);
+ }
}
private final Identifier identifier;
private final T value;
- /**
- * To instantiate reflectively when the {@link PostsPropertyChangedEvent} annotation
- * is used.
- *
- * <p>
- * The fields ({@link #source} and {@link #value} are then set reflectively.
- */
- public CollectionAddedToEvent() {
- this(null, null, null);
- }
-
public CollectionAddedToEvent(
final S source,
final Identifier identifier,
http://git-wip-us.apache.org/repos/asf/isis/blob/e1f19baa/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/CollectionRemovedFromEvent.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/CollectionRemovedFromEvent.java b/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/CollectionRemovedFromEvent.java
index 47ff424..fb0d3ca 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/CollectionRemovedFromEvent.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/CollectionRemovedFromEvent.java
@@ -27,21 +27,14 @@ public abstract class CollectionRemovedFromEvent<S,T> extends java.util.EventObj
public static class Default extends CollectionRemovedFromEvent<Object, Object> {
private static final long serialVersionUID = 1L;
+ public Default(Object source, Identifier identifier, Object value) {
+ super(source, identifier, value);
+ }
}
private final Identifier identifier;
private final T value;
- /**
- * To instantiate reflectively when the {@link PostsCollectionRemovedFromEvent} annotation
- * is used.
- *
- * <p>
- * The fields ({@link #source} and {@link #value} are then set reflectively.
- */
- public CollectionRemovedFromEvent() {
- this(null, null, null);
- }
public CollectionRemovedFromEvent(
final S source,
final Identifier identifier,
http://git-wip-us.apache.org/repos/asf/isis/blob/e1f19baa/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/PropertyChangedEvent.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/PropertyChangedEvent.java b/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/PropertyChangedEvent.java
index 13666ff..a5fc83a 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/PropertyChangedEvent.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/PropertyChangedEvent.java
@@ -28,6 +28,9 @@ public abstract class PropertyChangedEvent<S,T> extends java.util.EventObject {
public static class Default extends PropertyChangedEvent<Object, Object> {
private static final long serialVersionUID = 1L;
+ public Default(Object source, Identifier identifier, Object oldValue, Object newValue) {
+ super(source, identifier, oldValue, newValue);
+ }
}
private final Identifier identifier;
@@ -35,26 +38,19 @@ public abstract class PropertyChangedEvent<S,T> extends java.util.EventObject {
private final T newValue;
/**
- * To instantiate reflectively when the {@link PostsPropertyChangedEvent} annotation
- * is used.
- *
- * <p>
- * The fields ({@link #source}, {@link #oldValue} and {@link #newValue}) are
- * then set reflectively.
- */
- public PropertyChangedEvent() {
- this(null, null, null, null);
- }
-
- /**
* @deprecated - use {@link #PropertyChangedEvent(Object, Identifier, Object, Object)}.
*/
@Deprecated
- public PropertyChangedEvent(S source, T oldValue, T newValue) {
+ public PropertyChangedEvent(
+ final S source,
+ final T oldValue, final T newValue) {
this(source, null, oldValue, newValue);
}
- public PropertyChangedEvent(S source, Identifier identifier, T oldValue, T newValue) {
+ public PropertyChangedEvent(
+ final S source,
+ final Identifier identifier,
+ final T oldValue, final T newValue) {
super(source);
this.identifier = identifier;
this.oldValue = oldValue;
http://git-wip-us.apache.org/repos/asf/isis/blob/e1f19baa/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java
index 859195f..e39f9e7 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java
@@ -250,10 +250,36 @@ public interface ObjectAdapter extends Instance, org.apache.isis.applib.annotati
private Util() {
}
+
public static Object unwrap(final ObjectAdapter adapter) {
return adapter != null ? adapter.getObject() : null;
}
+ public static Object[] unwrap(final ObjectAdapter[] adapters) {
+ if (adapters == null) {
+ return null;
+ }
+ final Object[] unwrappedObjects = new Object[adapters.length];
+ int i = 0;
+ for (final ObjectAdapter adapter : adapters) {
+ unwrappedObjects[i++] = unwrap(adapter);
+ }
+ return unwrappedObjects;
+ }
+
+ public static List<Object> unwrap(final List<ObjectAdapter> adapters) {
+ List<Object> objects = Lists.newArrayList();
+ for (ObjectAdapter adapter : adapters) {
+ objects.add(unwrap(adapter));
+ }
+ return objects;
+ }
+
+ @SuppressWarnings("unchecked")
+ public static <T> List<T> unwrapT(final List<ObjectAdapter> adapters) {
+ return (List<T>) unwrap(adapters);
+ }
+
public static String unwrapAsString(final ObjectAdapter adapter) {
final Object obj = unwrap(adapter);
if (obj == null) {
@@ -265,13 +291,45 @@ public interface ObjectAdapter extends Instance, org.apache.isis.applib.annotati
return (String) obj;
}
+ public static String titleString(final ObjectAdapter adapter) {
+ return adapter != null ? adapter.titleString(null) : "";
+ }
- public static List<Object> unwrap(final List<ObjectAdapter> adapters) {
- List<Object> objects = Lists.newArrayList();
- for (ObjectAdapter adapter : adapters) {
- objects.add(unwrap(adapter));
+ public static boolean exists(final ObjectAdapter adapter) {
+ return adapter != null && adapter.getObject() != null;
+ }
+
+ public static boolean wrappedEqual(final ObjectAdapter adapter1, final ObjectAdapter adapter2) {
+ final boolean defined1 = exists(adapter1);
+ final boolean defined2 = exists(adapter2);
+ if (defined1 && !defined2) {
+ return false;
}
- return objects;
+ if (!defined1 && defined2) {
+ return false;
+ }
+ if (!defined1 && !defined2) {
+ return true;
+ } // both null
+ return adapter1.getObject().equals(adapter2.getObject());
+ }
+
+ public static boolean nullSafeEquals(final Object obj1, final Object obj2) {
+ if (obj1 == null && obj2 == null) {
+ return true;
+ }
+ if (obj1 == null || obj2 == null) {
+ return false;
+ }
+ if (obj1.equals(obj2)) {
+ return true;
+ }
+ if (obj1 instanceof ObjectAdapter && obj2 instanceof ObjectAdapter) {
+ final ObjectAdapter adapterObj1 = (ObjectAdapter) obj1;
+ final ObjectAdapter adapterObj2 = (ObjectAdapter) obj2;
+ return nullSafeEquals(adapterObj1.getObject(), adapterObj2.getObject());
+ }
+ return false;
}
}
http://git-wip-us.apache.org/repos/asf/isis/blob/e1f19baa/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/util/AdapterUtils.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/util/AdapterUtils.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/util/AdapterUtils.java
index f64013e..eb3457d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/util/AdapterUtils.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/util/AdapterUtils.java
@@ -19,7 +19,6 @@
package org.apache.isis.core.metamodel.adapter.util;
-import java.util.ArrayList;
import java.util.List;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
@@ -28,71 +27,60 @@ public class AdapterUtils {
private AdapterUtils() {
}
-
+
+ /**
+ * @deprecated - use {@link ObjectAdapter.Util#exists(ObjectAdapter)}
+ */
+ @Deprecated
public static boolean exists(final ObjectAdapter adapter) {
- return adapter != null && adapter.getObject() != null;
+ return ObjectAdapter.Util.exists(adapter);
}
-
+
+ /**
+ * @deprecated - use {@link ObjectAdapter.Util#wrappedEqual(ObjectAdapter, ObjectAdapter)}
+ */
+ @Deprecated
public static boolean wrappedEqual(final ObjectAdapter adapter1, final ObjectAdapter adapter2) {
- final boolean defined1 = exists(adapter1);
- final boolean defined2 = exists(adapter2);
- if (defined1 && !defined2) {
- return false;
- }
- if (!defined1 && defined2) {
- return false;
- }
- if (!defined1 && !defined2) {
- return true;
- } // both null
- return adapter1.getObject().equals(adapter2.getObject());
+ return ObjectAdapter.Util.wrappedEqual(adapter1, adapter2);
}
+ /**
+ * @deprecated - use {@link ObjectAdapter.Util#unwrap(ObjectAdapter)}
+ */
+ @Deprecated
public static Object unwrap(final ObjectAdapter adapter) {
- return adapter != null ? adapter.getObject() : null;
+ return ObjectAdapter.Util.unwrap(adapter);
}
+ /**
+ * @deprecated - use {@link ObjectAdapter.Util#unwrap(ObjectAdapter[])}
+ */
public static Object[] unwrap(final ObjectAdapter[] adapters) {
- if (adapters == null) {
- return null;
- }
- final Object[] unwrappedObjects = new Object[adapters.length];
- int i = 0;
- for (final ObjectAdapter adapter : adapters) {
- unwrappedObjects[i++] = unwrap(adapter);
- }
- return unwrappedObjects;
+ return ObjectAdapter.Util.unwrap(adapters);
}
- @SuppressWarnings("unchecked")
+ /**
+ * @deprecated - use {@link ObjectAdapter.Util#unwrapT(List)}
+ */
+ @Deprecated
public static <T> List<T> unwrap(final List<ObjectAdapter> adapters) {
- final List<T> list = new ArrayList<T>();
- for (final ObjectAdapter adapter : adapters) {
- list.add((T) unwrap(adapter));
- }
- return list;
+ return ObjectAdapter.Util.unwrapT(adapters);
}
+ /**
+ * @deprecated - use {@link ObjectAdapter.Util#titleString(ObjectAdapter)}
+ */
+ @Deprecated
public static String titleString(final ObjectAdapter adapter) {
- return adapter != null ? adapter.titleString() : "";
+ return ObjectAdapter.Util.titleString(adapter);
}
+ /**
+ * @deprecated - use {@link ObjectAdapter.Util#nullSafeEquals(Object, Object)}
+ */
+ @Deprecated
public static boolean nullSafeEquals(final Object obj1, final Object obj2) {
- if (obj1 == null && obj2 == null) {
- return true;
- }
- if (obj1 == null || obj2 == null) {
- return false;
- }
- if (obj1.equals(obj2)) {
- return true;
- }
- if (obj1 instanceof ObjectAdapter && obj2 instanceof ObjectAdapter) {
- final ObjectAdapter adapterObj1 = (ObjectAdapter) obj1;
- final ObjectAdapter adapterObj2 = (ObjectAdapter) obj2;
- return nullSafeEquals(adapterObj1.getObject(), adapterObj2.getObject());
- }
- return false;
+ return ObjectAdapter.Util.nullSafeEquals(obj1, obj2);
}
}
http://git-wip-us.apache.org/repos/asf/isis/blob/e1f19baa/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/event/PostsActionInvokedEventFacet.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/event/PostsActionInvokedEventFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/event/PostsActionInvokedEventFacet.java
new file mode 100644
index 0000000..eefbda2
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/event/PostsActionInvokedEventFacet.java
@@ -0,0 +1,66 @@
+/*
+ * 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.actions.event;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+
+import org.apache.isis.applib.Identifier;
+import org.apache.isis.applib.services.eventbus.ActionInvokedEvent;
+import org.apache.isis.core.metamodel.facets.actions.invoke.ActionInvocationFacet;
+
+/**
+ * Extends the mechanism by which the action should be invoked by sending an
+ * Event to the internal Event Bus after being invoked without throwing
+ * an Exception.
+ */
+public interface PostsActionInvokedEventFacet extends ActionInvocationFacet {
+
+ public static class Util {
+ private Util(){}
+
+ @SuppressWarnings("unchecked")
+ public static <S> ActionInvokedEvent<S> newEvent(
+ final Class<? extends ActionInvokedEvent<S>> type,
+ final S source,
+ final Identifier identifier,
+ final Object... arguments) throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException {
+ final Constructor<?>[] constructors = type.getConstructors();
+ for (final Constructor<?> constructor : constructors) {
+ final Class<?>[] parameterTypes = constructor.getParameterTypes();
+ if(parameterTypes.length != 3) {
+ continue;
+ }
+ if(!parameterTypes[0].isAssignableFrom(source.getClass())) {
+ continue;
+ }
+ if(!parameterTypes[1].isAssignableFrom(Identifier.class)) {
+ continue;
+ }
+ if(!parameterTypes[2].isAssignableFrom(Object[].class)) {
+ continue;
+ }
+ final Object event = constructor.newInstance(source, identifier, arguments);
+ return (ActionInvokedEvent<S>) event;
+ }
+ throw new NoSuchMethodException(type.getName()+".<init>(? super " + source.getClass().getName() + ", " + Identifier.class.getName() + ", [Ljava.lang.Object;)");
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/e1f19baa/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/event/PostsActionInvokedEventFacetAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/event/PostsActionInvokedEventFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/event/PostsActionInvokedEventFacetAbstract.java
new file mode 100644
index 0000000..2d74722
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/event/PostsActionInvokedEventFacetAbstract.java
@@ -0,0 +1,44 @@
+/*
+ * 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.actions.event;
+
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.actions.invoke.ActionInvocationFacet;
+
+public abstract class PostsActionInvokedEventFacetAbstract
+ extends FacetAbstract
+ implements ActionInvocationFacet {
+
+ public static Class<? extends Facet> type() {
+
+ // the "primary" type is ActionInvocationFacet rather than PostsActionInvokedEventFacet
+ // so that this facet can wrap an existing (via setUnderlying).
+
+ //return PostsActionInvokedEventFacetAbstract.class;
+ return ActionInvocationFacet.class;
+ }
+
+ public PostsActionInvokedEventFacetAbstract(final FacetHolder holder) {
+ super(type(), holder, Derivation.NOT_DERIVED);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/e1f19baa/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/invoke/event/PostsActionInvokedEventFacet.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/invoke/event/PostsActionInvokedEventFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/invoke/event/PostsActionInvokedEventFacet.java
deleted file mode 100644
index 8f9d070..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/invoke/event/PostsActionInvokedEventFacet.java
+++ /dev/null
@@ -1,32 +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.actions.invoke.event;
-
-import org.apache.isis.core.metamodel.facets.actions.invoke.ActionInvocationFacet;
-
-/**
- * Extends the mechanism by which the action should be invoked by sending an
- * Event to the internal Event Bus after being invoked without throwing
- * an Exception.
- *
- */
-public interface PostsActionInvokedEventFacet extends ActionInvocationFacet {
-
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/e1f19baa/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/invoke/event/PostsActionInvokedEventFacetAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/invoke/event/PostsActionInvokedEventFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/invoke/event/PostsActionInvokedEventFacetAbstract.java
deleted file mode 100644
index 8a0115f..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/invoke/event/PostsActionInvokedEventFacetAbstract.java
+++ /dev/null
@@ -1,42 +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.actions.invoke.event;
-
-import org.apache.isis.core.metamodel.facetapi.Facet;
-import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.actions.invoke.ActionInvocationFacet;
-
-public abstract class PostsActionInvokedEventFacetAbstract extends FacetAbstract implements ActionInvocationFacet {
-
- public static Class<? extends Facet> type() {
-
- // the "primary" type is ActionInvocationFacet rather than PostsActionInvokedEventFacet
- // so that this facet can wrap an existing (via setUnderlying).
-
- //return PostsActionInvokedEventFacetAbstract.class;
- return ActionInvocationFacet.class;
- }
-
- public PostsActionInvokedEventFacetAbstract(final FacetHolder holder) {
- super(type(), holder, Derivation.NOT_DERIVED);
- }
-
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/e1f19baa/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/event/PostsCollectionAddedToEventFacet.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/event/PostsCollectionAddedToEventFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/event/PostsCollectionAddedToEventFacet.java
index f437667..f64aa8d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/event/PostsCollectionAddedToEventFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/event/PostsCollectionAddedToEventFacet.java
@@ -19,8 +19,13 @@
package org.apache.isis.core.metamodel.facets.collections.event;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+
+import org.apache.isis.applib.Identifier;
import org.apache.isis.applib.services.eventbus.CollectionAddedToEvent;
import org.apache.isis.applib.services.eventbus.EventBusService;
+import org.apache.isis.applib.services.eventbus.PropertyChangedEvent;
import org.apache.isis.core.metamodel.facetapi.MultiTypedFacet;
import org.apache.isis.core.metamodel.facets.SingleValueFacet;
import org.apache.isis.core.metamodel.facets.collections.modify.CollectionAddToFacet;
@@ -30,5 +35,37 @@ import org.apache.isis.core.metamodel.facets.collections.modify.CollectionAddToF
* {@link EventBusService}.
*/
public interface PostsCollectionAddedToEventFacet extends SingleValueFacet<Class<? extends CollectionAddedToEvent<?,?>>>, CollectionAddToFacet, MultiTypedFacet {
+
+ public static class Util {
+ private Util(){}
+
+ @SuppressWarnings("unchecked")
+ public static <S, T> CollectionAddedToEvent<S, T> newEvent(
+ final Class<? extends CollectionAddedToEvent<S, T>> type,
+ final S source,
+ final Identifier identifier,
+ final T value) 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 != 3) {
+ continue;
+ }
+ if(!parameterTypes[0].isAssignableFrom(source.getClass())) {
+ continue;
+ }
+ if(!parameterTypes[1].isAssignableFrom(Identifier.class)) {
+ continue;
+ }
+ if(value != null && !parameterTypes[2].isAssignableFrom(value.getClass())) {
+ continue;
+ }
+ final Object event = constructor.newInstance(source, identifier, value);
+ return (CollectionAddedToEvent<S, T>) event;
+ }
+ throw new NoSuchMethodException(type.getName()+".<init>(? super " + source.getClass().getName() + ", " + Identifier.class.getName() + ", java.lang.Object)");
+ }
+
+ }
}
http://git-wip-us.apache.org/repos/asf/isis/blob/e1f19baa/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/event/PostsCollectionAddedToEventFacetAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/event/PostsCollectionAddedToEventFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/event/PostsCollectionAddedToEventFacetAbstract.java
index 7423a41..57a1618 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/event/PostsCollectionAddedToEventFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/event/PostsCollectionAddedToEventFacetAbstract.java
@@ -19,7 +19,12 @@
package org.apache.isis.core.metamodel.facets.collections.event;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+
+import org.apache.isis.applib.Identifier;
import org.apache.isis.applib.services.eventbus.CollectionAddedToEvent;
+import org.apache.isis.applib.services.eventbus.PropertyChangedEvent;
import org.apache.isis.core.metamodel.facetapi.Facet;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.SingleValueFacetAbstract;
@@ -45,4 +50,5 @@ public abstract class PostsCollectionAddedToEventFacetAbstract
super(type(), changedEventType, holder);
}
+
}
http://git-wip-us.apache.org/repos/asf/isis/blob/e1f19baa/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/event/PostsCollectionRemovedFromEventFacet.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/event/PostsCollectionRemovedFromEventFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/event/PostsCollectionRemovedFromEventFacet.java
index 90a657b..18ff1b6 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/event/PostsCollectionRemovedFromEventFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/event/PostsCollectionRemovedFromEventFacet.java
@@ -19,6 +19,10 @@
package org.apache.isis.core.metamodel.facets.collections.event;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+
+import org.apache.isis.applib.Identifier;
import org.apache.isis.applib.services.eventbus.CollectionRemovedFromEvent;
import org.apache.isis.applib.services.eventbus.EventBusService;
import org.apache.isis.core.metamodel.facetapi.MultiTypedFacet;
@@ -30,5 +34,39 @@ import org.apache.isis.core.metamodel.facets.collections.modify.CollectionRemove
* {@link EventBusService}.
*/
public interface PostsCollectionRemovedFromEventFacet extends SingleValueFacet<Class<? extends CollectionRemovedFromEvent<?,?>>>, CollectionRemoveFromFacet, MultiTypedFacet {
+
+
+ public static class Util {
+ private Util(){}
+
+ @SuppressWarnings("unchecked")
+ public static <S, T> CollectionRemovedFromEvent<S, T> newEvent(
+ final Class<? extends CollectionRemovedFromEvent<S, T>> type,
+ final S source,
+ final Identifier identifier,
+ final T value)
+ throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException {
+ final Constructor<?>[] constructors = type.getConstructors();
+ for (final Constructor<?> constructor : constructors) {
+ final Class<?>[] parameterTypes = constructor.getParameterTypes();
+ if(parameterTypes.length != 3) {
+ continue;
+ }
+ if(!parameterTypes[0].isAssignableFrom(source.getClass())) {
+ continue;
+ }
+ if(!parameterTypes[1].isAssignableFrom(Identifier.class)) {
+ continue;
+ }
+ if(value != null && !parameterTypes[2].isAssignableFrom(value.getClass())) {
+ continue;
+ }
+ final Object event = constructor.newInstance(source, identifier, value);
+ return (CollectionRemovedFromEvent<S, T>) event;
+ }
+ throw new NoSuchMethodException(type.getName()+".<init>(? super " + source.getClass().getName() + ", " + Identifier.class.getName() + ", java.lang.Object)");
+ }
+ }
+
}
http://git-wip-us.apache.org/repos/asf/isis/blob/e1f19baa/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/event/PostsCollectionRemovedFromEventFacetAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/event/PostsCollectionRemovedFromEventFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/event/PostsCollectionRemovedFromEventFacetAbstract.java
index 18fc423..ed1e0a4 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/event/PostsCollectionRemovedFromEventFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/event/PostsCollectionRemovedFromEventFacetAbstract.java
@@ -19,6 +19,9 @@
package org.apache.isis.core.metamodel.facets.collections.event;
+import java.lang.reflect.InvocationTargetException;
+
+import org.apache.isis.applib.Identifier;
import org.apache.isis.applib.services.eventbus.CollectionRemovedFromEvent;
import org.apache.isis.core.metamodel.facetapi.Facet;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
http://git-wip-us.apache.org/repos/asf/isis/blob/e1f19baa/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/event/PostsPropertyChangedEventFacet.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/event/PostsPropertyChangedEventFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/event/PostsPropertyChangedEventFacet.java
index a01e7f4..a7d3fd5 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/event/PostsPropertyChangedEventFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/event/PostsPropertyChangedEventFacet.java
@@ -19,6 +19,11 @@
package org.apache.isis.core.metamodel.facets.properties.event;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+
+import org.apache.isis.applib.Identifier;
+import org.apache.isis.applib.services.eventbus.ActionInvokedEvent;
import org.apache.isis.applib.services.eventbus.EventBusService;
import org.apache.isis.applib.services.eventbus.PropertyChangedEvent;
import org.apache.isis.core.metamodel.facetapi.MultiTypedFacet;
@@ -32,4 +37,37 @@ import org.apache.isis.core.metamodel.facets.properties.modify.PropertySetterFac
*/
public interface PostsPropertyChangedEventFacet extends SingleValueFacet<Class<? extends PropertyChangedEvent<?,?>>>, PropertyClearFacet, PropertySetterFacet, MultiTypedFacet {
+ public static class Util {
+ private Util(){}
+ @SuppressWarnings("unchecked")
+ public static <S,T> PropertyChangedEvent<S,T> newEvent(
+ final Class<? extends PropertyChangedEvent<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 (PropertyChangedEvent<S, T>) event;
+ }
+ throw new NoSuchMethodException(type.getName()+".<init>(? super " + source.getClass().getName() + ", " + Identifier.class.getName() + ", java.lang.Object, java.lang.Object)");
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/isis/blob/e1f19baa/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/event/PostsPropertyChangedEventFacetAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/event/PostsPropertyChangedEventFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/event/PostsPropertyChangedEventFacetAbstract.java
index 1acbf8d..968d4ae 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/event/PostsPropertyChangedEventFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/event/PostsPropertyChangedEventFacetAbstract.java
@@ -19,6 +19,10 @@
package org.apache.isis.core.metamodel.facets.properties.event;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+
+import org.apache.isis.applib.Identifier;
import org.apache.isis.applib.services.eventbus.PropertyChangedEvent;
import org.apache.isis.core.metamodel.facetapi.Facet;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
http://git-wip-us.apache.org/repos/asf/isis/blob/e1f19baa/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/invoke/ActionInvocationFacetViaMethod.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/invoke/ActionInvocationFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/invoke/ActionInvocationFacetViaMethod.java
index 4f9dfbf..e9956d1 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/invoke/ActionInvocationFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/invoke/ActionInvocationFacetViaMethod.java
@@ -162,9 +162,6 @@ public class ActionInvocationFacetViaMethod extends ActionInvocationFacetAbstrac
public ObjectAdapter getAdapter() {
return adapter;
}
-
-
-
}
protected InvocationResult internalInvoke(
http://git-wip-us.apache.org/repos/asf/isis/blob/e1f19baa/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/invoke/event/PostsActionInvokedEventFacetAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/invoke/event/PostsActionInvokedEventFacetAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/invoke/event/PostsActionInvokedEventFacetAnnotation.java
new file mode 100644
index 0000000..db1155f
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/invoke/event/PostsActionInvokedEventFacetAnnotation.java
@@ -0,0 +1,112 @@
+/*
+ * 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.progmodel.facets.actions.invoke.event;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+
+import org.apache.isis.applib.FatalException;
+import org.apache.isis.applib.Identifier;
+import org.apache.isis.applib.services.eventbus.ActionInvokedEvent;
+import org.apache.isis.applib.services.eventbus.CollectionAddedToEvent;
+import org.apache.isis.applib.services.eventbus.EventBusService;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
+import org.apache.isis.core.metamodel.adapter.util.AdapterUtils;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.ImperativeFacet;
+import org.apache.isis.core.metamodel.facets.actions.event.PostsActionInvokedEventFacet;
+import org.apache.isis.core.metamodel.runtimecontext.RuntimeContext;
+import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
+import org.apache.isis.core.progmodel.facets.actions.invoke.ActionInvocationFacetViaMethod;
+
+public class PostsActionInvokedEventFacetAnnotation
+ extends ActionInvocationFacetViaMethod
+ implements ImperativeFacet, PostsActionInvokedEventFacet {
+
+ private ServicesInjector servicesInjector;
+ private Class<? extends ActionInvokedEvent<?>> eventType;
+
+ private EventBusService eventBusService;
+ private boolean searchedForEventBusService = false;
+
+ public PostsActionInvokedEventFacetAnnotation(
+ final Method method,
+ final ObjectSpecification onType,
+ final ObjectSpecification returnType,
+ final FacetHolder holder,
+ final RuntimeContext runtimeContext,
+ final AdapterManager adapterManager,
+ final ServicesInjector servicesInjector,
+ final Class<? extends ActionInvokedEvent<?>> eventType) {
+ super(method, onType, returnType, holder, runtimeContext, adapterManager, servicesInjector);
+
+ this.servicesInjector = servicesInjector;
+
+ this.eventType = eventType;
+ }
+
+ @Override
+ public ObjectAdapter invoke(
+ final ObjectAction owningAction,
+ final ObjectAdapter targetAdapter,
+ final ObjectAdapter[] arguments) {
+
+ final InvocationResult invocationResult = this.internalInvoke(owningAction, targetAdapter, arguments);
+
+ // Perhaps the Action was not properly invoked (i.e. an exception was raised).
+ if (invocationResult.getWhetherInvoked()) {
+ // If invoked, then send the ActionInvokedEvent to the EventBus.
+ postEvent(owningAction, targetAdapter, arguments);
+ }
+
+ return invocationResult.getAdapter();
+ }
+
+ @SuppressWarnings({ "rawtypes" })
+ private void postEvent(
+ final ObjectAction owningAction,
+ final ObjectAdapter targetAdapter,
+ final ObjectAdapter[] argumentAdapters) {
+
+ try {
+ final Class type = eventType;
+ Identifier actionIdentifier = owningAction.getIdentifier();
+ final Object source = AdapterUtils.unwrap(targetAdapter);
+ final Object[] arguments = AdapterUtils.unwrap(argumentAdapters);
+ @SuppressWarnings("unchecked")
+ final ActionInvokedEvent<?> event = org.apache.isis.core.metamodel.facets.actions.event.PostsActionInvokedEventFacet.Util.newEvent(type, source, actionIdentifier, arguments);
+ getEventBusService().post(event);
+ } catch (Exception e) {
+ throw new FatalException(e);
+ }
+ }
+
+ private EventBusService getEventBusService() {
+ if (!searchedForEventBusService) {
+ eventBusService = this.servicesInjector.lookupService(EventBusService.class);
+ }
+ searchedForEventBusService = true;
+ return eventBusService;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/e1f19baa/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/invoke/event/PostsActionInvokedEventFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/invoke/event/PostsActionInvokedEventFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/invoke/event/PostsActionInvokedEventFacetFactory.java
index e46e7cc..d52b55a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/invoke/event/PostsActionInvokedEventFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/invoke/event/PostsActionInvokedEventFacetFactory.java
@@ -21,7 +21,9 @@ package org.apache.isis.core.progmodel.facets.actions.invoke.event;
import java.lang.reflect.Method;
+import org.apache.isis.applib.annotation.PostsActionInvokedEvent;
import org.apache.isis.applib.annotation.PostsCollectionAddedToEvent;
+import org.apache.isis.applib.services.eventbus.ActionInvokedEvent;
import org.apache.isis.applib.services.eventbus.CollectionAddedToEvent;
import org.apache.isis.core.commons.lang.StringExtensions;
import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
@@ -97,7 +99,7 @@ public class PostsActionInvokedEventFacetFactory extends MethodPrefixBasedFacetF
final Method actionMethod = processMethodContext.getMethod();
try {
- final PostsCollectionAddedToEvent annotation = Annotations.getAnnotation(actionMethod, PostsCollectionAddedToEvent.class);
+ final PostsActionInvokedEvent annotation = Annotations.getAnnotation(actionMethod, PostsActionInvokedEvent.class);
if(annotation == null) {
return;
}
@@ -112,9 +114,9 @@ public class PostsActionInvokedEventFacetFactory extends MethodPrefixBasedFacetF
final ObjectSpecification typeSpec = getSpecificationLoader().loadSpecification(cls);
final FacetHolder holder = processMethodContext.getFacetHolder();
- final Class<? extends CollectionAddedToEvent<?,?>> changedEventType = annotation.value();
+ final Class<? extends ActionInvokedEvent<?>> changedEventType = annotation.value();
- FacetUtil.addFacet(new PostsActionInvokedEventFacetViaMethod(actionMethod, typeSpec, returnSpec, holder, getRuntimeContext(), getAdapterManager(), getServicesInjector(), changedEventType));
+ FacetUtil.addFacet(new PostsActionInvokedEventFacetAnnotation(actionMethod, typeSpec, returnSpec, holder, getRuntimeContext(), getAdapterManager(), getServicesInjector(), changedEventType));
} finally {
processMethodContext.removeMethod(actionMethod);
}
http://git-wip-us.apache.org/repos/asf/isis/blob/e1f19baa/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/invoke/event/PostsActionInvokedEventFacetViaMethod.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/invoke/event/PostsActionInvokedEventFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/invoke/event/PostsActionInvokedEventFacetViaMethod.java
deleted file mode 100644
index 16f2fb7..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/invoke/event/PostsActionInvokedEventFacetViaMethod.java
+++ /dev/null
@@ -1,129 +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.progmodel.facets.actions.invoke.event;
-
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-
-import org.apache.isis.applib.FatalException;
-import org.apache.isis.applib.services.eventbus.ActionInvokedEvent;
-import org.apache.isis.applib.services.eventbus.CollectionAddedToEvent;
-import org.apache.isis.applib.services.eventbus.EventBusService;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.ImperativeFacet;
-import org.apache.isis.core.metamodel.runtimecontext.RuntimeContext;
-import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
-import org.apache.isis.core.progmodel.facets.actions.invoke.ActionInvocationFacetViaMethod;
-
-public class PostsActionInvokedEventFacetViaMethod extends ActionInvocationFacetViaMethod implements ImperativeFacet {
-
- private EventBusService eventBusService;
- private boolean searchedForEventBusService = false;
- private ServicesInjector servicesInjector;
- private Class<? extends CollectionAddedToEvent<?, ?>> eventType;
-
- public PostsActionInvokedEventFacetViaMethod(
- final Method method,
- final ObjectSpecification onType,
- final ObjectSpecification returnType,
- final FacetHolder holder,
- final RuntimeContext runtimeContext,
- final AdapterManager adapterManager,
- final ServicesInjector servicesInjector,
- final Class<? extends CollectionAddedToEvent<?, ?>> eventType) {
- super(method, onType, returnType, holder, runtimeContext, adapterManager, servicesInjector);
-
- // Also needed here.
- this.servicesInjector = servicesInjector;
-
- this.eventType = eventType;
- }
-
- @Override
- public ObjectAdapter invoke(
- final ObjectAction owningAction,
- final ObjectAdapter targetAdapter,
- final ObjectAdapter[] arguments) {
-
- final InvocationResult invocationResult = this.internalInvoke(owningAction, targetAdapter, arguments);
-
- // Perhaps the Action was not properly invoked (i.e. an exception was raised).
- if (invocationResult.getWhetherInvoked()) {
- // If invoked, then send the ActionInvokedEvent to the EventBus.
- postEvent(owningAction, targetAdapter, arguments);
- }
-
- return invocationResult.getAdapter();
-
- }
-
- @SuppressWarnings({ "rawtypes", "unchecked" })
- private void postEvent(
- final ObjectAction owningAction,
- final ObjectAdapter targetAdapter,
- final ObjectAdapter[] arguments) {
-
- final Object source = targetAdapter.getObject();
- try {
- final Class type = eventType;
- final ActionInvokedEvent event = newEvent(type, owningAction, source, arguments);
- getEventBusService().post(event);
- } catch (Exception e) {
- throw new FatalException(e);
- }
- }
-
- static <S> ActionInvokedEvent<S> newEvent(
- final Class<? extends ActionInvokedEvent<S>> type,
- final ObjectAction owningAction,
- final S source,
- final ObjectAdapter[] arguments)
- throws InstantiationException, IllegalAccessException,
- NoSuchFieldException {
- final ActionInvokedEvent<S> event = type.newInstance();
-
- setField("owningAction", event, owningAction);
- setField("targetAdapter", event, source);
- setField("arguments", event, arguments.toString());
- return event;
- }
-
- private static void setField(final String name,
- final ActionInvokedEvent<?> event, final Object sourceValue)
- throws NoSuchFieldException, IllegalAccessException {
- final Field sourceField = CollectionAddedToEvent.class
- .getDeclaredField(name);
- sourceField.setAccessible(true);
- sourceField.set(event, sourceValue);
- }
-
- private EventBusService getEventBusService() {
- if (!searchedForEventBusService) {
- eventBusService = this.servicesInjector.lookupService(EventBusService.class);
- }
- searchedForEventBusService = true;
- return eventBusService;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/e1f19baa/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/collections/event/PostsCollectionAddedToEventAnnotationFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/collections/event/PostsCollectionAddedToEventAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/collections/event/PostsCollectionAddedToEventAnnotationFacetFactory.java
index 5292f07..d59a07a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/collections/event/PostsCollectionAddedToEventAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/collections/event/PostsCollectionAddedToEventAnnotationFacetFactory.java
@@ -33,10 +33,12 @@ import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
import org.apache.isis.core.metamodel.facets.accessor.PropertyOrCollectionAccessorFacet;
import org.apache.isis.core.metamodel.facets.collections.event.PostsCollectionAddedToEventFacet;
import org.apache.isis.core.metamodel.facets.collections.modify.CollectionAddToFacet;
+import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
+import org.apache.isis.core.metamodel.runtimecontext.ServicesInjectorAware;
-public class PostsCollectionAddedToEventAnnotationFacetFactory extends FacetFactoryAbstract implements ServicesProviderAware {
+public class PostsCollectionAddedToEventAnnotationFacetFactory extends FacetFactoryAbstract implements ServicesInjectorAware {
- private ServicesProvider servicesProvider;
+ private ServicesInjector servicesInjector;
public PostsCollectionAddedToEventAnnotationFacetFactory() {
super(FeatureType.COLLECTIONS_ONLY);
@@ -65,12 +67,14 @@ public class PostsCollectionAddedToEventAnnotationFacetFactory extends FacetFact
// the collectionAddToFacet will end up as the underlying facet of the PostsCollectionAddedToEventFacetAnnotation
final Class<? extends CollectionAddedToEvent<?,?>> changedEventType = annotation.value();
- return new PostsCollectionAddedToEventFacetAnnotation(changedEventType, getterFacet, collectionAddToFacet, servicesProvider, holder);
+ return new PostsCollectionAddedToEventFacetAnnotation(changedEventType, getterFacet, collectionAddToFacet, servicesInjector, holder);
}
+ // //////////////////////////////////////
+
@Override
- public void setServicesProvider(ServicesProvider servicesProvider) {
- this.servicesProvider = servicesProvider;
+ public void setServicesInjector(ServicesInjector servicesInjector) {
+ this.servicesInjector = servicesInjector;
}
}
http://git-wip-us.apache.org/repos/asf/isis/blob/e1f19baa/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/collections/event/PostsCollectionAddedToEventFacetAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/collections/event/PostsCollectionAddedToEventFacetAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/collections/event/PostsCollectionAddedToEventFacetAnnotation.java
index e566300..e093b44 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/collections/event/PostsCollectionAddedToEventFacetAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/collections/event/PostsCollectionAddedToEventFacetAnnotation.java
@@ -19,8 +19,6 @@
package org.apache.isis.core.progmodel.facets.collections.event;
-import java.lang.reflect.Field;
-import java.util.List;
import java.util.Set;
import com.google.common.collect.Lists;
@@ -30,7 +28,6 @@ import org.apache.isis.applib.Identifier;
import org.apache.isis.applib.services.eventbus.CollectionAddedToEvent;
import org.apache.isis.applib.services.eventbus.EventBusService;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.ServicesProvider;
import org.apache.isis.core.metamodel.adapter.util.AdapterUtils;
import org.apache.isis.core.metamodel.facetapi.Facet;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
@@ -38,13 +35,14 @@ import org.apache.isis.core.metamodel.facets.accessor.PropertyOrCollectionAccess
import org.apache.isis.core.metamodel.facets.collections.event.PostsCollectionAddedToEventFacet;
import org.apache.isis.core.metamodel.facets.collections.event.PostsCollectionAddedToEventFacetAbstract;
import org.apache.isis.core.metamodel.facets.collections.modify.CollectionAddToFacet;
+import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
public class PostsCollectionAddedToEventFacetAnnotation
extends PostsCollectionAddedToEventFacetAbstract {
private final PropertyOrCollectionAccessorFacet getterFacet;
private final CollectionAddToFacet collectionAddToFacet;
- private final ServicesProvider servicesProvider;
+ private final ServicesInjector servicesInjector;
private EventBusService eventBusService;
private boolean searchedForEventBusService = false;
@@ -53,12 +51,12 @@ public class PostsCollectionAddedToEventFacetAnnotation
final Class<? extends CollectionAddedToEvent<?, ?>> eventType,
final PropertyOrCollectionAccessorFacet getterFacet,
final CollectionAddToFacet collectionAddToFacet,
- final ServicesProvider servicesProvider,
+ final ServicesInjector servicesInjector,
final FacetHolder holder) {
super(eventType, holder);
this.getterFacet = getterFacet;
this.collectionAddToFacet = collectionAddToFacet;
- this.servicesProvider = servicesProvider;
+ this.servicesInjector = servicesInjector;
}
@Override
@@ -97,55 +95,23 @@ public class PostsCollectionAddedToEventFacetAnnotation
final Identifier identifier,
final Object addedReference) {
- final Object source = targetAdapter.getObject();
try {
final Class type = value();
- final CollectionAddedToEvent<?, ?> event = newEvent(type, source, identifier, addedReference);
+ final Object source = AdapterUtils.unwrap(targetAdapter);
+ final CollectionAddedToEvent<?, ?> event = Util.newEvent(type, source, identifier, addedReference);
eventBusService.post(event);
} catch (Exception e) {
throw new FatalException(e);
}
}
- static <S, T> CollectionAddedToEvent<S, T> newEvent(
- final Class<? extends CollectionAddedToEvent<S, T>> type,
- final S source,
- final Identifier identifier,
- final T value)
- throws InstantiationException, IllegalAccessException,
- NoSuchFieldException {
- final CollectionAddedToEvent<S, T> event = type.newInstance();
-
- setField("source", event, source);
- setField("identifier", event, identifier);
- setField("value", event, value);
- return event;
- }
-
- private static void setField(final String name,
- final CollectionAddedToEvent<?, ?> event, final Object sourceValue)
- throws NoSuchFieldException, IllegalAccessException {
- final Field sourceField = CollectionAddedToEvent.class
- .getDeclaredField(name);
- sourceField.setAccessible(true);
- sourceField.set(event, sourceValue);
- }
-
- private EventBusService getEventBusService() {
- if (!searchedForEventBusService) {
- final List<ObjectAdapter> serviceAdapters = servicesProvider
- .getServices();
- for (ObjectAdapter serviceAdapter : serviceAdapters) {
- final Object service = serviceAdapter.getObject();
- if (service instanceof EventBusService) {
- eventBusService = (EventBusService) service;
- break;
- }
- }
- }
- searchedForEventBusService = true;
- return eventBusService;
- }
+ private EventBusService getEventBusService() {
+ if (!searchedForEventBusService) {
+ eventBusService = this.servicesInjector.lookupService(EventBusService.class);
+ }
+ searchedForEventBusService = true;
+ return eventBusService;
+ }
// //////////////////////////////////////
// MultiTypedFacet
http://git-wip-us.apache.org/repos/asf/isis/blob/e1f19baa/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/collections/event/PostsCollectionRemovedFromEventAnnotationFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/collections/event/PostsCollectionRemovedFromEventAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/collections/event/PostsCollectionRemovedFromEventAnnotationFacetFactory.java
index abf039c..c8b8ffa 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/collections/event/PostsCollectionRemovedFromEventAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/collections/event/PostsCollectionRemovedFromEventAnnotationFacetFactory.java
@@ -33,10 +33,12 @@ import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
import org.apache.isis.core.metamodel.facets.accessor.PropertyOrCollectionAccessorFacet;
import org.apache.isis.core.metamodel.facets.collections.event.PostsCollectionRemovedFromEventFacet;
import org.apache.isis.core.metamodel.facets.collections.modify.CollectionRemoveFromFacet;
+import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
+import org.apache.isis.core.metamodel.runtimecontext.ServicesInjectorAware;
-public class PostsCollectionRemovedFromEventAnnotationFacetFactory extends FacetFactoryAbstract implements ServicesProviderAware {
+public class PostsCollectionRemovedFromEventAnnotationFacetFactory extends FacetFactoryAbstract implements ServicesInjectorAware {
- private ServicesProvider servicesProvider;
+ private ServicesInjector servicesInjector;
public PostsCollectionRemovedFromEventAnnotationFacetFactory() {
super(FeatureType.COLLECTIONS_ONLY);
@@ -65,12 +67,14 @@ public class PostsCollectionRemovedFromEventAnnotationFacetFactory extends Facet
// the collectionRemoveFromFacet will end up as the underlying facet of the PostsCollectionRemovedFromEventFacetAnnotation
final Class<? extends CollectionRemovedFromEvent<?,?>> changedEventType = annotation.value();
- return new PostsCollectionRemovedFromEventFacetAnnotation(changedEventType, getterFacet, collectionRemoveFromFacet, servicesProvider, holder);
+ return new PostsCollectionRemovedFromEventFacetAnnotation(changedEventType, getterFacet, collectionRemoveFromFacet, servicesInjector, holder);
}
+ // //////////////////////////////////////
+
@Override
- public void setServicesProvider(ServicesProvider servicesProvider) {
- this.servicesProvider = servicesProvider;
+ public void setServicesInjector(ServicesInjector servicesInjector) {
+ this.servicesInjector = servicesInjector;
}
}
http://git-wip-us.apache.org/repos/asf/isis/blob/e1f19baa/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/collections/event/PostsCollectionRemovedFromEventFacetAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/collections/event/PostsCollectionRemovedFromEventFacetAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/collections/event/PostsCollectionRemovedFromEventFacetAnnotation.java
index 98524cf..0cd48c9 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/collections/event/PostsCollectionRemovedFromEventFacetAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/collections/event/PostsCollectionRemovedFromEventFacetAnnotation.java
@@ -20,6 +20,7 @@
package org.apache.isis.core.progmodel.facets.collections.event;
import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
import java.util.Collection;
import java.util.List;
@@ -38,13 +39,14 @@ import org.apache.isis.core.metamodel.facets.accessor.PropertyOrCollectionAccess
import org.apache.isis.core.metamodel.facets.collections.event.PostsCollectionRemovedFromEventFacet;
import org.apache.isis.core.metamodel.facets.collections.event.PostsCollectionRemovedFromEventFacetAbstract;
import org.apache.isis.core.metamodel.facets.collections.modify.CollectionRemoveFromFacet;
+import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
public class PostsCollectionRemovedFromEventFacetAnnotation extends
PostsCollectionRemovedFromEventFacetAbstract {
private final PropertyOrCollectionAccessorFacet getterFacet;
private final CollectionRemoveFromFacet collectionRemoveFromFacet;
- private final ServicesProvider servicesProvider;
+ private final ServicesInjector servicesInjector;
private EventBusService eventBusService;
private boolean searchedForEventBusService = false;
@@ -53,11 +55,12 @@ public class PostsCollectionRemovedFromEventFacetAnnotation extends
final Class<? extends CollectionRemovedFromEvent<?, ?>> eventType,
final PropertyOrCollectionAccessorFacet getterFacet,
final CollectionRemoveFromFacet collectionRemoveFromFacet,
- final ServicesProvider servicesProvider, final FacetHolder holder) {
+ final ServicesInjector servicesInjector,
+ final FacetHolder holder) {
super(eventType, holder);
this.getterFacet = getterFacet;
this.collectionRemoveFromFacet = collectionRemoveFromFacet;
- this.servicesProvider = servicesProvider;
+ this.servicesInjector = servicesInjector;
}
@Override
@@ -96,54 +99,23 @@ public class PostsCollectionRemovedFromEventFacetAnnotation extends
private void postEvent(final ObjectAdapter targetAdapter,
final Identifier identifier, final Object removedReference) {
- final Object source = targetAdapter.getObject();
try {
final Class type = value();
- final CollectionRemovedFromEvent<?, ?> event = newEvent(type, source,
- identifier, removedReference);
+ final Object source = AdapterUtils.unwrap(targetAdapter);
+ final CollectionRemovedFromEvent<?, ?> event = Util.newEvent(type, source, identifier, removedReference);
eventBusService.post(event);
} catch (Exception e) {
throw new FatalException(e);
}
}
- static <S, T> CollectionRemovedFromEvent<S, T> newEvent(
- final Class<? extends CollectionRemovedFromEvent<S, T>> type,
- final S source, final Identifier identifier, final T value)
- throws InstantiationException, IllegalAccessException,
- NoSuchFieldException {
- final CollectionRemovedFromEvent<S, T> event = type.newInstance();
-
- setField("source", event, source);
- setField("identifier", event, identifier);
- setField("value", event, value);
- return event;
- }
-
- private static void setField(final String name,
- final CollectionRemovedFromEvent<?, ?> event, final Object sourceValue)
- throws NoSuchFieldException, IllegalAccessException {
- final Field sourceField = CollectionRemovedFromEvent.class
- .getDeclaredField(name);
- sourceField.setAccessible(true);
- sourceField.set(event, sourceValue);
- }
-
- private EventBusService getEventBusService() {
- if (!searchedForEventBusService) {
- final List<ObjectAdapter> serviceAdapters = servicesProvider
- .getServices();
- for (ObjectAdapter serviceAdapter : serviceAdapters) {
- final Object service = serviceAdapter.getObject();
- if (service instanceof EventBusService) {
- eventBusService = (EventBusService) service;
- break;
- }
- }
- }
- searchedForEventBusService = true;
- return eventBusService;
- }
+ private EventBusService getEventBusService() {
+ if (!searchedForEventBusService) {
+ eventBusService = this.servicesInjector.lookupService(EventBusService.class);
+ }
+ searchedForEventBusService = true;
+ return eventBusService;
+ }
// //////////////////////////////////////
// MultiTypedFacet
http://git-wip-us.apache.org/repos/asf/isis/blob/e1f19baa/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/event/PostsPropertyChangedEventAnnotationFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/event/PostsPropertyChangedEventAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/event/PostsPropertyChangedEventAnnotationFacetFactory.java
index 030a5b3..89bd745 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/event/PostsPropertyChangedEventAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/event/PostsPropertyChangedEventAnnotationFacetFactory.java
@@ -39,6 +39,8 @@ import org.apache.isis.core.metamodel.facets.collections.sortedby.SortedByFacet;
import org.apache.isis.core.metamodel.facets.properties.event.PostsPropertyChangedEventFacet;
import org.apache.isis.core.metamodel.facets.properties.modify.PropertyClearFacet;
import org.apache.isis.core.metamodel.facets.properties.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;
@@ -47,9 +49,9 @@ import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorVis
import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorVisiting.Visitor;
import org.apache.isis.core.metamodel.specloader.validator.ValidationFailures;
-public class PostsPropertyChangedEventAnnotationFacetFactory extends FacetFactoryAbstract implements ServicesProviderAware, MetaModelValidatorRefiner {
+public class PostsPropertyChangedEventAnnotationFacetFactory extends FacetFactoryAbstract implements ServicesInjectorAware, MetaModelValidatorRefiner {
- private ServicesProvider servicesProvider;
+ private ServicesInjector servicesInjector;
public PostsPropertyChangedEventAnnotationFacetFactory() {
super(FeatureType.PROPERTIES_ONLY);
@@ -89,14 +91,11 @@ public class PostsPropertyChangedEventAnnotationFacetFactory extends FacetFactor
}
final Class<? extends PropertyChangedEvent<?, ?>> changedEventType = annotation.value();
- return new PostsPropertyChangedEventFacetAnnotation(changedEventType, getterFacet, setterFacet, clearFacet, servicesProvider, holder);
- }
-
- @Override
- public void setServicesProvider(ServicesProvider servicesProvider) {
- this.servicesProvider = servicesProvider;
+ return new PostsPropertyChangedEventFacetAnnotation(changedEventType, getterFacet, setterFacet, clearFacet, servicesInjector, holder);
}
+ // //////////////////////////////////////
+
@Override
public void refineMetaModelValidator(MetaModelValidatorComposite metaModelValidator, IsisConfiguration configuration) {
metaModelValidator.add(new MetaModelValidatorVisiting(newValidatorVisitor()));
@@ -122,4 +121,12 @@ public class PostsPropertyChangedEventAnnotationFacetFactory extends FacetFactor
};
}
+ // //////////////////////////////////////
+
+ @Override
+ public void setServicesInjector(ServicesInjector servicesInjector) {
+ this.servicesInjector = servicesInjector;
+ }
+
+
}
http://git-wip-us.apache.org/repos/asf/isis/blob/e1f19baa/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/event/PostsPropertyChangedEventFacetAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/event/PostsPropertyChangedEventFacetAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/event/PostsPropertyChangedEventFacetAnnotation.java
index 017cf48..db67de1 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/event/PostsPropertyChangedEventFacetAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/event/PostsPropertyChangedEventFacetAnnotation.java
@@ -19,7 +19,9 @@
package org.apache.isis.core.progmodel.facets.properties.event;
+import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
import java.util.List;
import com.google.common.base.Objects;
@@ -31,6 +33,7 @@ import org.apache.isis.applib.services.eventbus.EventBusService;
import org.apache.isis.applib.services.eventbus.PropertyChangedEvent;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.adapter.ServicesProvider;
+import org.apache.isis.core.metamodel.adapter.util.AdapterUtils;
import org.apache.isis.core.metamodel.facetapi.Facet;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.accessor.PropertyOrCollectionAccessorFacet;
@@ -38,13 +41,14 @@ import org.apache.isis.core.metamodel.facets.properties.event.PostsPropertyChang
import org.apache.isis.core.metamodel.facets.properties.event.PostsPropertyChangedEventFacetAbstract;
import org.apache.isis.core.metamodel.facets.properties.modify.PropertyClearFacet;
import org.apache.isis.core.metamodel.facets.properties.modify.PropertySetterFacet;
+import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
public class PostsPropertyChangedEventFacetAnnotation extends PostsPropertyChangedEventFacetAbstract {
private final PropertyOrCollectionAccessorFacet getterFacet;
private final PropertySetterFacet setterFacet;
private final PropertyClearFacet clearFacet;
- private final ServicesProvider servicesProvider;
+ private final ServicesInjector servicesInjector;
private EventBusService eventBusService;
private boolean searchedForEventBusService = false;
@@ -54,13 +58,13 @@ public class PostsPropertyChangedEventFacetAnnotation extends PostsPropertyChang
final PropertyOrCollectionAccessorFacet getterFacet,
final PropertySetterFacet setterFacet,
final PropertyClearFacet clearFacet,
- final ServicesProvider servicesProvider,
+ final ServicesInjector servicesInjector,
final FacetHolder holder) {
super(eventType, holder);
this.getterFacet = getterFacet;
this.setterFacet = setterFacet;
this.clearFacet = clearFacet;
- this.servicesProvider = servicesProvider;
+ this.servicesInjector = servicesInjector;
}
@Override
@@ -110,10 +114,10 @@ public class PostsPropertyChangedEventFacetAnnotation extends PostsPropertyChang
// do nothing.
return;
}
- final Object source = targetAdapter.getObject();
try {
final Class type = value();
- final PropertyChangedEvent<?, ?> event = newEvent(type, source, identifier, oldValue, newValue);
+ final Object source = ObjectAdapter.Util.unwrap(targetAdapter);
+ final PropertyChangedEvent<?, ?> event = Util.newEvent(type, source, identifier, oldValue, newValue);
eventBusService.post(event);
} catch (Exception e) {
@@ -121,38 +125,10 @@ public class PostsPropertyChangedEventFacetAnnotation extends PostsPropertyChang
}
}
- static <S,T> PropertyChangedEvent<S,T> newEvent(
- final Class<? extends PropertyChangedEvent<S, T>> type,
- final S source,
- final Identifier identifier,
- final T oldValue,
- final T newValue) throws InstantiationException, IllegalAccessException, NoSuchFieldException {
- final PropertyChangedEvent<S, T> event = type.newInstance();
-
- setField("source", event, source);
- setField("identifier", event, identifier);
- setField("oldValue", event, oldValue);
- setField("newValue", event, newValue);
- return event;
- }
-
- private static void setField(final String name, final PropertyChangedEvent<?, ?> event, final Object sourceValue) throws NoSuchFieldException, IllegalAccessException {
- final Field sourceField = PropertyChangedEvent.class.getDeclaredField(name);
- sourceField.setAccessible(true);
- sourceField.set(event, sourceValue);
- }
-
private EventBusService getEventBusService() {
- if(!searchedForEventBusService) {
- final List<ObjectAdapter> serviceAdapters = servicesProvider.getServices();
- for (ObjectAdapter serviceAdapter : serviceAdapters) {
- final Object service = serviceAdapter.getObject();
- if(service instanceof EventBusService) {
- eventBusService = (EventBusService) service;
- break;
- }
- }
- }
+ if (!searchedForEventBusService) {
+ eventBusService = this.servicesInjector.lookupService(EventBusService.class);
+ }
searchedForEventBusService = true;
return eventBusService;
}