[jboss-svn-commits] JBoss Common SVN: r4462 - in shrinkwrap/trunk: impl-base/src/main/java/org/jboss/shrinkwrap/impl/base and 4 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Sun May 30 11:18:36 EDT 2010


Author: ALRubinger
Date: 2010-05-30 11:18:35 -0400 (Sun, 30 May 2010)
New Revision: 4462

Modified:
   shrinkwrap/trunk/api/src/main/java/org/jboss/shrinkwrap/api/Archive.java
   shrinkwrap/trunk/api/src/main/java/org/jboss/shrinkwrap/api/ArchivePath.java
   shrinkwrap/trunk/api/src/main/java/org/jboss/shrinkwrap/api/ArchivePaths.java
   shrinkwrap/trunk/api/src/main/java/org/jboss/shrinkwrap/api/Filter.java
   shrinkwrap/trunk/impl-base/src/main/java/org/jboss/shrinkwrap/impl/base/ArchiveBase.java
   shrinkwrap/trunk/impl-base/src/main/java/org/jboss/shrinkwrap/impl/base/container/ContainerBase.java
   shrinkwrap/trunk/impl-base/src/main/java/org/jboss/shrinkwrap/impl/base/path/BasicPath.java
   shrinkwrap/trunk/impl-base/src/test/java/org/jboss/shrinkwrap/impl/base/path/BasicPathTestCase.java
   shrinkwrap/trunk/impl-base/src/test/java/org/jboss/shrinkwrap/impl/base/path/PathsTestBase.java
   shrinkwrap/trunk/impl-base/src/test/java/org/jboss/shrinkwrap/impl/base/path/PathsTestCase.java
   shrinkwrap/trunk/impl-base/src/test/java/org/jboss/shrinkwrap/impl/base/test/ArchiveTestBase.java
Log:
[SHRINKWRAP-172] Add :
Archive.merge(Archive,String)
Archive.merge(Archive,String,Filter)
ArchivePaths.create(String,ArchivePath)

Modified: shrinkwrap/trunk/api/src/main/java/org/jboss/shrinkwrap/api/Archive.java
===================================================================
--- shrinkwrap/trunk/api/src/main/java/org/jboss/shrinkwrap/api/Archive.java	2010-05-30 04:33:12 UTC (rev 4461)
+++ shrinkwrap/trunk/api/src/main/java/org/jboss/shrinkwrap/api/Archive.java	2010-05-30 15:18:35 UTC (rev 4462)
@@ -260,6 +260,17 @@
     * @throws IllegalArgumentException If the path or existing archive is not specified
     */
    T merge(Archive<?> source, ArchivePath path) throws IllegalArgumentException;
+   
+   /**
+    * Merge the contents from an existing archive in a specific path 
+    * without maintaining the archive name in the context path.
+    * 
+    * @param source Archive to add contents from
+    * @param path Path to add contents to
+    * @return  
+    * @throws IllegalArgumentException If the path or existing archive is not specified
+    */
+   T merge(Archive<?> source, String path) throws IllegalArgumentException;
 
    /**
     * Merge the contents from an existing archive in a specific path 
@@ -273,6 +284,19 @@
     * @throws IllegalArgumentException If the path or existing archive is not specified
     */
    T merge(Archive<?> source, ArchivePath path, Filter<ArchivePath> filter) throws IllegalArgumentException;
