[webbeans-commits] Webbeans SVN: r186 - in ri/trunk/webbeans-ri/src: test/java/org/jboss/webbeans/test and 1 other directory.

webbeans-commits at lists.jboss.org webbeans-commits at lists.jboss.org
Mon Oct 27 18:25:28 EDT 2008


Author: dallen6
Date: 2008-10-27 18:25:28 -0400 (Mon, 27 Oct 2008)
New Revision: 186

Modified:
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/event/DeferredEventNotification.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/event/EventBus.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/event/EventImpl.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/event/EventObserver.java
   ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/DeferredEventNotificationTest.java
   ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/EventObserverTest.java
Log:
Removed unnecessary code from EventObserver wrapper and cleaned up more event classes and unit tests; deferred event notifications are parameterized again.

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/event/DeferredEventNotification.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/event/DeferredEventNotification.java	2008-10-27 21:55:36 UTC (rev 185)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/event/DeferredEventNotification.java	2008-10-27 22:25:28 UTC (rev 186)
@@ -10,10 +10,10 @@
  * @author David Allen
  *
  */
-public class DeferredEventNotification implements Synchronization
+public class DeferredEventNotification<T> implements Synchronization
 {
-   private Observer<?> observer;
-   private Object event;
+   private Observer<T> observer;
+   private T event;
    
    /**
     * Creates a new deferred event notifier.
@@ -22,7 +22,7 @@
     * @param observer The observer to be notified
     * @param event The event being fired
     */
-   public DeferredEventNotification(Object event, Observer<?> observer)
+   public DeferredEventNotification(T event, Observer<T> observer)
    {
       this.observer = observer;
       this.event = event;
@@ -31,7 +31,7 @@
    /**
     * @return the observer
     */
-   public final Observer<?> getObserver()
+   public final Observer<T> getObserver()
    {
       return observer;
    }
@@ -44,8 +44,7 @@
    public void beforeCompletion()
    {
       // Execute the observer method on the event
-      // TODO It is impossible to use a template variable for this observer, so notify cannot be called
-      //observer.notify(event);      
+      observer.notify(event);      
    }
 
 }

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/event/EventBus.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/event/EventBus.java	2008-10-27 21:55:36 UTC (rev 185)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/event/EventBus.java	2008-10-27 22:25:28 UTC (rev 186)
@@ -40,7 +40,7 @@
    /**
     * Adds an observer to the event bus so that it receives event notifications.
     * 
-    * @param o
+    * @param observer
     *           The observer that should receive events
     */
    public <T> void addObserver(Observer<T> observer, Class<T> eventType, Annotation... bindings)
@@ -64,13 +64,13 @@
     *           The WebBeans container
     * @param event
     *           The event object to deliver
-    * @param o
+    * @param observer
     *           The observer to receive the event
     * @throws SystemException
     * @throws IllegalStateException
     * @throws RollbackException
     */
-   public void deferEvent(Object event, Observer<?> o)
+   public <T> void deferEvent(T event, Observer<T> observer)
          throws SystemException, IllegalStateException, RollbackException
    {
       if (transactionManager != null)
@@ -78,8 +78,8 @@
          // Get the current transaction associated with the thread
          Transaction t = transactionManager.getTransaction();
          if (t != null)
-            t.registerSynchronization(new DeferredEventNotification(
-                  event, o));
+            t.registerSynchronization(new DeferredEventNotification<T>(
+                  event, observer));
       }
    }
 

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/event/EventImpl.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/event/EventImpl.java	2008-10-27 21:55:36 UTC (rev 185)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/event/EventImpl.java	2008-10-27 22:25:28 UTC (rev 186)
@@ -16,6 +16,8 @@
 import javax.webbeans.Observer;
 import javax.webbeans.manager.Manager;
 
