[webbeans-commits] Webbeans SVN: r1525 - in ri/trunk: webbeans-ri/src/main/java/org/jboss/webbeans/bootstrap and 14 other directories.

webbeans-commits at lists.jboss.org webbeans-commits at lists.jboss.org
Sun Feb 15 11:06:56 EST 2009


Author: pete.muir at jboss.org
Date: 2009-02-15 11:06:55 -0500 (Sun, 15 Feb 2009)
New Revision: 1525

Added:
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bootstrap/BeansXmlParser.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/EnumerationVector.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/dom/
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/dom/NodeListIterable.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/dom/NodeListIterator.java
   ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/unit/xml/
   ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/unit/xml/AnotherDeploymentType.java
   ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/unit/xml/BeansXmlParserTest.java
   ri/trunk/webbeans-ri/src/test/resources/org/
   ri/trunk/webbeans-ri/src/test/resources/org/jboss/
   ri/trunk/webbeans-ri/src/test/resources/org/jboss/webbeans/
   ri/trunk/webbeans-ri/src/test/resources/org/jboss/webbeans/test/
   ri/trunk/webbeans-ri/src/test/resources/org/jboss/webbeans/test/unit/
   ri/trunk/webbeans-ri/src/test/resources/org/jboss/webbeans/test/unit/bootstrap/
   ri/trunk/webbeans-ri/src/test/resources/org/jboss/webbeans/test/unit/bootstrap/test-beans.xml
   ri/trunk/webbeans-ri/src/test/resources/org/jboss/webbeans/test/unit/xml/
   ri/trunk/webbeans-ri/src/test/resources/org/jboss/webbeans/test/unit/xml/default-beans.xml
   ri/trunk/webbeans-ri/src/test/resources/org/jboss/webbeans/test/unit/xml/user-defined-beans.xml
Modified:
   ri/trunk/porting-package/src/main/java/org/jboss/webbeans/tck/StandaloneContainersImpl.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bootstrap/WebBeansBootstrap.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/mock/MockBootstrap.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/mock/MockWebBeanDiscovery.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/EnumerationIterable.java
   ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/unit/AbstractEjbEmbeddableTest.java
   ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/unit/AbstractTest.java
   ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/unit/bootstrap/BootstrapTest.java
Log:
Initial work on reading enabled deployment types from XML.

Modified: ri/trunk/porting-package/src/main/java/org/jboss/webbeans/tck/StandaloneContainersImpl.java
===================================================================
--- ri/trunk/porting-package/src/main/java/org/jboss/webbeans/tck/StandaloneContainersImpl.java	2009-02-15 11:10:56 UTC (rev 1524)
+++ ri/trunk/porting-package/src/main/java/org/jboss/webbeans/tck/StandaloneContainersImpl.java	2009-02-15 16:06:55 UTC (rev 1525)
@@ -1,6 +1,7 @@
 package org.jboss.webbeans.tck;
 
 import java.lang.annotation.Annotation;
+import java.util.Arrays;
 import java.util.List;
 
 import javax.inject.manager.Manager;
@@ -24,7 +25,9 @@
          {
             manager.setEnabledDeploymentTypes(enabledDeploymentTypes);
          }
-         bootstrap.setWebBeanDiscovery(new MockWebBeanDiscovery(classes));
+         MockWebBeanDiscovery discovery = new MockWebBeanDiscovery();
+         discovery.setWebBeanClasses(Arrays.asList(classes));
+         bootstrap.setWebBeanDiscovery(discovery);
          bootstrap.boot();
          return manager;
       }

