[webbeans-commits] Webbeans SVN: r3676 - in ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans: bean/builder/spi and 3 other directories.

webbeans-commits at lists.jboss.org webbeans-commits at lists.jboss.org
Wed Sep 16 11:30:35 EDT 2009


Author: kabir.khan at jboss.com
Date: 2009-09-16 11:30:35 -0400 (Wed, 16 Sep 2009)
New Revision: 3676

Added:
   ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/spi/ManagedBeanBuilder.java
   ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/builder/sorter/DecoratorDeploymentItem.java
   ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/builder/sorter/DeploymentSorterAction.java
   ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/builder/sorter/SimpleDeploymentItem.java
Removed:
   ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/builder/sorter/WBClassDeploymentItem.java
Modified:
   ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/BeanBuilderFactoryImpl.java
   ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/BeanBuilderImpl.java
   ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/InternalBeanBuilderFactory.java
   ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/InternalObserverMethodBuilder.java
   ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/spi/BeanBuilderFactory.java
   ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/spi/DecoratorBeanBuilder.java
   ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/spi/EnterpriseBeanBuilder.java
   ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/spi/SimpleBeanBuilder.java
   ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bootstrap/AbstractBeanDeployer.java
   ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bootstrap/BeanDeployer.java
   ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bootstrap/ExtensionBeanDeployer.java
   ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/builder/sorter/DeploymentItem.java
   ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/builder/sorter/EjbDeploymentItem.java
   ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/builder/sorter/Sorter.java
   ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/util/Beans.java
Log:
Start plugging in the new sorter, most tests are passing

Modified: ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/BeanBuilderFactoryImpl.java
===================================================================
--- ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/BeanBuilderFactoryImpl.java	2009-09-16 11:47:21 UTC (rev 3675)
+++ ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/BeanBuilderFactoryImpl.java	2009-09-16 15:30:35 UTC (rev 3676)
@@ -27,12 +27,14 @@
 import java.util.concurrent.locks.ReadWriteLock;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
 
+import javax.enterprise.inject.spi.AnnotatedType;
 import javax.enterprise.inject.spi.BeanManager;
 
 import org.jboss.webbeans.bean.builder.spi.DecoratorBeanBuilder;
 import org.jboss.webbeans.bean.builder.spi.EnterpriseBeanBuilder;
 import org.jboss.webbeans.bean.builder.spi.SimpleBeanBuilder;
 import org.jboss.webbeans.bootstrap.BeanDeployerEnvironment;
+import org.jboss.webbeans.ejb.spi.EjbDescriptor;
 
 /**
  * 
@@ -72,43 +74,42 @@
       }
    }
    
-   public SimpleBeanBuilder getSimpleBeanBuilder(BeanManager beanManager)
+   public <T> SimpleBeanBuilder<T> getSimpleBeanBuilder(BeanManager beanManager, AnnotatedType<T> annotatedType)
    {
-      return getBeanBuilderImpl(beanManager, false);
+      return getBeanBuilderImpl(beanManager, false, annotatedType, null, false);
    }
 
-   public EnterpriseBeanBuilder getEnterpriseBeanBuilder(BeanManager beanManager)
+   public <T> EnterpriseBeanBuilder<T> getEnterpriseBeanBuilder(BeanManager beanManager, EjbDescriptor<T> ejbDescriptor)
    {
-      return getBeanBuilderImpl(beanManager, false);
+      return getBeanBuilderImpl(beanManager, false, null, ejbDescriptor, false);
    }
 
-   public DecoratorBeanBuilder getDecoratorBeanBuilder(BeanManager beanManager)
+   public <T> DecoratorBeanBuilder<T> getDecoratorBeanBuilder(BeanManager beanManager, AnnotatedType<T> annotatedType)
    {
-      return getBeanBuilderImpl(beanManager, false);
+      return getBeanBuilderImpl(beanManager, false, annotatedType, null, true);
    }
 
-   public SimpleBeanBuilder getInternalSimpleBeanBuilder(BeanManager beanManager)
+   public <T> SimpleBeanBuilder<T> getInternalSimpleBeanBuilder(BeanManager beanManager, AnnotatedType<T> annotatedType)
    {
-      return getBeanBuilderImpl(beanManager, true);
+      return getBeanBuilderImpl(beanManager, true, annotatedType, null, false);
    }
 
-   public EnterpriseBeanBuilder getInternalEnterpriseBeanBuilder(BeanManager beanManager)
+   public <T> EnterpriseBeanBuilder<T> getInternalEnterpriseBeanBuilder(BeanManager beanManager, EjbDescriptor<T> ejbDescriptor)
    {
-      return getBeanBuilderImpl(beanManager, true);
+      return getBeanBuilderImpl(beanManager, true, null, ejbDescriptor, false);
    }
 
-   public DecoratorBeanBuilder getInternalDecoratorBeanBuilder(BeanManager beanManager)
+   public <T> DecoratorBeanBuilder<T> getInternalDecoratorBeanBuilder(BeanManager beanManager, AnnotatedType<T> annotatedType)
    {
-      return getBeanBuilderImpl(beanManager, true);
+      return getBeanBuilderImpl(beanManager, true, annotatedType, null, false);
    }
 
-   @Override
-   public InternalObserverMethodBuilder getInternalObserverMethodBuilder(BeanManager beanManager)
+   public <T> InternalObserverMethodBuilder<T> getInternalObserverMethodBuilder(BeanManager beanManager, AnnotatedType<T> annotatedType)
    {
-      return getBeanBuilderImpl(beanManager, true);
+      return getBeanBuilderImpl(beanManager, true, annotatedType, null, false);
    }
 
-   private BeanBuilderImpl getBeanBuilderImpl(BeanManager beanManager, boolean delayInitialization)
+   private <T> BeanBuilderImpl<T> getBeanBuilderImpl(BeanManager beanManager, boolean delayInitialization, AnnotatedType<T> annotatedType, EjbDescriptor<T> ejbDescriptor, boolean decorator)
    {
       lock.readLock().lock();
       try
@@ -122,11 +123,11 @@
          if (environment == null)
             throw new IllegalStateException("BeanManager registered but no longer valid " + beanManager);
          
-         return new BeanBuilderImpl(beanManager, environment, delayInitialization);
+         return BeanBuilderImpl.initialiseBuilder(beanManager, environment, annotatedType, ejbDescriptor, decorator, delayInitialization);
       }
       finally
       {
          lock.readLock().unlock();
       }
-   }
+   }   
 }

Modified: ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/BeanBuilderImpl.java
===================================================================
--- ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/BeanBuilderImpl.java	2009-09-16 11:47:21 UTC (rev 3675)
+++ ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/BeanBuilderImpl.java	2009-09-16 15:30:35 UTC (rev 3676)
@@ -66,8 +66,20 @@
  * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
  * @version $Revision: 1.1 $
  */