+import org.jboss.webbeans.util.Reflections;
+
 /**
  * Implementation of the {@link Event} interface used for the container provided
  * Web Bean to be injected for an observable event. See section 7.4 of the JSR
@@ -72,28 +74,12 @@
    public void observe(Observer<T> observer, Annotation... bindings)
    {
       // Register the observer with the web beans manager
-      Class<T> eventArgumentClazz = null;
-      try
-      {
-         // TODO Fix me:  Reflection can only get type variables, not the arguments used elsewhere
-         Field eventTypeField = this.getClass().getDeclaredField("eventType");
-         ParameterizedType genericType = (ParameterizedType) eventTypeField.getGenericType();
-         Type[] eventTypeArguments = genericType.getActualTypeArguments();
-         eventArgumentClazz = (Class<T>) eventTypeArguments[0];
-      } catch (SecurityException e)
-      {
-         // TODO Auto-generated catch block
-         e.printStackTrace();
-      } catch (NoSuchFieldException e)
-      {
-         // TODO Auto-generated catch block
-         e.printStackTrace();
-      }
       
       Set<Annotation> eventBindings = new HashSet<Annotation>();
       eventBindings.addAll(this.getBindingTypes());
       addAnnotationBindings(eventBindings, bindings);
-      webBeansManager.addObserver(observer, eventArgumentClazz, bindings);
+      Type[] observerTypeArguments = Reflections.getActualTypeArguements(observer.getClass());
+      webBeansManager.addObserver(observer, (Class<T>)observerTypeArguments[0], bindings);
    }
 
    /**

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/event/EventObserver.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/event/EventObserver.java	2008-10-27 21:55:36 UTC (rev 185)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/event/EventObserver.java	2008-10-27 22:25:28 UTC (rev 186)
@@ -12,7 +12,9 @@
  * code or by the Web Beans Manager for annotated observer methods. In all
  * cases, this wrapper provides consistent object identification and hashing
  * based on the type of event being observed and any event binding types
- * specified.
+ * specified.  It also provides a query method to quickly determine if a
+ * set of event bindings are exactly what the observer is interested in receiving.
+ * </p>
  * 
  * @author David Allen
  * 
@@ -20,11 +22,9 @@
 public class EventObserver<T>
 {
    
-   // TODO This probably should be an injectable or annotated item
-   
-   private final Class<T> eventType;
-   private final Annotation[] eventBindings;
-   private final Observer<T> observer;
+   private final Class<T>         eventType;
+   private final List<Annotation> eventBindings;
+   private final Observer<T>      observer;
 
    /**
     * Constructs a new wrapper for an observer.
@@ -41,7 +41,7 @@
    {
       this.observer = observer;
       this.eventType = eventType;
-      this.eventBindings = eventBindings;
+      this.eventBindings = Arrays.asList(eventBindings);
    }
 
    /**
@@ -55,7 +55,7 @@
    /**
     * @return the eventBindings
     */
-   public final Annotation[] getEventBindings()
+   public final List<Annotation> getEventBindings()
    {
       return eventBindings;
    }
@@ -77,32 +77,12 @@
     */
    public boolean isObserverInterested(Annotation... bindings)
    {
-      // TODO This logic needs to be in injectable
+      // Simply check that all event bindings specified by the observer are
+      // in the list provided.
+      List<Annotation> bindingsArray = Arrays.asList(bindings);
       boolean result = true;
-      // Check each binding specified by this observer against those provided
-      if (this.eventBindings.length > 0)
-      {
-         if ((bindings != null) && (bindings.length > 0))
-         {
-            List<Annotation> bindingsArray = Arrays.asList(bindings);
-            for (Annotation annotation : this.eventBindings)
-            {
-               int eventBindingIndex = bindingsArray.indexOf(annotation);
-               if (eventBindingIndex >= 0)
-               {
-                  //result = annotationsMatch(annotation, bindingsArray.get(eventBindingIndex));
-                  result = annotation.equals(bindingsArray.get(eventBindingIndex));
-               } else
-               {
-                  result = false;
-                  break;
-               }
-            }
-         } else
-         {
-            result = false;
-         }
-      }
+      if (!this.eventBindings.isEmpty())
+         result = bindingsArray.containsAll(this.eventBindings);
       return result;
    }
 

Modified: ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/DeferredEventNotificationTest.java
===================================================================
--- ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/DeferredEventNotificationTest.java	2008-10-27 21:55:36 UTC (rev 185)
+++ ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/DeferredEventNotificationTest.java	2008-10-27 22:25:28 UTC (rev 186)
@@ -80,7 +80,7 @@
       Observer<Event> observer = new MockObserverImpl<Event>(tuna, om, Event.class);
       ((MockObserverImpl<Event>) observer).setInstance(observerInstance);
       Event event = new Event();
-      DeferredEventNotification deferredNotification = new DeferredEventNotification(event, observer);
+      DeferredEventNotification<Event> deferredNotification = new DeferredEventNotification<Event>(event, observer);
       deferredNotification.beforeCompletion();
       assert observerInstance.notified;
    }

Modified: ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/EventObserverTest.java
===================================================================
--- ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/EventObserverTest.java	2008-10-27 21:55:36 UTC (rev 185)
+++ ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/EventObserverTest.java	2008-10-27 22:25:28 UTC (rev 186)
@@ -38,7 +38,7 @@
    {
       Observer<DangerCall> observer = new AnObserver<DangerCall>();
       EventObserver<DangerCall> wrappedObserver = new EventObserver<DangerCall>(observer, DangerCall.class, new TameAnnotationLiteral());
-      assert wrappedObserver.getEventBindings().length == 1;
+      assert wrappedObserver.getEventBindings().size() == 1;
       assert wrappedObserver.isObserverInterested(new TameAnnotationLiteral());
       assert !wrappedObserver.isObserverInterested(new AnimalStereotypeAnnotationLiteral());
       assert !wrappedObserver.isObserverInterested();
@@ -46,7 +46,7 @@
       
       // Perform some tests with binding values (7.7.1)
       wrappedObserver = new EventObserver<DangerCall>(observer, DangerCall.class, new RoleBinding("Admin"));
-      assert wrappedObserver.getEventBindings().length == 1;
+      assert wrappedObserver.getEventBindings().size() == 1;
       assert wrappedObserver.isObserverInterested(new RoleBinding("Admin"));
       assert !wrappedObserver.isObserverInterested(new RoleBinding("User"));
    }




More information about the weld-commits mailing list