Author: snicoll
Date: Mon Jul  6 04:08:27 2009
New Revision: 791368

URL: http://svn.apache.org/viewvc?rev=791368&view=rev
Log:
MWAR-158: Fixed usage of web.xml in case of overlay.

Modified:
    
maven/plugins/trunk/maven-war-plugin/src/main/java/org/apache/maven/plugin/war/packaging/WarProjectPackagingTask.java
    
maven/plugins/trunk/maven-war-plugin/src/main/java/org/apache/maven/plugin/war/util/PathSet.java
    
maven/plugins/trunk/maven-war-plugin/src/main/java/org/apache/maven/plugin/war/util/WebappStructure.java
    
maven/plugins/trunk/maven-war-plugin/src/test/java/org/apache/maven/plugin/war/util/WebappStructureTest.java

Modified: 
maven/plugins/trunk/maven-war-plugin/src/main/java/org/apache/maven/plugin/war/packaging/WarProjectPackagingTask.java
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-war-plugin/src/main/java/org/apache/maven/plugin/war/packaging/WarProjectPackagingTask.java?rev=791368&r1=791367&r2=791368&view=diff
==============================================================================
--- 
maven/plugins/trunk/maven-war-plugin/src/main/java/org/apache/maven/plugin/war/packaging/WarProjectPackagingTask.java
 (original)
+++ 
maven/plugins/trunk/maven-war-plugin/src/main/java/org/apache/maven/plugin/war/packaging/WarProjectPackagingTask.java
 Mon Jul  6 04:08:27 2009
@@ -19,10 +19,6 @@
  * under the License.
  */
 
-import java.io.File;
-import java.io.IOException;
-import java.util.Iterator;
-
 import org.apache.maven.model.Resource;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
@@ -33,6 +29,10 @@
 import org.codehaus.plexus.util.StringUtils;
 import org.codehaus.plexus.util.xml.XmlStreamReader;
 