-public class BeanBuilderImpl implements SimpleBeanBuilder, EnterpriseBeanBuilder, DecoratorBeanBuilder, InternalObserverMethodBuilder
+public class BeanBuilderImpl<T> implements SimpleBeanBuilder<T>, EnterpriseBeanBuilder<T>, DecoratorBeanBuilder<T>, InternalObserverMethodBuilder<T>
 {
+   private final AnnotatedType<T> type;
+
+   private final EjbDescriptor<T> ejbDescriptor;
+   
+   private final boolean decorator;
+
+   private Bean<T> mainBean;
+   
+   private Set<Bean<?>> beans;
+   
+   private Set<ObserverMethod<T, ?>> observerMethods;
+   
    private final BeanManagerImpl beanManager;
    
    private final BeanDeployerEnvironment beanDeployerEnvironment;
@@ -76,7 +88,7 @@
    
    private final boolean delayInitialization;
    
-   public BeanBuilderImpl(BeanManager beanManager, BeanDeployerEnvironment beanDeployerEnvironment, boolean delayInitialization)
+   private BeanBuilderImpl(BeanManager beanManager, BeanDeployerEnvironment beanDeployerEnvironment, AnnotatedType<T> type, EjbDescriptor<T> ejbDescriptor, boolean decorator, boolean delayInitialization)
    {
       if (beanManager != beanManager)
          throw new IllegalStateException("beanManager is not an instance of " + BeanManagerImpl.class.getName());
@@ -84,27 +96,75 @@
       
       this.beanDeployerEnvironment = beanDeployerEnvironment;
       this.delayInitialization = delayInitialization;
+      this.decorator = decorator;
+      this.type = type;
+      this.ejbDescriptor = ejbDescriptor;
    }
    
-   public <T> Set<Bean<?>> createSimpleBeans(AnnotatedType<T> type)
+   static <T> BeanBuilderImpl<T> initialiseBuilder(BeanManager beanManager, BeanDeployerEnvironment beanDeployerEnvironment, AnnotatedType<T> type, EjbDescriptor<T> ejbDescriptor, boolean decorator, boolean delayInitialization)
    {
+      if (type == null && ejbDescriptor == null)
+         throw new IllegalArgumentException("Need a type or an ejbDescriptor");
+      if (type != null && ejbDescriptor != null)
+         throw new IllegalArgumentException("Cannot pass in both type and ejbDescriptor");
+      if (beanManager == null)
+         throw new IllegalArgumentException("Null bean manager");
+      if (beanDeployerEnvironment == null)
+         throw new IllegalArgumentException("Null bean deployer environment");
+      if (ejbDescriptor != null && decorator)
+         throw new IllegalArgumentException("Cannot create a decorator from an ejb");
+      
+      BeanBuilderImpl<T> builder = new BeanBuilderImpl<T>(beanManager, beanDeployerEnvironment, type, ejbDescriptor, decorator, delayInitialization);
+      builder.createBeans();
+      
+      return builder;
+   }
+   
+   public Set<ObserverMethod<T, ?>> getObserverMethods()
+   {
+      return observerMethods;
+   }
+   
+   public Bean<T> getBean()
+   {
+      return mainBean;
+   }
+
+   public Set<Bean<?>> getBeans()
+   {
+      return beans;
+   }
+
+   private void createBeans()
+   {
+      if (decorator)
+         createDecorator(type);
+      else if (ejbDescriptor != null)
+         createBeans(ejbDescriptor);
+      else if (type != null)
+         createBeans(type);
+   }
+   
+   private Set<Bean<?>> createBeans(AnnotatedType<T> type)
+   {
       return createSimpleBeans(getWBClass(type));
    }
    
-   public <T> Set<Bean<?>> createEnterpriseBeans(EjbDescriptor<T> descriptor)
+   private Set<Bean<?>> createBeans(EjbDescriptor<T> descriptor)
    {
       return createEnterpriseBeans(getEjbDescriptor(descriptor));
    }
    
-   public <T> Set<Bean<?>> createDecorator(AnnotatedType<T> type)
+   private Bean<T> createDecorator(AnnotatedType<T> type)
    {
       return createDecorator(getWBClass(type));
    }
    
-   private <T> Set<Bean<?>> createSimpleBeans(WBClass<T> clazz)
+   private Set<Bean<?>> createSimpleBeans(WBClass<T> clazz)
    {
-      Set<Bean<?>> beans = new HashSet<Bean<?>>();
+      beans = new HashSet<Bean<?>>();
       ManagedBean<T> bean = ManagedBean.of(clazz, beanManager);
+      mainBean = bean;
       
       beanDeployerEnvironment.addBean(bean);
       beans.add(bean);
@@ -123,10 +183,12 @@
       return beans;
    }
    
-   private <T> Set<Bean<?>> createEnterpriseBeans(InternalEjbDescriptor<T> ejbDescriptor)
+   private Set<Bean<?>> createEnterpriseBeans(InternalEjbDescriptor<T> ejbDescriptor)
    {
-      Set<Bean<?>> beans = new HashSet<Bean<?>>();
+      beans = new HashSet<Bean<?>>();
       SessionBean<T> bean = SessionBean.of(ejbDescriptor, beanManager);
+      mainBean = bean;
+      
       beanDeployerEnvironment.addBean(bean);
       beans.add(bean);
       if (!delayInitialization)
@@ -143,16 +205,16 @@
       return beans;
    }
    
-   private <T> Set<Bean<?>> createDecorator(WBClass<T> annotatedClass)
+   private Bean<T> createDecorator(WBClass<T> annotatedClass)
    {
-      DecoratorImpl<?> bean = DecoratorImpl.of(annotatedClass, beanManager);
+      DecoratorImpl<T> bean = DecoratorImpl.of(annotatedClass, beanManager);
+      mainBean = bean;
+      
       beanDeployerEnvironment.addBean(bean);
       if (!delayInitialization)
          bean.initialize(beanDeployerEnvironment);
       
-      HashSet<Bean<?>> beans = new HashSet<Bean<?>>();
-      beans.add(bean);
-      return beans;
+      return bean;
    }
    
    /**
@@ -162,14 +224,15 @@
     *           The class bean
     * 
     */
-   protected <T> void createSubBeans(Set<Bean<?>> beans, AbstractClassBean<T> bean)
+   protected void createSubBeans(Set<Bean<?>> beans, AbstractClassBean<T> bean)
    {
       createProducerMethods(beans, bean, bean.getAnnotatedItem());
-      createProducerFields(beans, bean, bean.getAnnotatedItem());
       if (beanManager.isBeanEnabled(bean))
       {
-         createObserverMethods(bean, bean.getAnnotatedItem());
+         observerMethods = createObserverMethods(bean, bean.getAnnotatedItem());
       }
+
+      createProducerFields(beans, bean, bean.getAnnotatedItem());
       createDisposalMethods(beans, bean, bean.getAnnotatedItem());
    }
 
@@ -219,15 +282,17 @@
          bean.initialize(beanDeployerEnvironment);
    }
       
