[Jboss-cvs] JBossAS SVN: r56753 - in projects/microcontainer/trunk/deployers: . src/main/org/jboss/deployers/plugins src/main/org/jboss/deployers/plugins/attachments src/main/org/jboss/deployers/plugins/deployer src/main/org/jboss/deployers/plugins/deployers src/main/org/jboss/deployers/plugins/deployers/helpers src/main/org/jboss/deployers/plugins/deployers/kernel src/main/org/jboss/deployers/plugins/deployment src/main/org/jboss/deployers/plugins/structure src/main/org/jboss/deployers/spi src/main/org/jboss/deployers/spi/attachments src/main/org/jboss/deployers/spi/deployer src/main/org/jboss/deployers/spi/structure src/resources/tests src/resources/tests/bean src/resources/tests/bean/toplevel src/resources/tests/bean/toplevel/test.jar src/resources/tests/bean/toplevel/test.jar/META-INF src/resources/tests/metadata src/resources/tests/metadata/toplevel src/resources/tests/metadata/toplevel/exact src/resources/tests/metadata/toplevel/metadata.jar src/resources/tests/metadata/! toplevel/metadata.jar/META-INF src/resources/tests/metadata/toplevel/partial src/tests/org/jboss/test/deployers src/tests/org/jboss/test/deployers/attachments src/tests/org/jboss/test/deployers/attachments/test src/tests/org/jboss/test/deployers/bean src/tests/org/jboss/test/deployers/bean/support src/tests/org/jboss/test/deployers/bean/test src/tests/org/jboss/test/deployers/deployer src/tests/org/jboss/test/deployers/metadata src/tests/org/jboss/test/deployers/metadata/test

Sacha Labourey sacha.labourey.ml at jboss.org
Tue Sep 12 05:59:26 EDT 2006


Adrian is on fire!

