[jboss-svn-commits] JBoss Common SVN: r4360 - in arquillian/trunk/packagers/javaee/src: test/java and 5 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri May 7 14:19:59 EDT 2010


Author: aslak
Date: 2010-05-07 14:19:58 -0400 (Fri, 07 May 2010)
New Revision: 4360

Added:
   arquillian/trunk/packagers/javaee/src/test/java/org/
   arquillian/trunk/packagers/javaee/src/test/java/org/jboss/
   arquillian/trunk/packagers/javaee/src/test/java/org/jboss/arquillian/
   arquillian/trunk/packagers/javaee/src/test/java/org/jboss/arquillian/packager/
   arquillian/trunk/packagers/javaee/src/test/java/org/jboss/arquillian/packager/javaee/
   arquillian/trunk/packagers/javaee/src/test/java/org/jboss/arquillian/packager/javaee/EEDeploymentPackagerTestCase.java
Modified:
   arquillian/trunk/packagers/javaee/src/main/java/org/jboss/arquillian/packager/javaee/EEDeploymentPackager.java
Log:
ARQ-95 Added support for WebArchive/EnterpriseArchive. Depending on ServletProtocol used, it will try to create EnterpriseArchives(EE5) or WebArchives(EE6) by default. 


Modified: arquillian/trunk/packagers/javaee/src/main/java/org/jboss/arquillian/packager/javaee/EEDeploymentPackager.java
===================================================================
--- arquillian/trunk/packagers/javaee/src/main/java/org/jboss/arquillian/packager/javaee/EEDeploymentPackager.java	2010-05-07 17:38:03 UTC (rev 4359)
+++ arquillian/trunk/packagers/javaee/src/main/java/org/jboss/arquillian/packager/javaee/EEDeploymentPackager.java	2010-05-07 18:19:58 UTC (rev 4360)
@@ -22,6 +22,7 @@
 import org.jboss.shrinkwrap.api.Archive;
 import org.jboss.shrinkwrap.api.ShrinkWrap;
 import org.jboss.shrinkwrap.api.spec.EnterpriseArchive;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
 import org.jboss.shrinkwrap.api.spec.WebArchive;
 
 /**
@@ -32,24 +33,116 @@
  */
 public class EEDeploymentPackager implements DeploymentPackager
 {
-
+   /* (non-Javadoc)
+    * @see org.jboss.arquillian.spi.DeploymentPackager#generateDeployment(org.jboss.shrinkwrap.api.Archive, java.util.Collection)
+    */
    public Archive<?> generateDeployment(Archive<?> applicationArchive, Collection<Archive<?>> auxiliaryArchives)
    {
-      EnterpriseArchive fullDeployment = ShrinkWrap.create("test.ear", EnterpriseArchive.class)
-                  .addModule(applicationArchive);
+      if(EnterpriseArchive.class.isInstance(applicationArchive))
+      {
+         return handleArchive(EnterpriseArchive.class.cast(applicationArchive), auxiliaryArchives);
+      } 
 
-      for (Archive<?> moduleArchive : auxiliaryArchives)
+      if(WebArchive.class.isInstance(applicationArchive))
       {
-         if (WebArchive.class.isInstance(moduleArchive))
+         return handleArchive(WebArchive.class.cast(applicationArchive), auxiliaryArchives);
+      } 
+
+      if(JavaArchive.class.isInstance(applicationArchive))
+      {
+         return handleArchive(JavaArchive.class.cast(applicationArchive), auxiliaryArchives);
+      }
+      
+      throw new IllegalArgumentException(EEDeploymentPackager.class.getName()  + 
+            " can not handle archive of type " +  applicationArchive.getClass().getName());
+   }
+
+   private Archive<?> handleArchive(WebArchive applicationArchive, Collection<Archive<?>> auxiliaryArchives) 
+   {
+      if(containsArchiveOfType(WebArchive.class, auxiliaryArchives)) 
+      {
+         throw new IllegalArgumentException("Can not merge two " + WebArchive.class.getName() + "'s. " +
+                "Please verify that your using the correct protocol extensions, " +
+                "or try deploying as a " + EnterpriseArchive.class.getName() + " instead");
+      }
+      return applicationArchive
+                  .addLibraries(
+                        auxiliaryArchives.toArray(new Archive<?>[0]));
+   }
+
+   private Archive<?> handleArchive(JavaArchive applicationArchive, Collection<Archive<?>> auxiliaryArchives) 
+   {
+      if(containsArchiveOfType(WebArchive.class, auxiliaryArchives))
+      {
+         EnterpriseArchive deployment = ShrinkWrap.create("test.ear", EnterpriseArchive.class)
+                                             .addModule(applicationArchive);
+         for (Archive<?> moduleArchive : auxiliaryArchives)
          {
-            fullDeployment.addModule(moduleArchive);
-         } 
-         else
+            if (WebArchive.class.isInstance(moduleArchive))
+            {
+               deployment.addModule(moduleArchive);
+            } 
+            else
+            {
+               deployment.addLibrary(moduleArchive);
+            }
+         }
+         return deployment;
+      }
+      else 
+      {
+         WebArchive deployment = ShrinkWrap.create("test.war", WebArchive.class);
+         deployment.addLibraries(auxiliaryArchives.toArray(new Archive[0]));
+         deployment.addLibraries(applicationArchive);
+         return deployment;
+      }
+   }
+
+   private Archive<?> handleArchive(EnterpriseArchive applicationArchive, Collection<Archive<?>> auxiliaryArchives) 
+   {
+      if(!containsArchiveOfType(WebArchive.class, auxiliaryArchives))
+      {
+         for (Archive<?> moduleArchive : auxiliaryArchives)
          {
-            fullDeployment.addLibrary(moduleArchive);
+            if ("arquillian-protocol.jar".equals(moduleArchive.getName()) && 
+                  JavaArchive.class.isInstance(moduleArchive))
+            {
+               applicationArchive.addModule(
+                     ShrinkWrap.create("test.war", WebArchive.class)
+                              .addLibraries(moduleArchive));
+            } 
+            else
+            {
+               applicationArchive.addLibrary(moduleArchive);
+            }
          }
       }
-      return fullDeployment;
+      else
+      {
+         for (Archive<?> moduleArchive : auxiliaryArchives)
+         {
+            if (WebArchive.class.isInstance(moduleArchive))
+            {
+               applicationArchive.addModule(moduleArchive);
+            } 
+            else
+            {
+               applicationArchive.addLibrary(moduleArchive);
+            }
+         }
+      }
+      return applicationArchive;
    }