-   public <X> void createObserverMethods(RIBean<X> declaringBean, WBClass<X> annotatedClass)
+   public Set<ObserverMethod<T, ?>> createObserverMethods(RIBean<T> declaringBean, WBClass<T> annotatedClass)
    {
-      for (WBMethod<?, X> method : annotatedClass.getWBDeclaredMethodsWithAnnotatedParameters(Observes.class))
+      Set<ObserverMethod<T, ?>> methods = new HashSet<ObserverMethod<T, ?>>();
+      for (WBMethod<?, T> method : annotatedClass.getWBDeclaredMethodsWithAnnotatedParameters(Observes.class))
       {
-         createObserverMethod(declaringBean, method);
+         methods.add(createObserverMethod(declaringBean, method));
       }
+      return methods;
    }
    
-   protected <X, T> void createObserverMethod(RIBean<X> declaringBean, WBMethod<T, X> method)
+   protected <X, T> ObserverMethodImpl<X, T> createObserverMethod(RIBean<X> declaringBean, WBMethod<T, X> method)
    {
       ObserverMethodImpl<X, T> observer = ObserverFactory.create(method, declaringBean, beanManager);
       ProcessObserverMethod<?, ?> event = createProcessObserverMethodEvent(observer, method);
@@ -235,6 +300,7 @@
       beanDeployerEnvironment.addObserver(observer);
       if (!delayInitialization)
          observer.initialize();
+      return observer;
    }
    
    private <X, T> ProcessObserverMethod<X, T> createProcessObserverMethodEvent(ObserverMethod<X, T> observer, AnnotatedMethod<X> method)

Modified: ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/InternalBeanBuilderFactory.java
===================================================================
--- ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/InternalBeanBuilderFactory.java	2009-09-16 11:47:21 UTC (rev 3675)
+++ ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/InternalBeanBuilderFactory.java	2009-09-16 15:30:35 UTC (rev 3676)
@@ -21,6 +21,7 @@
 */ 
 package org.jboss.webbeans.bean.builder;
 
+import javax.enterprise.inject.spi.AnnotatedType;
 import javax.enterprise.inject.spi.BeanManager;
 
 import org.jboss.webbeans.bean.builder.spi.BeanBuilderFactory;
@@ -28,6 +29,7 @@
 import org.jboss.webbeans.bean.builder.spi.EnterpriseBeanBuilder;
 import org.jboss.webbeans.bean.builder.spi.SimpleBeanBuilder;
 import org.jboss.webbeans.bootstrap.BeanDeployerEnvironment;
+import org.jboss.webbeans.ejb.spi.EjbDescriptor;
 
 /**
  * 
@@ -42,13 +44,13 @@
       return (InternalBeanBuilderFactory)BeanBuilderFactory.getInstance();
    }
 
-   public abstract SimpleBeanBuilder getInternalSimpleBeanBuilder(BeanManager beanManager);
+   public abstract <T> SimpleBeanBuilder<T> getInternalSimpleBeanBuilder(BeanManager beanManager, AnnotatedType<T> annotatedType);
    
-   public abstract EnterpriseBeanBuilder getInternalEnterpriseBeanBuilder(BeanManager beanManager);
+   public abstract <T> EnterpriseBeanBuilder<T> getInternalEnterpriseBeanBuilder(BeanManager beanManager, EjbDescriptor<T> ejbDescriptor);
    
-   public abstract DecoratorBeanBuilder getInternalDecoratorBeanBuilder(BeanManager beanManager);
+   public abstract <T> DecoratorBeanBuilder<T> getInternalDecoratorBeanBuilder(BeanManager beanManager, AnnotatedType<T> annotatedType);
    
-   public abstract InternalObserverMethodBuilder getInternalObserverMethodBuilder(BeanManager beanManager);
+   public abstract <T> InternalObserverMethodBuilder<T> getInternalObserverMethodBuilder(BeanManager beanManager, AnnotatedType<T> annotatedType);
 
    public abstract void registerBeanManager(BeanManager manager, BeanDeployerEnvironment environment);
    

Modified: ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/InternalObserverMethodBuilder.java
===================================================================
--- ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/InternalObserverMethodBuilder.java	2009-09-16 11:47:21 UTC (rev 3675)
+++ ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/InternalObserverMethodBuilder.java	2009-09-16 15:30:35 UTC (rev 3676)
@@ -21,6 +21,10 @@
 */ 
 package org.jboss.webbeans.bean.builder;
 
+import java.util.Set;
+
+import javax.enterprise.inject.spi.ObserverMethod;
+
 import org.jboss.webbeans.bean.RIBean;
 import org.jboss.webbeans.introspector.WBClass;
 
@@ -29,7 +33,7 @@
  * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
  * @version $Revision: 1.1 $
  */
-public interface InternalObserverMethodBuilder
+public interface InternalObserverMethodBuilder<T>
 {
-   <X> void createObserverMethods(RIBean<X> declaringBean, WBClass<X> annotatedClass);
+   Set<ObserverMethod<T, ?>> createObserverMethods(RIBean<T> declaringBean, WBClass<T> annotatedClass);
 }

Modified: ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/spi/BeanBuilderFactory.java
===================================================================
--- ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/spi/BeanBuilderFactory.java	2009-09-16 11:47:21 UTC (rev 3675)
+++ ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/spi/BeanBuilderFactory.java	2009-09-16 15:30:35 UTC (rev 3676)
@@ -21,9 +21,12 @@
 */ 
 package org.jboss.webbeans.bean.builder.spi;
 