Added: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bootstrap/BeansXmlParser.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bootstrap/BeansXmlParser.java	                        (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bootstrap/BeansXmlParser.java	2009-02-15 16:06:55 UTC (rev 1525)
@@ -0,0 +1,205 @@
+package org.jboss.webbeans.bootstrap;
+
+import java.io.IOException;
+import java.lang.annotation.Annotation;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.inject.DeploymentException;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.jboss.webbeans.resources.spi.ResourceLoader;
+import org.jboss.webbeans.util.dom.NodeListIterable;
+import org.w3c.dom.Attr;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.xml.sax.SAXException;
+
+/**
+ * Temporary XML parser to get essential data (like enabled deployment types)
+ * until we have a full XML parser/binder
+ * 
+ * @author Pete Muir
+ *
+ */
+public class BeansXmlParser
+{
+   
+   private static class DeployElement
+   {
+      private URL file;
+      private Element element;
+      private Map<String, String> namespaces;
+      
+      public DeployElement(URL file, Element element, Map<String, String> namespaces)
+      {
+         super();
+         this.file = file;
+         this.element = element;
+         this.namespaces = namespaces;
+      }
+      
+      public URL getFile()
+      {
+         return file;
+      }
+      
+      public Element getElement()
+      {
+         return element;
+      }
+      
+      public Map<String, String> getNamespaces()
+      {
+         return namespaces;
+      }
+      
+      @Override
+      public String toString()
+      {
+         return "File: " + getFile() + "; Node: " + getElement();
+      }
+      
+   }
+   
+   public static final String EE_NAMESPACE = "urn:java:ee";
+   
+   private final Iterable<URL> beansXml;
+   private final ResourceLoader resourceLoader;
+   
+   private List<Class<? extends Annotation>> enabledDeploymentTypes;
+   
+   public List<Class<? extends Annotation>> getEnabledDeploymentTypes()
+   {
+      return enabledDeploymentTypes;
+   }
+   
+   public BeansXmlParser(ResourceLoader resourceLoader, Iterable<URL> beansXml)
+   {
+      this.beansXml = beansXml;
+      this.resourceLoader = resourceLoader;
+   }
+   
+   public void parse()
+   {
+      DocumentBuilder documentBuilder;
+      try
+      {
+         documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
+      }
+      catch (ParserConfigurationException e)
+      {
+         throw new DeploymentException("Error configuring XML parser", e);
+      }
+      List<DeployElement> deployElements = new ArrayList<DeployElement>(); 
+      for (URL url : beansXml)
+      {
+         Document document;
+         try
+         {
+            document = documentBuilder.parse(url.openStream());
+            document.normalize();
+         }
+         catch (SAXException e)
+         {
+            throw new DeploymentException("Error parsing beans.xml " + url.toString());
+         }
+         catch (IOException e)
+         {
+            throw new DeploymentException("Error loading beans.xml " + url.toString());
+         }
+         Element beans = document.getDocumentElement();
+         Map<String, String> namespaces = new HashMap<String, String>();
+         for (int i = 0; i < beans.getAttributes().getLength(); i++)
+         {
+            Node child = beans.getAttributes().item(i);
+            if (child instanceof Attr)
+            {
+               Attr attr = (Attr) child;
+               if (attr.getName().startsWith("xmlns"))
+               {
+                  String namespacePrefix;
+                  if (attr.getName().length() == 5)
+                  {
+                     namespacePrefix = "";
+                  }
+                  else
+                  {
+                     namespacePrefix = attr.getName().substring(6);
+                  }
+                  
+                  String namespace = attr.getValue();
+                  namespaces.put(namespacePrefix, namespace);
+               }
+            }
+         }
+         for (Node child : new NodeListIterable(beans.getChildNodes()))
+         {
+            if (child instanceof Element && "Deploy".equals(child.getNodeName()))
+            {
+               deployElements.add(new DeployElement(url, (Element) child, namespaces));
+            }
+         }
+      }
+      if (deployElements.size() > 1)
+      {
+         throw new DeploymentException("<Deploy> can only be specified once, but it is specified muliple times " + deployElements);
+      }
+      else if (deployElements.size() == 1)
+      {
+         DeployElement deployElement = deployElements.get(0);
+         enabledDeploymentTypes = new ArrayList<Class<? extends Annotation>>();
+         for (Node child : new NodeListIterable(deployElement.getElement().getChildNodes()))
+         {
+            if (child instanceof Element)
+            {
+               String className = getAsClassName(child.getNodeName(), deployElement.getNamespaces());
+               if (className != null)
+               {
+                  enabledDeploymentTypes.add(resourceLoader.classForName(className).asSubclass(Annotation.class));
+               }
+            }
+         }
+      }
+   }
+   
+   private static String getAsClassName(String nodeName, Map<String, String> namespaces)
+   {
+      String namespacePrefix;
+      String simpleClassName;
+      if (nodeName.contains(":"))
+      {
+          namespacePrefix = nodeName.substring(0, nodeName.indexOf(":"));
+          simpleClassName = nodeName.substring(nodeName.indexOf(":") + 1);
+      }
+      else
+      {
+         namespacePrefix = "";
+         simpleClassName = nodeName;
+      }
+      String namespace = namespaces.get(namespacePrefix);
+      String packageName;
+      if (namespace.startsWith("urn:java:ee"))
+      {
+         // Hack for now to return the correct package for this composite package deployment types
+         packageName = "javax.inject";
+      }
+      else if (namespace.startsWith("urn:java:"))
+      {
+         packageName = namespace.substring(9);
+      }
+      else
+      {
+         // Not a Java package
+         return null;
+      }
+      return packageName + "." + simpleClassName;
+   }
+   
+}


Property changes on: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bootstrap/BeansXmlParser.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bootstrap/WebBeansBootstrap.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bootstrap/WebBeansBootstrap.java	2009-02-15 11:10:56 UTC (rev 1524)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bootstrap/WebBeansBootstrap.java	2009-02-15 16:06:55 UTC (rev 1525)
@@ -17,6 +17,9 @@
 
 package org.jboss.webbeans.bootstrap;
 
+import java.lang.annotation.Annotation;
+import java.util.List;
+
 import org.jboss.webbeans.BeanValidator;
 import org.jboss.webbeans.CurrentManager;
 import org.jboss.webbeans.ManagerImpl;
@@ -25,9 +28,9 @@
 import org.jboss.webbeans.bootstrap.spi.EjbDiscovery;
 import org.jboss.webbeans.bootstrap.spi.WebBeanDiscovery;
 import org.jboss.webbeans.conversation.ConversationImpl;
-import org.jboss.webbeans.conversation.ServletConversationManager;
 import org.jboss.webbeans.conversation.JavaSEConversationTerminator;
 import org.jboss.webbeans.conversation.NumericConversationIdGenerator;
+import org.jboss.webbeans.conversation.ServletConversationManager;
 import org.jboss.webbeans.ejb.spi.EjbResolver;
 import org.jboss.webbeans.literal.DeployedLiteral;
 import org.jboss.webbeans.literal.InitializedLiteral;
@@ -126,6 +129,13 @@
          // Must populate EJB cache first, as we need it to detect whether a
          // bean is an EJB!
          getManager().getEjbDescriptorCache().addAll(getEjbDiscovery().discoverEjbs());
+         BeansXmlParser parser = new BeansXmlParser(getResourceLoader(), getWebBeanDiscovery().discoverWebBeansXml());
+         parser.parse();
+         List<Class<? extends Annotation>> enabledDeploymentTypes = parser.getEnabledDeploymentTypes();
+         if (enabledDeploymentTypes != null)
+         {
+            getManager().setEnabledDeploymentTypes(enabledDeploymentTypes);
+         }
          registerBeans(getWebBeanDiscovery().discoverWebBeanClasses());
          getManager().fireEvent(getManager(), new InitializedLiteral());
          log.info("Web Beans initialized. Validating beans.");

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/mock/MockBootstrap.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/mock/MockBootstrap.java	2009-02-15 11:10:56 UTC (rev 1524)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/mock/MockBootstrap.java	2009-02-15 16:06:55 UTC (rev 1525)
@@ -198,10 +198,6 @@
    public void setWebBeanDiscovery(WebBeanDiscovery webBeanDiscovery)
    {
       this.webBeanDiscovery = webBeanDiscovery;
-      if (webBeanDiscovery != null)
-      {
-         this.ejbDiscovery = new MockEjbDiscovery(webBeanDiscovery.discoverWebBeanClasses());
-      }
    }
    
    @Override
@@ -224,7 +220,7 @@
    @Override
    protected EjbDiscovery getEjbDiscovery()
    {
-      return ejbDiscovery;
+      return new MockEjbDiscovery(webBeanDiscovery.discoverWebBeanClasses());
    }
    
 }

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/mock/MockWebBeanDiscovery.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/mock/MockWebBeanDiscovery.java	2009-02-15 11:10:56 UTC (rev 1524)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/mock/MockWebBeanDiscovery.java	2009-02-15 16:06:55 UTC (rev 1525)
@@ -17,7 +17,6 @@
 package org.jboss.webbeans.mock;
 
 import java.net.URL;