+   
+   /**
+    * Merge the contents from an existing archive in a specific path 
+    * without maintaining the archive name in the context path. 
+    * The filter control which {@link ArchivePath}s to include form the source {@link Archive}. 
+    * 
+    * @param source Archive to add contents from
+    * @param path Path to add contents to
+    * @param filter Filter to use for including {@link Asset}s in the merge.
+    * @return  
+    * @throws IllegalArgumentException If the path or existing archive is not specified
+    */
+   T merge(Archive<?> source, String path, Filter<ArchivePath> filter) throws IllegalArgumentException;
 
    /**
     * Acts as a shorthand for {@link Archive#toString(Formatter)}

Modified: shrinkwrap/trunk/api/src/main/java/org/jboss/shrinkwrap/api/ArchivePath.java
===================================================================
--- shrinkwrap/trunk/api/src/main/java/org/jboss/shrinkwrap/api/ArchivePath.java	2010-05-30 04:33:12 UTC (rev 4461)
+++ shrinkwrap/trunk/api/src/main/java/org/jboss/shrinkwrap/api/ArchivePath.java	2010-05-30 15:18:35 UTC (rev 4462)
@@ -18,7 +18,10 @@
 
 /**
  * Represents a target context within an {@link Archive} under
- * which an {@link Node} may be found.
+ * which an {@link Node} may be found.  All {@link ArchivePath}
+ * contexts are absolute (ie. prepended with the '/' character).
+ * {@link ArchivePath}s may have parent contexts, unless the path
+ * is at the root.
  *
  * @author <a href="mailto:andrew.rubinger at jboss.org">ALR</a>
  * @version $Revision: $

Modified: shrinkwrap/trunk/api/src/main/java/org/jboss/shrinkwrap/api/ArchivePaths.java
===================================================================
--- shrinkwrap/trunk/api/src/main/java/org/jboss/shrinkwrap/api/ArchivePaths.java	2010-05-30 04:33:12 UTC (rev 4461)
+++ shrinkwrap/trunk/api/src/main/java/org/jboss/shrinkwrap/api/ArchivePaths.java	2010-05-30 15:18:35 UTC (rev 4462)
@@ -69,6 +69,21 @@
       {String.class, String.class}, new Object[]
       {basePath, context});
    }
+   
+   /**
+    * Creates a new {@link ArchivePath} using the specified base 
+    * and specified relative context.
+    * 
+    * @param basePath A absolute path
+    * @param context A relative path to basePath
+    * @return a new path
+    */
+   public static ArchivePath create(final String basePath, final ArchivePath context)
+   {
+      return createInstance(new Class<?>[]
+      {String.class, ArchivePath.class}, new Object[]
+      {basePath, context});
+   }
 
    /**
     * Creates a new {@link ArchivePath} using the specified base 

Modified: shrinkwrap/trunk/api/src/main/java/org/jboss/shrinkwrap/api/Filter.java
===================================================================
--- shrinkwrap/trunk/api/src/main/java/org/jboss/shrinkwrap/api/Filter.java	2010-05-30 04:33:12 UTC (rev 4461)
+++ shrinkwrap/trunk/api/src/main/java/org/jboss/shrinkwrap/api/Filter.java	2010-05-30 15:18:35 UTC (rev 4462)
@@ -28,7 +28,7 @@
 {
 
    /**
-    * Called pr operation in a multi add operation.
+    * Called per operation in a multi add operation.
     * 
     * @param object a object to filter on
     * @return true if the object should be included in target

Modified: shrinkwrap/trunk/impl-base/src/main/java/org/jboss/shrinkwrap/impl/base/ArchiveBase.java
===================================================================
--- shrinkwrap/trunk/impl-base/src/main/java/org/jboss/shrinkwrap/impl/base/ArchiveBase.java	2010-05-30 04:33:12 UTC (rev 4461)
+++ shrinkwrap/trunk/impl-base/src/main/java/org/jboss/shrinkwrap/impl/base/ArchiveBase.java	2010-05-30 15:18:35 UTC (rev 4462)
@@ -27,10 +27,10 @@
 import org.jboss.shrinkwrap.api.ArchivePath;
 import org.jboss.shrinkwrap.api.ArchivePaths;
 import org.jboss.shrinkwrap.api.Assignable;
+import org.jboss.shrinkwrap.api.Configuration;
 import org.jboss.shrinkwrap.api.Filter;
 import org.jboss.shrinkwrap.api.Filters;
 import org.jboss.shrinkwrap.api.Node;
-import org.jboss.shrinkwrap.api.Configuration;
 import org.jboss.shrinkwrap.api.asset.Asset;
 import org.jboss.shrinkwrap.api.formatter.Formatter;
 import org.jboss.shrinkwrap.api.formatter.Formatters;
@@ -293,6 +293,29 @@
 
    /**
     * {@inheritDoc}
+    * @see org.jboss.shrinkwrap.api.Archive#merge(org.jboss.shrinkwrap.api.Archive, java.lang.String, org.jboss.shrinkwrap.api.Filter)
+    */
+   @Override
+   public T merge(final Archive<?> source, final String path, final Filter<ArchivePath> filter)
+         throws IllegalArgumentException
+   {
+      Validate.notNull(path, "path must be specified");
+      return this.merge(source, ArchivePaths.create(path), filter);
+   }
+
+   /**
+    * {@inheritDoc}
+    * @see org.jboss.shrinkwrap.api.Archive#merge(org.jboss.shrinkwrap.api.Archive, java.lang.String)
+    */
+   @Override
+   public T merge(final Archive<?> source, final String path) throws IllegalArgumentException
+   {
+      Validate.notNull(path, "path must be specified");
+      return this.merge(source, ArchivePaths.create(path));
+   }
+
+   /**
+    * {@inheritDoc}
     * @see org.jboss.shrinkwrap.api.Archive#merge(org.jboss.shrinkwrap.api.Archive, org.jboss.shrinkwrap.api.Path, org.jboss.shrinkwrap.api.Filter)
     */
    @Override