+import javax.enterprise.inject.spi.AnnotatedType;
 import javax.enterprise.inject.spi.BeanManager;
 
+import org.jboss.webbeans.ejb.spi.EjbDescriptor;
 
+
 /**
  * 
  * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
@@ -51,9 +54,9 @@
       return INSTANCE;
    }
    
-   public abstract SimpleBeanBuilder getSimpleBeanBuilder(BeanManager beanManager);
+   public abstract <T> SimpleBeanBuilder<T> getSimpleBeanBuilder(BeanManager beanManager, AnnotatedType<T> type);
    
-   public abstract EnterpriseBeanBuilder getEnterpriseBeanBuilder(BeanManager beanManager);
+   public abstract <T> EnterpriseBeanBuilder<T> getEnterpriseBeanBuilder(BeanManager beanManager, EjbDescriptor<T> type);
    
-   public abstract DecoratorBeanBuilder getDecoratorBeanBuilder(BeanManager beanManager);
+   public abstract <T> DecoratorBeanBuilder<T> getDecoratorBeanBuilder(BeanManager beanManager, AnnotatedType<T> type);
 }

Modified: ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/spi/DecoratorBeanBuilder.java
===================================================================
--- ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/spi/DecoratorBeanBuilder.java	2009-09-16 11:47:21 UTC (rev 3675)
+++ ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/spi/DecoratorBeanBuilder.java	2009-09-16 15:30:35 UTC (rev 3676)
@@ -21,9 +21,6 @@
 */ 
 package org.jboss.webbeans.bean.builder.spi;
 
-import java.util.Set;
-
-import javax.enterprise.inject.spi.AnnotatedType;
 import javax.enterprise.inject.spi.Bean;
 
 /**
@@ -31,7 +28,7 @@
  * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
  * @version $Revision: 1.1 $
  */
-public interface DecoratorBeanBuilder
+public interface DecoratorBeanBuilder<T>
 {
-   <T> Set<Bean<?>> createDecorator(AnnotatedType<T> type);
+   Bean<T> getBean();
 }

Modified: ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/spi/EnterpriseBeanBuilder.java
===================================================================
--- ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/spi/EnterpriseBeanBuilder.java	2009-09-16 11:47:21 UTC (rev 3675)
+++ ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/spi/EnterpriseBeanBuilder.java	2009-09-16 15:30:35 UTC (rev 3676)
@@ -21,18 +21,12 @@
 */ 
 package org.jboss.webbeans.bean.builder.spi;
 
-import java.util.Set;
 
-import javax.enterprise.inject.spi.Bean;
-
-import org.jboss.webbeans.ejb.spi.EjbDescriptor;
-
 /**
  * 
  * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
  * @version $Revision: 1.1 $
  */
-public interface EnterpriseBeanBuilder
+public interface EnterpriseBeanBuilder<T> extends ManagedBeanBuilder<T>
 {
-   <T> Set<Bean<?>> createEnterpriseBeans(EjbDescriptor<T> descriptor);
 }

Added: ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/spi/ManagedBeanBuilder.java
===================================================================
--- ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/spi/ManagedBeanBuilder.java	                        (rev 0)
+++ ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/spi/ManagedBeanBuilder.java	2009-09-16 15:30:35 UTC (rev 3676)
@@ -0,0 +1,38 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file in the
+* distribution for a full listing of individual contributors. 
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/ 
+package org.jboss.webbeans.bean.builder.spi;
+
+import java.util.Set;
+
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.ObserverMethod;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public interface ManagedBeanBuilder<T>
+{
+   Set<Bean<?>> getBeans();
+   Set<ObserverMethod<T, ?>> getObserverMethods();
+}

Modified: ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/spi/SimpleBeanBuilder.java
===================================================================
--- ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/spi/SimpleBeanBuilder.java	2009-09-16 11:47:21 UTC (rev 3675)
+++ ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/spi/SimpleBeanBuilder.java	2009-09-16 15:30:35 UTC (rev 3676)
@@ -21,17 +21,12 @@
 */ 
 package org.jboss.webbeans.bean.builder.spi;
 
-import java.util.Set;
 
-import javax.enterprise.inject.spi.AnnotatedType;
-import javax.enterprise.inject.spi.Bean;
-
 /**
  * 
  * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
  * @version $Revision: 1.1 $
  */
-public interface SimpleBeanBuilder
+public interface SimpleBeanBuilder<T> extends ManagedBeanBuilder<T>
 {
-   <T> Set<Bean<?>> createSimpleBeans(AnnotatedType<T> type);
 }

