[weld-commits] Weld SVN: r6141 - in extensions/trunk/src/main: java/org/jboss/weld/extensions/beanid and 1 other directories.

weld-commits at lists.jboss.org weld-commits at lists.jboss.org
Wed Apr 21 19:10:59 EDT 2010


Author: swd847
Date: 2010-04-21 19:10:58 -0400 (Wed, 21 Apr 2010)
New Revision: 6141

Added:
   extensions/trunk/src/main/java/org/jboss/weld/extensions/beanid/
   extensions/trunk/src/main/java/org/jboss/weld/extensions/beanid/AnnotatedTypeIdentifier.java
   extensions/trunk/src/main/java/org/jboss/weld/extensions/beanid/IdentifiableBean.java
   extensions/trunk/src/main/java/org/jboss/weld/extensions/beanid/IdentifiableBeanExtension.java
   extensions/trunk/src/main/java/org/jboss/weld/extensions/beanid/IdentifiableInjectionTarget.java
Modified:
   extensions/trunk/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension
Log:
added portable extension to allow retreiving the annotated type in an interceptor



Added: extensions/trunk/src/main/java/org/jboss/weld/extensions/beanid/AnnotatedTypeIdentifier.java
===================================================================
--- extensions/trunk/src/main/java/org/jboss/weld/extensions/beanid/AnnotatedTypeIdentifier.java	                        (rev 0)
+++ extensions/trunk/src/main/java/org/jboss/weld/extensions/beanid/AnnotatedTypeIdentifier.java	2010-04-21 23:10:58 UTC (rev 6141)
@@ -0,0 +1,20 @@
+package org.jboss.weld.extensions.beanid;
+
+import javax.enterprise.inject.spi.AnnotatedType;
+import javax.inject.Inject;
+
+/**
+ * Class that can lookup an AnnotatedType from an instance of a bean
+ * @author Stuart Douglas <stuart at baileyroberts.com.au>
+ *
+ */
+public class AnnotatedTypeIdentifier
+{
+   @Inject IdentifiableBeanExtension beans;
+   
+   public AnnotatedType<?> getAnnotatedType(IdentifiableBean instance)
+   {
+      long id = instance.getBeanId();
+      return beans.getAnnotatedType(id);
+   }
+}

Added: extensions/trunk/src/main/java/org/jboss/weld/extensions/beanid/IdentifiableBean.java
===================================================================
--- extensions/trunk/src/main/java/org/jboss/weld/extensions/beanid/IdentifiableBean.java	                        (rev 0)
+++ extensions/trunk/src/main/java/org/jboss/weld/extensions/beanid/IdentifiableBean.java	2010-04-21 23:10:58 UTC (rev 6141)
@@ -0,0 +1,9 @@
+package org.jboss.weld.extensions.beanid;
+
+public interface IdentifiableBean
+{
+   public long getBeanId();
+   
+   public void setBeanId(long id);
+}
+ 
\ No newline at end of file

Added: extensions/trunk/src/main/java/org/jboss/weld/extensions/beanid/IdentifiableBeanExtension.java
===================================================================
--- extensions/trunk/src/main/java/org/jboss/weld/extensions/beanid/IdentifiableBeanExtension.java	                        (rev 0)
+++ extensions/trunk/src/main/java/org/jboss/weld/extensions/beanid/IdentifiableBeanExtension.java	2010-04-21 23:10:58 UTC (rev 6141)
@@ -0,0 +1,37 @@
+package org.jboss.weld.extensions.beanid;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.atomic.AtomicLong;
+
+import javax.enterprise.event.Observes;
+import javax.enterprise.inject.spi.AnnotatedType;
+import javax.enterprise.inject.spi.Extension;
+import javax.enterprise.inject.spi.ProcessInjectionTarget;
+/**
+ * extension that allows the AnnotatedType to be retrieved for a given bean 
+ * @author Stuart Douglas <stuart at baileyroberts.com.au>
+ *
+ */
+public class IdentifiableBeanExtension implements Extension
+{
+   private AtomicLong currentId = new AtomicLong();
+   
+   private Map<Long,AnnotatedType<?>> types = new ConcurrentHashMap<Long, AnnotatedType<?>>();
+  
+   public void processInjectionTarget(@Observes ProcessInjectionTarget<?> event)
+   {
+      if(event.getAnnotatedType().getBaseType() instanceof IdentifiableBean)
+      {
+         long id = currentId.incrementAndGet();
+         types.put(id, event.getAnnotatedType());
+         event.setInjectionTarget(new IdentifiableInjectionTarget(event.getInjectionTarget(), id));
+      }
+   }
+   
+   public AnnotatedType<?> getAnnotatedType(long id)
+   {
+      return types.get(id);
+   }
+   
+}

Added: extensions/trunk/src/main/java/org/jboss/weld/extensions/beanid/IdentifiableInjectionTarget.java
===================================================================
--- extensions/trunk/src/main/java/org/jboss/weld/extensions/beanid/IdentifiableInjectionTarget.java	                        (rev 0)
+++ extensions/trunk/src/main/java/org/jboss/weld/extensions/beanid/IdentifiableInjectionTarget.java	2010-04-21 23:10:58 UTC (rev 6141)
@@ -0,0 +1,59 @@
+package org.jboss.weld.extensions.beanid;
+
+import java.util.Set;
+
+import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.inject.spi.InjectionPoint;
+import javax.enterprise.inject.spi.InjectionTarget;
+/**
+ * wrapper around InjectionTarget that sets a bean id
+ * @author Stuart Douglas <stuart at baileyroberts.com.au>
+ *
+ * @param <T>
+ */
+public class IdentifiableInjectionTarget<T> implements InjectionTarget<T>
+{
+   InjectionTarget<T> delegate;
+   
+   long id;
+   
+   IdentifiableInjectionTarget(InjectionTarget<T> delegate, long id)
+   {
+      this.delegate = delegate;
+      this.id=id;
+   }
+   
+   
+   public void inject(T instance, CreationalContext<T> ctx)
+   {
+      IdentifiableBean bean =(IdentifiableBean)instance;
+      bean.setBeanId(id);
+      delegate.inject(instance, ctx);
+   }
+
+   public void postConstruct(T instance)
+   {
+      delegate.postConstruct(instance);
+   }
+
+   public void preDestroy(T instance)
+   {
+      delegate.preDestroy(instance);
+   }
+
+   public void dispose(T instance)
+   {
+      delegate.dispose(instance);
+   }
+
+   public Set<InjectionPoint> getInjectionPoints()
+   {
+      return delegate.getInjectionPoints();
+   }
+
+   public T produce(CreationalContext<T> ctx)
+   {
+      return delegate.produce(ctx);
+   }
+
+}

Modified: extensions/trunk/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension
===================================================================
--- extensions/trunk/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension	2010-04-21 15:47:29 UTC (rev 6140)
+++ extensions/trunk/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension	2010-04-21 23:10:58 UTC (rev 6141)
@@ -1,2 +1,3 @@
 org.jboss.weld.extensions.genericbeans.GenericExtension
-org.jboss.weld.extensions.resources.servlet.ServletResourceExtension
\ No newline at end of file
+org.jboss.weld.extensions.resources.servlet.ServletResourceExtension
+org.jboss.weld.extensions.beanid.IdentifiableBeanExtension
\ No newline at end of file



More information about the weld-commits mailing list