[webbeans-commits] Webbeans SVN: r115 - in ri/trunk/webbeans-ri/src: main/java/org/jboss/webbeans/model and 3 other directories.

webbeans-commits at lists.jboss.org webbeans-commits at lists.jboss.org
Tue Oct 7 12:19:54 EDT 2008


Author: dallen6
Date: 2008-10-07 12:19:54 -0400 (Tue, 07 Oct 2008)
New Revision: 115

Added:
   ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/EventTest.java
   ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/components/DangerCall.java
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/ObserverMethod.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/AbstractComponentModel.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/EventComponentModel.java
   ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/mock/MockContainerImpl.java
Log:
Restructured the event component model and added new test for the implementation of Event.

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-02 05:45:13 UTC (rev 114)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/event/DeferredEventNotification.java	2008-10-07 16:19:54 UTC (rev 115)
@@ -13,21 +13,21 @@
  */
 public class DeferredEventNotification implements Synchronization
 {
-   private Manager         container;
+   private Manager           manager;
    private Observer<Object>  observer;
    private Object            event;
    
    /**
     * Creates a new deferred event notifier.
     * 
-    * @param container The Web Beans container
+    * @param manager The Web Beans manager
     * @param observer The observer to be notified
     * @param event The event being fired
     */
    @SuppressWarnings("unchecked")
-   public DeferredEventNotification(Manager container, Object event, Observer observer)
+   public DeferredEventNotification(Manager manager, Object event, Observer observer)
    {
-      this.container = container;
+      this.manager = manager;
       this.observer = observer;
       this.event = event;
    }
@@ -40,7 +40,7 @@
    public void beforeCompletion()
    {
       // Execute the observer method on the event
-      observer.notify(container, event);      
+      observer.notify(manager, 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-02 05:45:13 UTC (rev 114)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/event/EventBus.java	2008-10-07 16:19:54 UTC (rev 115)
@@ -25,7 +25,7 @@
  */
 public class EventBus
 {
-   private final Map<Integer, Set<Observer>> registeredObservers;
+   private final Map<Integer, Set<Observer<?>>>  registeredObservers;
    private final TransactionManager           tm;
    private String                             tmName = "java:/TransactionManager";
    
@@ -38,7 +38,7 @@
     */
    public EventBus()
    {
-      registeredObservers = new HashMap<Integer, Set<Observer>>();
+      registeredObservers = new HashMap<Integer, Set<Observer<?>>>();
       tm = JNDI.lookup(tmName, TransactionManager.class);
    }
 
@@ -47,12 +47,12 @@
     * event information is already encapsulated as part of the observer.
     * @param o The observer that should receive events
     */
-   public void addObserver(Observer o)
+   public void addObserver(Observer<?> o)
    {
       int key = generateKey(o.getEventType(), o.getEventBindingTypes());
-      Set<Observer> l = registeredObservers.get(key);
+      Set<Observer<?>> l = registeredObservers.get(key);
       if (l == null)
-         l = new HashSet<Observer>();
+         l = new HashSet<Observer<?>>();
       l.add(o);
       registeredObservers.put(key, l);
    }
@@ -67,7 +67,7 @@
     * @throws IllegalStateException
     * @throws RollbackException
     */
-   public void deferEvent(Manager container, Object event, Observer o) throws SystemException, IllegalStateException, RollbackException
+   public void deferEvent(Manager container, Object event, Observer<?> o) throws SystemException, IllegalStateException, RollbackException
    {
       if (tm != null) {
          // Get the current transaction associated with the thread
@@ -84,18 +84,24 @@
     * @param bindings Optional event bindings
     * @return A set of Observers
     */
-   public Set getObservers(Object event, Annotation... bindings)
+   @SuppressWarnings("unchecked")
+   public <T> Set<Observer<T>> getObservers(T event, Annotation... bindings)
    {
-      return registeredObservers.get(generateKey(event.getClass(), Arrays.asList(bindings)));
+      Set<Observer<T>> results = new HashSet<Observer<T>>();
+      for (Observer<?> observer : registeredObservers.get(generateKey(event.getClass(), Arrays.asList(bindings))))
+      {
+         results.add((Observer<T>) observer);
+      }
+      return results;
    }
 
    /**
     * Removes an observer from the event bus.
     * @param o The observer to remove
     */
-   public void removeObserver(Observer o)
+   public void removeObserver(Observer<?> o)
    {
-      Set<Observer> l = registeredObservers.get(generateKey(o.getEventType(), o.getEventBindingTypes()));
+      Set<Observer<?>> l = registeredObservers.get(generateKey(o.getEventType(), o.getEventBindingTypes()));
       if (l != null) {
          l.remove(o);
       }
@@ -108,7 +114,7 @@
     * @param eventBindings An optional set of event bindings
     * @return
     */
-   public int generateKey(Class<?> eventType, Collection eventBindings)
+   public int generateKey(Class<?> eventType, Collection<Annotation> eventBindings)
    {
       // Produce the sum of the hash codes for the event type and the set of
       // event bindings.

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-02 05:45:13 UTC (rev 114)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/event/EventImpl.java	2008-10-07 16:19:54 UTC (rev 115)
@@ -5,7 +5,9 @@
 import java.util.Set;
 import java.util.HashSet;
 
+import javax.webbeans.Current;
 import javax.webbeans.Event;
+import javax.webbeans.manager.Manager;
 
 import org.jboss.webbeans.BeanImpl;
 import org.jboss.webbeans.model.EventComponentModel;
@@ -18,7 +20,9 @@
  */
 public class EventImpl<T> extends BeanImpl<T> implements Event<T>
 {
-   private EventComponentModel<T> componentModel;
+   // The current WB manager
+   @Current
+   protected Manager webBeansManager;
 
    /**
     * Creates a simple implementation of {@link Event} with no default
@@ -26,7 +30,6 @@
     */
    public EventImpl(EventComponentModel<T> componentMetaModel) {
       super(componentMetaModel);
-      this.componentModel = componentMetaModel;
    }
  
    /* (non-Javadoc)
@@ -41,7 +44,7 @@
       eventBindings.addAll(Arrays.asList(bindings));
       
       // Invoke the container method to fire the event per 7.2
-      componentModel.getContainer().fireEvent(event, eventBindings.toArray(new Annotation[0]));
+      webBeansManager.fireEvent(event, eventBindings.toArray(new Annotation[0]));
    }
 
 }

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/event/ObserverMethod.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/event/ObserverMethod.java	2008-10-02 05:45:13 UTC (rev 114)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/event/ObserverMethod.java	2008-10-07 16:19:54 UTC (rev 115)
@@ -27,15 +27,15 @@
     * Invokes the method on the given component instance and uses the specified
     * event object for parameter injection.
     * 
-    * @param container The WebBeans container
+    * @param manager The WebBeans manager
     * @param instance The component instance to invoke the observer method on
     * @param event The event object being fired
     */
-   public void invoke(Manager container, Object instance, Object event)
+   public void invoke(Manager manager, Object instance, Object event)
    {
       try
       {
-         getMethod().invoke(instance, getParameterValues(container, event));
+         getMethod().invoke(instance, getParameterValues(manager, event));
       }
       catch (Exception e) 
       {
@@ -47,16 +47,16 @@
     * Creates a list of parameter values to inject and uses the specified event object
     * to inject the observed event.
     * 
-    * @param container The WebBeans container
+    * @param manager The WebBeans manager
     * @param event The event being fired
     * @return an array of objects that serve as arguments for the invocation of the method
     */
    @SuppressWarnings("unchecked")
-   public Object[] getParameterValues(Manager container, Object event)
+   public Object[] getParameterValues(Manager manager, Object event)
    {
       // Let the super class get the parameter values, but substitute the event
       // object so that we know for certain it is the correct one.
-      Object[] parameterValues = super.getParameterValues(container);
+      Object[] parameterValues = super.getParameterValues(manager);
       List<Parameter> parms = this.getParameters();
       int i = 0;
       for (Parameter p : parms)

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/AbstractComponentModel.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/AbstractComponentModel.java	2008-10-02 05:45:13 UTC (rev 114)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/AbstractComponentModel.java	2008-10-07 16:19:54 UTC (rev 115)
@@ -30,8 +30,8 @@
    private static Logger log = LoggerUtil.getLogger(LOGGER_NAME);
    
    private Set<Annotation> bindingTypes;
-   private String name;
-   private Annotation scopeType;
+   protected String name;
+   protected Annotation scopeType;
    private MergedStereotypesModel<T, E> mergedStereotypes;
    protected Annotation deploymentType;
    protected Class<T> type;

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/EventComponentModel.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/EventComponentModel.java	2008-10-02 05:45:13 UTC (rev 114)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/model/EventComponentModel.java	2008-10-07 16:19:54 UTC (rev 115)
@@ -1,13 +1,11 @@
 package org.jboss.webbeans.model;
 
-import java.lang.annotation.Annotation;
-
-import javax.webbeans.manager.Manager;
-
 import org.jboss.webbeans.ManagerImpl;
 import org.jboss.webbeans.bindings.DependentAnnotationLiteral;
 import org.jboss.webbeans.bindings.StandardAnnotationLiteral;
-import org.jboss.webbeans.introspector.AnnotatedType;
+import org.jboss.webbeans.injectable.ComponentConstructor;
+import org.jboss.webbeans.introspector.AnnotatedItem;
+import org.jboss.webbeans.introspector.SimpleAnnotatedItem;
 
 /**
  * Web Beans component meta model for the container instantiated, injectable, 
@@ -16,56 +14,108 @@
  * @author David Allen
  *
  */
-public class EventComponentModel<T> extends SimpleComponentModel<T>
+public class EventComponentModel<T> extends AbstractComponentModel<T, Object>
 {
+   private String location;
+   private AnnotatedItem<Object> annotatedItem;
+   private AnnotatedItem<Object> xmlAnnotatedItem;
 
-   private StandardAnnotationLiteral  deploymentType = new StandardAnnotationLiteral();
-   private DependentAnnotationLiteral scopeType      = new DependentAnnotationLiteral();
-   private ManagerImpl    container;
+   public EventComponentModel(SimpleAnnotatedItem<Object> annotatedItem, SimpleAnnotatedItem<Object> xmlAnnotatedItem, ManagerImpl manager)
+   {
+      this.annotatedItem = annotatedItem;
+      this.xmlAnnotatedItem = xmlAnnotatedItem;
+      this.init(manager);
+   }
 
-   /**
-    * Creates a new component model for an injectable, observable event object.
-    * @see org.jboss.webbeans.event.EventImpl
-    * 
-    * @param annotatedItem The injectable variable declared in Java
-    * @param xmlAnnotatedItem The injectable variable defined in XML
-    * @param container The Web Beans container
+   @Override
+   public ComponentConstructor<T> getConstructor()
+   {
+      // TODO No constructor is needed, but make sure this does not brake instantiation
+      return null;
+   }
+
+   @Override
+   public String getLocation()
+   {
+      if (location == null)
+      {
+         location = "type: Event Component;";
+      }
+      return location;
+   }
+
+   @Override
+   public String toString()
+   {
+      return "EventComponentModel[" + getType().getName() + "]";
+   }
+
+   /* (non-Javadoc)
+    * @see org.jboss.webbeans.model.AbstractClassComponentModel#initType()
     */
-   public EventComponentModel(AnnotatedType annotatedItem, AnnotatedType xmlAnnotatedItem, ManagerImpl container)
+   @Override
+   protected void initType()
    {
-      super(annotatedItem, xmlAnnotatedItem, container);
-      // This is needed later for the impl of Event to fire events with the container
-      this.container = container;
+      // TODO Type is null but maybe should be EventImpl
+      this.type = null;
    }
 
-   /**
-    * The implementation of the container used to create this model.
-    * @return the container
+   @Override
+   protected AnnotatedItem<Object> getAnnotatedItem()
+   {
+      return this.annotatedItem;
+   }
+
+   @Override
+   protected String getDefaultName()
+   {
+      // TODO Auto-generated method stub
+      return null;
+   }
+
+   @Override
+   protected AnnotatedItem<Object> getXmlAnnotatedItem()
+   {
+      return this.xmlAnnotatedItem;
+   }
+
+   /* (non-Javadoc)
+    * @see org.jboss.webbeans.model.AbstractComponentModel#checkDeploymentType()
     */
-   public Manager getContainer()
+   @Override
+   protected void checkDeploymentType()
    {
-      return container;
+      // TODO Let super class check deployment type once initType() is fixed.
    }
 
+   /* (non-Javadoc)
+    * @see org.jboss.webbeans.model.AbstractComponentModel#initDeploymentType(org.jboss.webbeans.ManagerImpl)
+    */
    @Override
-   public Annotation getDeploymentType()
+   protected void initDeploymentType(ManagerImpl container)
    {
       // This is always @Standard per 7.2
-      return deploymentType;
+      this.deploymentType = new StandardAnnotationLiteral();
    }
 
+   /* (non-Javadoc)
+    * @see org.jboss.webbeans.model.AbstractComponentModel#initName()
+    */
    @Override
-   public String getName()
+   protected void initName()
    {
       // No name per 7.2
-      return "";
+      this.name = null;
    }
 
+   /* (non-Javadoc)
+    * @see org.jboss.webbeans.model.AbstractComponentModel#initScopeType()
+    */
    @Override
-   public Annotation getScopeType()
+   protected void initScopeType()
    {
       // This is always @Dependent per 7.2
-      return scopeType;
+      this.scopeType = new DependentAnnotationLiteral();
    }
-
+   
 }

Added: ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/EventTest.java
===================================================================
--- ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/EventTest.java	                        (rev 0)
+++ ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/EventTest.java	2008-10-07 16:19:54 UTC (rev 115)
@@ -0,0 +1,63 @@
+package org.jboss.webbeans.test;
+
+import java.lang.annotation.Annotation;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+import javax.webbeans.Current;
+import javax.webbeans.Event;
+import org.jboss.webbeans.bindings.StandardAnnotationLiteral;
+import org.jboss.webbeans.event.EventImpl;
+import org.jboss.webbeans.introspector.SimpleAnnotatedItem;
+import org.jboss.webbeans.model.EventComponentModel;
+import org.jboss.webbeans.test.annotations.FishStereotype;
+import org.jboss.webbeans.test.annotations.RiverFishStereotype;
+import org.jboss.webbeans.test.bindings.AnotherDeploymentTypeAnnotationLiteral;
+import org.jboss.webbeans.test.bindings.FishStereotypeAnnotationLiteral;
+import org.jboss.webbeans.test.bindings.RiverFishStereotypeAnnotationLiteral;
+import org.jboss.webbeans.test.components.DangerCall;
+import org.jboss.webbeans.test.mock.MockContainerImpl;
+import org.jboss.webbeans.util.Reflections;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+/**
+ * Tests for the implementation of an Event component.
+ * 
+ * @author David Allen
+ *
+ */
+public class EventTest
+{
+   private MockContainerImpl manager = null;
+
+   @BeforeMethod
+   public void before() throws Exception
+   {
+      List<Annotation> enabledDeploymentTypes = new ArrayList<Annotation>();
+      enabledDeploymentTypes.add(new StandardAnnotationLiteral());
+      enabledDeploymentTypes.add(new AnotherDeploymentTypeAnnotationLiteral());
+      manager = new MockContainerImpl(enabledDeploymentTypes);
+   }
+
+   /**
+    * Tests the {@link Event#fire(Object, Annotation...)} method with a sample event
+    * component.
+    */
+   @SuppressWarnings("unchecked")
+   @Test(groups = "eventbus")
+   public void testFireEvent()
+   {
+      DangerCall anEvent = new DangerCall();
+      EventComponentModel<Event<DangerCall>> eventComponentModel = 
+         new EventComponentModel<Event<DangerCall>>(
+               new SimpleAnnotatedItem<Object>(new HashMap<Class<? extends Annotation>, Annotation>()),
+               new SimpleAnnotatedItem<Object>(new HashMap<Class<? extends Annotation>, Annotation>()),
+               manager);
+      Event<DangerCall> eventComponent = new EventImpl<DangerCall>(eventComponentModel);
+      eventComponent.fire(anEvent, new FishStereotypeAnnotationLiteral(), new RiverFishStereotypeAnnotationLiteral());
+      assert anEvent.equals(manager.getEvent());
+      assert Reflections.annotationSetMatches(manager.getEventBindings(), Current.class, FishStereotype.class, RiverFishStereotype.class);
+   }
+}


Property changes on: ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/EventTest.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/components/DangerCall.java
===================================================================
--- ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/components/DangerCall.java	                        (rev 0)
+++ ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/components/DangerCall.java	2008-10-07 16:19:54 UTC (rev 115)
@@ -0,0 +1,9 @@
+package org.jboss.webbeans.test.components;
+
+import javax.webbeans.Production;
+
+ at Production
+public class DangerCall
+{
+
+}


Property changes on: ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/components/DangerCall.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Modified: ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/mock/MockContainerImpl.java
===================================================================
--- ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/mock/MockContainerImpl.java	2008-10-02 05:45:13 UTC (rev 114)
+++ ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/mock/MockContainerImpl.java	2008-10-07 16:19:54 UTC (rev 115)
@@ -1,16 +1,52 @@
 package org.jboss.webbeans.test.mock;
 
 import java.lang.annotation.Annotation;
+import java.util.Arrays;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 
 import org.jboss.webbeans.ManagerImpl;
 
 public class MockContainerImpl extends ManagerImpl
 {
-   
+   private Object       event = null;
+   private Annotation[] eventBindings = null;
+
    public MockContainerImpl(List<Annotation> enabledDeploymentTypes)
    {
       super(enabledDeploymentTypes);
    }
 
+   /* (non-Javadoc)
+    * @see org.jboss.webbeans.ManagerImpl#fireEvent(java.lang.Object, java.lang.annotation.Annotation[])
+    */
+   @Override
+   public void fireEvent(Object event, Annotation... bindings)
+   {
+      // Record the event
+      this.event = event;
+      this.eventBindings = bindings;
+   }
+
+   /**
+    * Retrieves the event which was last fired with this manager.
+    * @return the event
+    */
+   public final Object getEvent()
+   {
+      return event;
+   }
+
+   /**
+    * @return the eventBindings
+    */
+   public final Set<Annotation> getEventBindings()
+   {
+      if (eventBindings != null)
+         return new HashSet<Annotation>(Arrays.asList(eventBindings));
+      else
+         return null;
+   }
+
 }




More information about the weld-commits mailing list