Modified: ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bootstrap/AbstractBeanDeployer.java
===================================================================
--- ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bootstrap/AbstractBeanDeployer.java	2009-09-16 11:47:21 UTC (rev 3675)
+++ ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bootstrap/AbstractBeanDeployer.java	2009-09-16 15:30:35 UTC (rev 3676)
@@ -100,21 +100,18 @@
 
    protected <T> void createSimpleBean(WBClass<T> annotatedClass)
    {
-   	SimpleBeanBuilder builder = beanBuilderFactory.getInternalSimpleBeanBuilder(manager);
-      builder.createSimpleBeans(annotatedClass);
+   	SimpleBeanBuilder<T> builder = beanBuilderFactory.getInternalSimpleBeanBuilder(manager, annotatedClass);
    }
    
    protected <T> void createDecorator(WBClass<T> annotatedClass)
    {
-   	DecoratorBeanBuilder builder = beanBuilderFactory.getInternalDecoratorBeanBuilder(manager);
-      builder.createDecorator(annotatedClass);
+   	DecoratorBeanBuilder<T> builder = beanBuilderFactory.getInternalDecoratorBeanBuilder(manager, annotatedClass);
    }
    
    protected <T> void createEnterpriseBean(InternalEjbDescriptor<T> ejbDescriptor)
    {
      // TODO Don't create enterprise bean if it has no local interfaces!
-	   EnterpriseBeanBuilder builder = beanBuilderFactory.getInternalEnterpriseBeanBuilder(manager);
-   	builder.createEnterpriseBeans(ejbDescriptor);
+	   EnterpriseBeanBuilder<T> builder = beanBuilderFactory.getInternalEnterpriseBeanBuilder(manager, ejbDescriptor);
    }
    
    /**
@@ -165,5 +162,4 @@
    {
       return environment;
    }
-   
 }

Modified: ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bootstrap/BeanDeployer.java
===================================================================
--- ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bootstrap/BeanDeployer.java	2009-09-16 11:47:21 UTC (rev 3675)
+++ ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bootstrap/BeanDeployer.java	2009-09-16 15:30:35 UTC (rev 3676)
@@ -17,18 +17,45 @@
 package org.jboss.webbeans.bootstrap;
 
 import java.util.HashSet;
+import java.util.List;
 import java.util.Set;
 
-import javax.decorator.Decorator;
 import javax.enterprise.inject.spi.AnnotatedType;
-import javax.interceptor.Interceptor;
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.ObserverMethod;
 
 import org.jboss.webbeans.BeanManagerImpl;
 import org.jboss.webbeans.Container;
+import org.jboss.webbeans.bean.builtin.AbstractBuiltInBean;
+import org.jboss.webbeans.bean.builtin.DefaultValidatorBean;
+import org.jboss.webbeans.bean.builtin.DefaultValidatorFactoryBean;
+import org.jboss.webbeans.bean.builtin.InjectionPointBean;
+import org.jboss.webbeans.bean.builtin.ManagerBean;
+import org.jboss.webbeans.bean.builtin.PrincipalBean;
+import org.jboss.webbeans.bean.builtin.UserTransactionBean;
+import org.jboss.webbeans.bean.builtin.facade.EventBean;
+import org.jboss.webbeans.bean.builtin.facade.InstanceBean;
+import org.jboss.webbeans.bootstrap.api.Environments;
+import org.jboss.webbeans.builder.sorter.DecoratorDeploymentItem;
+import org.jboss.webbeans.builder.sorter.DeploymentItem;
+import org.jboss.webbeans.builder.sorter.DeploymentSorterAction;
+import org.jboss.webbeans.builder.sorter.EjbDeploymentItem;
+import org.jboss.webbeans.builder.sorter.SimpleDeploymentItem;
+import org.jboss.webbeans.builder.sorter.Sorter;
+import org.jboss.webbeans.conversation.ConversationImpl;
+import org.jboss.webbeans.conversation.JavaSEConversationTerminator;
+import org.jboss.webbeans.conversation.NumericConversationIdGenerator;
+import org.jboss.webbeans.conversation.ServletConversationManager;
 import org.jboss.webbeans.ejb.EjbDescriptors;
-import org.jboss.webbeans.ejb.InternalEjbDescriptor;
+import org.jboss.webbeans.event.ObserverMethodImpl;
 import org.jboss.webbeans.introspector.WBClass;
+import org.jboss.webbeans.log.LogProvider;
+import org.jboss.webbeans.log.Logging;
 import org.jboss.webbeans.resources.ClassTransformer;
+import org.jboss.webbeans.security.spi.SecurityServices;
+import org.jboss.webbeans.servlet.HttpSessionManager;
+import org.jboss.webbeans.transaction.spi.TransactionServices;
+import org.jboss.webbeans.validation.spi.ValidationServices;
 
 /**
  * @author pmuir
@@ -36,6 +63,7 @@
  */
 public class BeanDeployer extends AbstractBeanDeployer
 {
+   private static final LogProvider log = Logging.getLogProvider(BeanDeployer.class);
    
    private final BeanManagerImpl deploymentManager;
 
@@ -99,27 +127,117 @@
 
    public AbstractBeanDeployer createBeans()
    {
-      for (WBClass<?> clazz : classes)
+//      for (WBClass<?> clazz : classes)
+//      {
+//         boolean managedBeanOrDecorator = !getEnvironment().getEjbDescriptors().contains(clazz.getJavaClass()) && isTypeManagedBeanOrDecorator(clazz);
+//         if (managedBeanOrDecorator && clazz.isAnnotationPresent(Decorator.class))
+//         {
+//            createDecorator(clazz);
+//         }
+//         else if (managedBeanOrDecorator && clazz.isAnnotationPresent(Interceptor.class))
+//         {
+//            //createInterceptor(clazz);
+//         }
+//         else if (managedBeanOrDecorator && !clazz.isAbstract())
+//         {
+//            createSimpleBean(clazz);
+//         }
+//      }
+//      for (InternalEjbDescriptor<?> ejbDescriptor : getEnvironment().getEjbDescriptors())
+//      {
+//         createEnterpriseBean(ejbDescriptor);
+//      }
+      return this;
+   }
+
+   @Override
+   public AbstractBeanDeployer deploy()
+   {
+      Sorter sorter = Sorter.createSorter(getManager(), classes, getEnvironment().getEjbDescriptors());
+      List<DeploymentItem<?>> sortedItems = sorter.sort();
+
+      addBuiltInBeans();
+
+      DeploymentItemDeployerAction deployerAction = new DeploymentItemDeployerAction();
+      Set<ObserverMethod<?, ?>> observers = new HashSet<ObserverMethod<?, ?>>();
+      for (DeploymentItem<?> item : sortedItems)
       {
-         boolean managedBeanOrDecorator = !getEnvironment().getEjbDescriptors().contains(clazz.getJavaClass()) && isTypeManagedBeanOrDecorator(clazz);
-         if (managedBeanOrDecorator && clazz.isAnnotationPresent(Decorator.class))
+         item.executeAction(deployerAction);
+         observers.addAll(item.getObserverMethods(getManager(), getEnvironment()));
+      }
+
+      for (ObserverMethod<?, ?> observer : observers)
+      {
+         log.debug("Observer : " + observer);
+         if (observer instanceof ObserverMethodImpl<?, ?>)
          {
-            createDecorator(clazz);
+            ((ObserverMethodImpl<?, ?>)observer).initialize();
          }
-         else if (managedBeanOrDecorator && clazz.isAnnotationPresent(Interceptor.class))
-         {
-            //createInterceptor(clazz);
-         }
-         else if (managedBeanOrDecorator && !clazz.isAbstract())
-         {
-            createSimpleBean(clazz);
-         }
+         getManager().addObserver(observer);
       }
-      for (InternalEjbDescriptor<?> ejbDescriptor : getEnvironment().getEjbDescriptors())
+      return this;
+   }
+   
+   private void addBuiltInBeans()
+   {
+      addBuiltinBean(new ManagerBean(getManager()));
+      addBuiltinBean(new InjectionPointBean(getManager()));
+      addBuiltinBean(new EventBean(getManager()));
+      addBuiltinBean(new InstanceBean(getManager()));
+      if (getManager().getServices().contains(TransactionServices.class))
       {
-         createEnterpriseBean(ejbDescriptor);
+         addBuiltinBean(new UserTransactionBean(getManager()));
       }
-      return this;
+      if (getManager().getServices().contains(SecurityServices.class))
+      {
+         addBuiltinBean(new PrincipalBean(getManager()));
+      }
+      if (getManager().getServices().contains(ValidationServices.class))
+      {
+         addBuiltinBean(new DefaultValidatorBean(getManager()));
+         addBuiltinBean(new DefaultValidatorFactoryBean(getManager()));
+      }
    }
+   
+   private void addBuiltinBean(AbstractBuiltInBean<?> bean)
+   {
+      getEnvironment().addBean(bean);
+      getManager().addBean(bean);
+   }
+   
+   private class DeploymentItemDeployerAction implements DeploymentSorterAction
+   {
+      public Object execute(EjbDeploymentItem<?> deploymentItem)
+      {
+         return deployBean(deploymentItem);
+      }
 
+      public Object execute(SimpleDeploymentItem<?> deploymentItem)
+      {
+         return deployBean(deploymentItem);
+      }
+
+      public Object execute(DecoratorDeploymentItem<?> deploymentItem)
+      {
+         Set<Bean<?>> beans = deploymentItem.getBeans(getManager(), getEnvironment());
+         if (beans.size() != 1)
+            throw new IllegalStateException("Expected exactly one bean: " + beans);
+         
+         Bean<?> bean = beans.iterator().next();
+         getManager().addBean(bean);
+         log.debug("Decorator: " + bean);
+         return null;
+      }
+      
+      private Object deployBean(DeploymentItem<?> deploymentItem)
+      {
+         Set<Bean<?>> beans = deploymentItem.getBeans(getManager(), getEnvironment());
+         for (Bean<?> bean : beans)
+         {
+            getManager().addBean(bean);
+            log.debug("Bean: " + bean);
+         }
+         return null;
+      }
+   }
 }

