[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