Modified: shrinkwrap/trunk/impl-base/src/main/java/org/jboss/shrinkwrap/impl/base/container/ContainerBase.java
===================================================================
--- shrinkwrap/trunk/impl-base/src/main/java/org/jboss/shrinkwrap/impl/base/container/ContainerBase.java	2010-05-30 04:33:12 UTC (rev 4461)
+++ shrinkwrap/trunk/impl-base/src/main/java/org/jboss/shrinkwrap/impl/base/container/ContainerBase.java	2010-05-30 15:18:35 UTC (rev 4462)
@@ -238,6 +238,29 @@
       return covarientReturn();
    }
    
+   /**
+    * {@inheritDoc}
+    * @see org.jboss.shrinkwrap.api.Archive#merge(org.jboss.shrinkwrap.api.Archive, java.lang.String, org.jboss.shrinkwrap.api.Filter)
+    */
+   @Override
+   public T merge(final Archive<?> source, final String path, final Filter<ArchivePath> filter)
+         throws IllegalArgumentException
+   {
+      archive.merge(source, path, filter);
+      return covarientReturn();
+   }
+
+   /**
+    * {@inheritDoc}
+    * @see org.jboss.shrinkwrap.api.Archive#merge(org.jboss.shrinkwrap.api.Archive, java.lang.String)
+    */
+   @Override
+   public T merge(final Archive<?> source, final String path) throws IllegalArgumentException
+   {
+      archive.merge(source, path);
+      return covarientReturn();
+   }
+
    /* (non-Javadoc)
     * @see org.jboss.shrinkwrap.api.Archive#add(org.jboss.shrinkwrap.api.Asset, java.lang.String)
     */

Modified: shrinkwrap/trunk/impl-base/src/main/java/org/jboss/shrinkwrap/impl/base/path/BasicPath.java
===================================================================
--- shrinkwrap/trunk/impl-base/src/main/java/org/jboss/shrinkwrap/impl/base/path/BasicPath.java	2010-05-30 04:33:12 UTC (rev 4461)
+++ shrinkwrap/trunk/impl-base/src/main/java/org/jboss/shrinkwrap/impl/base/path/BasicPath.java	2010-05-30 15:18:35 UTC (rev 4462)
@@ -22,8 +22,6 @@
 import org.jboss.shrinkwrap.api.ArchivePath;
 
 /**
- * BasicPath
- * 
  * A Path which may be optionally prefixed with some common
  * namespace context at construction time.  Thread-safe.
  *
@@ -105,6 +103,18 @@
    {
       this(basePath.get(), context);
    }
+   
+   /**
+    * Creates a new Path using the specified base 
+    * and specified relative context.
+    * 
+    * @param basePath
+    * @param context
+    */
+   public BasicPath(final String basePath, final ArchivePath context)
+   {
+      this(basePath, context.get());
+   }
 
    /**
     * Creates a new Path using the specified base 

Modified: shrinkwrap/trunk/impl-base/src/test/java/org/jboss/shrinkwrap/impl/base/path/BasicPathTestCase.java
===================================================================
--- shrinkwrap/trunk/impl-base/src/test/java/org/jboss/shrinkwrap/impl/base/path/BasicPathTestCase.java	2010-05-30 04:33:12 UTC (rev 4461)
+++ shrinkwrap/trunk/impl-base/src/test/java/org/jboss/shrinkwrap/impl/base/path/BasicPathTestCase.java	2010-05-30 15:18:35 UTC (rev 4462)
@@ -86,4 +86,14 @@
       return new BasicPath(base, context);
    }
 
+   /**
+    * {@inheritDoc}
+    * @see org.jboss.shrinkwrap.impl.base.path.PathsTestBase#createPath(java.lang.String, org.jboss.shrinkwrap.api.ArchivePath)
+    */
+   @Override
+   ArchivePath createPath(final String base, final ArchivePath context)
+   {
+      return new BasicPath(base, context);
+   }
+
 }