Modified: ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bootstrap/ExtensionBeanDeployer.java
===================================================================
--- ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bootstrap/ExtensionBeanDeployer.java	2009-09-16 11:47:21 UTC (rev 3675)
+++ ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bootstrap/ExtensionBeanDeployer.java	2009-09-16 15:30:35 UTC (rev 3676)
@@ -56,7 +56,7 @@
          bean.initialize(getEnvironment());
          getEnvironment().addBean(bean);
          
-         InternalObserverMethodBuilder observerMethodBuilder = getBeanBuilderFactory().getInternalObserverMethodBuilder(getManager());
+         InternalObserverMethodBuilder<Extension> observerMethodBuilder = getBeanBuilderFactory().getInternalObserverMethodBuilder(getManager(), clazz);
          observerMethodBuilder.createObserverMethods(bean, clazz);
       }
       return this;

Added: ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/builder/sorter/DecoratorDeploymentItem.java
===================================================================
--- ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/builder/sorter/DecoratorDeploymentItem.java	                        (rev 0)
+++ ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/builder/sorter/DecoratorDeploymentItem.java	2009-09-16 15:30:35 UTC (rev 3676)
@@ -0,0 +1,75 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file in the
+* distribution for a full listing of individual contributors. 
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/ 
+package org.jboss.webbeans.builder.sorter;
+
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
+
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.ObserverMethod;
+
+import org.jboss.webbeans.BeanManagerImpl;
+import org.jboss.webbeans.bean.builder.spi.BeanBuilderFactory;
+import org.jboss.webbeans.bean.builder.spi.DecoratorBeanBuilder;
+import org.jboss.webbeans.bootstrap.BeanDeployerEnvironment;
+import org.jboss.webbeans.introspector.WBClass;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class DecoratorDeploymentItem<T> extends DeploymentItem<T>
+{
+   DecoratorDeploymentItem(Set<DeploymentItem<?>> allItems, WBClass<T> clazz)
+   {
+      super(allItems, clazz);
+   }
+
+   @Override
+   DeploymentItem<T> getSuperClassDependency()
+   {
+      return null;
+   }
+
+   @Override
+   public void initialiseBeans(BeanManagerImpl manager, BeanDeployerEnvironment environment)
+   {
+      DecoratorBeanBuilder<T> builder = BeanBuilderFactory.getInstance().getDecoratorBeanBuilder(manager, getWBClass());
+      setValues(createSet(builder.getBean()), (Set<ObserverMethod<T, ?>>)null);
+   }
+
+   private Set<Bean<?>> createSet(Bean<T> bean)
+   {
+      @SuppressWarnings("unchecked")
+      Set<Bean<?>> beans = new HashSet();
+      beans.add(bean);
+      return beans;
+   }
+
+   @Override
+   public void executeAction(DeploymentSorterAction action)
+   {
+      action.execute(this);
+   }
+}

Modified: ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/builder/sorter/DeploymentItem.java
===================================================================
--- ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/builder/sorter/DeploymentItem.java	2009-09-16 11:47:21 UTC (rev 3675)
+++ ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/builder/sorter/DeploymentItem.java	2009-09-16 15:30:35 UTC (rev 3676)
@@ -27,7 +27,11 @@
 import java.util.Set;
 
 import javax.enterprise.inject.Specializes;
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.ObserverMethod;
 