+import java.io.File;
+import java.io.IOException;
+import java.util.Iterator;
+
 /**
  * Handles the project own resources, that is:
  * <ul
@@ -151,13 +151,13 @@
         {
             context.getLog().debug( "webapp sources directory does not exist - 
skipping." );
         }
-        else
-        if ( !context.getWebappSourceDirectory().getAbsolutePath().equals( 
context.getWebappDirectory().getPath() ) )
+        else if ( !context.getWebappSourceDirectory().getAbsolutePath().equals(
+            context.getWebappDirectory().getPath() ) )
         {
             context.getLog().info( "Copying webapp resources[" + 
context.getWebappSourceDirectory() + "]" );
-            final PathSet sources = getFilesToIncludes( 
context.getWebappSourceDirectory(),
-                                                        
context.getWebappSourceIncludes(),
-                                                        
context.getWebappSourceExcludes() );
+            final PathSet sources =
+                getFilesToIncludes( context.getWebappSourceDirectory(), 
context.getWebappSourceIncludes(),
+                                    context.getWebappSourceExcludes() );
 
             try
             {
@@ -219,6 +219,10 @@
                 {
                     throw new MojoFailureException( "The specified web.xml 
file '" + webXml + "' does not exist" );
                 }
+
+                // Making sure that it won't get overlayed
+                context.getWebappStructure().registerFileForced( id, 
WEB_INF_PATH + "/web.xml" );
+
                 if ( context.isFilteringDeploymentDescriptors() )
                 {
                     context.getMavenFileFilter().copyFile( webXml, new File( 
webinfDir, "web.xml" ), true,
@@ -228,8 +232,6 @@
                 {
                     copyFile( context, webXml, new File( webinfDir, "web.xml" 
), "WEB-INF/web.xml", true );
                 }
-
-                context.getWebappStructure().getFullStructure().add( 
WEB_INF_PATH + "/web.xml" );
             }
             else
             {
@@ -238,15 +240,18 @@
                 // if exists we can filter it
                 if ( defaultWebXml.exists() && 
context.isFilteringDeploymentDescriptors() )
                 {
+                    context.getWebappStructure().registerFile( id, 
WEB_INF_PATH + "/web.xml" );
                     context.getMavenFileFilter().copyFile( defaultWebXml, new 
File( webinfDir, "web.xml" ), true,
                                                            
context.getFilterWrappers(), getEncoding( defaultWebXml ) );
-                    context.getWebappStructure().getFullStructure().add( 
WEB_INF_PATH + "/web.xml" );
                 }
             }
 
             if ( containerConfigXML != null && StringUtils.isNotEmpty( 
containerConfigXML.getName() ) )
             {
                 String xmlFileName = containerConfigXML.getName();
+
+                context.getWebappStructure().registerFileForced( id, 
META_INF_PATH + "/" + xmlFileName );
+
                 if ( context.isFilteringDeploymentDescriptors() )
                 {
                     context.getMavenFileFilter().copyFile( containerConfigXML, 
new File( metainfDir, xmlFileName ),
@@ -258,7 +263,6 @@
                     copyFile( context, containerConfigXML, new File( 
metainfDir, xmlFileName ),
                               "META-INF/" + xmlFileName, true );
                 }
-                context.getWebappStructure().getFullStructure().add( 
META_INF_PATH + "/" + xmlFileName );
             }
         }
         catch ( IOException e )
@@ -299,14 +303,12 @@
         if ( !context.getWebappDirectory().exists() )
         {
             context.getLog().warn(
-                                   "Not copying webapp webResources[" + 
resource.getDirectory()
-                                       + "]: webapp directory[" + 
context.getWebappDirectory().getAbsolutePath()
-                                       + "] does not exist!" );
+                "Not copying webapp webResources[" + resource.getDirectory() + 
"]: webapp directory[" +
+                    context.getWebappDirectory().getAbsolutePath() + "] does 
not exist!" );
         }
 
-        context.getLog().info(
-                               "Copying webapp webResources[" + 
resource.getDirectory() + "] to["
-                                   + 
context.getWebappDirectory().getAbsolutePath() + "]" );
+        context.getLog().info( "Copying webapp webResources[" + 
resource.getDirectory() + "] to[" +
+            context.getWebappDirectory().getAbsolutePath() + "]" );
         String[] fileNames = getFilesToCopy( resource );
         for ( int i = 0; i < fileNames.length; i++ )
         {
@@ -317,8 +319,8 @@
                 // MWAR-129 if targetPath is only a dot 
<targetPath>.</targetPath> or ./
                 // and the Resource is in a part of the warSourceDirectory the 
file from sources will override this
                 // that's we don't have to add the targetPath yep not nice but 
works
-                if ( !StringUtils.equals( ".", resource.getTargetPath() )
-                    && !StringUtils.equals( "./", resource.getTargetPath() ) )
+                if ( !StringUtils.equals( ".", resource.getTargetPath() ) &&
+                    !StringUtils.equals( "./", resource.getTargetPath() ) )
                 {
                     targetFileName = resource.getTargetPath() + File.separator 
+ targetFileName;
                 }

Modified: 
maven/plugins/trunk/maven-war-plugin/src/main/java/org/apache/maven/plugin/war/util/PathSet.java
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-war-plugin/src/main/java/org/apache/maven/plugin/war/util/PathSet.java?rev=791368&r1=791367&r2=791368&view=diff
==============================================================================
--- 
maven/plugins/trunk/maven-war-plugin/src/main/java/org/apache/maven/plugin/war/util/PathSet.java
 (original)
+++ 
maven/plugins/trunk/maven-war-plugin/src/main/java/org/apache/maven/plugin/war/util/PathSet.java
 Mon Jul  6 04:08:27 2009
@@ -197,6 +197,19 @@
     }
 
     /**
+     * Removes the specified path if it exists.
+     *
+     * @param path the path to remove
+     * @return true if the path was removed, false if it did not existed
+     */
+    boolean remove( String path )
+    {
+        final String normalizedPath = normalizeFilePath( path );
+        return pathsSet.remove( normalizedPath );
+
+    }
+
+    /**
      * Returns iterator of normalized paths (strings)
      *
      * @return iterator of normalized paths (strings)

Modified: 
maven/plugins/trunk/maven-war-plugin/src/main/java/org/apache/maven/plugin/war/util/WebappStructure.java
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-war-plugin/src/main/java/org/apache/maven/plugin/war/util/WebappStructure.java?rev=791368&r1=791367&r2=791368&view=diff
==============================================================================
--- 
maven/plugins/trunk/maven-war-plugin/src/main/java/org/apache/maven/plugin/war/util/WebappStructure.java
 (original)
+++ 
maven/plugins/trunk/maven-war-plugin/src/main/java/org/apache/maven/plugin/war/util/WebappStructure.java
 Mon Jul  6 04:08:27 2009
@@ -71,7 +71,7 @@
      * Creates a new instance with the specified cache.
      *
      * @param dependencies the dependencies of the project
-     * @param cache the cache
+     * @param cache        the cache
      */
     public WebappStructure( List dependencies, WebappStructure cache )
     {
@@ -154,6 +154,37 @@
     }
 
     /**
+     * Forces the registration of the specified path for the specified owner. 
If
+     * the file is not registered yet, a simple registration is performed. If 
the
+     * file already exists, the owner changes to the specified one.
+     * <p/>
+     * Beware that the semantic of the return boolean is different thant the 
one
+     * from {...@link #registerFile(String, String)}; returns <tt>true</tt> if 
an
+     * owner replacement was made and <tt>false</tt> if the file was simply 
registered
+     * for the first time.
+     *
+     * @param id   the owner of the path
+     * @param path the relative path from the webapp root directory
+     * @return false if the file did not exist, true if the owner was replaced
+     */
+    public boolean registerFileForced( String id, String path )
+    {
+        if ( !isRegistered( path ) )
+        {
+            doRegister( id, path );
+            return false;
+        }
+        else
+        {
+            // Force the switch to the new owner
+            getStructure( getOwner( path ) ).remove( path );
+            getStructure( id ).add( path );
+            return true;
+        }
+
+    }
+
+    /**
      * Registers the specified path for the specified owner. Invokes
      * the <tt>callback</tt> with the result of the registration.
      *
@@ -350,7 +381,7 @@
     /**
      * Registers the target file name for the specified artifact.
      *
-     * @param artifact the artifact
+     * @param artifact       the artifact
      * @param targetFileName the target file name
      */
     public void registerTargetFileName( Artifact artifact, String 
targetFileName )
@@ -387,10 +418,10 @@
         {
             DependencyInfo dependencyInfo = (DependencyInfo) it.next();
             final Dependency dependency2 = dependencyInfo.getDependency();
-            if ( StringUtils.equals( dependency.getGroupId(), 
dependency2.getGroupId() )
-                && StringUtils.equals( dependency.getArtifactId(), 
dependency2.getArtifactId() )
-                && StringUtils.equals( dependency.getType(), 
dependency2.getType() )
-                && StringUtils.equals( dependency.getClassifier(), 
dependency2.getClassifier() ) )
+            if ( StringUtils.equals( dependency.getGroupId(), 
dependency2.getGroupId() ) &&
+                StringUtils.equals( dependency.getArtifactId(), 
dependency2.getArtifactId() ) &&
+                StringUtils.equals( dependency.getType(), 
dependency2.getType() ) &&
+                StringUtils.equals( dependency.getClassifier(), 
dependency2.getClassifier() ) )
             {
 
                 return dependencyInfo.getTargetFileName();
@@ -411,7 +442,7 @@
     /**
      * Find a dependency that is similar from the specified dependency.
      *
-     * @param dependency the dependency to find
+     * @param dependency   the dependency to find
      * @param dependencies a list of dependencies
      * @return a similar dependency or <tt>null</tt> if no similar dependency 
is found
      */
@@ -421,11 +452,12 @@
         while ( it.hasNext() )
         {
             Dependency dep = (Dependency) it.next();
-            if ( dependency.getGroupId().equals( dep.getGroupId() )
-                && dependency.getArtifactId().equals( dep.getArtifactId() )
-                && dependency.getType().equals( dep.getType() ) && (
-                ( dependency.getClassifier() == null && dep.getClassifier() == 
null ) || (
-                    dependency.getClassifier() != null && 
dependency.getClassifier().equals( dep.getClassifier() ) ) ) )
+            if ( dependency.getGroupId().equals( dep.getGroupId() ) &&
+                dependency.getArtifactId().equals( dep.getArtifactId() ) &&
+                dependency.getType().equals( dep.getType() ) &&
+                ( ( dependency.getClassifier() == null && dep.getClassifier() 
== null ) ||
+                    ( dependency.getClassifier() != null &&
+                        dependency.getClassifier().equals( dep.getClassifier() 
) ) ) )
             {
                 return dep;
             }
@@ -596,7 +628,7 @@
         /**
          * Called if the version of the dependency has changed since the last 
build.
          *
-         * @param dependency the dependency
+         * @param dependency      the dependency
          * @param previousVersion the previous version of the dependency
          */
         void updatedVersion( Dependency dependency, String previousVersion );
@@ -604,7 +636,7 @@
         /**
          * Called if the scope of the dependency has changed since the last 
build.
          *
-         * @param dependency the dependency
+         * @param dependency    the dependency
          * @param previousScope the previous scope
          */
         void updatedScope( Dependency dependency, String previousScope );
@@ -613,7 +645,7 @@
          * Called if the optional flag of the dependency has changed since the
          * last build.
          *
-         * @param dependency the dependency
+         * @param dependency       the dependency
          * @param previousOptional the previous optional flag
          */
         void updatedOptionalFlag( Dependency dependency, boolean 
previousOptional );
@@ -621,7 +653,7 @@
         /**
          * Called if the dependency has been updated for unknown reason.
          *
-         * @param dependency the dependency
+         * @param dependency  the dependency
          * @param previousDep the previous dependency
          */
         void updatedUnknown( Dependency dependency, Dependency previousDep );

Modified: 
maven/plugins/trunk/maven-war-plugin/src/test/java/org/apache/maven/plugin/war/util/WebappStructureTest.java
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-war-plugin/src/test/java/org/apache/maven/plugin/war/util/WebappStructureTest.java?rev=791368&r1=791367&r2=791368&view=diff
==============================================================================
--- 
maven/plugins/trunk/maven-war-plugin/src/test/java/org/apache/maven/plugin/war/util/WebappStructureTest.java
 (original)
+++ 
maven/plugins/trunk/maven-war-plugin/src/test/java/org/apache/maven/plugin/war/util/WebappStructureTest.java
 Mon Jul  6 04:08:27 2009
@@ -8,8 +8,6 @@
 import java.util.List;
 
 /**
- *
- *
  * @author Stephane Nicoll
  */
 public class WebappStructureTest
@@ -205,6 +203,40 @@
 
     }
 
+    public void testUnknownFileNotAvailable()
+    {
+        final WebappStructure structure = new WebappStructure( new ArrayList() 
);
+        assertFalse( structure.isRegistered( "/foo/bar.txt" ) );
+    }
+
+    public void testRegisterSamePathTwice()
+    {
+        final WebappStructure structure = new WebappStructure( new ArrayList() 
);
+        structure.registerFile( "overlay1", "WEB-INF/web.xml" );
+        assertFalse( structure.registerFile( "currentBuild", "WEB-INF/web.xml" 
) );
+
+    }
+
+    public void testRegisterForced()
+    {
+        final String path = "WEB-INF/web.xml";
+        final WebappStructure structure = new WebappStructure( new ArrayList() 
);
+        assertFalse("New file should return false",
+                    structure.registerFileForced( "overlay1", path ));
+        assertEquals( "overlay1", structure.getOwner( path ) );         
+    }
+
+    public void testRegisterSamePathTwiceForced()
+    {
+        final String path = "WEB-INF/web.xml";
+        final WebappStructure structure = new WebappStructure( new ArrayList() 
);
+        structure.registerFile( "overlay1", path );
+        assertEquals( "overlay1", structure.getOwner( path ) );
+        assertTrue("owner replacement should have returned true",
+                   structure.registerFileForced( "currentBuild", path ));
+        assertEquals("currentBuild", structure.getOwner( path ));
+    }
+
 
     protected Dependency createDependency( String groupId, String artifactId, 
String version, String type, String scope,
                                            String classifier )


Reply via email to