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(a)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(a)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(a)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