-import java.util.Arrays;
 import java.util.HashSet;
 
 import org.jboss.webbeans.bootstrap.spi.WebBeanDiscovery;
@@ -29,22 +28,6 @@
 
    private Iterable<URL> webBeansXmlFiles = new HashSet<URL>();
 
-   /**
-    * Simple constructor that auto discovers EJBs
-    * @param webBeanClasses
-    */
-   public MockWebBeanDiscovery(Class<?>... webBeanClasses)
-   {
-      this(Arrays.asList(webBeanClasses), null);
-   }
-   
-   public MockWebBeanDiscovery(Iterable<Class<?>> webBeanClasses, Iterable<URL> webBeansXmlFiles)
-   {
-      super();
-      this.webBeanClasses = webBeanClasses;
-      this.webBeansXmlFiles = webBeansXmlFiles;
-   }
-
    public Iterable<Class<?>> discoverWebBeanClasses()
    {
       return webBeanClasses;
@@ -54,5 +37,15 @@
    {
       return webBeansXmlFiles;
    }
+   
+   public void setWebBeanClasses(Iterable<Class<?>> webBeanClasses)
+   {
+      this.webBeanClasses = webBeanClasses;
+   }
+   
+   public void setWebBeansXmlFiles(Iterable<URL> webBeansXmlFiles)
+   {
+      this.webBeansXmlFiles = webBeansXmlFiles;
+   }
 
 }

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/EnumerationIterable.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/EnumerationIterable.java	2009-02-15 11:10:56 UTC (rev 1524)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/EnumerationIterable.java	2009-02-15 16:06:55 UTC (rev 1525)
@@ -17,8 +17,11 @@
 
 package org.jboss.webbeans.util;
 
