You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2014/03/23 10:26:41 UTC
svn commit: r1580476 - in /tomee/tomee/trunk/container/openejb-loader/src:
main/java/org/apache/openejb/observer/ObserverManager.java
test/java/org/apache/openejb/observer/ObserverManagerTest.java
Author: rmannibucau
Date: Sun Mar 23 09:26:41 2014
New Revision: 1580476
URL: http://svn.apache.org/r1580476
Log:
regression tests of David passing, side note: should surely be reviewed since behavior was not shocking
Modified:
tomee/tomee/trunk/container/openejb-loader/src/main/java/org/apache/openejb/observer/ObserverManager.java
tomee/tomee/trunk/container/openejb-loader/src/test/java/org/apache/openejb/observer/ObserverManagerTest.java
Modified: tomee/tomee/trunk/container/openejb-loader/src/main/java/org/apache/openejb/observer/ObserverManager.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-loader/src/main/java/org/apache/openejb/observer/ObserverManager.java?rev=1580476&r1=1580475&r2=1580476&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-loader/src/main/java/org/apache/openejb/observer/ObserverManager.java (original)
+++ tomee/tomee/trunk/container/openejb-loader/src/main/java/org/apache/openejb/observer/ObserverManager.java Sun Mar 23 09:26:41 2014
@@ -52,7 +52,7 @@ public class ObserverManager {
final boolean added = observers.add(obs);
if (added) {
// Observers can observe they have been added and are active
- doFire(new ObserverAdded(observer));
+ doFire(new ObserverAdded(observer), true);
}
return added;
}
@@ -63,7 +63,7 @@ public class ObserverManager {
final boolean removed = observers.remove(new Observer(observer));
if (removed) {
// Observers can observe they are to be removed
- doFire(new ObserverRemoved(observer));
+ doFire(new ObserverRemoved(observer), true);
}
return removed;
}
@@ -71,16 +71,16 @@ public class ObserverManager {
public <T> T fireEvent(final T event) {
if (event == null) throw new IllegalArgumentException("event cannot be null");
- doFire(new BeforeEventImpl<T>(event));
- doFire(event);
- doFire(new AfterEventImpl<T>(event));
+ doFire(new BeforeEventImpl<T>(event), true);
+ doFire(event, false);
+ doFire(new AfterEventImpl<T>(event), true);
return event;
}
- private void doFire(final Object event) {
+ private void doFire(final Object event, final boolean internal) {
final List<Invocation> invocations = new LinkedList<Invocation>();
for (final Observer observer : observers) {
- final Invocation i = observer.toInvocation(event);
+ final Invocation i = observer.toInvocation(event, internal);
if (i != null) {
invocations.add(i);
}
@@ -167,51 +167,28 @@ public class ObserverManager {
}
}
- public Invocation toInvocation(final Object event) {
+ public Invocation toInvocation(final Object event, final boolean internal) {
if (event == null) throw new IllegalArgumentException("event cannot be null");
final Class eventType = event.getClass();
final Method method = methods.get(eventType);
+ if (internal && method == null) {
+ return null;
+ }
if (method == null && AfterEventImpl.class.isInstance(event)) {
- final Type type = new ParameterizedType() {
- @Override
- public Type[] getActualTypeArguments() {
- return new Type[] { AfterEventImpl.class.cast(event).getEvent().getClass() };
- }
-
- @Override
- public Type getRawType() {
- return AfterEvent.class;
- }
-
- @Override
- public Type getOwnerType() {
- return null;
- }
- };
+ final Type[] types = new Type[] {AfterEventImpl.class.cast(event).getEvent().getClass()};
+ final Type raw = AfterEvent.class;
+ final Type type = new ParameterizedTypeImpl(types, raw) ;
for (final Map.Entry<Type, Method> m : methods.entrySet()) {
if (m.getKey().equals(type)) {
return new Invocation(this, m.getValue(), event);
}
}
} else if (method == null && BeforeEventImpl.class.isInstance(event)) {
- final Type type = new ParameterizedType() {
- @Override
- public Type[] getActualTypeArguments() {
- return new Type[] { BeforeEventImpl.class.cast(event).getEvent().getClass() };
- }
-
- @Override
- public Type getRawType() {
- return BeforeEvent.class;
- }
-
- @Override
- public Type getOwnerType() {
- return null;
- }
- };
+ final Type[] types = new Type[] { BeforeEventImpl.class.cast(event).getEvent().getClass() };
+ final Type raw = BeforeEvent.class;
+ final Type type = new ParameterizedTypeImpl(types, raw) ;
for (final Map.Entry<Type, Method> m : methods.entrySet()) {
if (m.getKey().equals(type)) {
return new Invocation(this, m.getValue(), event);
@@ -319,4 +296,29 @@ public class ObserverManager {
return event;
}
}
+
+ private static class ParameterizedTypeImpl implements ParameterizedType {
+ private final Type[] types;
+ private final Type raw;
+
+ private ParameterizedTypeImpl(final Type[] types, final Type raw) {
+ this.types = types;
+ this.raw = raw;
+ }
+
+ @Override
+ public Type[] getActualTypeArguments() {
+ return types;
+ }
+
+ @Override
+ public Type getRawType() {
+ return raw;
+ }
+
+ @Override
+ public Type getOwnerType() {
+ return null;
+ }
+ }
}
Modified: tomee/tomee/trunk/container/openejb-loader/src/test/java/org/apache/openejb/observer/ObserverManagerTest.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-loader/src/test/java/org/apache/openejb/observer/ObserverManagerTest.java?rev=1580476&r1=1580475&r2=1580476&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-loader/src/test/java/org/apache/openejb/observer/ObserverManagerTest.java (original)
+++ tomee/tomee/trunk/container/openejb-loader/src/test/java/org/apache/openejb/observer/ObserverManagerTest.java Sun Mar 23 09:26:41 2014
@@ -37,21 +37,18 @@ public class ObserverManagerTest extends
}
@Test
- @Ignore("Passed with previous ObserverManager, now fails")
public void canObserveObject() throws Exception {
observers.fireEvent("");
assertEvent(BasicObserver.object);
}
@Test
- @Ignore("Passed with previous ObserverManager, now fails")
public void objectNotInvoked() throws Exception {
observers.fireEvent(new Color());
assertEvent(BasicObserver.color);
}
@Test
- @Ignore("Passed with previous ObserverManager, now fails")
public void observeEmerald() throws Exception {
observers.fireEvent(new Emerald());
assertEvent(BasicObserver.emerald);