+import org.jboss.webbeans.BeanManagerImpl;
+import org.jboss.webbeans.bootstrap.BeanDeployerEnvironment;
 import org.jboss.webbeans.introspector.WBClass;
 
 /**
@@ -43,15 +47,18 @@
    
    private List<DeploymentItem<?>> dependencies = Collections.emptyList();
    
-   private WBClass<?> clazz;
+   private WBClass<T> clazz;
 
    private volatile int hashCode;
    
    // Cached string representation
    private String toString;
 
-
-   DeploymentItem(Set<DeploymentItem<?>> allItems, WBClass<?> clazz)
+   Set<Bean<?>> beans;
+   
+   Set<ObserverMethod<T, ?>> observers;
+   
+   DeploymentItem(Set<DeploymentItem<?>> allItems, WBClass<T> clazz)
    {
       this.allItems = allItems;
       this.clazz = clazz;
@@ -77,21 +84,20 @@
       dependencies.add(dependency);
    }
    
-   public abstract T getUnderlyingItem();
    
-   DeploymentItem<T> findDeploymentItem(DeploymentItem<T> item)
+   <X> DeploymentItem<X> findDeploymentItem(DeploymentItem<X> item)
    {
       for (DeploymentItem<?> candidate : allItems)
       {
          if (candidate.equals(item))
-            return (DeploymentItem<T>)candidate;
+            return (DeploymentItem<X>)candidate;
       }
       return null;
    }
    
-   abstract DeploymentItem<T> getSuperClassDependency();
+   abstract DeploymentItem<? super T> getSuperClassDependency();
    
-   public WBClass<?> getWBClass()
+   public WBClass<T> getWBClass()
    {
       return clazz;
    }
@@ -138,4 +144,37 @@
       toString = "WBClassDeploymentItem{" + clazz.toString() + "}";
       return toString;
    }
+   
+   abstract void initialiseBeans(BeanManagerImpl manager, BeanDeployerEnvironment environment);
+   
+   public abstract void executeAction(DeploymentSorterAction action);
+   
+   void setValues(Set<Bean<?>> beans, Set<ObserverMethod<T, ?>> observers)
+   {
+      if (beans == null)
+         throw new IllegalArgumentException("Null beans");
+      
+      this.beans = beans;
+      if (observers == null)
+         this.observers = Collections.emptySet();
+      else
+         this.observers = observers;
+   }
+   
+   public Set<Bean<?>> getBeans(BeanManagerImpl manager, BeanDeployerEnvironment environment)
+   {
+      if (beans == null)
+         initialiseBeans(manager, environment);
+      
+      return beans;
+   }
+   
+   public Set<ObserverMethod<T, ?>> getObserverMethods(BeanManagerImpl manager, BeanDeployerEnvironment environment)
+   {
+      if (beans == null)
+         initialiseBeans(manager, environment);
+
+      return observers;
+   }
 }
+

Added: ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/builder/sorter/DeploymentSorterAction.java
===================================================================
--- ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/builder/sorter/DeploymentSorterAction.java	                        (rev 0)
+++ ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/builder/sorter/DeploymentSorterAction.java	2009-09-16 15:30:35 UTC (rev 3676)
@@ -0,0 +1,36 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file in the
+* distribution for a full listing of individual contributors. 
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/ 
+package org.jboss.webbeans.builder.sorter;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public interface DeploymentSorterAction
+{
+   Object execute(EjbDeploymentItem<?> deploymentItem);
+   
+   Object execute(SimpleDeploymentItem<?> deploymentItem);
+   
+   Object execute(DecoratorDeploymentItem<?> deploymentItem);
+}

Modified: ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/builder/sorter/EjbDeploymentItem.java
===================================================================
--- ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/builder/sorter/EjbDeploymentItem.java	2009-09-16 11:47:21 UTC (rev 3675)
+++ ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/builder/sorter/EjbDeploymentItem.java	2009-09-16 15:30:35 UTC (rev 3676)
@@ -21,9 +21,17 @@
 */ 
 package org.jboss.webbeans.builder.sorter;
 
+import java.util.Collections;
 import java.util.Set;
 
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.ObserverMethod;
+
+import org.jboss.webbeans.BeanManagerImpl;
 import org.jboss.webbeans.DefinitionException;
+import org.jboss.webbeans.bean.builder.spi.BeanBuilderFactory;
+import org.jboss.webbeans.bean.builder.spi.EnterpriseBeanBuilder;
+import org.jboss.webbeans.bootstrap.BeanDeployerEnvironment;
 import org.jboss.webbeans.ejb.EjbDescriptors;
 import org.jboss.webbeans.ejb.InternalEjbDescriptor;
 import org.jboss.webbeans.introspector.WBClass;
@@ -33,41 +41,53 @@
  * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
  * @version $Revision: 1.1 $
  */
-class EjbDeploymentItem extends DeploymentItem<InternalEjbDescriptor<?>>
+public class EjbDeploymentItem<T> extends DeploymentItem<T>
 {
-   private InternalEjbDescriptor<?> ejbDescriptor;
+   private InternalEjbDescriptor<T> ejbDescriptor;
    private EjbDescriptors allDescriptors;
    
-   EjbDeploymentItem(Set<DeploymentItem<?>> allItems, EjbDescriptors allDescriptors, WBClass<?> clazz, InternalEjbDescriptor<?> ejbDescriptor)
+   private Set<Bean<?>> beans;
+   private ObserverMethod<T, ?> observerMethods;
+   
+   EjbDeploymentItem(Set<DeploymentItem<?>> allItems, EjbDescriptors allDescriptors, WBClass<T> clazz, InternalEjbDescriptor<T> ejbDescriptor)
    {
       super(allItems, clazz);
       this.ejbDescriptor = ejbDescriptor;
       this.allDescriptors = allDescriptors;
    }
 
-   public InternalEjbDescriptor<?> getUnderlyingItem()
+   DeploymentItem<? super T> getSuperClassDependency()
    {
-      return ejbDescriptor;
-   }
-   
-   DeploymentItem<InternalEjbDescriptor<?>> getSuperClassDependency()
-   {
       //This needs revisiting
       Class<?> superClass = getWBClass().getWBSuperclass().getJavaClass();
       for (InternalEjbDescriptor<?> ejb : allDescriptors)
       {
          if (ejb.getBeanClass().equals(superClass))
          {
-            DeploymentItem<InternalEjbDescriptor<?>> item = new EjbDeploymentItem(null, null, getWBClass().getWBSuperclass(), ejb);
-            DeploymentItem<?> found = findDeploymentItem(item);
+            @SuppressWarnings("unchecked")
+            DeploymentItem<? super T> item = new EjbDeploymentItem(null, null, getWBClass().getWBSuperclass(), ejb);
+            DeploymentItem<? super T> found = findDeploymentItem(item);
             if (found == null || found instanceof EjbDeploymentItem == false)
             {
                throw new DefinitionException(toString() + " annotation defined specializing EJB must have EJB superclass " + ejbDescriptor.getEjbName() + "(" + ejbDescriptor.getBeanClass() + ")");
             }
-            return (EjbDeploymentItem)found;
+            return found;
          }
       }
             
       throw new DefinitionException(toString() + " does not specialize an EJB " + ejbDescriptor.getEjbName() + "(" + ejbDescriptor.getBeanClass() + ")");
    }
+
+   @Override
+   public void initialiseBeans(BeanManagerImpl manager, BeanDeployerEnvironment environment)
+   {
+      EnterpriseBeanBuilder<T> builder = BeanBuilderFactory.getInstance().getEnterpriseBeanBuilder(manager, ejbDescriptor);
+      setValues(builder.getBeans(), builder.getObserverMethods());
+   }
+
+   @Override
+   public void executeAction(DeploymentSorterAction action)
+   {
+      action.execute(this);
+   }
 }