+import java.util.ArrayList;
+import java.util.Collections;
 import java.util.Enumeration;
 import java.util.Iterator;
+import java.util.List;
 
 /**
  * An Enumeration -> Iteratble adaptor
@@ -28,8 +31,8 @@
  */
 public class EnumerationIterable<T> implements Iterable<T>
 {
-   // The enumeration-iteartor
-   private EnumerationIterator<T> iterator;
+   // The enumeration as a list
+   private final List<T> list = new ArrayList<T>();
    
    /**
     * Constructor
@@ -38,7 +41,10 @@
     */
    public EnumerationIterable(Enumeration<T> enumeration)
    {
-      this.iterator = new EnumerationIterator<T>(enumeration);
+      while (enumeration.hasMoreElements())
+      {
+         list.add(enumeration.nextElement());
+      }
    }
    
    /**
@@ -48,7 +54,7 @@
     */
    public Iterator<T> iterator()
    {
-      return iterator;
+      return Collections.unmodifiableList(list).iterator();
    }
    
 }

Added: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/EnumerationVector.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/EnumerationVector.java	                        (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/EnumerationVector.java	2009-02-15 16:06:55 UTC (rev 1525)
@@ -0,0 +1,3 @@
+package org.jboss.webbeans.util;
+
+


Property changes on: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/EnumerationVector.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/dom/NodeListIterable.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/dom/NodeListIterable.java	                        (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/dom/NodeListIterable.java	2009-02-15 16:06:55 UTC (rev 1525)
@@ -0,0 +1,23 @@
+package org.jboss.webbeans.util.dom;
+
+import java.util.Iterator;
+
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+public class NodeListIterable implements Iterable<Node>
+{
+   
+   private final NodeList nodeList;
+   
+   public NodeListIterable(NodeList nodeList)
+   {
+      this.nodeList = nodeList;
+   }
+
+   public Iterator<Node> iterator()
+   {
+      return new NodeListIterator(nodeList);
+   }
+   
+}


Property changes on: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/dom/NodeListIterable.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/dom/NodeListIterator.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/dom/NodeListIterator.java	                        (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/dom/NodeListIterator.java	2009-02-15 16:06:55 UTC (rev 1525)
@@ -0,0 +1,36 @@
+package org.jboss.webbeans.util.dom;
+
+import java.util.Iterator;
+
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+public class NodeListIterator implements Iterator<Node>
+{
+   
+   private final NodeList nodeList;
+   private int index; 
+
+   public NodeListIterator(NodeList nodeList)
+   {
+      this.nodeList = nodeList;
+      index = 0;
+   }
+
+   public boolean hasNext()
+   {
+      return index < nodeList.getLength() - 1;
+   }
+
+   public Node next()
+   {
+      index++;
+      return nodeList.item(index);
+   }
+
+   public void remove()
+   {
+      throw new UnsupportedOperationException("XML DOM is readonly");
+   }
+   
+}


Property changes on: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/util/dom/NodeListIterator.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Modified: ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/unit/AbstractEjbEmbeddableTest.java
===================================================================
--- ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/unit/AbstractEjbEmbeddableTest.java	2009-02-15 11:10:56 UTC (rev 1524)
+++ ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/unit/AbstractEjbEmbeddableTest.java	2009-02-15 16:06:55 UTC (rev 1525)
@@ -42,13 +42,13 @@
    public void before() throws Exception
    {
       super.before();
-      webBeansBootstrap.getNaming().setContext(new InitialContext());
+      bootstrap.getNaming().setContext(new InitialContext());
    }
    
    @AfterMethod
    public void after() throws Exception
    {
-      webBeansBootstrap.getNaming().setContext(null);
+      bootstrap.getNaming().setContext(null);
    }
    
    
@@ -66,7 +66,7 @@
    
    public Context getContext()
    {
-      return webBeansBootstrap.getNaming().getContext();
+      return bootstrap.getNaming().getContext();
    }
    
 }

Modified: ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/unit/AbstractTest.java
===================================================================
--- ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/unit/AbstractTest.java	2009-02-15 11:10:56 UTC (rev 1524)
+++ ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/unit/AbstractTest.java	2009-02-15 16:06:55 UTC (rev 1525)
@@ -1,8 +1,10 @@
 package org.jboss.webbeans.test.unit;
 
+import java.io.IOException;
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
+import java.net.URL;
 import java.util.Arrays;
 import java.util.List;
 
@@ -21,6 +23,7 @@
 import org.jboss.webbeans.mock.MockBootstrap;
 import org.jboss.webbeans.mock.MockEjbDescriptor;
 import org.jboss.webbeans.mock.MockWebBeanDiscovery;
+import org.jboss.webbeans.util.EnumerationIterable;
 import org.testng.annotations.BeforeMethod;
 
 public class AbstractTest
@@ -59,16 +62,18 @@
    protected static final int BUILT_IN_BEANS = 3;
    
    protected ManagerImpl manager;
-   protected MockBootstrap webBeansBootstrap;
+   protected MockBootstrap bootstrap;
+   protected MockWebBeanDiscovery discovery;
 
    public static boolean visited = false;
 
    @BeforeMethod
    public void before() throws Exception
    {
-      webBeansBootstrap = new MockBootstrap();
-      manager = webBeansBootstrap.getManager();
-      manager.setEnabledDeploymentTypes(getEnabledDeploymentTypes());
+      bootstrap = new MockBootstrap();
+      manager = bootstrap.getManager();
+      this.discovery = new MockWebBeanDiscovery();
+      bootstrap.setWebBeanDiscovery(discovery);
    }
 
    protected List<Class<? extends Annotation>> getEnabledDeploymentTypes()
@@ -126,9 +131,29 @@
    
    protected void deployBeans(Class<?>... classes)
    {
-      MockBootstrap bootstrap = new MockBootstrap();
-      bootstrap.setWebBeanDiscovery(new MockWebBeanDiscovery(classes));
+      discovery.setWebBeanClasses(Arrays.asList(classes));
       bootstrap.boot();
       manager = bootstrap.getManager();
    }
+   
+   
+   protected Iterable<URL> getResources(String name)
+   {
+      if (name.startsWith("/"))
+      {
+         name = name.substring(1);
+      }
+      else
+      {
+         name = getClass().getPackage().getName().replace(".", "/") + "/" + name;
+      }
+      try
+      {
+         return new EnumerationIterable<URL>(getClass().getClassLoader().getResources(name));
+      }
+      catch (IOException e)
+      {
+         throw new RuntimeException("Error loading resource from classloader" + name, e);
+      }
+   }
 }

Modified: ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/unit/bootstrap/BootstrapTest.java
===================================================================
--- ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/unit/bootstrap/BootstrapTest.java	2009-02-15 11:10:56 UTC (rev 1524)
+++ ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/unit/bootstrap/BootstrapTest.java	2009-02-15 16:06:55 UTC (rev 1525)
@@ -4,8 +4,11 @@
 import java.util.List;
 import java.util.Map;
 
+import javax.inject.Production;
+import javax.inject.Standard;
 import javax.inject.manager.Bean;
 
+import org.jboss.webbeans.WebBean;
 import org.jboss.webbeans.bean.EnterpriseBean;
 import org.jboss.webbeans.bean.ProducerMethodBean;
 import org.jboss.webbeans.bean.RIBean;
@@ -16,6 +19,19 @@
 
 public class BootstrapTest extends AbstractTest
 {
+   
+   @Test
+   public void testDeploymentTypesLoadedFromBeansXml()
+   {
+      discovery.setWebBeansXmlFiles(getResources("test-beans.xml"));
+      deployBeans();
+      assert manager.getEnabledDeploymentTypes().size() == 4;
+      assert manager.getEnabledDeploymentTypes().get(0).equals(Standard.class);
+      assert manager.getEnabledDeploymentTypes().get(1).equals(WebBean.class);
+      assert manager.getEnabledDeploymentTypes().get(2).equals(Production.class);
+      assert manager.getEnabledDeploymentTypes().get(3).equals(AnotherDeploymentType.class);
+   }
+   
    @Test(groups="bootstrap")
    public void testSingleSimpleBean()
    {

Added: ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/unit/xml/AnotherDeploymentType.java
===================================================================
--- ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/unit/xml/AnotherDeploymentType.java	                        (rev 0)
+++ ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/unit/xml/AnotherDeploymentType.java	2009-02-15 16:06:55 UTC (rev 1525)
@@ -0,0 +1,20 @@
+package org.jboss.webbeans.test.unit.xml;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.inject.DeploymentType;
+
+ at Target( { TYPE, METHOD })
+ at Retention(RUNTIME)
+ at Documented
+ at DeploymentType
+ at interface AnotherDeploymentType
+{
+
+}
\ No newline at end of file


Property changes on: ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/unit/xml/AnotherDeploymentType.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/unit/xml/BeansXmlParserTest.java
===================================================================
--- ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/unit/xml/BeansXmlParserTest.java	                        (rev 0)
+++ ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/unit/xml/BeansXmlParserTest.java	2009-02-15 16:06:55 UTC (rev 1525)
@@ -0,0 +1,52 @@
+package org.jboss.webbeans.test.unit.xml;
+
+import java.net.URL;
+import java.util.Iterator;
+
+import javax.inject.Production;
+import javax.inject.Standard;
+
+import org.jboss.webbeans.bootstrap.BeansXmlParser;
+import org.jboss.webbeans.mock.MockResourceLoader;
+import org.jboss.webbeans.resources.spi.ResourceLoader;
+import org.jboss.webbeans.test.unit.AbstractTest;
+import org.testng.annotations.Test;
+
+public class BeansXmlParserTest extends AbstractTest
+{
+   
+   private static final ResourceLoader RESOURCE_LOADER = new MockResourceLoader(); 
+   
+   // Quick unit tests for the parser
+   @Test
+   public void testDefaultDeploymentTypes()
+   {
+      Iterable<URL> urls = getResources("default-beans.xml");
+      int i = 0;
+      Iterator<URL> it = urls.iterator();
+      while (it.hasNext())
+      {
+         i++;
+         it.next();
+      }
+      assert i == 1;
+      BeansXmlParser parser = new BeansXmlParser(RESOURCE_LOADER, urls);
+      parser.parse();
+      assert parser.getEnabledDeploymentTypes().size() == 2;
+      assert parser.getEnabledDeploymentTypes().get(0).equals(Standard.class);
+      assert parser.getEnabledDeploymentTypes().get(1).equals(Production.class);
+   }
+   
+   @Test
+   public void testUserDefinedDeploymentType()
+   {
+      Iterable<URL> urls = getResources("user-defined-beans.xml");
+      BeansXmlParser parser = new BeansXmlParser(RESOURCE_LOADER, urls);
+      parser.parse();
+      assert parser.getEnabledDeploymentTypes().size() == 3;
+      assert parser.getEnabledDeploymentTypes().get(0).equals(Standard.class);
+      assert parser.getEnabledDeploymentTypes().get(1).equals(Production.class);
+      assert parser.getEnabledDeploymentTypes().get(2).equals(AnotherDeploymentType.class);
+   }
+   
+}


Property changes on: ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/unit/xml/BeansXmlParserTest.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: ri/trunk/webbeans-ri/src/test/resources/org/jboss/webbeans/test/unit/bootstrap/test-beans.xml
===================================================================
--- ri/trunk/webbeans-ri/src/test/resources/org/jboss/webbeans/test/unit/bootstrap/test-beans.xml	                        (rev 0)
+++ ri/trunk/webbeans-ri/src/test/resources/org/jboss/webbeans/test/unit/bootstrap/test-beans.xml	2009-02-15 16:06:55 UTC (rev 1525)
@@ -0,0 +1,8 @@
+<Beans xmlns="urn:java:ee"
+       xmlns:test="urn:java:org.jboss.webbeans.test.unit.bootstrap"> 
+   <Deploy>
+      <Standard />
+      <Production />
+      <test:AnotherDeploymentType />
+   </Deploy>
+</Beans>


Property changes on: ri/trunk/webbeans-ri/src/test/resources/org/jboss/webbeans/test/unit/bootstrap/test-beans.xml
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: ri/trunk/webbeans-ri/src/test/resources/org/jboss/webbeans/test/unit/xml/default-beans.xml
===================================================================
--- ri/trunk/webbeans-ri/src/test/resources/org/jboss/webbeans/test/unit/xml/default-beans.xml	                        (rev 0)
+++ ri/trunk/webbeans-ri/src/test/resources/org/jboss/webbeans/test/unit/xml/default-beans.xml	2009-02-15 16:06:55 UTC (rev 1525)
@@ -0,0 +1,6 @@
+<Beans xmlns="urn:java:ee"> 
+   <Deploy>
+      <Standard />
+      <Production />
+   </Deploy>
+</Beans>


Property changes on: ri/trunk/webbeans-ri/src/test/resources/org/jboss/webbeans/test/unit/xml/default-beans.xml
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: ri/trunk/webbeans-ri/src/test/resources/org/jboss/webbeans/test/unit/xml/user-defined-beans.xml
===================================================================
--- ri/trunk/webbeans-ri/src/test/resources/org/jboss/webbeans/test/unit/xml/user-defined-beans.xml	                        (rev 0)
+++ ri/trunk/webbeans-ri/src/test/resources/org/jboss/webbeans/test/unit/xml/user-defined-beans.xml	2009-02-15 16:06:55 UTC (rev 1525)
@@ -0,0 +1,8 @@
+<Beans xmlns="urn:java:ee"
+       xmlns:test="urn:java:org.jboss.webbeans.test.unit.xml"> 
+   <Deploy>
+      <Standard />
+      <Production />
+      <test:AnotherDeploymentType />
+   </Deploy>
+</Beans>


Property changes on: ri/trunk/webbeans-ri/src/test/resources/org/jboss/webbeans/test/unit/xml/user-defined-beans.xml
___________________________________________________________________
Name: svn:mime-type
   + text/plain




More information about the weld-commits mailing list