Modified: shrinkwrap/trunk/impl-base/src/test/java/org/jboss/shrinkwrap/impl/base/path/PathsTestBase.java
===================================================================
--- shrinkwrap/trunk/impl-base/src/test/java/org/jboss/shrinkwrap/impl/base/path/PathsTestBase.java	2010-05-30 04:33:12 UTC (rev 4461)
+++ shrinkwrap/trunk/impl-base/src/test/java/org/jboss/shrinkwrap/impl/base/path/PathsTestBase.java	2010-05-30 15:18:35 UTC (rev 4462)
@@ -82,6 +82,16 @@
     * @throws IllegalArgumentException If the context or base is not specified
     */
    abstract ArchivePath createPath(final String base, final String context);
+   
+   /**
+    * Creates and returns a new {@link ArchivePath}
+    * with the specified context and base
+    * 
+    * @param base Parent context
+    * @param context Context to assign the Path
+    * @throws IllegalArgumentException If the context or base is not specified
+    */
+   abstract ArchivePath createPath(final String base, final ArchivePath context);
 
    //-------------------------------------------------------------------------------------||
    // Tests ------------------------------------------------------------------------------||
@@ -198,7 +208,32 @@
       Assert.assertEquals("Context under base should resolve to relative", expected, resolved);
       log.info("\"" + context + "\" under base " + basePath + " resolves to: " + path);
    }
+   
+   /**
+    * Ensures that a new path may be created from a 
+    * context (as {@link ArchivePath}) under a specified base path
+    * (as String)
+    */
+   @Test
+   public void testBasePathAsStringAndRelativeContext()
+   {
+      // Log
+      log.info("testBasePathAsStringAndRelativeContext");
 
+      // Create a base path
+      final String base = "base";
+
+      // Create a new path using a relative context to the base
+      final ArchivePath context = this.createPath("context");
+      final ArchivePath path = this.createPath(base, context);
+
+      // Ensure expected
+      final String resolved = path.get();
+      final String expected = PathUtil.SLASH + base + context.get();
+      Assert.assertEquals("Context under base should resolve to relative", expected, resolved);
+      log.info("\"" + context + "\" under base " + base + " resolves to: " + path);
+   }
+
    /**
     * Ensures that a new path may be created from a 
     * context (as String) under a specified base path (which is represented

Modified: shrinkwrap/trunk/impl-base/src/test/java/org/jboss/shrinkwrap/impl/base/path/PathsTestCase.java
===================================================================
--- shrinkwrap/trunk/impl-base/src/test/java/org/jboss/shrinkwrap/impl/base/path/PathsTestCase.java	2010-05-30 04:33:12 UTC (rev 4461)
+++ shrinkwrap/trunk/impl-base/src/test/java/org/jboss/shrinkwrap/impl/base/path/PathsTestCase.java	2010-05-30 15:18:35 UTC (rev 4462)
@@ -86,4 +86,14 @@
    {
       return ArchivePaths.create(base, context);
    }
+
+   /**
+    * {@inheritDoc}
+    * @see org.jboss.shrinkwrap.impl.base.path.PathsTestBase#createPath(java.lang.String, org.jboss.shrinkwrap.api.ArchivePath)
+    */
+   @Override
+   ArchivePath createPath(final String base, final ArchivePath context)
+   {
+      return ArchivePaths.create(base, context);
+   }
 }

