Author: struberg
Date: Mon Jun  5 13:52:57 2017
New Revision: 1797664

URL: http://svn.apache.org/viewvc?rev=1797664&view=rev
Log:
OWB-1186 implement AnnotatedTypeConfigurators in AfterTypeDiscovery

Modified:
    
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java
    
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/discovery/AfterBeanDiscoveryImpl.java
    
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/discovery/AfterTypeDiscoveryImpl.java

Modified: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java?rev=1797664&r1=1797663&r2=1797664&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java
 Mon Jun  5 13:52:57 2017
@@ -737,6 +737,16 @@ public class BeansDeployer
         // reverse to keep "selection" order - decorator and interceptors 
considers it in their sorting.
         // NOTE: from here priorityClass.getSorted() MUST NOT be recomputed 
(ie no priorityClass.add(...))
         Collections.reverse(alternatives);
+
+        for (AnnotatedTypeConfiguratorHolder holder : 
event.getAnnotatedTypeConfigurators())
+        {
+            manager.addAdditionalAnnotatedType(
+                holder.getExtension(),
+                holder.getAnnotatedTypeConfigurator().getAnnotated(),
+                holder.getId());
+        }
+
+
         event.setStarted();
 
         // we do not need to set back the sortedAlternatives to the 
AlternativesManager as the API
@@ -1236,7 +1246,7 @@ public class BeansDeployer
     }
 
     /**
-     * Process any AnnotatedTypes which got added by 
BeforeBeanDiscovery#addAnnotatedType
+     * Process any AnnotatedTypes which got added by 
BeforeBeanDiscovery#addAnnotatedType and other events
      * @param annotatedTypes
      */
     private void addAdditionalAnnotatedTypes(Collection<AnnotatedType<?>> 
toDeploy, List<AnnotatedType<?>> annotatedTypes)

Modified: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/discovery/AfterBeanDiscoveryImpl.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/discovery/AfterBeanDiscoveryImpl.java?rev=1797664&r1=1797663&r2=1797664&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/discovery/AfterBeanDiscoveryImpl.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/discovery/AfterBeanDiscoveryImpl.java
 Mon Jun  5 13:52:57 2017
@@ -220,7 +220,7 @@ public class AfterBeanDiscoveryImpl exte
     public <T> AnnotatedType<T> getAnnotatedType(Class<T> type, String id)
     {
         checkState();
-        return (AnnotatedType<T>) beanManager.getAdditionalAnnotatedType(type, 
id);
+        return beanManager.getAdditionalAnnotatedType(type, id);
     }
 
     /**

Modified: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/discovery/AfterTypeDiscoveryImpl.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/discovery/AfterTypeDiscoveryImpl.java?rev=1797664&r1=1797663&r2=1797664&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/discovery/AfterTypeDiscoveryImpl.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/discovery/AfterTypeDiscoveryImpl.java
 Mon Jun  5 13:52:57 2017
@@ -22,9 +22,13 @@ import javax.enterprise.inject.spi.After
 import javax.enterprise.inject.spi.AnnotatedType;
 import javax.enterprise.inject.spi.Extension;
 import javax.enterprise.inject.spi.configurator.AnnotatedTypeConfigurator;
+import java.util.Collection;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.configurator.AnnotatedTypeConfiguratorImpl;
 import org.apache.webbeans.portable.events.EventBase;
 
 /**
@@ -38,6 +42,7 @@ public class AfterTypeDiscoveryImpl exte
     private final List<Class<?>> sortedInterceptors;
     private final List<Class<?>> sortedDecorators;
     private final List<AnnotatedType<?>> newAt;
+    private Map<String, AnnotatedTypeConfiguratorHolder> 
annotatedTypeConfigurators = new HashMap<>();
     private Extension extension;
 
     public AfterTypeDiscoveryImpl(WebBeansContext webBeansContext,
@@ -82,12 +87,20 @@ public class AfterTypeDiscoveryImpl exte
         newAt.add(type);
     }
 
-    //X TODO OWB-1182 CDI 2.0
     @Override
-    public <T> AnnotatedTypeConfigurator<T> addAnnotatedType(Class<T> 
forClass, String id)
+    public <T> AnnotatedTypeConfigurator<T> addAnnotatedType(Class<T> clazz, 
String id)
     {
         checkState();
-        throw new UnsupportedOperationException("CDI 2.0 not yet imlemented");
+        String key = clazz.getName() + id;
+        AnnotatedTypeConfiguratorHolder configuratorHolder = 
annotatedTypeConfigurators.get(key);
+        if (configuratorHolder == null)
+        {
+            AnnotatedTypeConfigurator<T> configurator = 
getAnnotatedTypeConfigurator(clazz);
+            configuratorHolder = new 
AnnotatedTypeConfiguratorHolder(extension, id, configurator);
+            annotatedTypeConfigurators.put(key, configuratorHolder);
+        }
+
+        return configuratorHolder.getAnnotatedTypeConfigurator();
     }
 
     @Override
@@ -95,4 +108,15 @@ public class AfterTypeDiscoveryImpl exte
     {
         this.extension = instance;
     }
+
+    public Collection<AnnotatedTypeConfiguratorHolder> 
getAnnotatedTypeConfigurators()
+    {
+        return annotatedTypeConfigurators.values();
+    }
+
+    private <T> AnnotatedTypeConfigurator<T> 
getAnnotatedTypeConfigurator(Class<T> clazz)
+    {
+        AnnotatedType<T> initialAnnotatedType = 
webBeansContext.getAnnotatedElementFactory().newAnnotatedType(clazz);
+        return (AnnotatedTypeConfigurator<T>) new 
AnnotatedTypeConfiguratorImpl(webBeansContext, initialAnnotatedType);
+    }
 }


Reply via email to