-
-}
+   
+   private boolean containsArchiveOfType(Class<? extends Archive<?>> clazz, Collection<Archive<?>> archives) 
+   {
+      for(Archive<?> archive : archives)
+      {
+         if(clazz.isInstance(archive))
+         {
+            return true;
+         }
+      }
+      return false;
+   }
+}
\ No newline at end of file

Added: arquillian/trunk/packagers/javaee/src/test/java/org/jboss/arquillian/packager/javaee/EEDeploymentPackagerTestCase.java
===================================================================
--- arquillian/trunk/packagers/javaee/src/test/java/org/jboss/arquillian/packager/javaee/EEDeploymentPackagerTestCase.java	                        (rev 0)
+++ arquillian/trunk/packagers/javaee/src/test/java/org/jboss/arquillian/packager/javaee/EEDeploymentPackagerTestCase.java	2010-05-07 18:19:58 UTC (rev 4360)
@@ -0,0 +1,169 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2009, Red Hat Middleware LLC, and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jboss.arquillian.packager.javaee;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ArchivePaths;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.spec.EnterpriseArchive;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.jboss.shrinkwrap.api.spec.WebArchive;
+import org.junit.Assert;
+import org.junit.Test;
+
+
+/**
+ * EEDeploymentPackagerTestCase
+ *
+ * @author <a href="mailto:aslak at redhat.com">Aslak Knutsen</a>
+ * @version $Revision: $
+ */
+public class EEDeploymentPackagerTestCase
+{
+   @Test
+   public void shouldHandleJavaArchiveEE5Protocol() throws Exception
+   {
+      Archive<?> archive = new EEDeploymentPackager().generateDeployment(
+            ShrinkWrap.create("applicationArchive.jar", JavaArchive.class), 
+            createAuxiliaryArchivesEE5());
+      
+      Assert.assertTrue(
+            "Verify that a defined JavaArchive using EE5 WebArchive protocol is build as EnterpriseArchive",
+            EnterpriseArchive.class.isInstance(archive));
+
+      Assert.assertTrue(
+            "Verify that the auxiliaryArchives EE Modules are placed in /",
+            archive.contains(ArchivePaths.create("/arquillian-protocol.war")));
+      
+      Assert.assertTrue(
+            "Verify that the auxiliaryArchives are placed in /lib",
+            archive.contains(ArchivePaths.create("/lib/auxiliaryArchive2.jar")));
+
+      Assert.assertTrue(
+            "Verify that the applicationArchive is placed in /",
+            archive.contains(ArchivePaths.create("/applicationArchive.jar")));
+   }
+   
+   @Test
+   public void shouldHandleJavaArchiveEE6Protocol() throws Exception
+   {
+      Archive<?> archive = new EEDeploymentPackager().generateDeployment(
+            ShrinkWrap.create("applicationArchive.jar", JavaArchive.class), 
+            createAuxiliaryArchivesEE6());
+      
+      Assert.assertTrue(
+            "Verify that a defined JavaArchive using EE6 JavaArchive protocol is build as WebArchive",
+            WebArchive.class.isInstance(archive));
+
+      Assert.assertTrue(
+            "Verify that the auxiliaryArchives are placed in /WEB-INF/lib",
+            archive.contains(ArchivePaths.create("/WEB-INF/lib/arquillian-protocol.jar")));
+
+      Assert.assertTrue(
+            "Verify that the auxiliaryArchives are placed in /WEB-INF/lib",
+            archive.contains(ArchivePaths.create("/WEB-INF/lib/auxiliaryArchive2.jar")));
+      
+      Assert.assertTrue(
+            "Verify that the applicationArchive is placed in /WEB-INF/lib",
+            archive.contains(ArchivePaths.create("/WEB-INF/lib/applicationArchive.jar")));
+   }
+
+   // as of now, War inside War is not supported. need to merge ? 
+   @Test(expected = IllegalArgumentException.class)
+   public void shouldHandleWebArchiveEE5Protocol() throws Exception
+   {
+      new EEDeploymentPackager().generateDeployment(
+            ShrinkWrap.create("applicationArchive.war", WebArchive.class), 
+            createAuxiliaryArchivesEE5());
+      
+   }
+
+   @Test
+   public void shouldHandleWebArchiveEE6Protocol() throws Exception
+   {
+      Archive<?> archive = new EEDeploymentPackager().generateDeployment(
+            ShrinkWrap.create("applicationArchive.war", WebArchive.class), 
+            createAuxiliaryArchivesEE6());
+      
+      Assert.assertTrue(
+            "Verify that a defined WebArchive using EE6 JavaArchive protocol is build as WebArchive",
+            WebArchive.class.isInstance(archive));
+
+      Assert.assertTrue(
+            "Verify that the auxiliaryArchives are placed in /WEB-INF/lib",
+            archive.contains(ArchivePaths.create("/WEB-INF/lib/arquillian-protocol.jar")));
+      
+      Assert.assertTrue(
+            "Verify that the auxiliaryArchives are placed in /WEB-INF/lib",
+            archive.contains(ArchivePaths.create("/WEB-INF/lib/auxiliaryArchive2.jar")));
+   }
+
+   @Test
+   public void shouldHandleEnterpriseArchiveEE5Protocol() throws Exception
+   {
+      Archive<?> archive = new EEDeploymentPackager().generateDeployment(
+            ShrinkWrap.create("applicationArchive.ear", EnterpriseArchive.class), 
+            createAuxiliaryArchivesEE5());
+
+      Assert.assertTrue(
+            "Verify that the auxiliaryArchives are placed in /",
+            archive.contains(ArchivePaths.create("arquillian-protocol.war")));
+      
+      Assert.assertTrue(
+            "Verify that the auxiliaryArchives are placed in /lib",
+            archive.contains(ArchivePaths.create("/lib/auxiliaryArchive2.jar")));
+
+   }
+
+   @Test
+   public void shouldHandleEnterpriseArchiveEE6Protocol() throws Exception
+   {
+      Archive<?> archive = new EEDeploymentPackager().generateDeployment(
+            ShrinkWrap.create("applicationArchive.ear", EnterpriseArchive.class), 
+            createAuxiliaryArchivesEE6());
+      
+      Assert.assertTrue(
+            "Verify that the auxiliaryArchives are placed in /",
+            archive.contains(ArchivePaths.create("test.war")));
+
+      Assert.assertTrue(
+            "Verify that the auxiliaryArchives are placed in /lib",
+            archive.contains(ArchivePaths.create("/lib/auxiliaryArchive2.jar")));
+   }
+
+   private Collection<Archive<?>> createAuxiliaryArchivesEE6() 
+   {
+      List<Archive<?>> archives = new ArrayList<Archive<?>>();
+      archives.add(ShrinkWrap.create("arquillian-protocol.jar", JavaArchive.class));
+      archives.add(ShrinkWrap.create("auxiliaryArchive2.jar", JavaArchive.class));
+      
+      return archives;
+   }
+
+   private Collection<Archive<?>> createAuxiliaryArchivesEE5() 
+   {
+      List<Archive<?>> archives = new ArrayList<Archive<?>>();
+      archives.add(ShrinkWrap.create("arquillian-protocol.war", WebArchive.class));
+      archives.add(ShrinkWrap.create("auxiliaryArchive2.jar", JavaArchive.class));
+      
+      return archives;
+   }
+}



More information about the jboss-svn-commits mailing list