Modified: shrinkwrap/trunk/impl-base/src/test/java/org/jboss/shrinkwrap/impl/base/test/ArchiveTestBase.java
===================================================================
--- shrinkwrap/trunk/impl-base/src/test/java/org/jboss/shrinkwrap/impl/base/test/ArchiveTestBase.java	2010-05-30 04:33:12 UTC (rev 4461)
+++ shrinkwrap/trunk/impl-base/src/test/java/org/jboss/shrinkwrap/impl/base/test/ArchiveTestBase.java	2010-05-30 15:18:35 UTC (rev 4462)
@@ -712,7 +712,39 @@
       Assert.assertTrue("Asset should have been added to path: " + expectedPathTwo.getClass(), this.compareAssets(
             nodeTwo.getAsset(), assetTwo));
    }
+   
+   /**
+    * Ensure merging content from another archive to a path successfully stores all assets to specific path
+    * @throws Exception
+    */
+   @Test
+   public void testMergeToStringPath() throws Exception
+   {
+      Archive<T> archive = getArchive();
+      Archive<T> sourceArchive = createNewArchive();
+      ArchivePath location = new BasicPath("/", "test.properties");
+      ArchivePath locationTwo = new BasicPath("/", "test2.properties");
 
+      Asset asset = new ClassLoaderAsset(NAME_TEST_PROPERTIES);
+      Asset assetTwo = new ClassLoaderAsset(NAME_TEST_PROPERTIES_2);
+      sourceArchive.add(asset, location).add(assetTwo, locationTwo);
+
+      String baseLocation = "somewhere";
+
+      archive.merge(sourceArchive, baseLocation);
+
+      ArchivePath expectedPath = new BasicPath(baseLocation, location);
+      ArchivePath expectedPathTwo = new BasicPath(baseLocation, locationTwo);
+      
+      Node nodeOne = archive.get(expectedPath);
+      Node nodeTwo = archive.get(expectedPathTwo);
+
+      Assert.assertTrue("Asset should have been added to path: " + expectedPath.get(), this.compareAssets(nodeOne.getAsset(), asset));
+
+      Assert.assertTrue("Asset should have been added to path: " + expectedPathTwo.getClass(), this.compareAssets(
+            nodeTwo.getAsset(), assetTwo));
+   }
+
    /**
     * Ensure that the filter is used when merging.
     * @throws Exception
@@ -744,7 +776,39 @@
             "Asset should have been added to path: " + expectedPath.get(), 
             this.compareAssets(archive.get(expectedPath).getAsset(), asset));
    }
+   
+   /**
+    * Ensure that the filter is used when merging.
+    * @throws Exception
+    */
+   @Test
+   public void testMergeToStringPathWithFilter() throws Exception 
+   {
+      Archive<?> archive = getArchive();
+      Archive<T> sourceArchive = createNewArchive();
+      ArchivePath location = new BasicPath("/", "test.properties");
+      ArchivePath locationTwo = new BasicPath("/", "test2.properties");
 
+      Asset asset = new ClassLoaderAsset(NAME_TEST_PROPERTIES);
+      Asset assetTwo = new ClassLoaderAsset(NAME_TEST_PROPERTIES_2);
+      sourceArchive.add(asset, location).add(assetTwo, locationTwo);
+
+      String baseLocation = "somewhere";
+
+      archive.merge(sourceArchive, baseLocation, Filters.include(".*test2.*"));
+      
+      Assert.assertEquals(
+            "Should only have merged 1",
+            1, 
+            numAssets(archive));
+      
+      ArchivePath expectedPath = new BasicPath(baseLocation, locationTwo);
+
+      Assert.assertTrue(
+            "Asset should have been added to path: " + expectedPath.get(), 
+            this.compareAssets(archive.get(expectedPath).getAsset(), asset));
+   }
+
    /**
     * Ensure that the filter is used when merging.
     * @throws Exception



More information about the jboss-svn-commits mailing list