Copied: ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/builder/sorter/SimpleDeploymentItem.java (from rev 3670, ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/builder/sorter/WBClassDeploymentItem.java)
===================================================================
--- ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/builder/sorter/SimpleDeploymentItem.java	                        (rev 0)
+++ ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/builder/sorter/SimpleDeploymentItem.java	2009-09-16 15:30:35 UTC (rev 3676)
@@ -0,0 +1,69 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file in the
+* distribution for a full listing of individual contributors. 
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/ 
+package org.jboss.webbeans.builder.sorter;
+
+import java.util.Set;
+
+import org.jboss.webbeans.BeanManagerImpl;
+import org.jboss.webbeans.DefinitionException;
+import org.jboss.webbeans.bean.builder.spi.BeanBuilderFactory;
+import org.jboss.webbeans.bean.builder.spi.SimpleBeanBuilder;
+import org.jboss.webbeans.bootstrap.BeanDeployerEnvironment;
+import org.jboss.webbeans.introspector.WBClass;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class SimpleDeploymentItem<T> extends DeploymentItem<T>
+{
+   SimpleDeploymentItem(Set<DeploymentItem<?>> allItems, WBClass<T> clazz)
+   {
+      super(allItems, clazz);
+   }
+
+   DeploymentItem<? super T> getSuperClassDependency()
+   {
+      DeploymentItem<? super T> item = new SimpleDeploymentItem(null, getWBClass().getWBSuperclass());
+      DeploymentItem<? super T> found = findDeploymentItem(item);
+      if (found == null || found instanceof SimpleDeploymentItem == false)
+      {
+         throw new DefinitionException("Simple bean must specialize a simple bean " + getWBClass());
+      }
+
+      return found;
+   }
+
+   @Override
+   public void initialiseBeans(BeanManagerImpl manager, BeanDeployerEnvironment environment)
+   {
+      SimpleBeanBuilder<T> builder = BeanBuilderFactory.getInstance().getSimpleBeanBuilder(manager, getWBClass());
+      setValues(builder.getBeans(), builder.getObserverMethods());
+   }
+
+   @Override
+   public void executeAction(DeploymentSorterAction action)
+   {
+      action.execute(this);
+   }
+}

Modified: ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/builder/sorter/Sorter.java
===================================================================
--- ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/builder/sorter/Sorter.java	2009-09-16 11:47:21 UTC (rev 3675)
+++ ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/builder/sorter/Sorter.java	2009-09-16 15:30:35 UTC (rev 3676)
@@ -96,16 +96,18 @@
    {
       for (WBClass<?> clazz : classes)
       {
-         WBClassDeploymentItem item = new WBClassDeploymentItem(Collections.unmodifiableSet(unsortedItems), clazz);
          boolean managedBeanOrDecorator = !ejbDescriptors.contains(clazz.getJavaClass()) && isTypeManagedBeanOrDecorator(clazz);
-         if (managedBeanOrDecorator && clazz.isAnnotationPresent(Decorator.class))
+         if (managedBeanOrDecorator)
          {
-            decoratorItems.add(item);
+            if (clazz.isAnnotationPresent(Decorator.class))
+            {
+               decoratorItems.add(new DecoratorDeploymentItem(Collections.unmodifiableSet(unsortedItems), clazz));
+            }
+            else if (!clazz.isAbstract())
+            {
+               unsortedItems.add(new SimpleDeploymentItem(Collections.unmodifiableSet(unsortedItems), clazz));
+            }
          }
-         else
-         {
-            unsortedItems.add(item);
-         }
       }
       for (InternalEjbDescriptor<?> ejb : ejbDescriptors)
       {

Deleted: ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/builder/sorter/WBClassDeploymentItem.java
===================================================================
--- ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/builder/sorter/WBClassDeploymentItem.java	2009-09-16 11:47:21 UTC (rev 3675)
+++ ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/builder/sorter/WBClassDeploymentItem.java	2009-09-16 15:30:35 UTC (rev 3676)
@@ -1,57 +0,0 @@
-/*
-* JBoss, Home of Professional Open Source.
-* Copyright 2006, Red Hat Middleware LLC, and individual contributors
-* as indicated by the @author tags. See the copyright.txt file in the
-* distribution for a full listing of individual contributors. 
-*
-* This is free software; you can redistribute it and/or modify it
-* under the terms of the GNU Lesser General Public License as
-* published by the Free Software Foundation; either version 2.1 of
-* the License, or (at your option) any later version.
-*
-* This software is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-* Lesser General Public License for more details.
-*
-* You should have received a copy of the GNU Lesser General Public
-* License along with this software; if not, write to the Free
-* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-*/ 
-package org.jboss.webbeans.builder.sorter;
-
-import java.util.Set;
-
-import org.jboss.webbeans.DefinitionException;
-import org.jboss.webbeans.introspector.WBClass;
-
-/**
- * 
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 1.1 $
- */
-class WBClassDeploymentItem extends DeploymentItem<WBClass<?>>
-{
-   WBClassDeploymentItem(Set<DeploymentItem<?>> allItems, WBClass<?> clazz)
-   {
-      super(allItems, clazz);
-   }
-
-   public WBClass<?> getUnderlyingItem()
-   {
-      return getWBClass();
-   }
-   
-   DeploymentItem<WBClass<?>> getSuperClassDependency()
-   {
-      DeploymentItem<WBClass<?>> item = new WBClassDeploymentItem(null, getWBClass().getWBSuperclass());
-      DeploymentItem<WBClass<?>> found = findDeploymentItem(item);
-      if (found == null || found instanceof WBClassDeploymentItem == false)
-      {
-         throw new DefinitionException("Simple bean must specialize a simple bean " + getWBClass());
-      }
-
-      return found;
-   }
-}

Modified: ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/util/Beans.java
===================================================================
--- ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/util/Beans.java	2009-09-16 11:47:21 UTC (rev 3675)
+++ ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/util/Beans.java	2009-09-16 15:30:35 UTC (rev 3676)
@@ -477,7 +477,7 @@
          constructor = ConstructorInjectionPoint.of(declaringBean, type.getNoArgsWBConstructor());
          log.trace("Exactly one constructor (" + constructor + ") defined, using it as the bean constructor for " + type);
       }
-      
+
       if (constructor == null)
       {
          throw new DefinitionException("Cannot determine constructor to use for " + type);




More information about the weld-commits mailing list