jboss-cvs-commits at lists.jboss.org wrote:
> Author: adrian at jboss.org
> Date: 2006-09-12 05:36:30 -0400 (Tue, 12 Sep 2006)
> New Revision: 56753
>
> Added:
>    projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/plugins/attachments/
>    projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/plugins/attachments/AbstractAttachments.java
>    projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/plugins/attachments/AttachmentsImpl.java
>    projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/plugins/deployers/
>    projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/plugins/deployers/helpers/
>    projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/plugins/deployers/helpers/AbstractParsingDeployer.java
>    projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/plugins/deployers/helpers/AbstractRealDeployer.java
>    projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/plugins/deployers/helpers/SchemaResolverDeployer.java
>    projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/plugins/deployers/kernel/
>    projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/plugins/deployers/kernel/BeanDeployer.java
>    projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/plugins/deployers/kernel/KernelDeployer.java
>    projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/plugins/structure/MetaDataMatchFilter.java
>    projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/spi/attachments/
>    projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/spi/attachments/Attachments.java
>    projects/microcontainer/trunk/deployers/src/resources/tests/bean/
>    projects/microcontainer/trunk/deployers/src/resources/tests/bean/toplevel/
>    projects/microcontainer/trunk/deployers/src/resources/tests/bean/toplevel/my-beans.xml
>    projects/microcontainer/trunk/deployers/src/resources/tests/bean/toplevel/test.jar/
>    projects/microcontainer/trunk/deployers/src/resources/tests/bean/toplevel/test.jar/META-INF/
>    projects/microcontainer/trunk/deployers/src/resources/tests/bean/toplevel/test.jar/META-INF/my-beans.xml
>    projects/microcontainer/trunk/deployers/src/resources/tests/metadata/
>    projects/microcontainer/trunk/deployers/src/resources/tests/metadata/toplevel/
>    projects/microcontainer/trunk/deployers/src/resources/tests/metadata/toplevel/exact/
>    projects/microcontainer/trunk/deployers/src/resources/tests/metadata/toplevel/exact/jboss-service.xml
>    projects/microcontainer/trunk/deployers/src/resources/tests/metadata/toplevel/metadata-nometainf.jar/
>    projects/microcontainer/trunk/deployers/src/resources/tests/metadata/toplevel/metadata.jar/
>    projects/microcontainer/trunk/deployers/src/resources/tests/metadata/toplevel/metadata.jar/META-INF/
>    projects/microcontainer/trunk/deployers/src/resources/tests/metadata/toplevel/metadata.jar/META-INF/1-ds.xml
>    projects/microcontainer/trunk/deployers/src/resources/tests/metadata/toplevel/metadata.jar/META-INF/2-ds.xml
>    projects/microcontainer/trunk/deployers/src/resources/tests/metadata/toplevel/metadata.jar/META-INF/jboss-service.xml
>    projects/microcontainer/trunk/deployers/src/resources/tests/metadata/toplevel/partial/
>    projects/microcontainer/trunk/deployers/src/resources/tests/metadata/toplevel/partial/mydb-ds.xml
>    projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/attachments/
>    projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/attachments/AttachmentsTestSuite.java
>    projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/attachments/test/
>    projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/attachments/test/AttachmentsTest.java
>    projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/attachments/test/AttachmentsUnitTestCase.java
>    projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/attachments/test/DeploymentUnitAttachmentHierarchyUnitTestCase.java
>    projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/attachments/test/DeploymentUnitAttachmentsUnitTestCase.java
>    projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/attachments/test/DeploymentUnitPredeterminedManagedObjectsUnitTestCase.java
>    projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/attachments/test/DeploymentUnitTransientAttachmentsUnitTestCase.java
>    projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/attachments/test/DeploymentUnitTransientManagedObjectsUnitTestCase.java
>    projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/attachments/test/ExpectedAttachments.java
>    projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/attachments/test/PredeterminedManagedObjectsUnitTestCase.java
>    projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/attachments/test/TransientAttachmentsUnitTestCase.java
>    projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/attachments/test/TransientManagedObjectsUnitTestCase.java
>    projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/bean/
>    projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/bean/support/
>    projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/bean/support/Simple.java
>    projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/bean/support/TestBeanDeployer.java
>    projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/bean/test/
>    projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/bean/test/BeanDeployerUnitTestCase.java
>    projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/bean/test/KernelDeployerUnitTestCase.java
>    projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/metadata/
>    projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/metadata/test/
>    projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/metadata/test/MetaDataUnitTestCase.java
> Modified:
>    projects/microcontainer/trunk/deployers/.classpath
>    projects/microcontainer/trunk/deployers/build-test.xml
>    projects/microcontainer/trunk/deployers/build.xml
>    projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/plugins/deployer/AbstractDeployer.java
>    projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/plugins/deployer/AbstractDeploymentUnit.java
>    projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/plugins/deployer/DeployerWrapper.java
>    projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/plugins/deployment/MainDeployerImpl.java
>    projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/plugins/structure/AbstractDeploymentContext.java
>    projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/spi/deployer/DeploymentUnit.java
>    projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/spi/structure/DeploymentContext.java
>    projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/DeployersAllTestSuite.java
>    projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/deployer/DeployerTestSuite.java
> Log:
> [JBMICROCONT-5] - Deployer attachments, metadata tests and some basic deployer
> infrastructure, including the BeanDeployer.
>
> Modified: projects/microcontainer/trunk/deployers/.classpath
> ===================================================================
> --- projects/microcontainer/trunk/deployers/.classpath	2006-09-12 09:35:20 UTC (rev 56752)
> +++ projects/microcontainer/trunk/deployers/.classpath	2006-09-12 09:36:30 UTC (rev 56753)
> @@ -9,5 +9,8 @@
>  	<classpathentry kind="lib" path="/thirdparty/jboss/test/lib/jboss-test.jar"/>
>  	<classpathentry kind="lib" path="/thirdparty/apache-log4j/lib/log4j.jar"/>
>  	<classpathentry combineaccessrules="false" kind="src" path="/container"/>
> +	<classpathentry kind="lib" path="/thirdparty/jboss/jbossxb/lib/jboss-xml-binding.jar"/>
> +	<classpathentry combineaccessrules="false" kind="src" path="/kernel"/>
> +	<classpathentry combineaccessrules="false" kind="src" path="/dependency"/>
>  	<classpathentry kind="output" path="output/eclipse-classes"/>
>  </classpath>
>
> Modified: projects/microcontainer/trunk/deployers/build-test.xml
> ===================================================================
> --- projects/microcontainer/trunk/deployers/build-test.xml	2006-09-12 09:35:20 UTC (rev 56752)
> +++ projects/microcontainer/trunk/deployers/build-test.xml	2006-09-12 09:36:30 UTC (rev 56753)
> @@ -2,6 +2,7 @@
>  <!DOCTYPE project [
>     <!ENTITY buildmagic SYSTEM "../tools/etc/buildmagic/buildmagic.ent">
>     <!ENTITY libraries  SYSTEM "../thirdparty/libraries.ent">
> +   <!ENTITY modules SYSTEM "../tools/etc/buildmagic/modules.ent">
>     <!ENTITY targets SYSTEM "../tools/etc/buildmagic/targets.ent">
>  ]>
>  
> @@ -68,6 +69,7 @@
>      <!-- The combined library classpath -->
>      <path id="library.classpath">
>        <path refid="jboss.common.classpath"/>
> +      <path refid="jboss.jbossxb.classpath"/>
>        <path refid="jboss.container.classpath"/>
>        <path refid="junit.junit.classpath"/>
>        <path refid="apache.log4j.classpath"/>
> @@ -78,6 +80,8 @@
>      <!-- Modules -->
>      <!-- ======= -->
>  
> +    &modules;
> +
>  <!-- this -->
>  <property name="jboss.this.root" value="${module.root}/output"/>
>  <property name="jboss.this.lib" value="${jboss.this.root}/lib"/>
> @@ -87,17 +91,12 @@
>        <exclude name="${jar.prefix}.jar"/>
>     </fileset>
>  </path>
> -<!-- container -->
> -<property name="jboss.container.root" value="${project.root}/container"/>
> -<property name="jboss.container.lib" value="${jboss.container.root}/output/lib"/>
> -<path id="jboss.container.classpath">
> -   <fileset dir="${jboss.container.lib}">
> -      <include name="jboss-container.jar"/>
> -   </fileset>
> -</path>
>  
>      <!-- The combined dependant module classpath -->
>      <path id="dependentmodule.classpath">
> +      <path refid="jboss.container.classpath"/>
> +      <path refid="jboss.dependency.classpath"/>
> +      <path refid="jboss.kernel.classpath"/>
>        <path refid="jboss.this.classpath"/>
>      </path>
>  
>
> Modified: projects/microcontainer/trunk/deployers/build.xml
> ===================================================================
> --- projects/microcontainer/trunk/deployers/build.xml	2006-09-12 09:35:20 UTC (rev 56752)
> +++ projects/microcontainer/trunk/deployers/build.xml	2006-09-12 09:36:30 UTC (rev 56753)
> @@ -2,6 +2,7 @@
>  <!DOCTYPE project [
>     <!ENTITY buildmagic SYSTEM "../tools/etc/buildmagic/buildmagic.ent">
>     <!ENTITY libraries SYSTEM "../thirdparty/libraries.ent">
> +   <!ENTITY modules SYSTEM "../tools/etc/buildmagic/modules.ent">
>     <!ENTITY targets SYSTEM "../tools/etc/buildmagic/targets.ent">
>  ]>
>  
> @@ -63,23 +64,20 @@
>      <!-- ========= -->
>  
>      &libraries;
> -<!-- container -->
> -<property name="jboss.container.root" value="${project.root}/container"/>
> -<property name="jboss.container.lib" value="${jboss.container.root}/output/lib"/>
> -<path id="jboss.container.classpath">
> -   <fileset dir="${jboss.container.lib}">
> -      <include name="jboss-container.jar"/>
> -   </fileset>
> -</path>
>  
>      <!-- The combined library classpath -->
>      <path id="library.classpath">
>        <path refid="jboss.common.classpath"/>
> -      <path refid="jboss.container.classpath"/>
> +      <path refid="jboss.jbossxb.classpath"/>
>      </path>
>  
> +    &modules;
> +
>      <!-- The combined dependant module classpath -->
>      <path id="dependentmodule.classpath">
> +      <path refid="jboss.container.classpath"/>
> +      <path refid="jboss.dependency.classpath"/>
> +      <path refid="jboss.kernel.classpath"/>
>      </path>
>       
>      <!-- ===== -->
>
> Added: projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/plugins/attachments/AbstractAttachments.java
> ===================================================================
> --- projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/plugins/attachments/AbstractAttachments.java	2006-09-12 09:35:20 UTC (rev 56752)
> +++ projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/plugins/attachments/AbstractAttachments.java	2006-09-12 09:36:30 UTC (rev 56753)
> @@ -0,0 +1,114 @@
> +/*
> +* JBoss, Home of Professional Open Source
> +* Copyright 2006, JBoss Inc., and individual contributors as indicated
> +* by the @authors tag. See the copyright.txt 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.deployers.plugins.attachments;
> +
> +import org.jboss.deployers.spi.attachments.Attachments;
> +
> +/**
> + * AbstractAttachments.
> + * 
> + * @author <a href="adrian at jboss.com">Adrian Brock</a>
> + * @version $Revision: 1.1 $
> + */
> +public abstract class AbstractAttachments implements Attachments
> +{
> +   public <T> T addAttachment(String name, T attachment, Class<T> expectedType)
> +   {
> +      if (expectedType == null)
> +         throw new IllegalArgumentException("Null expectedType");
> +      Object result = addAttachment(name, attachment);
> +      if (result == null)
> +         return null;
> +      return expectedType.cast(result);
> +   }
> +
> +   public <T> T addAttachment(Class<T> type, T attachment)
> +   {
> +      if (type == null)
> +         throw new IllegalArgumentException("Null type");
> +      return addAttachment(type.getName(), attachment, type);
> +   }
> +
> +   public <T> T getAttachment(String name, Class<T> expectedType)
> +   {
> +      if (expectedType == null)
> +         throw new IllegalArgumentException("Null expectedType");
> +      Object result = getAttachment(name);
> +      if (result == null)
> +         return null;
> +      return expectedType.cast(result);
> +   }
> +
> +   public <T> T getAttachment(Class<T> type)
> +   {
> +      if (type == null)
> +         throw new IllegalArgumentException("Null type");
> +      return getAttachment(type.getName(), type);
> +   }
> +
> +   public boolean isAttachmentPresent(String name, Class<?> expectedType)
> +   {
> +      if (expectedType == null)
> +         throw new IllegalArgumentException("Null expectedType");
> +      Object result = getAttachment(name);
> +      if (result == null)
> +         return false;
> +      try
> +      {
> +         expectedType.cast(result);
> +      }
> +      catch (ClassCastException e)
> +      {
> +         return false;
> +      }
> +      return true;
> +   }
> +
> +   public boolean isAttachmentPresent(Class<?> type)
> +   {
> +      if (type == null)
> +         throw new IllegalArgumentException("Null type");
> +      return isAttachmentPresent(type.getName(), type);
> +   }
> +
> +   public <T> T removeAttachment(String name, Class<T> expectedType)
> +   {
> +      if (expectedType == null)
> +         throw new IllegalArgumentException("Null expectedType");
> +      Object result = removeAttachment(name);
> +      if (result == null)
> +         return null;
> +      return expectedType.cast(result);
> +   }
> +
> +   public <T> T removeAttachment(Class<T> type)
> +   {
> +      if (type == null)
> +         throw new IllegalArgumentException("Null type");
> +      return removeAttachment(type.getName(), type);
> +   }
> +
> +   public void clear()
> +   {
> +      throw new UnsupportedOperationException("You cannot clear attachments here.");
> +   }
> +}
>
> Added: projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/plugins/attachments/AttachmentsImpl.java
> ===================================================================
> --- projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/plugins/attachments/AttachmentsImpl.java	2006-09-12 09:35:20 UTC (rev 56752)
> +++ projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/plugins/attachments/AttachmentsImpl.java	2006-09-12 09:36:30 UTC (rev 56753)
> @@ -0,0 +1,78 @@
> +/*
> +* JBoss, Home of Professional Open Source
> +* Copyright 2006, JBoss Inc., and individual contributors as indicated
> +* by the @authors tag. See the copyright.txt 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.deployers.plugins.attachments;
> +
> +import java.util.Collections;
> +import java.util.Map;
> +import java.util.concurrent.ConcurrentHashMap;
> +
> +/**
> + * Attachments implementation
> + * 
> + * @author <a href="adrian at jboss.com">Adrian Brock</a>
> + * @version $Revision: 1.1 $
> + */
> +public class AttachmentsImpl extends AbstractAttachments
> +{
> +   /** The attachments */
> +   private Map<String, Object> attachments = new ConcurrentHashMap<String, Object>();
> +
> +   public Map<String, Object> getAttachments()
> +   {
> +      return Collections.unmodifiableMap(attachments);
> +   }
> +
> +   public Object addAttachment(String name, Object attachment)
> +   {
> +      if (name == null)
> +         throw new IllegalArgumentException("Null name");
> +      if (attachment == null)
> +         throw new IllegalArgumentException("Null attachment");
> +      return attachments.put(name, attachment);
> +   }
> +
> +   public Object getAttachment(String name)
> +   {
> +      if (name == null)
> +         throw new IllegalArgumentException("Null name");
> +      return attachments.get(name);
> +   }
> +
> +   public boolean isAttachmentPresent(String name)
> +   {
> +      if (name == null)
> +         throw new IllegalArgumentException("Null name");
> +      return attachments.containsKey(name);
> +   }
> +
> +   public Object removeAttachment(String name)
> +   {
> +      if (name == null)
> +         throw new IllegalArgumentException("Null name");
> +      return attachments.remove(name);
> +   }
> +
> +   public void clear()
> +   {
> +      attachments.clear();
> +   }
> +}
>
> Modified: projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/plugins/deployer/AbstractDeployer.java
> ===================================================================
> --- projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/plugins/deployer/AbstractDeployer.java	2006-09-12 09:35:20 UTC (rev 56752)
> +++ projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/plugins/deployer/AbstractDeployer.java	2006-09-12 09:36:30 UTC (rev 56753)
> @@ -26,10 +26,8 @@
>  import org.jboss.logging.Logger;
>  
>  /**
> - * AbstractDeployer.<p>
> + * AbstractDeployer.
>   * 
> - * We don't care about the order by default.
> - * 
>   * @author <a href="adrian at jboss.com">Adrian Brock</a>
>   * @version $Revision: 1.1 $
>   */
>
> Modified: projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/plugins/deployer/AbstractDeploymentUnit.java
> ===================================================================
> --- projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/plugins/deployer/AbstractDeploymentUnit.java	2006-09-12 09:35:20 UTC (rev 56752)
> +++ projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/plugins/deployer/AbstractDeploymentUnit.java	2006-09-12 09:36:30 UTC (rev 56753)
> @@ -21,6 +21,13 @@
>  */
>  package org.jboss.deployers.plugins.deployer;
>  
> +import java.util.Collections;
> +import java.util.HashMap;
> +import java.util.List;
> +import java.util.Map;
> +
> +import org.jboss.deployers.plugins.attachments.AbstractAttachments;
> +import org.jboss.deployers.spi.attachments.Attachments;
>  import org.jboss.deployers.spi.deployer.DeploymentUnit;
>  import org.jboss.deployers.spi.structure.DeploymentContext;
>  import org.jboss.virtual.VirtualFile;
> @@ -34,7 +41,7 @@
>   * @author <a href="adrian at jboss.com">Adrian Brock</a>
>   * @version $Revision: 1.1 $
>   */
> -public class AbstractDeploymentUnit implements DeploymentUnit
> +public class AbstractDeploymentUnit extends AbstractAttachments implements DeploymentUnit
>  {
>     /** The deployment context */
>     private DeploymentContext deploymentContext;
> @@ -68,4 +75,52 @@
>     {
>        return deploymentContext.getMetaDataFile(name);
>     }
> +
> +   public List<VirtualFile> getMetaDataFiles(String name, String suffix)
> +   {
> +      return deploymentContext.getMetaDataFiles(name, suffix);
> +   }
> +
> +   public Map<String, Object> getAttachments()
> +   {
> +      HashMap<String, Object> result = new HashMap<String, Object>(deploymentContext.getTransientAttachments().getAttachments());
> +      result.putAll(deploymentContext.getTransientManagedObjects().getAttachments());
> +      result.putAll(deploymentContext.getPredeterminedManagedObjects().getAttachments());
> +      return Collections.unmodifiableMap(result);
> +   }
> +
> +   public Object addAttachment(String name, Object attachment)
> +   {
> +      return deploymentContext.getTransientAttachments().addAttachment(name, attachment);
> +   }
> +
> +   public Object getAttachment(String name)
> +   {
> +      Object result = deploymentContext.getPredeterminedManagedObjects().getAttachment(name);
> +      if (result != null)
> +         return result;
> +      result = deploymentContext.getTransientManagedObjects().getAttachment(name);
> +      if (result != null)
> +         return result;
> +      return deploymentContext.getTransientAttachments().getAttachment(name);
> +   }
> +
> +   public boolean isAttachmentPresent(String name)
> +   {
> +      if (deploymentContext.getPredeterminedManagedObjects().isAttachmentPresent(name))
> +         return true;
> +      if (deploymentContext.getTransientManagedObjects().isAttachmentPresent(name))
> +         return true;
> +      return deploymentContext.getTransientAttachments().isAttachmentPresent(name);
> +   }
> +
> +   public Object removeAttachment(String name)
> +   {
> +      return deploymentContext.getTransientAttachments().removeAttachment(name);
> +   }
> +
> +   public Attachments getTransientManagedObjects()
> +   {
> +      return deploymentContext.getTransientManagedObjects();
> +   }
>  }
>
> Modified: projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/plugins/deployer/DeployerWrapper.java
> ===================================================================
> --- projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/plugins/deployer/DeployerWrapper.java	2006-09-12 09:35:20 UTC (rev 56752)
> +++ projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/plugins/deployer/DeployerWrapper.java	2006-09-12 09:36:30 UTC (rev 56753)
> @@ -82,9 +82,9 @@
>  
>        try
>        {
> -         log.debug("Preparing deployment: " + unit.getName());
> +         log.trace("Preparing deployment: " + unit.getName());
>           deployer.prepareDeploy(unit);
> -         log.debug("Prepared deployment:  " + unit.getName());
> +         log.trace("Prepared deployment:  " + unit.getName());
>        }
>        catch (Throwable t)
>        {
> @@ -100,11 +100,11 @@
>  
>        try
>        {
> -         // TODO log.debug("Prepare undeployment: " + unit.getName());
> -         log.debug("Undeploying: " + unit.getName());
> +         // TODO log.trace("Prepare undeployment: " + unit.getName());
> +         log.trace("Undeploying: " + unit.getName());
>           deployer.prepareUndeploy(unit);
> -         // TODO log.debug("Prepared undeployment:  " + unit.getName());
> -         log.debug("Undeployed:  " + unit.getName());
> +         // TODO log.trace("Prepared undeployment:  " + unit.getName());
> +         log.trace("Undeployed:  " + unit.getName());
>        }
>        catch (Throwable t)
>        {
> @@ -122,9 +122,9 @@
>  
>        try
>        {
> -         log.debug("Handing off from=" + from.getName() + " to=" + to.getName());
> +         log.trace("Handing off from=" + from.getName() + " to=" + to.getName());
>           deployer.handoff(from, to);
> -         log.debug("Handed off from=" + from.getName() + " to=" + to.getName());
> +         log.trace("Handed off from=" + from.getName() + " to=" + to.getName());
>        }
>        catch (Throwable t)
>        {
> @@ -141,10 +141,10 @@
>        try
>        {
>           // TODO log.debug("Commiting deployment: " + unit.getName());
> -         log.debug("Deploying: " + unit.getName());
> +         log.trace("Deploying: " + unit.getName());
>           deployer.commitDeploy(unit);
>           // TODO log.debug("Commited deployment:  " + unit.getName());
> -         log.debug("Deployed:  " + unit.getName());
> +         log.trace("Deployed:  " + unit.getName());
>        }
>        catch (Throwable t)
>        {
> @@ -162,9 +162,9 @@
>  
>        try
>        {
> -         log.debug("Commiting undeployment: " + unit.getName());
> +         log.trace("Commiting undeployment: " + unit.getName());
>           deployer.commitUndeploy(unit);
> -         log.debug("Commited undeployment:  " + unit.getName());
> +         log.trace("Commited undeployment:  " + unit.getName());
>        }
>        catch (Throwable t)
>        {
>
> Added: projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/plugins/deployers/helpers/AbstractParsingDeployer.java
> ===================================================================
> --- projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/plugins/deployers/helpers/AbstractParsingDeployer.java	2006-09-12 09:35:20 UTC (rev 56752)
> +++ projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/plugins/deployers/helpers/AbstractParsingDeployer.java	2006-09-12 09:36:30 UTC (rev 56753)
> @@ -0,0 +1,194 @@
> +/*
> +* JBoss, Home of Professional Open Source
> +* Copyright 2006, JBoss Inc., and individual contributors as indicated
> +* by the @authors tag. See the copyright.txt 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.deployers.plugins.deployers.helpers;
> +
> +import java.util.List;
> +
> +import org.jboss.deployers.plugins.deployer.AbstractSimpleDeployer;
> +import org.jboss.deployers.spi.DeploymentException;
> +import org.jboss.deployers.spi.deployer.DeploymentUnit;
> +import org.jboss.virtual.VirtualFile;
> +
> +/**
> + * AbstractParsingDeployer.
> + *
> + * @param <T> the expected type
> + * @author <a href="adrian at jboss.com">Adrian Brock</a>
> + * @version $Revision: 1.1 $
> + */
> +public abstract class AbstractParsingDeployer<T> extends AbstractSimpleDeployer
> +{
> +   /** The expected type */
> +   private final Class<T> expectedType;
> +   
> +   /**
> +    * Create a new AbstractParsingDeployer.
> +    * 
> +    * @param expectedType the expected type
> +    * @throws IllegalArgumentException if the expected type is null
> +    */
> +   protected AbstractParsingDeployer(Class<T> expectedType)
> +   {
> +      if (expectedType == null)
> +         throw new IllegalArgumentException("Null expectedType");
> +      this.expectedType = expectedType;
> +   }
> +   
> +   /**
> +    * Get the expected type
> +    * 
> +    * @return the expected type
> +    */
> +   protected Class<T> getExpectedType()
> +   {
> +      return expectedType;
> +   }
> +   
> +   /**
> +    * Get some meta data
> +    * 
> +    * @param unit the deployment unit
> +    * @param key the key into the managed objects
> +    * @return the metadata or null if it doesn't exist
> +    */
> +   protected T getMetaData(DeploymentUnit unit, String key)
> +   {
> +      return unit.getAttachment(key, expectedType);
> +   }
> +   
> +   /**
> +    * Create some meta data
> +    * 
> +    * @param unit the deployment unit
> +    * @param name the name
> +    * @param suffix the suffix
> +    * @throws DeploymentException for any error
> +    */
> +   protected void createMetaData(DeploymentUnit unit, String name, String suffix) throws DeploymentException
> +   {
> +      createMetaData(unit, name, suffix, expectedType.getName());
> +   }
> +   
> +   /**
> +    * Create some meta data
> +    * 
> +    * @param unit the deployment unit
> +    * @param name the name
> +    * @param suffix the suffix
> +    * @param key the key into the managed objects
> +    * @throws DeploymentException for any error
> +    */
> +   protected void createMetaData(DeploymentUnit unit, String name, String suffix, String key) throws DeploymentException
> +   {
> +      // First see whether it already exists
> +      T result = getMetaData(unit, key);
> +      if (result != null)
> +         return;
> +
> +      // Create it
> +      try
> +      {
> +         if (suffix == null)
> +            result = parse(unit, name);
> +         else
> +            result = parse(unit, name, suffix);
> +      }
> +      catch (Exception e)
> +      {
> +         throw DeploymentException.rethrowAsDeploymentException("Error creating managed object for " + unit.getName(), e);
> +      }
> +      
> +      // Doesn't exist
> +      if (result == null)
> +         return;
> +      
> +      // Register it
> +      unit.getTransientManagedObjects().addAttachment(key, result, expectedType);
> +   }
> +
> +   /**
> +    * Parse an exact file name
> +    * 
> +    * @param unit the unit
> +    * @param name the exact name to match
> +    * @return the metadata or null if it doesn't exist
> +    * @throws Exception for any error
> +    */
> +   protected T parse(DeploymentUnit unit, String name) throws Exception
> +   {
> +      // Try to find the metadata
> +      VirtualFile file = unit.getMetaDataFile(name);
> +      if (file == null)
> +         return null;
> +      
> +      T result = parse(unit, file);
> +      init(unit, result, file);
> +      return result;
> +   }
> +   
> +   /**
> +    * Parse an exact file name
> +    * 
> +    * @param unit the unit
> +    * @param name the exact name to match
> +    * @param suffix the suffix to match
> +    * @return the metadata or null if it doesn't exist
> +    * @throws Exception for any error
> +    */
> +   protected T parse(DeploymentUnit unit, String name, String suffix) throws Exception
> +   {
> +      // Try to find the metadata
> +      List<VirtualFile> files = unit.getMetaDataFiles(name, suffix);
> +      if (files.size() == 0)
> +         return null;
> +      
> +      // TODO remove this limitation
> +      if (files.size() > 1)
> +         throw new DeploymentException("Only one file is allowed, found=" + files);
> +
> +      VirtualFile file = files.get(0);
> +      
> +      T result = parse(unit, file);
> +      init(unit, result, file);
> +      return result;
> +   }
> +   
> +   /**
> +    * Parse a deployment
> +    * 
> +    * @param unit the deployment unit
> +    * @param file the metadata file
> +    * @return the metadata
> +    * @throws Exception for any error
> +    */
> +   protected abstract T parse(DeploymentUnit unit, VirtualFile file) throws Exception;
> +   
> +   /**
> +    * Initialise the metadata
> +    * 
> +    * @param unit the unit
> +    * @param metaData the metadata
> +    * @param file the metadata file
> +    * @throws Exception for any error
> +    */
> +   protected abstract void init(DeploymentUnit unit, T metaData, VirtualFile file) throws Exception;
> +}
> \ No newline at end of file
>
> Added: projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/plugins/deployers/helpers/AbstractRealDeployer.java
> ===================================================================
> --- projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/plugins/deployers/helpers/AbstractRealDeployer.java	2006-09-12 09:35:20 UTC (rev 56752)
> +++ projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/plugins/deployers/helpers/AbstractRealDeployer.java	2006-09-12 09:36:30 UTC (rev 56753)
> @@ -0,0 +1,77 @@
> +/*
> +* JBoss, Home of Professional Open Source
> +* Copyright 2006, JBoss Inc., and individual contributors as indicated
> +* by the @authors tag. See the copyright.txt 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.deployers.plugins.deployers.helpers;
> +
> +import java.util.HashSet;
> +import java.util.Map;
> +import java.util.Set;
> +
> +import org.jboss.deployers.plugins.deployer.AbstractSimpleDeployer;
> +import org.jboss.deployers.spi.deployer.DeploymentUnit;
> +
> +/**
> + * AbstractRealDeployer.
> + * 
> + * @param <T> the expected type
> + * @author <a href="adrian at jboss.com">Adrian Brock</a>
> + * @version $Revision: 1.1 $
> + */
> +public abstract class AbstractRealDeployer<T> extends AbstractSimpleDeployer
> +{
> +   /** The expected type */
> +   private Class<T> expectedType;
> +
> +   /**
> +    * Create a new AbstractRealDeployer.
> +    * 
> +    * @param expectedType the expected type
> +    * @throws IllegalArgumentException if the expected type is null
> +    */
> +   public AbstractRealDeployer(Class<T> expectedType)
> +   {
> +      if (expectedType == null)
> +         throw new IllegalArgumentException("Null expectedType");
> +      this.expectedType = expectedType;
> +   }
> +   
> +   /**
> +    * Get all the metadata for the expected type
> +    * 
> +    * @param unit the unit
> +    * @return a set of metadata matching the type
> +    */
> +   @SuppressWarnings("unchecked")
> +   protected Set<T> getAllMetaData(DeploymentUnit unit)
> +   {
> +      if (unit == null)
> +         throw new IllegalArgumentException("Null unit");
> +      
> +      Set<T> result = new HashSet<T>();
> +      Map<String, Object> attachments = unit.getAttachments();
> +      for (Object object : attachments.values())
> +      {
> +         if (expectedType.isInstance(object))
> +            result.add((T) object);
> +      }
> +      return result;
> +   }
> +}
>
> Added: projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/plugins/deployers/helpers/SchemaResolverDeployer.java
> ===================================================================
> --- projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/plugins/deployers/helpers/SchemaResolverDeployer.java	2006-09-12 09:35:20 UTC (rev 56752)
> +++ projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/plugins/deployers/helpers/SchemaResolverDeployer.java	2006-09-12 09:36:30 UTC (rev 56753)
> @@ -0,0 +1,95 @@
> +/*
> +* JBoss, Home of Professional Open Source
> +* Copyright 2006, JBoss Inc., and individual contributors as indicated
> +* by the @authors tag. See the copyright.txt 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.deployers.plugins.deployers.helpers;
> +
> +import java.io.InputStream;
> +
> +import org.jboss.deployers.spi.DeploymentException;
> +import org.jboss.deployers.spi.deployer.DeploymentUnit;
> +import org.jboss.virtual.VirtualFile;
> +import org.jboss.xb.binding.Unmarshaller;
> +import org.jboss.xb.binding.UnmarshallerFactory;
> +import org.jboss.xb.binding.sunday.unmarshalling.SchemaBindingResolver;
> +import org.jboss.xb.binding.sunday.unmarshalling.SingletonSchemaResolverFactory;
> +
> +/**
> + * SchemaResolverDeployer.
> + * 
> + * @param <T> the expected type 
> + * @author <a href="adrian at jboss.com">Adrian Brock</a>
> + * @version $Revision: 1.1 $
> + */
> +public abstract class SchemaResolverDeployer<T> extends AbstractParsingDeployer<T>
> +{
> +   /** Unmarshaller factory */
> +   private static final UnmarshallerFactory factory = UnmarshallerFactory.newInstance();
> +
> +   /** The resolver */
> +   private static final SchemaBindingResolver resolver = SingletonSchemaResolverFactory.getInstance().getSchemaBindingResolver();
> +   
> +   /**
> +    * Create a new SchemaResolverDeployer.
> +    * 
> +    * @param expectedType the expected type
> +    * @throws IllegalArgumentException if the expected type is null
> +    */
> +   public SchemaResolverDeployer(Class<T> expectedType)
> +   {
> +      super(expectedType);
> +   }
> +
> +   /**
> +    * Parse a deployment
> +    * 
> +    * @param unit the deployment unit
> +    * @param file the metadata file
> +    * @return the metadata
> +    * @throws Exception for any error
> +    */
> +   protected T parse(DeploymentUnit unit, VirtualFile file) throws Exception
> +   {
> +      if (file == null)
> +         throw new IllegalArgumentException("Null file");
> +      
> +      Unmarshaller unmarshaller = factory.newUnmarshaller();
> +      InputStream is = file.openStream();
> +      Object parsed = null;
> +      try
> +      {
> +         parsed = unmarshaller.unmarshal(is, resolver);
> +      }
> +      finally
> +      {
> +         try
> +         {
> +            is.close();
> +         }
> +         catch (Exception ignored)
> +         {
> +         }
> +      }
> +      if (parsed == null)
> +         throw new DeploymentException("The xml " + file.getPathName() + " is not well formed!");
> +
> +      return getExpectedType().cast(parsed);
> +   }
> +}
>
> Added: projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/plugins/deployers/kernel/BeanDeployer.java
> ===================================================================
> --- projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/plugins/deployers/kernel/BeanDeployer.java	2006-09-12 09:35:20 UTC (rev 56752)
> +++ projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/plugins/deployers/kernel/BeanDeployer.java	2006-09-12 09:36:30 UTC (rev 56753)
> @@ -0,0 +1,72 @@
> +/*
> +* JBoss, Home of Professional Open Source
> +* Copyright 2006, JBoss Inc., and individual contributors as indicated
> +* by the @authors tag. See the copyright.txt 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.deployers.plugins.deployers.kernel;
> +
> +import org.jboss.deployers.plugins.deployers.helpers.SchemaResolverDeployer;
> +import org.jboss.deployers.spi.DeploymentException;
> +import org.jboss.deployers.spi.deployer.DeploymentUnit;
> +import org.jboss.kernel.spi.deployment.KernelDeployment;
> +import org.jboss.virtual.VirtualFile;
> +
> +/**
> + * BeanDeployer.<p>
> + * 
> + * This deployer is responsible for looking for -beans.xml
> + * and creating the metadata object.<p>
> + * 
> + * The {@link KernelDeployer} does the real work of deployment.
> + * 
> + * @author <a href="adrian at jboss.com">Adrian Brock</a>
> + * @version $Revision: 1.1 $
> + */
> +public class BeanDeployer extends SchemaResolverDeployer<KernelDeployment>
> +{
> +   /**
> +    * Create a new BeanDeployer.
> +    * 
> +    * @throws IllegalArgumentException for a null kernel
> +    */
> +   public BeanDeployer()
> +   {
> +      super(KernelDeployment.class);
> +   }
> +
> +   public int getRelativeOrder()
> +   {
> +      return 1000;
> +   }
> +
> +   protected void init(DeploymentUnit unit, KernelDeployment metaData, VirtualFile file) throws Exception
> +   {
> +      String name = file.toURI().toString();
> +      metaData.setName(name);
> +   }
> +
> +   public void deploy(DeploymentUnit unit) throws DeploymentException
> +   {
> +      createMetaData(unit, null, "-beans.xml");
> +   }
> +
> +   public void undeploy(DeploymentUnit unit)
> +   {
> +   }
> +}
>
> Added: projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/plugins/deployers/kernel/KernelDeployer.java
> ===================================================================
> --- projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/plugins/deployers/kernel/KernelDeployer.java	2006-09-12 09:35:20 UTC (rev 56752)
> +++ projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/plugins/deployers/kernel/KernelDeployer.java	2006-09-12 09:36:30 UTC (rev 56753)
> @@ -0,0 +1,84 @@
> +/*
> +* JBoss, Home of Professional Open Source
> +* Copyright 2006, JBoss Inc., and individual contributors as indicated
> +* by the @authors tag. See the copyright.txt 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.deployers.plugins.deployers.kernel;
> +
> +import java.util.Set;
> +
> +import org.jboss.deployers.plugins.deployers.helpers.AbstractRealDeployer;
> +import org.jboss.deployers.spi.DeploymentException;
> +import org.jboss.deployers.spi.deployer.DeploymentUnit;
> +import org.jboss.kernel.Kernel;
> +import org.jboss.kernel.plugins.deployment.xml.BasicXMLDeployer;
> +import org.jboss.kernel.spi.deployment.KernelDeployment;
> +
> +/**
> + * KernelDeployer.<p>
> + * 
> + * This deployer is responsible for deploying all metadata of
> + * type {@link org.jboss.kernel.spi.deployment.KernelDeployment}.
> + * 
> + * @author <a href="adrian at jboss.com">Adrian Brock</a>
> + * @version $Revision: 1.1 $
> + */
> +public class KernelDeployer extends AbstractRealDeployer<KernelDeployment>
> +{
> +   /** The kernel deployer */
> +   private final BasicXMLDeployer deployer;
> +   
> +   /**
> +    * Create a new BeanDeployer.
> +    * 
> +    * @param kernel the kernel
> +    * @throws IllegalArgumentException for a null kernel
> +    */
> +   public KernelDeployer(Kernel kernel)
> +   {
> +      super(KernelDeployment.class);
> +      if (kernel == null)
> +         throw new IllegalArgumentException("Null kernel");
> +      deployer = new BasicXMLDeployer(kernel);
> +   }
> +
> +   public void deploy(DeploymentUnit unit) throws DeploymentException
> +   {
> +      Set<KernelDeployment> deployments = getAllMetaData(unit);
> +      for (KernelDeployment deployment : deployments)
> +      {
> +         try
> +         {
> +            deployer.deploy(deployment);
> +         }
> +         catch (Throwable t)
> +         {
> +            undeploy(unit); // TODO better unwind
> +            throw DeploymentException.rethrowAsDeploymentException("Error deploying: " + deployment.getName(), t);
> +         }
> +      }
> +   }
> +
> +   public void undeploy(DeploymentUnit unit)
> +   {
> +      Set<KernelDeployment> deployments = getAllMetaData(unit);
> +      for (KernelDeployment deployment : deployments)
> +         deployer.undeploy(deployment);
> +   }
> +}
>
> Modified: projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/plugins/deployment/MainDeployerImpl.java
> ===================================================================
> --- projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/plugins/deployment/MainDeployerImpl.java	2006-09-12 09:35:20 UTC (rev 56752)
> +++ projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/plugins/deployment/MainDeployerImpl.java	2006-09-12 09:36:30 UTC (rev 56753)
> @@ -54,6 +54,7 @@
>   * MainDeployerImpl.
>   * 
>   * TODO full deployer protocol
> + * TODO sort out a proper state machine
>   * @author <a href="adrian at jboss.com">Adrian Brock</a>
>   * @version $Revision: 1.1 $
>   */
> @@ -319,7 +320,10 @@
>              }
>           }
>           for (DeploymentContext context : undeployContexts)
> +         {
>              context.setState(UNDEPLOYED);
> +            log.debug("Undeployed: " + context.getName());
> +         }
>        }
>        
>        if (deployContexts != null)
> @@ -352,7 +356,10 @@
>              deployContexts.removeAll(errors);
>           }
>           for (DeploymentContext context : deployContexts)
> +         {
>              context.setState(DEPLOYED);
> +            log.debug("Deployed: " + context.getName());
> +         }
>        }
>     }
>  
>
> Modified: projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/plugins/structure/AbstractDeploymentContext.java
> ===================================================================
> --- projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/plugins/structure/AbstractDeploymentContext.java	2006-09-12 09:35:20 UTC (rev 56752)
> +++ projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/plugins/structure/AbstractDeploymentContext.java	2006-09-12 09:36:30 UTC (rev 56753)
> @@ -28,6 +28,8 @@
>  import java.util.Set;
>  import java.util.concurrent.CopyOnWriteArraySet;
>  
> +import org.jboss.deployers.plugins.attachments.AttachmentsImpl;
> +import org.jboss.deployers.spi.attachments.Attachments;
>  import org.jboss.deployers.spi.deployer.DeploymentUnit;
>  import org.jboss.deployers.spi.structure.DeploymentContext;
>  import org.jboss.deployers.spi.structure.DeploymentState;
> @@ -79,6 +81,15 @@
>     /** The child contexts */
>     private Set<DeploymentContext> children = new CopyOnWriteArraySet<DeploymentContext>();
>     
> +   /** The predtermined managed objects */
> +   private Attachments predeterminedManagedObjects = new AttachmentsImpl();
> +   
> +   /** The attachments */
> +   private Attachments transientAttachments = new AttachmentsImpl();
> +   
> +   /** The managed objects */
> +   private Attachments transientManagedObjects = new AttachmentsImpl();
> +   
>     /** Throwable */
>     private Throwable problem;
>     
> @@ -341,6 +352,21 @@
>           throw new IllegalArgumentException("Null child");
>        return children.remove(child);
>     }
> +   
> +   public Attachments getPredeterminedManagedObjects()
> +   {
> +      return predeterminedManagedObjects;
> +   }
> +   
> +   public Attachments getTransientManagedObjects()
> +   {
> +      return transientManagedObjects;
> +   }
> +   
> +   public Attachments getTransientAttachments()
> +   {
> +      return transientAttachments;
> +   }
>  
>     public Throwable getProblem()
>     {
> @@ -354,10 +380,25 @@
>  
>     public VirtualFile getMetaDataFile(String name)
>     {
> -      if (metaDataLocation == null)
> -         return null;
> +      if (name == null)
> +         throw new IllegalArgumentException("Null name");
>        try
>        {
> +         // There isn't a metadata location so let's see whether the root matches.
> +         if (metaDataLocation == null)
> +         {
> +            // It has to be a plain file that is not an archive
> +            if (root != null && root.isFile() && root.isArchive() == false)
> +            {
> +               String fileName = root.getName();
> +               if (fileName.equals(name))
> +                  return root;
> +            }
> +            
> +            // No match
> +            return null;
> +         }
> +         // Look in the meta data location
>           return metaDataLocation.findChild(name);
>        }
>        catch (Exception e)
> @@ -366,6 +407,39 @@
>           return null;
>        }
>     }
> +
> +   public List<VirtualFile> getMetaDataFiles(String name, String suffix)
> +   {
> +      if (name == null && suffix == null)
> +         throw new IllegalArgumentException("Null name and suffix");
> +      try
> +      {
> +         // There isn't a metadata location so let's see whether the root matches.
> +         // i.e. the top level is an xml
> +         if (metaDataLocation == null)
> +         {
> +            // It has to be a plain file that is not an archive
> +            if (root != null && root.isFile() && root.isArchive() == false)
> +            {
> +               String fileName = root.getName();
> +               if (name != null && fileName.equals(name))
> +                  return Collections.singletonList(root);
> +               if (suffix != null && fileName.endsWith(suffix))
> +                  return Collections.singletonList(root);
> +            }
> +            
> +            // No match
> +            return Collections.emptyList();
> +         }
> +         // Look in the meta data location
> +         return metaDataLocation.getChildren(new MetaDataMatchFilter(name, suffix));
> +      }
> +      catch (Exception e)
> +      {
> +         log.debug("Error retrieving meta data: name=" + name + " suffix=" + suffix, e);
> +         return Collections.emptyList();
> +      }
> +   }
>     
>     public void reset()
>     {
> @@ -376,6 +450,9 @@
>           for (DeploymentContext child : children)
>              child.reset();
>        }
> +      
> +      transientManagedObjects.clear();
> +      transientAttachments.clear();
>     }
>  
>     public String toString()
>
> Added: projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/plugins/structure/MetaDataMatchFilter.java
> ===================================================================
> --- projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/plugins/structure/MetaDataMatchFilter.java	2006-09-12 09:35:20 UTC (rev 56752)
> +++ projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/plugins/structure/MetaDataMatchFilter.java	2006-09-12 09:36:30 UTC (rev 56753)
> @@ -0,0 +1,91 @@
> +/*
> +  * JBoss, Home of Professional Open Source
> +  * Copyright 2005, JBoss Inc., and individual contributors as indicated
> +  * by the @authors tag. See the copyright.txt 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.deployers.plugins.structure;
> +
> +import org.jboss.virtual.VirtualFile;
> +import org.jboss.virtual.VirtualFileFilterWithAttributes;
> +import org.jboss.virtual.VisitorAttributes;
> +
> +/**
> + * Matches meta data
> + * 
> + * @author adrian at jboss.org
> + * @version $Revision: 44223 $
> + */
> +public class MetaDataMatchFilter implements VirtualFileFilterWithAttributes
> +{
> +   /** The name */
> +   private String name;
> +
> +   /** The suffix */
> +   private String suffix;
> +   
> +   /** The attributes */
> +   private VisitorAttributes attributes;
> +   
> +   /**
> +    * Create a new MetaDataMatchFilter.
> +    * using {@link VisitorAttributes#NO_DIRECTORIES}
> +    * 
> +    * @param name the name to exactly match
> +    * @param suffix the suffix to partially match
> +    * @throws IllegalArgumentException if both the name and suffix are null
> +    */
> +   public MetaDataMatchFilter(String name, String suffix)
> +   {
> +      this(name, suffix, null);
> +   }
> +   
> +   /**
> +    * Create a new MetaDataMatchFilter.
> +    * 
> +    * @param name the name to exactly match
> +    * @param suffix the suffix to partially match
> +    * @param attributes the attributes, pass null to use {@link VisitorAttributes#NO_DIRECTORIES}
> +    * @throws IllegalArgumentException if both the name and suffix are null
> +    */
> +   public MetaDataMatchFilter(String name, String suffix, VisitorAttributes attributes)
> +   {
> +      if (name == null && suffix == null)
> +         throw new IllegalArgumentException("Null name and suffix");
> +      this.name = name;
> +      this.suffix = suffix;
> +      if (attributes == null)
> +         attributes = VisitorAttributes.NO_DIRECTORIES;
> +      this.attributes = attributes;
> +   }
> +   
> +   public VisitorAttributes getAttributes()
> +   {
> +      return attributes;
> +   }
> +
> +   public boolean accepts(VirtualFile file)
> +   {
> +      String fileName = file.getName();
> +      if (name != null && fileName.equals(name))
> +         return true;
> +      if (suffix != null)
> +         return fileName.endsWith(suffix);
> +      return false;
> +   }
> +}
>
> Added: projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/spi/attachments/Attachments.java
> ===================================================================
> --- projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/spi/attachments/Attachments.java	2006-09-12 09:35:20 UTC (rev 56752)
> +++ projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/spi/attachments/Attachments.java	2006-09-12 09:36:30 UTC (rev 56753)
> @@ -0,0 +1,173 @@
> +/*
> +* JBoss, Home of Professional Open Source
> +* Copyright 2006, JBoss Inc., and individual contributors as indicated
> +* by the @authors tag. See the copyright.txt 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.deployers.spi.attachments;
> +
> +import java.util.Map;
> +
> +/**
> + * Attachments
> + * 
> + * Represents a set of attachments
> + * 
> + * @author <a href="adrian at jboss.com">Adrian Brock</a>
> + * @version $Revision: 1.1 $
> + */
> +public interface Attachments
> +{
> +   /**
> +    * Get all the attachments
> +    * 
> +    * @return the unmodifiable attachments
> +    */
> +   Map<String, Object> getAttachments();
> +
> +   /**
> +    * Add attachment
> +    *
> +    * @param name the name of the attachment
> +    * @param attachment the attachment
> +    * @return any previous attachment
> +    * @throws IllegalArgumentException for a null name or attachment
> +    */
> +   Object addAttachment(String name, Object attachment);
> +
> +   /**
> +    * Add attachment
> +    *
> +    * @param <T> the expected type
> +    * @param name the name of the attachment
> +    * @param attachment the attachment
> +    * @param expectedType the expected type
> +    * @return any previous attachment
> +    * @throws IllegalArgumentException for a null name, attachment or expectedType
> +    */
> +   <T> T addAttachment(String name, T attachment, Class<T> expectedType);
> +
> +   /**
> +    * Add attachment
> +    *
> +    * @param <T> the expected type
> +    * @param name the name of the attachment
> +    * @param attachment the attachment
> +    * @param type the type
> +    * @return any previous attachment
> +    * @throws IllegalArgumentException for a null name, attachment or type
> +    */
> +   <T> T addAttachment(Class<T> type, T attachment);
> +
> +   /**
> +    * Get attachment
> +    * 
> +    * @param name the name of the attachment
> +    * @return the attachment or null if not present
> +    * @throws IllegalArgumentException for a null name
> +    */
> +   Object getAttachment(String name);
> +
> +   /**
> +    * Get attachment
> +    * 
> +    * @param <T> the expected type
> +    * @param name the name of the attachment
> +    * @param expectedType the expected type
> +    * @return the attachment or null if not present
> +    * @throws IllegalArgumentException for a null name or expectedType
> +    */
> +   <T> T getAttachment(String name, Class<T> expectedType);
> +
> +   /**
> +    * Get attachment
> +    * 
> +    * @param <T> the expected type
> +    * @param name the name of the attachment
> +    * @param type the type
> +    * @return the attachment or null if not present
> +    * @throws IllegalArgumentException for a null name or type
> +    */
> +   <T> T getAttachment(Class<T> type);
> +   
> +   /**
> +    * Is the attachment present
> +    * 
> +    * @param name the name of the attachment
> +    * @return true when the attachment is present
> +    * @throws IllegalArgumentException for a null name
> +    */
> +   boolean isAttachmentPresent(String name);
> +   
> +   /**
> +    * Is the attachment present
> +    * 
> +    * @param name the name of the attachment
> +    * @param expectedType the expected type
> +    * @return true when the attachment is present
> +    * @throws IllegalArgumentException for a null name or expectedType
> +    */
> +   boolean isAttachmentPresent(String name, Class<?> expectedType);
> +   
> +   /**
> +    * Is the attachment present
> +    * 
> +    * @param name the name of the attachment
> +    * @param type the type
> +    * @return true when the attachment is present
> +    * @throws IllegalArgumentException for a null name or type
> +    */
> +   boolean isAttachmentPresent(Class<?> type);
> +
> +   /**
> +    * Remove attachment
> +    * 
> +    * @param name the name of the attachment
> +    * @return the attachment or null if not present
> +    * @throws IllegalArgumentException for a null name
> +    */
> +   Object removeAttachment(String name);
> +
> +   /**
> +    * Remove attachment
> +    * 
> +    * @param <T> the expected type
> +    * @param name the name of the attachment
> +    * @return the attachment or null if not present
> +    * @param expectedType the expected type
> +    * @throws IllegalArgumentException for a null name or expectedType
> +    */
> +   <T> T removeAttachment(String name, Class<T> expectedType);
> +
> +   /**
> +    * Remove attachment
> +    * 
> +    * @param <T> the expected type
> +    * @return the attachment or null if not present
> +    * @param type the type
> +    * @throws IllegalArgumentException for a null name or type
> +    */
> +   <T> T removeAttachment(Class<T> type);
> +   
> +   /**
> +    * Clear the attachments
> +    * 
> +    * @throws UnsupportedOperationException when not supported by the implementation
> +    */
> +   void clear();
> +}
>
> Modified: projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/spi/deployer/DeploymentUnit.java
> ===================================================================
> --- projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/spi/deployer/DeploymentUnit.java	2006-09-12 09:35:20 UTC (rev 56752)
> +++ projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/spi/deployer/DeploymentUnit.java	2006-09-12 09:36:30 UTC (rev 56753)
> @@ -21,6 +21,9 @@
>  */
>  package org.jboss.deployers.spi.deployer;
>  
> +import java.util.List;
> +
> +import org.jboss.deployers.spi.attachments.Attachments;
>  import org.jboss.virtual.VirtualFile;
>  
>  /**
> @@ -29,12 +32,10 @@
>   * A deployment unit represents a single unit
>   * that deployers work with.
>   * 
> - * TODO managed object stuff
> - * 
>   * @author <a href="adrian at jboss.com">Adrian Brock</a>
>   * @version $Revision: 1.1 $
>   */
> -public interface DeploymentUnit
> +public interface DeploymentUnit extends Attachments
>  {
>     /**
>      * Get the deployment units name
> @@ -44,17 +45,35 @@
>     String getName();
>     
>     /**
> -    * Gets some metadata for this deployment unit
> +    * Gets a metadata file
>      * 
> -    * @param name the resource name
> -    * @return the url of the metadata or null if not found
> +    * @param name the name to exactly match
> +    * @return the virtual file or null if not found
> +    * @throws IllegalArgumentException for a null name
>      */
>     VirtualFile getMetaDataFile(String name);
>     
>     /**
> +    * Gets the metadata files for this deployment unit
> +    * 
> +    * @param name the name to exactly match
> +    * @param suffix the suffix to partially match
> +    * @return the virtual files that match
> +    * @throws IllegalArgumentException if both the name and suffix are null
> +    */
> +   List<VirtualFile> getMetaDataFiles(String name, String suffix);
> +   
> +   /**
>      * Gets the classloader for this deployment unit
>      * 
>      * @return the classloader
>      */
>     ClassLoader getClassLoader();
> +
> +   /**
> +    * Get the managed objects
> +    * 
> +    * @return the managed objects
> +    */
> +   Attachments getTransientManagedObjects();
>  }
>
> Modified: projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/spi/structure/DeploymentContext.java
> ===================================================================
> --- projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/spi/structure/DeploymentContext.java	2006-09-12 09:35:20 UTC (rev 56752)
> +++ projects/microcontainer/trunk/deployers/src/main/org/jboss/deployers/spi/structure/DeploymentContext.java	2006-09-12 09:36:30 UTC (rev 56753)
> @@ -24,6 +24,7 @@
>  import java.util.List;
>  import java.util.Set;
>  
> +import org.jboss.deployers.spi.attachments.Attachments;
>  import org.jboss.deployers.spi.deployer.DeploymentUnit;
>  import org.jboss.virtual.VirtualFile;
>  
> @@ -120,14 +121,25 @@
>     void setMetaDataLocation(VirtualFile location);
>     
>     /**
> -    * Gets a metadata file for this deployment unit
> +    * Gets a metadata file
>      * 
> -    * @param name the resource name
> -    * @return the url of the metadata or null if not found
> +    * @param name the name to exactly match
> +    * @return the virtual file or null if not found
> +    * @throws IllegalArgumentException for a null name
>      */
>     VirtualFile getMetaDataFile(String name);
>  
>     /**
> +    * Gets metadata files for this deployment
> +    * 
> +    * @param name the name to exactly match
> +    * @param suffix the suffix to partially match
> +    * @return the virtual files that match
> +    * @throws IllegalArgumentException if both the name and suffix are null
> +    */
> +   List<VirtualFile> getMetaDataFiles(String name, String suffix);
> +
> +   /**
>      * Gets the classloader for this deployment unit
>      * 
>      * @return the classloader
> @@ -197,8 +209,29 @@
>      * @return whether it was removed
>      */
>     boolean removeChild(DeploymentContext child);
> -   
> +
>     /**
> +    * Get the predetermined managed objects
> +    * 
> +    * @return the predetermined managed objects
> +    */
> +   Attachments getPredeterminedManagedObjects();
> +
> +   /**
> +    * Get the managed objects
> +    * 
> +    * @return the managed objects
> +    */
> +   Attachments getTransientManagedObjects();
> +
> +   /**
> +    * Get the transient attachments
> +    * 
> +    * @return the attachments
> +    */
> +   Attachments getTransientAttachments();
> +
> +   /**
>      * Get the problem for this context
>      * 
>      * @return the problem
>
> Added: projects/microcontainer/trunk/deployers/src/resources/tests/bean/toplevel/my-beans.xml
> ===================================================================
> --- projects/microcontainer/trunk/deployers/src/resources/tests/bean/toplevel/my-beans.xml	2006-09-12 09:35:20 UTC (rev 56752)
> +++ projects/microcontainer/trunk/deployers/src/resources/tests/bean/toplevel/my-beans.xml	2006-09-12 09:36:30 UTC (rev 56753)
> @@ -0,0 +1,5 @@
> +<?xml version="1.0" encoding="UTF-8"?>
> +
> +<deployment xmlns="urn:jboss:bean-deployer:2.0">
> +   <bean name="Test" class="org.jboss.test.deployers.bean.support.Simple"/>
> +</deployment>
>
> Added: projects/microcontainer/trunk/deployers/src/resources/tests/bean/toplevel/test.jar/META-INF/my-beans.xml
> ===================================================================
> --- projects/microcontainer/trunk/deployers/src/resources/tests/bean/toplevel/test.jar/META-INF/my-beans.xml	2006-09-12 09:35:20 UTC (rev 56752)
> +++ projects/microcontainer/trunk/deployers/src/resources/tests/bean/toplevel/test.jar/META-INF/my-beans.xml	2006-09-12 09:36:30 UTC (rev 56753)
> @@ -0,0 +1,5 @@
> +<?xml version="1.0" encoding="UTF-8"?>
> +
> +<deployment xmlns="urn:jboss:bean-deployer:2.0">
> +   <bean name="Test" class="org.jboss.test.deployers.bean.support.Simple"/>
> +</deployment>
>
> Added: projects/microcontainer/trunk/deployers/src/resources/tests/metadata/toplevel/exact/jboss-service.xml
> ===================================================================
> --- projects/microcontainer/trunk/deployers/src/resources/tests/metadata/toplevel/exact/jboss-service.xml	2006-09-12 09:35:20 UTC (rev 56752)
> +++ projects/microcontainer/trunk/deployers/src/resources/tests/metadata/toplevel/exact/jboss-service.xml	2006-09-12 09:36:30 UTC (rev 56753)
> @@ -0,0 +1 @@
> +empty
> \ No newline at end of file
>
> Added: projects/microcontainer/trunk/deployers/src/resources/tests/metadata/toplevel/metadata.jar/META-INF/1-ds.xml
> ===================================================================
> --- projects/microcontainer/trunk/deployers/src/resources/tests/metadata/toplevel/metadata.jar/META-INF/1-ds.xml	2006-09-12 09:35:20 UTC (rev 56752)
> +++ projects/microcontainer/trunk/deployers/src/resources/tests/metadata/toplevel/metadata.jar/META-INF/1-ds.xml	2006-09-12 09:36:30 UTC (rev 56753)
> @@ -0,0 +1 @@
> +empty
> \ No newline at end of file
>
> Added: projects/microcontainer/trunk/deployers/src/resources/tests/metadata/toplevel/metadata.jar/META-INF/2-ds.xml
> ===================================================================
> --- projects/microcontainer/trunk/deployers/src/resources/tests/metadata/toplevel/metadata.jar/META-INF/2-ds.xml	2006-09-12 09:35:20 UTC (rev 56752)
> +++ projects/microcontainer/trunk/deployers/src/resources/tests/metadata/toplevel/metadata.jar/META-INF/2-ds.xml	2006-09-12 09:36:30 UTC (rev 56753)
> @@ -0,0 +1 @@
> +empty
> \ No newline at end of file
>
> Added: projects/microcontainer/trunk/deployers/src/resources/tests/metadata/toplevel/metadata.jar/META-INF/jboss-service.xml
> ===================================================================
> --- projects/microcontainer/trunk/deployers/src/resources/tests/metadata/toplevel/metadata.jar/META-INF/jboss-service.xml	2006-09-12 09:35:20 UTC (rev 56752)
> +++ projects/microcontainer/trunk/deployers/src/resources/tests/metadata/toplevel/metadata.jar/META-INF/jboss-service.xml	2006-09-12 09:36:30 UTC (rev 56753)
> @@ -0,0 +1 @@
> +empty
> \ No newline at end of file
>
> Added: projects/microcontainer/trunk/deployers/src/resources/tests/metadata/toplevel/partial/mydb-ds.xml
> ===================================================================
> --- projects/microcontainer/trunk/deployers/src/resources/tests/metadata/toplevel/partial/mydb-ds.xml	2006-09-12 09:35:20 UTC (rev 56752)
> +++ projects/microcontainer/trunk/deployers/src/resources/tests/metadata/toplevel/partial/mydb-ds.xml	2006-09-12 09:36:30 UTC (rev 56753)
> @@ -0,0 +1 @@
> +empty
> \ No newline at end of file
>
> Modified: projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/DeployersAllTestSuite.java
> ===================================================================
> --- projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/DeployersAllTestSuite.java	2006-09-12 09:35:20 UTC (rev 56752)
> +++ projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/DeployersAllTestSuite.java	2006-09-12 09:36:30 UTC (rev 56753)
> @@ -21,6 +21,7 @@
>  */
>  package org.jboss.test.deployers;
>  
> +import org.jboss.test.deployers.attachments.AttachmentsTestSuite;
>  import org.jboss.test.deployers.deployer.DeployerTestSuite;
>  import org.jboss.test.deployers.structure.StructureTestSuite;
>  
> @@ -45,6 +46,7 @@
>     {
>        TestSuite suite = new TestSuite("Deployers All Tests");
>  
> +      suite.addTest(AttachmentsTestSuite.suite());
>        suite.addTest(StructureTestSuite.suite());
>        suite.addTest(DeployerTestSuite.suite());
>  
>
> Added: projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/attachments/AttachmentsTestSuite.java
> ===================================================================
> --- projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/attachments/AttachmentsTestSuite.java	2006-09-12 09:35:20 UTC (rev 56752)
> +++ projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/attachments/AttachmentsTestSuite.java	2006-09-12 09:36:30 UTC (rev 56753)
> @@ -0,0 +1,67 @@
> +/*
> +* JBoss, Home of Professional Open Source
> +* Copyright 2006, JBoss Inc., and individual contributors as indicated
> +* by the @authors tag. See the copyright.txt 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.test.deployers.attachments;
> +
> +import junit.framework.Test;
> +import junit.framework.TestSuite;
> +import junit.textui.TestRunner;
> +
> +import org.jboss.test.deployers.attachments.test.AttachmentsUnitTestCase;
> +import org.jboss.test.deployers.attachments.test.DeploymentUnitAttachmentHierarchyUnitTestCase;
> +import org.jboss.test.deployers.attachments.test.DeploymentUnitAttachmentsUnitTestCase;
> +import org.jboss.test.deployers.attachments.test.DeploymentUnitPredeterminedManagedObjectsUnitTestCase;
> +import org.jboss.test.deployers.attachments.test.DeploymentUnitTransientAttachmentsUnitTestCase;
> +import org.jboss.test.deployers.attachments.test.DeploymentUnitTransientManagedObjectsUnitTestCase;
> +import org.jboss.test.deployers.attachments.test.PredeterminedManagedObjectsUnitTestCase;
> +import org.jboss.test.deployers.attachments.test.TransientAttachmentsUnitTestCase;
> +import org.jboss.test.deployers.attachments.test.TransientManagedObjectsUnitTestCase;
> +
> +/**
> + * Attachments Test Suite.
> + * 
> + * @author <a href="adrian at jboss.com">Adrian Brock</a>
> + * @version $Revision: 37459 $
> + */
> +public class AttachmentsTestSuite extends TestSuite
> +{
> +   public static void main(String[] args)
> +   {
> +      TestRunner.run(suite());
> +   }
> +
> +   public static Test suite()
> +   {
> +      TestSuite suite = new TestSuite("Attachments Tests");
> +
> +      suite.addTest(AttachmentsUnitTestCase.suite());
> +      suite.addTest(PredeterminedManagedObjectsUnitTestCase.suite());
> +      suite.addTest(TransientManagedObjectsUnitTestCase.suite());
> +      suite.addTest(TransientAttachmentsUnitTestCase.suite());
> +      suite.addTest(DeploymentUnitAttachmentsUnitTestCase.suite());
> +      suite.addTest(DeploymentUnitPredeterminedManagedObjectsUnitTestCase.suite());
> +      suite.addTest(DeploymentUnitTransientManagedObjectsUnitTestCase.suite());
> +      suite.addTest(DeploymentUnitTransientAttachmentsUnitTestCase.suite());
> +      suite.addTest(DeploymentUnitAttachmentHierarchyUnitTestCase.suite());
> +
> +      return suite;
> +   }
> +}
>
> Added: projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/attachments/test/AttachmentsTest.java
> ===================================================================
> --- projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/attachments/test/AttachmentsTest.java	2006-09-12 09:35:20 UTC (rev 56752)
> +++ projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/attachments/test/AttachmentsTest.java	2006-09-12 09:36:30 UTC (rev 56753)
> @@ -0,0 +1,476 @@
> +/*
> +* JBoss, Home of Professional Open Source
> +* Copyright 2006, JBoss Inc., and individual contributors as indicated
> +* by the @authors tag. See the copyright.txt 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.test.deployers.attachments.test;
> +
> +import junit.framework.Test;
> +import junit.framework.TestSuite;
> +
> +import org.jboss.deployers.spi.attachments.Attachments;
> +import org.jboss.test.BaseTestCase;
> +
> +/**
> + * Attachments Test.
> + * 
> + * @author <a href="adrian at jboss.com">Adrian Brock</a>
> + * @version $Revision: 1.1 $
> + */
> +public abstract class AttachmentsTest extends BaseTestCase
> +{
> +   public static Test suite()
> +   {
> +      return new TestSuite(AttachmentsTest.class);
> +   }
> +   
> +   public AttachmentsTest(String name)
> +   {
> +      super(name);
> +   }
> +   
> +   protected abstract Attachments getAttachments();
> +   
> +   protected abstract Attachments getMutable();
> +   
> +   public void testAddAttachmentErrors() throws Exception
> +   {
> +      Attachments mutable = getMutable();
> +      
> +      try
> +      {
> +         mutable.addAttachment((String) null, "attachment");
> +         fail("Should not be here!");
> +      }
> +      catch (Throwable t)
> +      {
> +         checkThrowable(IllegalArgumentException.class, t);
> +      }
> +      
> +      try
> +      {
> +         mutable.addAttachment("name", null);
> +         fail("Should not be here!");
> +      }
> +      catch (Throwable t)
> +      {
> +         checkThrowable(IllegalArgumentException.class, t);
> +      }
> +      
> +      try
> +      {
> +         mutable.addAttachment((String) null, "attachment", String.class);
> +         fail("Should not be here!");
> +      }
> +      catch (Throwable t)
> +      {
> +         checkThrowable(IllegalArgumentException.class, t);
> +      }
> +      
> +      try
> +      {
> +         mutable.addAttachment("name", null, String.class);
> +         fail("Should not be here!");
> +      }
> +      catch (Throwable t)
> +      {
> +         checkThrowable(IllegalArgumentException.class, t);
> +      }
> +      
> +      try
> +      {
> +         mutable.addAttachment("name", "attachment", null);
> +         fail("Should not be here!");
> +      }
> +      catch (Throwable t)
> +      {
> +         checkThrowable(IllegalArgumentException.class, t);
> +      }
> +      
> +      try
> +      {
> +         mutable.addAttachment((Class<String>) null, "attachment");
> +         fail("Should not be here!");
> +      }
> +      catch (Throwable t)
> +      {
> +         checkThrowable(IllegalArgumentException.class, t);
> +      }
> +      
> +      try
> +      {
> +         mutable.addAttachment(String.class, null);
> +         fail("Should not be here!");
> +      }
> +      catch (Throwable t)
> +      {
> +         checkThrowable(IllegalArgumentException.class, t);
> +      }
> +   }
> +   
> +   public void testAddAttachmentByName() throws Exception
> +   {
> +      ExpectedAttachments expected = new ExpectedAttachments();
> +      assertAddFreshAttachmentByName(expected, "name1", "attachment");
> +      assertAddFreshAttachmentByName(expected, "name2", "attachment");
> +      
> +      assertAddReplaceAttachmentByName(expected, "name1", "different", "attachment");
> +   }
> +
> +   protected void assertAddFreshAttachmentByName(ExpectedAttachments expected, String name, Object attachment)
> +   {
> +      assertAddReplaceAttachmentByName(expected, name, attachment, null);
> +   }
> +
> +   protected void assertAddReplaceAttachmentByName(ExpectedAttachments expected, String name, Object attachment, Object replaced)
> +   {
> +      Object result = assertAddAttachmentByName(expected, name, attachment);
> +      assertEquals(replaced, result);
> +   }
> +
> +   protected Object assertAddAttachmentByName(ExpectedAttachments expected, String name, Object attachment)
> +   {
> +      Object result = getMutable().addAttachment(name, attachment);
> +      checkAdd(getAttachments(), expected, name, attachment, result);
> +      return result;
> +   }
> +      
> +   protected Object checkAdd(Attachments attachments, ExpectedAttachments expected, String name, Object attachment, Object result)
> +   {
> +      assertEquals(attachment, attachments.getAttachment(name));
> +      assertTrue(attachments.isAttachmentPresent(name));
> +      Object expectedResult = assertExpectedAdd(attachments, expected, name, attachment);
> +      assertEquals(expectedResult, result);
> +      return result;
> +   }
> +   
> +   protected Object assertExpectedAdd(Attachments attachments, ExpectedAttachments expected, String name, Object attachment)
> +   {
> +      Object result = expected.add(name, attachment);
> +      assertEquals(expected.expected, attachments.getAttachments());
> +      return result;
> +   }
> +   
> +   public void testAddAttachmentByNameAndType() throws Exception
> +   {
> +      ExpectedAttachments expected = new ExpectedAttachments();
> +      assertAddFreshAttachmentByNameAndType(expected, "name1", "attachment", String.class);
> +      assertAddFreshAttachmentByNameAndType(expected, "name2", "attachment", String.class);
> +      
> +      assertAddReplaceAttachmentByNameAndType(expected, "name1", "different", "attachment", String.class);
> +   }
> +
> +   protected <T> void assertAddFreshAttachmentByNameAndType(ExpectedAttachments expected, String name, T attachment, Class<T> expectedType)
> +   {
> +      assertAddReplaceAttachmentByNameAndType(expected, name, attachment, null, expectedType);
> +   }
> +
> +   protected <T> void assertAddReplaceAttachmentByNameAndType(ExpectedAttachments expected, String name, T attachment, Object replaced, Class<T> expectedType)
> +   {
> +      Object result = assertAddAttachmentByNameAndType(expected, name, attachment, expectedType);
> +      assertEquals(replaced, result);
> +   }
> +
> +   protected <T> Object assertAddAttachmentByNameAndType(ExpectedAttachments expected, String name, T attachment, Class<T> expectedType)
> +   {
> +      Object result = getMutable().addAttachment(name, attachment, expectedType);
> +      Attachments attachments = getAttachments();
> +      checkAdd(attachments, expected, name, attachment, result);
> +      assertEquals(attachment, attachments.getAttachment(name, expectedType));
> +      assertTrue(attachments.isAttachmentPresent(name, expectedType));
> +      return result;
> +   }
> +   
> +   public void testAddAttachmentByType() throws Exception
> +   {
> +      ExpectedAttachments expected = new ExpectedAttachments();
> +      assertAddFreshAttachmentByType(expected, Integer.class, 1);
> +      assertAddFreshAttachmentByType(expected, String.class, "attachment");
> +      
> +      assertAddReplaceAttachmentByType(expected, String.class, "different", "attachment");
> +   }
> +
> +   protected <T> void assertAddFreshAttachmentByType(ExpectedAttachments expected, Class<T> type, T attachment)
> +   {
> +      assertAddReplaceAttachmentByType(expected, type, attachment, null);
> +   }
> +
> +   protected <T> void assertAddReplaceAttachmentByType(ExpectedAttachments expected, Class<T> type, T attachment, Object replaced)
> +   {
> +      Object result = assertAddAttachmentByType(expected, type, attachment);
> +      assertEquals(replaced, result);
> +   }
> +
> +   protected <T> Object assertAddAttachmentByType(ExpectedAttachments expected, Class<T> type, T attachment)
> +   {
> +      Object result = getMutable().addAttachment(type, attachment);
> +      String name = type.getName();
> +      Attachments attachments = getAttachments();
> +      checkAdd(attachments, expected, name, attachment, result);
> +      assertEquals(attachment, attachments.getAttachment(type));
> +      assertTrue(attachments.isAttachmentPresent(type));
> +      assertEquals(attachment, attachments.getAttachment(name, type));
> +      assertTrue(attachments.isAttachmentPresent(name, type));
> +      return result;
> +   }
> +   
> +   public void testRemoveAttachmentErrors() throws Exception
> +   {
> +      Attachments mutable = getMutable();
> +      
> +      try
> +      {
> +         mutable.removeAttachment((String) null);
> +         fail("Should not be here!");
> +      }
> +      catch (Throwable t)
> +      {
> +         checkThrowable(IllegalArgumentException.class, t);
> +      }
> +      
> +      try
> +      {
> +         mutable.removeAttachment((String) null, String.class);
> +         fail("Should not be here!");
> +      }
> +      catch (Throwable t)
> +      {
> +         checkThrowable(IllegalArgumentException.class, t);
> +      }
> +      
> +      try
> +      {
> +         mutable.removeAttachment("name", null);
> +         fail("Should not be here!");
> +      }
> +      catch (Throwable t)
> +      {
> +         checkThrowable(IllegalArgumentException.class, t);
> +      }
> +      
> +      try
> +      {
> +         mutable.removeAttachment((Class<String>) null);
> +         fail("Should not be here!");
> +      }
> +      catch (Throwable t)
> +      {
> +         checkThrowable(IllegalArgumentException.class, t);
> +      }
> +   }
> +   
> +   public void testRemoveAttachmentByName() throws Exception
> +   {
> +      ExpectedAttachments expected = new ExpectedAttachments();
> +      assertRemoveNotPresentAttachmentByName(expected, "name1");
> +      
> +      assertAddAttachmentByName(expected, "name1", "attachment");
> +      assertAddAttachmentByName(expected, "name2", "different");
> +      assertRemoveAttachmentByName(expected, "name1", "attachment");
> +   }
> +
> +   protected void assertRemoveNotPresentAttachmentByName(ExpectedAttachments expected, String name)
> +   {
> +      assertRemoveAttachmentByName(expected, name, null);
> +   }
> +
> +   protected void assertRemoveAttachmentByName(ExpectedAttachments expected, String name, Object removed)
> +   {
> +      Object result = assertRemoveAttachmentByName(expected, name);
> +      assertEquals(removed, result);
> +   }
> +
> +   protected Object assertRemoveAttachmentByName(ExpectedAttachments expected, String name)
> +   {
> +      Object result = getMutable().removeAttachment(name);
> +      checkRemove(getAttachments(), expected, name, result);
> +      return result;
> +   }
> +      
> +   protected Object checkRemove(Attachments attachments, ExpectedAttachments expected, String name, Object result)
> +   {
> +      assertNull(attachments.getAttachment(name));
> +      assertFalse(attachments.isAttachmentPresent(name));
> +      Object expectedResult = assertExpectedRemove(attachments, expected, name);
> +      assertEquals(expectedResult, result);
> +      return result;
> +   }
> +   
> +   protected Object assertExpectedRemove(Attachments attachments, ExpectedAttachments expected, String name)
> +   {
> +      Object result = expected.remove(name);
> +      assertEquals(expected.expected, attachments.getAttachments());
> +      return result;
> +   }
> +   
> +   public void testRemoveAttachmentByNameAndType() throws Exception
> +   {
> +      ExpectedAttachments expected = new ExpectedAttachments();
> +      assertRemoveNotPresentAttachmentByNameAndType(expected, "name1", String.class);
> +      
> +      assertAddAttachmentByNameAndType(expected, "name1", "attachment", String.class);
> +      assertAddAttachmentByNameAndType(expected, "name2", "different", String.class);
> +      assertRemoveAttachmentByNameAndType(expected, "name1", "attachment", String.class);
> +   }
> +
> +   protected <T> void assertRemoveNotPresentAttachmentByNameAndType(ExpectedAttachments expected, String name, Class<T> expectedType)
> +   {
> +      assertRemoveAttachmentByNameAndType(expected, name, null, expectedType);
> +   }
> +
> +   protected <T> void assertRemoveAttachmentByNameAndType(ExpectedAttachments expected, String name, Object removed, Class<T> expectedType)
> +   {
> +      Object result = assertRemoveAttachmentByNameAndType(expected, name, expectedType);
> +      assertEquals(removed, result);
> +   }
> +
> +   protected <T> Object assertRemoveAttachmentByNameAndType(ExpectedAttachments expected, String name, Class<T> expectedType)
> +   {
> +      Object result = getMutable().removeAttachment(name, expectedType);
> +      Attachments attachments = getAttachments();
> +      checkRemove(attachments, expected, name, result);
> +      assertNull(attachments.getAttachment(name, expectedType));
> +      assertFalse(attachments.isAttachmentPresent(name, expectedType));
> +      return result;
> +   }
> +   
> +   public void testRemoveAttachmentByType() throws Exception
> +   {
> +      ExpectedAttachments expected = new ExpectedAttachments();
> +      assertRemoveNotPresentAttachmentByType(expected, Integer.class);
> +      
> +      assertAddAttachmentByType(expected, Integer.class, 1);
> +      assertAddAttachmentByType(expected, String.class, "attachment");
> +      assertRemoveAttachmentByType(expected, String.class, "attachment");
> +   }
> +
> +   protected <T> void assertRemoveNotPresentAttachmentByType(ExpectedAttachments expected, Class<T> type)
> +   {
> +      assertRemoveAttachmentByType(expected, type, null);
> +   }
> +
> +   protected <T> void assertRemoveAttachmentByType(ExpectedAttachments expected, Class<T> type, Object removed)
> +   {
> +      Object result = assertRemoveAttachmentByType(expected, type);
> +      assertEquals(removed, result);
> +   }
> +
> +   protected <T> Object assertRemoveAttachmentByType(ExpectedAttachments expected, Class<T> type)
> +   {
> +      Object result = getMutable().removeAttachment(type);
> +      String name = type.getName();
> +      Attachments attachments = getAttachments();
> +      checkRemove(attachments, expected, name, result);
> +      assertNull(attachments.getAttachment(type));
> +      assertFalse(attachments.isAttachmentPresent(type));
> +      assertNull(attachments.getAttachment(name, type));
> +      assertFalse(attachments.isAttachmentPresent(name, type));
> +      return result;
> +   }
> +   
> +   public void testGetAttachmentErrors() throws Exception
> +   {
> +      Attachments attachments = getAttachments();
> +      
> +      try
> +      {
> +         attachments.getAttachment((String) null);
> +         fail("Should not be here!");
> +      }
> +      catch (Throwable t)
> +      {
> +         checkThrowable(IllegalArgumentException.class, t);
> +      }
> +      
> +      try
> +      {
> +         attachments.getAttachment((String) null, String.class);
> +         fail("Should not be here!");
> +      }
> +      catch (Throwable t)
> +      {
> +         checkThrowable(IllegalArgumentException.class, t);
> +      }
> +      
> +      try
> +      {
> +         attachments.getAttachment("name", null);
> +         fail("Should not be here!");
> +      }
> +      catch (Throwable t)
> +      {
> +         checkThrowable(IllegalArgumentException.class, t);
> +      }
> +      
> +      try
> +      {
> +         attachments.getAttachment((Class<String>) null);
> +         fail("Should not be here!");
> +      }
> +      catch (Throwable t)
> +      {
> +         checkThrowable(IllegalArgumentException.class, t);
> +      }
> +   }
> +   
> +   public void testIsAttachmentPresentErrors() throws Exception
> +   {
> +      Attachments attachments = getAttachments();
> +      
> +      try
> +      {
> +         attachments.isAttachmentPresent((String) null);
> +         fail("Should not be here!");
> +      }
> +      catch (Throwable t)
> +      {
> +         checkThrowable(IllegalArgumentException.class, t);
> +      }
> +      
> +      try
> +      {
> +         attachments.isAttachmentPresent((String) null, String.class);
> +         fail("Should not be here!");
> +      }
> +      catch (Throwable t)
> +      {
> +         checkThrowable(IllegalArgumentException.class, t);
> +      }
> +      
> +      try
> +      {
> +         attachments.isAttachmentPresent("name", null);
> +         fail("Should not be here!");
> +      }
> +      catch (Throwable t)
> +      {
> +         checkThrowable(IllegalArgumentException.class, t);
> +      }
> +      
> +      try
> +      {
> +         attachments.isAttachmentPresent((Class<String>) null);
> +         fail("Should not be here!");
> +      }
> +      catch (Throwable t)
> +      {
> +         checkThrowable(IllegalArgumentException.class, t);
> +      }
> +   }
> +}
>
> Added: projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/attachments/test/AttachmentsUnitTestCase.java
> ===================================================================
> --- projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/attachments/test/AttachmentsUnitTestCase.java	2006-09-12 09:35:20 UTC (rev 56752)
> +++ projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/attachments/test/AttachmentsUnitTestCase.java	2006-09-12 09:36:30 UTC (rev 56753)
> @@ -0,0 +1,59 @@
> +/*
> +* JBoss, Home of Professional Open Source
> +* Copyright 2006, JBoss Inc., and individual contributors as indicated
> +* by the @authors tag. See the copyright.txt 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.test.deployers.attachments.test;
> +
> +import junit.framework.Test;
> +import junit.framework.TestSuite;
> +
> +import org.jboss.deployers.plugins.attachments.AttachmentsImpl;
> +import org.jboss.deployers.spi.attachments.Attachments;
> +
> +/**
> + * AttachmentsUnitTestCase.
> + * 
> + * @author <a href="adrian at jboss.com">Adrian Brock</a>
> + * @version $Revision: 1.1 $
> + */
> +public class AttachmentsUnitTestCase extends AttachmentsTest
> +{
> +   public static Test suite()
> +   {
> +      return new TestSuite(AttachmentsUnitTestCase.class);
> +   }
> +   
> +   private Attachments impl = new AttachmentsImpl();
> +   
> +   public AttachmentsUnitTestCase(String name)
> +   {
> +      super(name);
> +   }
> +
> +   protected Attachments getAttachments()
> +   {
> +      return impl;
> +   }
> +
> +   protected Attachments getMutable()
> +   {
> +      return impl;
> +   }
> +}
>
> Added: projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/attachments/test/DeploymentUnitAttachmentHierarchyUnitTestCase.java
> ===================================================================
> --- projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/attachments/test/DeploymentUnitAttachmentHierarchyUnitTestCase.java	2006-09-12 09:35:20 UTC (rev 56752)
> +++ projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/attachments/test/DeploymentUnitAttachmentHierarchyUnitTestCase.java	2006-09-12 09:36:30 UTC (rev 56753)
> @@ -0,0 +1,157 @@
> +/*
> +* JBoss, Home of Professional Open Source
> +* Copyright 2006, JBoss Inc., and individual contributors as indicated
> +* by the @authors tag. See the copyright.txt 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.test.deployers.attachments.test;
> +
> +import java.util.Collections;
> +import java.util.Map;
> +
> +import junit.framework.Test;
> +import junit.framework.TestSuite;
> +
> +import org.jboss.deployers.plugins.deployer.AbstractDeploymentUnit;
> +import org.jboss.deployers.plugins.structure.AbstractDeploymentContext;
> +import org.jboss.deployers.spi.attachments.Attachments;
> +import org.jboss.deployers.spi.deployer.DeploymentUnit;
> +import org.jboss.test.BaseTestCase;
> +
> +/**
> + * DeploymentUnitAttachmentHierarchyUnitTestCase.
> + * 
> + * @author <a href="adrian at jboss.com">Adrian Brock</a>
> + * @version $Revision: 1.1 $
> + */
> +public class DeploymentUnitAttachmentHierarchyUnitTestCase extends BaseTestCase
> +{
> +   public static Test suite()
> +   {
> +      return new TestSuite(DeploymentUnitAttachmentHierarchyUnitTestCase.class);
> +   }
> +   
> +   private DeploymentUnit unit;
> +
> +   private Attachments predeterminedManagedObjects;
> +   
> +   private Attachments transientManagedObjects;
> +
> +   private Attachments transientAttachments;
> +   
> +   public DeploymentUnitAttachmentHierarchyUnitTestCase(String name)
> +   {
> +      super(name);
> +      AbstractDeploymentContext context = new AbstractDeploymentContext("attachments");
> +      unit = new AbstractDeploymentUnit(context);
> +      context.setDeploymentUnit(unit);
> +      predeterminedManagedObjects = context.getPredeterminedManagedObjects();
> +      transientManagedObjects = context.getTransientManagedObjects();
> +      transientAttachments = context.getTransientAttachments();
> +   }
> +   
> +   public void testPredeterminedIsFirstByName()
> +   {
> +      predeterminedManagedObjects.addAttachment("Name", "pMO");
> +      transientManagedObjects.addAttachment("Name", "tMO");
> +      transientAttachments.addAttachment("Name", "tA");
> +      assertEquals("pMO", unit.getAttachment("Name"));
> +      Map<String, String> expected = Collections.singletonMap("Name", "pMO");
> +      assertEquals(expected, unit.getAttachments());
> +   }
> +   
> +   public void testPredeterminedIsFirstByNameAndType()
> +   {
> +      predeterminedManagedObjects.addAttachment("Name", "pMO", String.class);
> +      transientManagedObjects.addAttachment("Name", "tMO", String.class);
> +      transientAttachments.addAttachment("Name", "tA", String.class);
> +      assertEquals("pMO", unit.getAttachment("Name"));
> +      assertEquals("pMO", unit.getAttachment("Name", String.class));
> +      Map<String, String> expected = Collections.singletonMap("Name", "pMO");
> +      assertEquals(expected, unit.getAttachments());
> +   }
> +   
> +   public void testPredeterminedIsFirstByType()
> +   {
> +      predeterminedManagedObjects.addAttachment(String.class, "pMO");
> +      transientManagedObjects.addAttachment(String.class, "tMO");
> +      transientAttachments.addAttachment(String.class, "tA");
> +      assertEquals("pMO", unit.getAttachment(String.class.getName()));
> +      assertEquals("pMO", unit.getAttachment(String.class.getName(), String.class));
> +      assertEquals("pMO", unit.getAttachment(String.class));
> +      Map<String, String> expected = Collections.singletonMap(String.class.getName(), "pMO");
> +      assertEquals(expected, unit.getAttachments());
> +   }
> +   
> +   public void testTransientManagedObjectsIsSecondByName()
> +   {
> +      transientManagedObjects.addAttachment("Name", "tMO");
> +      transientAttachments.addAttachment("Name", "tA");
> +      assertEquals("tMO", unit.getAttachment("Name"));
> +      Map<String, String> expected = Collections.singletonMap("Name", "tMO");
> +      assertEquals(expected, unit.getAttachments());
> +   }
> +   
> +   public void testTransientManagedObjectsIsSecondAndType()
> +   {
> +      transientManagedObjects.addAttachment("Name", "tMO", String.class);
> +      transientAttachments.addAttachment("Name", "tA", String.class);
> +      assertEquals("tMO", unit.getAttachment("Name"));
> +      assertEquals("tMO", unit.getAttachment("Name", String.class));
> +      Map<String, String> expected = Collections.singletonMap("Name", "tMO");
> +      assertEquals(expected, unit.getAttachments());
> +   }
> +   
> +   public void testTransientManagedObjectsIsSecondByType()
> +   {
> +      transientManagedObjects.addAttachment(String.class, "tMO");
> +      transientAttachments.addAttachment(String.class, "tA");
> +      assertEquals("tMO", unit.getAttachment(String.class.getName()));
> +      assertEquals("tMO", unit.getAttachment(String.class.getName(), String.class));
> +      assertEquals("tMO", unit.getAttachment(String.class));
> +      Map<String, String> expected = Collections.singletonMap(String.class.getName(), "tMO");
> +      assertEquals(expected, unit.getAttachments());
> +   }
> +   
> +   public void testTransientAttrachmentsIsThirdByName()
> +   {
> +      transientAttachments.addAttachment("Name", "tA");
> +      assertEquals("tA", unit.getAttachment("Name"));
> +      Map<String, String> expected = Collections.singletonMap("Name", "tA");
> +      assertEquals(expected, unit.getAttachments());
> +   }
> +   
> +   public void testTransientAttrachmentsIsThirdAndType()
> +   {
> +      transientAttachments.addAttachment("Name", "tA", String.class);
> +      assertEquals("tA", unit.getAttachment("Name"));
> +      assertEquals("tA", unit.getAttachment("Name", String.class));
> +      Map<String, String> expected = Collections.singletonMap("Name", "tA");
> +      assertEquals(expected, unit.getAttachments());
> +   }
> +   
> +   public void testTransientAttrachmentsIsThirdByType()
> +   {
> +      transientAttachments.addAttachment(String.class, "tA");
> +      assertEquals("tA", unit.getAttachment(String.class.getName()));
> +      assertEquals("tA", unit.getAttachment(String.class.getName(), String.class));
> +      assertEquals("tA", unit.getAttachment(String.class));
> +      Map<String, String> expected = Collections.singletonMap(String.class.getName(), "tA");
> +      assertEquals(expected, unit.getAttachments());
> +   }
> +}
>
> Added: projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/attachments/test/DeploymentUnitAttachmentsUnitTestCase.java
> ===================================================================
> --- projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/attachments/test/DeploymentUnitAttachmentsUnitTestCase.java	2006-09-12 09:35:20 UTC (rev 56752)
> +++ projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/attachments/test/DeploymentUnitAttachmentsUnitTestCase.java	2006-09-12 09:36:30 UTC (rev 56753)
> @@ -0,0 +1,67 @@
> +/*
> +* JBoss, Home of Professional Open Source
> +* Copyright 2006, JBoss Inc., and individual contributors as indicated
> +* by the @authors tag. See the copyright.txt 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.test.deployers.attachments.test;
> +
> +import junit.framework.Test;
> +import junit.framework.TestSuite;
> +
> +import org.jboss.deployers.plugins.deployer.AbstractDeploymentUnit;
> +import org.jboss.deployers.plugins.structure.AbstractDeploymentContext;
> +import org.jboss.deployers.spi.attachments.Attachments;
> +import org.jboss.deployers.spi.deployer.DeploymentUnit;
> +
> +/**
> + * DeploymentUnitAttachmentsUnitTestCase.
> + * 
> + * @author <a href="adrian at jboss.com">Adrian Brock</a>
> + * @version $Revision: 1.1 $
> + */
> +public class DeploymentUnitAttachmentsUnitTestCase extends AttachmentsTest
> +{
> +   public static Test suite()
> +   {
> +      return new TestSuite(DeploymentUnitAttachmentsUnitTestCase.class);
> +   }
> +   
> +   private DeploymentUnit unit;
> +
> +   private Attachments mutable; 
> +   
> +   public DeploymentUnitAttachmentsUnitTestCase(String name)
> +   {
> +      super(name);
> +      AbstractDeploymentContext context = new AbstractDeploymentContext("attachments");
> +      unit = new AbstractDeploymentUnit(context);
> +      context.setDeploymentUnit(unit);
> +      mutable = unit;
> +   }
> +
> +   protected Attachments getAttachments()
> +   {
> +      return unit;
> +   }
> +
> +   protected Attachments getMutable()
> +   {
> +      return mutable;
> +   }
> +}
>
> Added: projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/attachments/test/DeploymentUnitPredeterminedManagedObjectsUnitTestCase.java
> ===================================================================
> --- projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/attachments/test/DeploymentUnitPredeterminedManagedObjectsUnitTestCase.java	2006-09-12 09:35:20 UTC (rev 56752)
> +++ projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/attachments/test/DeploymentUnitPredeterminedManagedObjectsUnitTestCase.java	2006-09-12 09:36:30 UTC (rev 56753)
> @@ -0,0 +1,67 @@
> +/*
> +* JBoss, Home of Professional Open Source
> +* Copyright 2006, JBoss Inc., and individual contributors as indicated
> +* by the @authors tag. See the copyright.txt 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.test.deployers.attachments.test;
> +
> +import junit.framework.Test;
> +import junit.framework.TestSuite;
> +
> +import org.jboss.deployers.plugins.deployer.AbstractDeploymentUnit;
> +import org.jboss.deployers.plugins.structure.AbstractDeploymentContext;
> +import org.jboss.deployers.spi.attachments.Attachments;
> +import org.jboss.deployers.spi.deployer.DeploymentUnit;
> +
> +/**
> + * DeploymentUnitPredeterminedManagedObjectsUnitTestCase.
> + * 
> + * @author <a href="adrian at jboss.com">Adrian Brock</a>
> + * @version $Revision: 1.1 $
> + */
> +public class DeploymentUnitPredeterminedManagedObjectsUnitTestCase extends AttachmentsTest
> +{
> +   public static Test suite()
> +   {
> +      return new TestSuite(DeploymentUnitPredeterminedManagedObjectsUnitTestCase.class);
> +   }
> +   
> +   private DeploymentUnit unit;
> +
> +   private Attachments mutable; 
> +   
> +   public DeploymentUnitPredeterminedManagedObjectsUnitTestCase(String name)
> +   {
> +      super(name);
> +      AbstractDeploymentContext context = new AbstractDeploymentContext("attachments");
> +      unit = new AbstractDeploymentUnit(context);
> +      context.setDeploymentUnit(unit);
> +      mutable = context.getPredeterminedManagedObjects();
> +   }
> +
> +   protected Attachments getAttachments()
> +   {
> +      return unit;
> +   }
> +
> +   protected Attachments getMutable()
> +   {
> +      return mutable;
> +   }
> +}
>
> Added: projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/attachments/test/DeploymentUnitTransientAttachmentsUnitTestCase.java
> ===================================================================
> --- projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/attachments/test/DeploymentUnitTransientAttachmentsUnitTestCase.java	2006-09-12 09:35:20 UTC (rev 56752)
> +++ projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/attachments/test/DeploymentUnitTransientAttachmentsUnitTestCase.java	2006-09-12 09:36:30 UTC (rev 56753)
> @@ -0,0 +1,67 @@
> +/*
> +* JBoss, Home of Professional Open Source
> +* Copyright 2006, JBoss Inc., and individual contributors as indicated
> +* by the @authors tag. See the copyright.txt 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.test.deployers.attachments.test;
> +
> +import junit.framework.Test;
> +import junit.framework.TestSuite;
> +
> +import org.jboss.deployers.plugins.deployer.AbstractDeploymentUnit;
> +import org.jboss.deployers.plugins.structure.AbstractDeploymentContext;
> +import org.jboss.deployers.spi.attachments.Attachments;
> +import org.jboss.deployers.spi.deployer.DeploymentUnit;
> +
> +/**
> + * DeploymentUnitTransientAttachmentsUnitTestCase.
> + * 
> + * @author <a href="adrian at jboss.com">Adrian Brock</a>
> + * @version $Revision: 1.1 $
> + */
> +public class DeploymentUnitTransientAttachmentsUnitTestCase extends AttachmentsTest
> +{
> +   public static Test suite()
> +   {
> +      return new TestSuite(DeploymentUnitTransientAttachmentsUnitTestCase.class);
> +   }
> +   
> +   private DeploymentUnit unit;
> +
> +   private Attachments mutable; 
> +   
> +   public DeploymentUnitTransientAttachmentsUnitTestCase(String name)
> +   {
> +      super(name);
> +      AbstractDeploymentContext context = new AbstractDeploymentContext("attachments");
> +      unit = new AbstractDeploymentUnit(context);
> +      context.setDeploymentUnit(unit);
> +      mutable = context.getTransientAttachments();
> +   }
> +
> +   protected Attachments getAttachments()
> +   {
> +      return unit;
> +   }
> +
> +   protected Attachments getMutable()
> +   {
> +      return mutable;
> +   }
> +}
>
> Added: projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/attachments/test/DeploymentUnitTransientManagedObjectsUnitTestCase.java
> ===================================================================
> --- projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/attachments/test/DeploymentUnitTransientManagedObjectsUnitTestCase.java	2006-09-12 09:35:20 UTC (rev 56752)
> +++ projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/attachments/test/DeploymentUnitTransientManagedObjectsUnitTestCase.java	2006-09-12 09:36:30 UTC (rev 56753)
> @@ -0,0 +1,67 @@
> +/*
> +* JBoss, Home of Professional Open Source
> +* Copyright 2006, JBoss Inc., and individual contributors as indicated
> +* by the @authors tag. See the copyright.txt 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.test.deployers.attachments.test;
> +
> +import junit.framework.Test;
> +import junit.framework.TestSuite;
> +
> +import org.jboss.deployers.plugins.deployer.AbstractDeploymentUnit;
> +import org.jboss.deployers.plugins.structure.AbstractDeploymentContext;
> +import org.jboss.deployers.spi.attachments.Attachments;
> +import org.jboss.deployers.spi.deployer.DeploymentUnit;
> +
> +/**
> + * DeploymentUnitTransientManagedObjectsUnitTestCase.
> + * 
> + * @author <a href="adrian at jboss.com">Adrian Brock</a>
> + * @version $Revision: 1.1 $
> + */
> +public class DeploymentUnitTransientManagedObjectsUnitTestCase extends AttachmentsTest
> +{
> +   public static Test suite()
> +   {
> +      return new TestSuite(DeploymentUnitTransientManagedObjectsUnitTestCase.class);
> +   }
> +   
> +   private DeploymentUnit unit;
> +
> +   private Attachments mutable; 
> +   
> +   public DeploymentUnitTransientManagedObjectsUnitTestCase(String name)
> +   {
> +      super(name);
> +      AbstractDeploymentContext context = new AbstractDeploymentContext("attachments");
> +      unit = new AbstractDeploymentUnit(context);
> +      context.setDeploymentUnit(unit);
> +      mutable = context.getTransientManagedObjects();
> +   }
> +
> +   protected Attachments getAttachments()
> +   {
> +      return unit;
> +   }
> +
> +   protected Attachments getMutable()
> +   {
> +      return mutable;
> +   }
> +}
>
> Added: projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/attachments/test/ExpectedAttachments.java
> ===================================================================
> --- projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/attachments/test/ExpectedAttachments.java	2006-09-12 09:35:20 UTC (rev 56752)
> +++ projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/attachments/test/ExpectedAttachments.java	2006-09-12 09:36:30 UTC (rev 56753)
> @@ -0,0 +1,46 @@
> +/*
> +* JBoss, Home of Professional Open Source
> +* Copyright 2006, JBoss Inc., and individual contributors as indicated
> +* by the @authors tag. See the copyright.txt 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.test.deployers.attachments.test;
> +
> +import java.util.HashMap;
> +import java.util.Map;
> +
> +/**
> + * ExpectedAttachments.
> + * 
> + * @author <a href="adrian at jboss.com">Adrian Brock</a>
> + * @version $Revision: 1.1 $
> + */
> +public class ExpectedAttachments
> +{
> +   public Map<String, Object> expected = new HashMap<String, Object>();
> +   
> +   public Object add(String name, Object attachment)
> +   {
> +      return expected.put(name, attachment);
> +   }
> +   
> +   public Object remove(String name)
> +   {
> +      return expected.remove(name);
> +   }
> +}
>
> Added: projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/attachments/test/PredeterminedManagedObjectsUnitTestCase.java
> ===================================================================
> --- projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/attachments/test/PredeterminedManagedObjectsUnitTestCase.java	2006-09-12 09:35:20 UTC (rev 56752)
> +++ projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/attachments/test/PredeterminedManagedObjectsUnitTestCase.java	2006-09-12 09:36:30 UTC (rev 56753)
> @@ -0,0 +1,61 @@
> +/*
> +* JBoss, Home of Professional Open Source
> +* Copyright 2006, JBoss Inc., and individual contributors as indicated
> +* by the @authors tag. See the copyright.txt 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.test.deployers.attachments.test;
> +
> +import junit.framework.Test;
> +import junit.framework.TestSuite;
> +
> +import org.jboss.deployers.plugins.structure.AbstractDeploymentContext;
> +import org.jboss.deployers.spi.attachments.Attachments;
> +
> +/**
> + * PredeterminedManagedObjectsUnitTestCase.
> + * 
> + * @author <a href="adrian at jboss.com">Adrian Brock</a>
> + * @version $Revision: 1.1 $
> + */
> +public class PredeterminedManagedObjectsUnitTestCase extends AttachmentsTest
> +{
> +   public static Test suite()
> +   {
> +      return new TestSuite(PredeterminedManagedObjectsUnitTestCase.class);
> +   }
> +   
> +   private Attachments impl;
> +   
> +   public PredeterminedManagedObjectsUnitTestCase(String name)
> +   {
> +      super(name);
> +      AbstractDeploymentContext context = new AbstractDeploymentContext("attachments");
> +      impl = context.getPredeterminedManagedObjects();
> +   }
> +
> +   protected Attachments getAttachments()
> +   {
> +      return impl;
> +   }
> +
> +   protected Attachments getMutable()
> +   {
> +      return impl;
> +   }
> +}
>
> Added: projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/attachments/test/TransientAttachmentsUnitTestCase.java
> ===================================================================
> --- projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/attachments/test/TransientAttachmentsUnitTestCase.java	2006-09-12 09:35:20 UTC (rev 56752)
> +++ projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/attachments/test/TransientAttachmentsUnitTestCase.java	2006-09-12 09:36:30 UTC (rev 56753)
> @@ -0,0 +1,62 @@
> +/*
> +* JBoss, Home of Professional Open Source
> +* Copyright 2006, JBoss Inc., and individual contributors as indicated
> +* by the @authors tag. See the copyright.txt 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.test.deployers.attachments.test;
> +
> +import junit.framework.Test;
> +import junit.framework.TestSuite;
> +
> +import org.jboss.deployers.plugins.structure.AbstractDeploymentContext;
> +import org.jboss.deployers.spi.attachments.Attachments;
> +
> +/**
> + * TransientAttachmentsUnitTestCase.
> + * 
> + * @author <a href="adrian at jboss.com">Adrian Brock</a>
> + * @version $Revision: 1.1 $
> + */
> +public class TransientAttachmentsUnitTestCase extends AttachmentsTest
> +{
> +   public static Test suite()
> +   {
> +      return new TestSuite(TransientAttachmentsUnitTestCase.class);
> +   }
> +   
> +   private Attachments impl;
> +   
> +   public TransientAttachmentsUnitTestCase(String name)
> +   {
> +      super(name);
> +      AbstractDeploymentContext context = new AbstractDeploymentContext("attachments");
> +      impl = context.getTransientAttachments();
> +   }
> +   
> +   protected Attachments getAttachments()
> +   {
> +      return impl;
> +   }
> +
> +   protected Attachments getMutable()
> +   {
> +      return impl;
> +   }
> +
> +}
>
> Added: projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/attachments/test/TransientManagedObjectsUnitTestCase.java
> ===================================================================
> --- projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/attachments/test/TransientManagedObjectsUnitTestCase.java	2006-09-12 09:35:20 UTC (rev 56752)
> +++ projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/attachments/test/TransientManagedObjectsUnitTestCase.java	2006-09-12 09:36:30 UTC (rev 56753)
> @@ -0,0 +1,62 @@
> +/*
> +* JBoss, Home of Professional Open Source
> +* Copyright 2006, JBoss Inc., and individual contributors as indicated
> +* by the @authors tag. See the copyright.txt 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.test.deployers.attachments.test;
> +
> +import junit.framework.Test;
> +import junit.framework.TestSuite;
> +
> +import org.jboss.deployers.plugins.structure.AbstractDeploymentContext;
> +import org.jboss.deployers.spi.attachments.Attachments;
> +
> +/**
> + * TransientManagedObjectsUnitTestCase.
> + * 
> + * @author <a href="adrian at jboss.com">Adrian Brock</a>
> + * @version $Revision: 1.1 $
> + */
> +public class TransientManagedObjectsUnitTestCase extends AttachmentsTest
> +{
> +   public static Test suite()
> +   {
> +      return new TestSuite(TransientManagedObjectsUnitTestCase.class);
> +   }
> +   
> +   private Attachments impl;
> +   
> +   public TransientManagedObjectsUnitTestCase(String name)
> +   {
> +      super(name);
> +      AbstractDeploymentContext context = new AbstractDeploymentContext("attachments");
> +      impl = context.getTransientManagedObjects();
> +   }
> +   
> +   protected Attachments getAttachments()
> +   {
> +      return impl;
> +   }
> +
> +   protected Attachments getMutable()
> +   {
> +      return impl;
> +   }
> +
> +}
>
> Added: projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/bean/support/Simple.java
> ===================================================================
> --- projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/bean/support/Simple.java	2006-09-12 09:35:20 UTC (rev 56752)
> +++ projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/bean/support/Simple.java	2006-09-12 09:36:30 UTC (rev 56753)
> @@ -0,0 +1,32 @@
> +/*
> +* JBoss, Home of Professional Open Source
> +* Copyright 2006, JBoss Inc., and individual contributors as indicated
> +* by the @authors tag. See the copyright.txt 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.test.deployers.bean.support;
> +
> +/**
> + * Simple.
> + * 
> + * @author <a href="adrian at jboss.com">Adrian Brock</a>
> + * @version $Revision: 1.1 $
> + */
> +public class Simple
> +{
> +}
>
> Added: projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/bean/support/TestBeanDeployer.java
> ===================================================================
> --- projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/bean/support/TestBeanDeployer.java	2006-09-12 09:35:20 UTC (rev 56752)
> +++ projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/bean/support/TestBeanDeployer.java	2006-09-12 09:36:30 UTC (rev 56753)
> @@ -0,0 +1,64 @@
> +/*
> +* JBoss, Home of Professional Open Source
> +* Copyright 2006, JBoss Inc., and individual contributors as indicated
> +* by the @authors tag. See the copyright.txt 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.test.deployers.bean.support;
> +
> +import java.util.Collections;
> +
> +import org.jboss.beans.metadata.plugins.AbstractBeanMetaData;
> +import org.jboss.beans.metadata.spi.BeanMetaDataFactory;
> +import org.jboss.deployers.plugins.deployer.AbstractSimpleDeployer;
> +import org.jboss.deployers.spi.DeploymentException;
> +import org.jboss.deployers.spi.deployer.DeploymentUnit;
> +import org.jboss.kernel.plugins.deployment.AbstractKernelDeployment;
> +
> +/**
> + * TestBeanDeployer.<p>
> + * 
> + * This just creates some metadata for use by the KernelDeployer
> + * 
> + * @author <a href="adrian at jboss.com">Adrian Brock</a>
> + * @version $Revision: 1.1 $
> + */
> +public class TestBeanDeployer extends AbstractSimpleDeployer
> +{
> +
> +   public int getRelativeOrder()
> +   {
> +      return 1;
> +   }
> +
> +   public void deploy(DeploymentUnit unit) throws DeploymentException
> +   {
> +
> +      AbstractKernelDeployment deployment = new AbstractKernelDeployment();
> +      deployment.setName("KernelDeployerTest");
> +      
> +      BeanMetaDataFactory metaData = new AbstractBeanMetaData("Test", Simple.class.getName());
> +      deployment.setBeanFactories(Collections.singletonList(metaData));
> +      
> +      unit.getTransientManagedObjects().addAttachment("KernelDeployerTest", deployment);
> +   }
> +
> +   public void undeploy(DeploymentUnit unit)
> +   {
> +   }
> +}
>
> Added: projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/bean/test/BeanDeployerUnitTestCase.java
> ===================================================================
> --- projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/bean/test/BeanDeployerUnitTestCase.java	2006-09-12 09:35:20 UTC (rev 56752)
> +++ projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/bean/test/BeanDeployerUnitTestCase.java	2006-09-12 09:36:30 UTC (rev 56753)
> @@ -0,0 +1,119 @@
> +/*
> +* JBoss, Home of Professional Open Source
> +* Copyright 2006, JBoss Inc., and individual contributors as indicated
> +* by the @authors tag. See the copyright.txt 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.test.deployers.bean.test;
> +
> +import junit.framework.Test;
> +import junit.framework.TestSuite;
> +
> +import org.jboss.deployers.plugins.deployers.kernel.BeanDeployer;
> +import org.jboss.deployers.plugins.deployers.kernel.KernelDeployer;
> +import org.jboss.deployers.plugins.deployment.MainDeployerImpl;
> +import org.jboss.deployers.plugins.structure.vfs.file.FileStructure;
> +import org.jboss.deployers.plugins.structure.vfs.jar.JARStructure;
> +import org.jboss.deployers.spi.structure.DeploymentContext;
> +import org.jboss.deployers.spi.structure.DeploymentState;
> +import org.jboss.kernel.Kernel;
> +import org.jboss.kernel.plugins.bootstrap.basic.BasicBootstrap;
> +import org.jboss.kernel.spi.dependency.KernelController;
> +import org.jboss.test.deployers.BaseDeployersTest;
> +
> +/**
> + * BeanDeployerUnitTestCase.
> + * 
> + * @author <a href="adrian at jboss.com">Adrian Brock</a>
> + * @version $Revision: 1.1 $
> + */
> +public class BeanDeployerUnitTestCase extends BaseDeployersTest
> +{
> +   public static Test suite()
> +   {
> +      return new TestSuite(BeanDeployerUnitTestCase.class);
> +   }
> +
> +   private MainDeployerImpl main;
> +   
> +   private KernelController controller;
> +   
> +   public BeanDeployerUnitTestCase(String name) throws Throwable
> +   {
> +      super(name);
> +   }
> +
> +   protected void setUp() throws Exception
> +   {
> +      super.setUp();
> +      try
> +      {
> +         BasicBootstrap bootstrap = new BasicBootstrap();
> +         bootstrap.run();
> +         Kernel kernel = bootstrap.getKernel();
> +         controller = kernel.getController();
> +         
> +         main = new MainDeployerImpl();
> +         main.addStructureDeployer(new JARStructure());
> +         main.addStructureDeployer(new FileStructure());
> +         
> +         BeanDeployer beanDeployer = new BeanDeployer();
> +         KernelDeployer kernelDeployer = new KernelDeployer(kernel);
> +         main.addDeployer(beanDeployer);
> +         main.addDeployer(kernelDeployer);
> +      }
> +      catch (Throwable t)
> +      {
> +         throw new RuntimeException(t);
> +      }
> +   }
> +
> +   public void testTopLevelFile() throws Exception
> +   {
> +      DeploymentContext context = createDeploymentContext("/bean", "toplevel/my-beans.xml");
> +      assertDeploy(context);
> +      assertNotNull(controller.getInstalledContext("Test"));
> +      
> +      assertUndeploy(context);
> +      assertNull(controller.getContext("Test", null));
> +   }
> +
> +   public void testMetaInfFile() throws Exception
> +   {
> +      DeploymentContext context = createDeploymentContext("/bean", "toplevel/test.jar");
> +      assertDeploy(context);
> +      assertNotNull(controller.getInstalledContext("Test"));
> +      
> +      assertUndeploy(context);
> +      assertNull(controller.getContext("Test", null));
> +   }
> +
> +   protected void assertDeploy(DeploymentContext context) throws Exception
> +   {
> +      main.addDeploymentContext(context);
> +      main.process();
> +      assertTrue(context.getState() == DeploymentState.DEPLOYED);
> +   }
> +
> +   protected void assertUndeploy(DeploymentContext context) throws Exception
> +   {
> +      main.removeDeploymentContext(context.getName());
> +      main.process();
> +      assertTrue(context.getState() == DeploymentState.UNDEPLOYED);
> +   }
> +}
>
> Added: projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/bean/test/KernelDeployerUnitTestCase.java
> ===================================================================
> --- projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/bean/test/KernelDeployerUnitTestCase.java	2006-09-12 09:35:20 UTC (rev 56752)
> +++ projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/bean/test/KernelDeployerUnitTestCase.java	2006-09-12 09:36:30 UTC (rev 56753)
> @@ -0,0 +1,134 @@
> +/*
> +* JBoss, Home of Professional Open Source
> +* Copyright 2006, JBoss Inc., and individual contributors as indicated
> +* by the @authors tag. See the copyright.txt 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.test.deployers.bean.test;
> +
> +import java.util.Collections;
> +
> +import junit.framework.Test;
> +import junit.framework.TestSuite;
> +
> +import org.jboss.beans.metadata.plugins.AbstractBeanMetaData;
> +import org.jboss.beans.metadata.spi.BeanMetaDataFactory;
> +import org.jboss.deployers.plugins.deployers.kernel.KernelDeployer;
> +import org.jboss.deployers.plugins.deployment.MainDeployerImpl;
> +import org.jboss.deployers.spi.structure.DeploymentContext;
> +import org.jboss.deployers.spi.structure.DeploymentState;
> +import org.jboss.deployers.spi.structure.StructureDetermined;
> +import org.jboss.kernel.Kernel;
> +import org.jboss.kernel.plugins.bootstrap.basic.BasicBootstrap;
> +import org.jboss.kernel.plugins.deployment.AbstractKernelDeployment;
> +import org.jboss.kernel.spi.dependency.KernelController;
> +import org.jboss.test.deployers.BaseDeployersTest;
> +import org.jboss.test.deployers.bean.support.Simple;
> +import org.jboss.test.deployers.bean.support.TestBeanDeployer;
> +
> +/**
> + * BeanDeployerUnitTestCase.
> + * 
> + * @author <a href="adrian at jboss.com">Adrian Brock</a>
> + * @version $Revision: 1.1 $
> + */
> +public class KernelDeployerUnitTestCase extends BaseDeployersTest
> +{
> +   public static Test suite()
> +   {
> +      return new TestSuite(KernelDeployerUnitTestCase.class);
> +   }
> +
> +   private MainDeployerImpl main;
> +   
> +   private KernelController controller;
> +   
> +   public KernelDeployerUnitTestCase(String name) throws Throwable
> +   {
> +      super(name);
> +   }
> +
> +   protected void setUp() throws Exception
> +   {
> +      super.setUp();
> +      try
> +      {
> +         BasicBootstrap bootstrap = new BasicBootstrap();
> +         bootstrap.run();
> +         Kernel kernel = bootstrap.getKernel();
> +         controller = kernel.getController();
> +         
> +         main = new MainDeployerImpl();
> +         
> +         TestBeanDeployer testDeployer = new TestBeanDeployer();
> +         KernelDeployer kernelDeployer = new KernelDeployer(kernel);
> +         main.addDeployer(testDeployer);
> +         main.addDeployer(kernelDeployer);
> +      }
> +      catch (Throwable t)
> +      {
> +         throw new RuntimeException(t);
> +      }
> +   }
> +
> +   public void testKernelDeployerPredetermined() throws Exception
> +   {
> +      DeploymentContext context = createSimpleDeployment("KernelDeployerTest");
> +      context.setStructureDetermined(StructureDetermined.PREDETERMINED);
> +
> +      AbstractKernelDeployment deployment = new AbstractKernelDeployment();
> +      deployment.setName("KernelDeployerTest");
> +      
> +      BeanMetaDataFactory metaData = new AbstractBeanMetaData("Test", Simple.class.getName());
> +      deployment.setBeanFactories(Collections.singletonList(metaData));
> +      
> +      context.getPredeterminedManagedObjects().addAttachment("KernelDeployerTest", deployment);
> +      
> +      assertDeploy(context);
> +      assertNotNull(controller.getInstalledContext("Test"));
> +      
> +      assertUndeploy(context);
> +      assertNull(controller.getContext("Test", null));
> +   }
> +
> +   public void testKernelDeployerTransient() throws Exception
> +   {
> +      DeploymentContext context = createSimpleDeployment("KernelDeployerTest");
> +      context.setStructureDetermined(StructureDetermined.PREDETERMINED);
> +      
> +      assertDeploy(context);
> +      assertNotNull(controller.getInstalledContext("Test"));
> +      
> +      assertUndeploy(context);
> +      assertNull(controller.getContext("Test", null));
> +   }
> +
> +   protected void assertDeploy(DeploymentContext context) throws Exception
> +   {
> +      main.addDeploymentContext(context);
> +      main.process();
> +      assertTrue(context.getState() == DeploymentState.DEPLOYED);
> +   }
> +
> +   protected void assertUndeploy(DeploymentContext context) throws Exception
> +   {
> +      main.removeDeploymentContext(context.getName());
> +      main.process();
> +      assertTrue(context.getState() == DeploymentState.UNDEPLOYED);
> +   }
> +}
>
> Modified: projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/deployer/DeployerTestSuite.java
> ===================================================================
> --- projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/deployer/DeployerTestSuite.java	2006-09-12 09:35:20 UTC (rev 56752)
> +++ projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/deployer/DeployerTestSuite.java	2006-09-12 09:36:30 UTC (rev 56753)
> @@ -25,10 +25,13 @@
>  import junit.framework.TestSuite;
>  import junit.textui.TestRunner;
>  
> +import org.jboss.test.deployers.bean.test.BeanDeployerUnitTestCase;
> +import org.jboss.test.deployers.bean.test.KernelDeployerUnitTestCase;
>  import org.jboss.test.deployers.deployer.test.DeployerOrderingUnitTestCase;
>  import org.jboss.test.deployers.deployer.test.DeployerProtocolUnitTestCase;
>  import org.jboss.test.deployers.deployer.test.DeployerWidthFirstUnitTestCase;
>  import org.jboss.test.deployers.deployer.test.MainDeployerDeployerUnitTestCase;
> +import org.jboss.test.deployers.metadata.test.MetaDataUnitTestCase;
>  
>  /**
>   * Deployer Test Suite.
> @@ -51,6 +54,9 @@
>        suite.addTest(DeployerOrderingUnitTestCase.suite());
>        suite.addTest(DeployerWidthFirstUnitTestCase.suite());
>        suite.addTest(MainDeployerDeployerUnitTestCase.suite());
> +      suite.addTest(MetaDataUnitTestCase.suite());
> +      suite.addTest(BeanDeployerUnitTestCase.suite());
> +      suite.addTest(KernelDeployerUnitTestCase.suite());
>  
>        return suite;
>     }
>
> Added: projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/metadata/test/MetaDataUnitTestCase.java
> ===================================================================
> --- projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/metadata/test/MetaDataUnitTestCase.java	2006-09-12 09:35:20 UTC (rev 56752)
> +++ projects/microcontainer/trunk/deployers/src/tests/org/jboss/test/deployers/metadata/test/MetaDataUnitTestCase.java	2006-09-12 09:36:30 UTC (rev 56753)
> @@ -0,0 +1,199 @@
> +/*
> +* JBoss, Home of Professional Open Source
> +* Copyright 2006, JBoss Inc., and individual contributors as indicated
> +* by the @authors tag. See the copyright.txt 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.test.deployers.metadata.test;
> +
> +import java.util.HashSet;
> +import java.util.List;
> +import java.util.Set;
> +
> +import junit.framework.Test;
> +import junit.framework.TestSuite;
> +
> +import org.jboss.deployers.spi.structure.DeploymentContext;
> +import org.jboss.test.deployers.BaseDeployersTest;
> +import org.jboss.virtual.VirtualFile;
> +
> +/**
> + * MetaDataUnitTestCase.
> + * 
> + * @author <a href="adrian at jboss.com">Adrian Brock</a>
> + * @version $Revision: 1.1 $
> + */
> +public class MetaDataUnitTestCase extends BaseDeployersTest
> +{
> +   public static Test suite()
> +   {
> +      return new TestSuite(MetaDataUnitTestCase.class);
> +   }
> +   
> +   public MetaDataUnitTestCase(String name)
> +   {
> +      super(name);
> +   }
> +
> +   public void testExactMatchTopLevel() throws Exception
> +   {
> +      DeploymentContext context = createDeploymentContext("/metadata", "toplevel/exact/jboss-service.xml");
> +      String expected = getURL("/metadata/toplevel/exact/jboss-service.xml");
> +      assertMetaDataMatch(context, expected, "jboss-service.xml");
> +   }
> +
> +   public void testNotExactMatchTopLevel() throws Exception
> +   {
> +      DeploymentContext context = createDeploymentContext("/metadata", "toplevel/exact/jboss-service.xml");
> +      assertNoMetaDataMatch(context, "not-correct.xml");
> +   }
> +
> +   public void testPartialMatchTopLevel() throws Exception
> +   {
> +      DeploymentContext context = createDeploymentContext("/metadata", "toplevel/partial/mydb-ds.xml");
> +      Set<String> expected = new HashSet<String>();
> +      expected.add(getURL("/metadata/toplevel/partial/mydb-ds.xml"));
> +      assertMetaDataMatch(context, expected, null, "-ds.xml");
> +   }
> +
> +   public void testNotPartialMatchTopLevel() throws Exception
> +   {
> +      DeploymentContext context = createDeploymentContext("/metadata", "toplevel/partial/mydb-ds.xml");
> +      assertNoMetaDataMatch(context, null, "-not.xml");
> +   }
> +
> +   public void testExactMatchMetaInf() throws Exception
> +   {
> +      DeploymentContext context = createDeploymentContext("/metadata", "toplevel/metadata.jar");
> +      context.setMetaDataPath("META-INF");
> +      String expected = getURL("/metadata/toplevel/metadata.jar/META-INF/jboss-service.xml");
> +      assertMetaDataMatch(context, expected, "jboss-service.xml");
> +   }
> +
> +   public void testNotExactMatchMetaInf() throws Exception
> +   {
> +      DeploymentContext context = createDeploymentContext("/metadata", "toplevel/metadata.jar");
> +      context.setMetaDataPath("META-INF");
> +      assertNoMetaDataMatch(context, "not-correct.xml");
> +   }
> +
> +   public void testExactMatchNoMetaInf() throws Exception
> +   {
> +      DeploymentContext context = createDeploymentContext("/metadata", "toplevel/metadata-nometainf.jar");
> +      context.setMetaDataPath("META-INF");
> +      assertNoMetaDataMatch(context, "jboss-service.xml");
> +   }
> +
> +   public void testNotExactMatchNoMetaInf() throws Exception
> +   {
> +      DeploymentContext context = createDeploymentContext("/metadata", "toplevel/metadata-nometainf.jar");
> +      context.setMetaDataPath("META-INF");
> +      assertNoMetaDataMatch(context, "not-correct.xml");
> +   }
> +
> +   public void testPartialMatchMetaInf() throws Exception
> +   {
> +      DeploymentContext context = createDeploymentContext("/metadata", "toplevel/metadata.jar");
> +      context.setMetaDataPath("META-INF");
> +      Set<String> expected = new HashSet<String>();
> +      expected.add(getURL("/metadata/toplevel/metadata.jar/META-INF/1-ds.xml"));
> +      expected.add(getURL("/metadata/toplevel/metadata.jar/META-INF/2-ds.xml"));
> +      assertMetaDataMatch(context, expected, null, "-ds.xml");
> +   }
> +
> +   public void testNotPartialMatchMetaInf() throws Exception
> +   {
> +      DeploymentContext context = createDeploymentContext("/metadata", "toplevel/metadata.jar");
> +      context.setMetaDataPath("META-INF");
> +      assertNoMetaDataMatch(context, null, "-not.xml");
> +   }
> +
> +   public void testPartialMatchNoMetaInf() throws Exception
> +   {
> +      DeploymentContext context = createDeploymentContext("/metadata", "toplevel/metadata-nometainf.jar");
> +      context.setMetaDataPath("META-INF");
> +      assertNoMetaDataMatch(context, null, "-ds.xml");
> +   }
> +
> +   public void testNotPartialMatchNoMetaInf() throws Exception
> +   {
> +      DeploymentContext context = createDeploymentContext("/metadata", "toplevel/metadata-nometainf.jar");
> +      context.setMetaDataPath("META-INF");
> +      assertNoMetaDataMatch(context, null, "-not.xml");
> +   }
> +
> +   public void testExactAndPartialMatchMetaInf() throws Exception
> +   {
> +      DeploymentContext context = createDeploymentContext("/metadata", "toplevel/metadata.jar");
> +      context.setMetaDataPath("META-INF");
> +      Set<String> expected = new HashSet<String>();
> +      expected.add(getURL("/metadata/toplevel/metadata.jar/META-INF/jboss-service.xml"));
> +      expected.add(getURL("/metadata/toplevel/metadata.jar/META-INF/1-ds.xml"));
> +      expected.add(getURL("/metadata/toplevel/metadata.jar/META-INF/2-ds.xml"));
> +      assertMetaDataMatch(context, expected, "jboss-service.xml", "-ds.xml");
> +   }
> +
> +   public void testNotExactAndPartialMatchMetaInf() throws Exception
> +   {
> +      DeploymentContext context = createDeploymentContext("/metadata", "toplevel/metadata.jar");
> +      context.setMetaDataPath("META-INF");
> +      assertNoMetaDataMatch(context, "not-correct.xml", "-not.xml");
> +   }
> +
> +   public void testExactAndPartialMatchNoMetaInf() throws Exception
> +   {
> +      DeploymentContext context = createDeploymentContext("/metadata", "toplevel/metadata-nometainf.jar");
> +      context.setMetaDataPath("META-INF");
> +      assertNoMetaDataMatch(context, "jboss-service.xml", "-ds.xml");
> +   }
> +
> +   public void testNotExactAndPartialMatchNoMetaInf() throws Exception
> +   {
> +      DeploymentContext context = createDeploymentContext("/metadata", "toplevel/metadata-nometainf.jar");
> +      context.setMetaDataPath("META-INF");
> +      assertNoMetaDataMatch(context, "jboss-service.xml", "-not.xml");
> +   }
> +   
> +   protected void assertMetaDataMatch(DeploymentContext context, String expected, String name) throws Exception
> +   {
> +      VirtualFile file = context.getMetaDataFile(name);
> +      assertNotNull(file);
> +      assertEquals(expected, file.toURL().toString());
> +   }
> +   
> +   protected void assertNoMetaDataMatch(DeploymentContext context, String name) throws Exception
> +   {
> +      VirtualFile file = context.getMetaDataFile(name);
> +      assertNull(file);
> +   }
> +   
> +   protected void assertMetaDataMatch(DeploymentContext context, Set<String> expected, String name, String suffix) throws Exception
> +   {
> +      List<VirtualFile> files = context.getMetaDataFiles(name, suffix);
> +      Set<String> actual = new HashSet<String>(files.size());
> +      for (VirtualFile file : files)
> +         actual.add(file.toURL().toString());
> +      assertEquals(expected, actual);
> +   }
> +   
> +   protected void assertNoMetaDataMatch(DeploymentContext context, String name, String suffix) throws Exception
> +   {
> +      List<VirtualFile> files = context.getMetaDataFiles(name, suffix);
> +      assertEmpty(files);
> +   }
> +}
>
> _______________________________________________
> jboss-cvs-commits mailing list
> jboss-cvs-commits at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/jboss-cvs-commits
>
>   




More information about the jboss-cvs-commits mailing list