git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@270740 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -21,30 +21,27 @@ import org.apache.tools.zip.ZipOutputStream; | |||
| */ | |||
| public class Ear extends Jar | |||
| { | |||
| private File deploymentDescriptor; | |||
| private boolean descriptorAdded; | |||
| private File m_appxml; | |||
| private boolean m_descriptorAdded; | |||
| public Ear() | |||
| { | |||
| super(); | |||
| archiveType = "ear"; | |||
| emptyBehavior = "create"; | |||
| m_archiveType = "ear"; | |||
| m_emptyBehavior = "create"; | |||
| } | |||
| public void setAppxml( File descr ) | |||
| public void setAppxml( final File appxml ) | |||
| throws TaskException | |||
| { | |||
| deploymentDescriptor = descr; | |||
| if( !deploymentDescriptor.exists() ) | |||
| throw new TaskException( "Deployment descriptor: " + deploymentDescriptor + " does not exist." ); | |||
| m_appxml = appxml; | |||
| if( !m_appxml.exists() ) | |||
| { | |||
| final String message = "Deployment descriptor: " + | |||
| m_appxml + " does not exist."; | |||
| throw new TaskException( message ); | |||
| } | |||
| // Create a ZipFileSet for this file, and pass it up. | |||
| ZipFileSet fs = new ZipFileSet(); | |||
| fs.setDir( new File( deploymentDescriptor.getParent() ) ); | |||
| fs.setIncludes( deploymentDescriptor.getName() ); | |||
| fs.setFullpath( "META-INF/application.xml" ); | |||
| super.addFileset( fs ); | |||
| addFileAs( m_appxml, "META-INF/application.xml" ); | |||
| } | |||
| public void addArchives( ZipFileSet fs ) | |||
| @@ -56,23 +53,13 @@ public class Ear extends Jar | |||
| super.addFileset( fs ); | |||
| } | |||
| /** | |||
| * Make sure we don't think we already have a web.xml next time this task | |||
| * gets executed. | |||
| */ | |||
| protected void cleanUp() | |||
| { | |||
| descriptorAdded = false; | |||
| super.cleanUp(); | |||
| } | |||
| protected void initZipOutputStream( ZipOutputStream zOut ) | |||
| protected void initZipOutputStream( final ZipOutputStream zOut ) | |||
| throws IOException, TaskException | |||
| { | |||
| // If no webxml file is specified, it's an error. | |||
| if( deploymentDescriptor == null && !isInUpdateMode() ) | |||
| if( m_appxml == null && !isInUpdateMode() ) | |||
| { | |||
| throw new TaskException( "appxml attribute is required" ); | |||
| final String message = "appxml attribute is required"; | |||
| throw new TaskException( message ); | |||
| } | |||
| super.initZipOutputStream( zOut ); | |||
| @@ -87,17 +74,19 @@ public class Ear extends Jar | |||
| // a <fileset> element. | |||
| if( vPath.equalsIgnoreCase( "META-INF/aplication.xml" ) ) | |||
| { | |||
| if( deploymentDescriptor == null || !deploymentDescriptor.equals( file ) || descriptorAdded ) | |||
| if( m_appxml == null || | |||
| !m_appxml.equals( file ) || | |||
| m_descriptorAdded ) | |||
| { | |||
| final String message = "Warning: selected " + archiveType + | |||
| final String message = "Warning: selected " + m_archiveType + | |||
| " files include a META-INF/application.xml which will be ignored " + | |||
| "(please use appxml attribute to " + archiveType + " task)"; | |||
| "(please use appxml attribute to " + m_archiveType + " task)"; | |||
| getLogger().warn( message ); | |||
| } | |||
| else | |||
| { | |||
| super.zipFile( file, zOut, vPath ); | |||
| descriptorAdded = true; | |||
| m_descriptorAdded = true; | |||
| } | |||
| } | |||
| else | |||
| @@ -29,7 +29,8 @@ import org.apache.tools.zip.ZipOutputStream; | |||
| * | |||
| * @author James Davidson <a href="mailto:duncan@x180.com">duncan@x180.com</a> | |||
| */ | |||
| public class Jar extends Zip | |||
| public class Jar | |||
| extends Zip | |||
| { | |||
| /** | |||
| * The index file name. | |||
| @@ -39,16 +40,15 @@ public class Jar extends Zip | |||
| /** | |||
| * true if a manifest has been specified in the task | |||
| */ | |||
| private boolean buildFileManifest = false; | |||
| private boolean buildFileManifest; | |||
| /** | |||
| * jar index is JDK 1.3+ only | |||
| */ | |||
| private boolean index = false; | |||
| private Manifest execManifest; | |||
| private Manifest manifest; | |||
| private File manifestFile; | |||
| private boolean m_index; | |||
| private Manifest m_execManifest; | |||
| private Manifest m_manifest; | |||
| private File m_manifestFile; | |||
| /** | |||
| * constructor | |||
| @@ -56,8 +56,8 @@ public class Jar extends Zip | |||
| public Jar() | |||
| { | |||
| super(); | |||
| archiveType = "jar"; | |||
| emptyBehavior = "create"; | |||
| m_archiveType = "jar"; | |||
| m_emptyBehavior = "create"; | |||
| setEncoding( "UTF8" ); | |||
| } | |||
| @@ -69,7 +69,7 @@ public class Jar extends Zip | |||
| */ | |||
| public void setIndex( boolean flag ) | |||
| { | |||
| index = flag; | |||
| m_index = flag; | |||
| } | |||
| public void setManifest( File manifestFile ) | |||
| @@ -77,30 +77,33 @@ public class Jar extends Zip | |||
| { | |||
| if( !manifestFile.exists() ) | |||
| { | |||
| throw new TaskException( "Manifest file: " + manifestFile + " does not exist." ); | |||
| final String message = "Manifest file: " + manifestFile + " does not exist."; | |||
| throw new TaskException( message ); | |||
| } | |||
| this.manifestFile = manifestFile; | |||
| this.m_manifestFile = manifestFile; | |||
| Reader r = null; | |||
| try | |||
| { | |||
| r = new FileReader( manifestFile ); | |||
| Manifest newManifest = new Manifest( r ); | |||
| if( manifest == null ) | |||
| if( m_manifest == null ) | |||
| { | |||
| manifest = Manifest.getDefaultManifest(); | |||
| m_manifest = Manifest.getDefaultManifest(); | |||
| } | |||
| manifest.merge( newManifest ); | |||
| m_manifest.merge( newManifest ); | |||
| } | |||
| catch( ManifestException e ) | |||
| { | |||
| getLogger().error( "Manifest is invalid: " + e.getMessage() ); | |||
| throw new TaskException( "Invalid Manifest: " + manifestFile, e ); | |||
| final String message = "Manifest " + manifestFile + " is invalid: " + e.getMessage(); | |||
| getLogger().error( message ); | |||
| throw new TaskException( message, e ); | |||
| } | |||
| catch( IOException e ) | |||
| { | |||
| throw new TaskException( "Unable to read manifest file: " + manifestFile, e ); | |||
| final String message = "Unable to read manifest file: " + manifestFile; | |||
| throw new TaskException( message, e ); | |||
| } | |||
| finally | |||
| { | |||
| @@ -127,11 +130,11 @@ public class Jar extends Zip | |||
| public void addConfiguredManifest( Manifest newManifest ) | |||
| throws ManifestException, TaskException | |||
| { | |||
| if( manifest == null ) | |||
| if( m_manifest == null ) | |||
| { | |||
| manifest = Manifest.getDefaultManifest(); | |||
| m_manifest = Manifest.getDefaultManifest(); | |||
| } | |||
| manifest.merge( newManifest ); | |||
| m_manifest.merge( newManifest ); | |||
| buildFileManifest = true; | |||
| } | |||
| @@ -155,7 +158,7 @@ public class Jar extends Zip | |||
| throws TaskException | |||
| { | |||
| // need to handle manifest as a special check | |||
| if( buildFileManifest || manifestFile == null ) | |||
| if( buildFileManifest || m_manifestFile == null ) | |||
| { | |||
| java.util.zip.ZipFile theZipFile = null; | |||
| try | |||
| @@ -168,11 +171,11 @@ public class Jar extends Zip | |||
| return false; | |||
| } | |||
| Manifest currentManifest = new Manifest( new InputStreamReader( theZipFile.getInputStream( entry ) ) ); | |||
| if( manifest == null ) | |||
| if( m_manifest == null ) | |||
| { | |||
| manifest = Manifest.getDefaultManifest(); | |||
| m_manifest = Manifest.getDefaultManifest(); | |||
| } | |||
| if( !currentManifest.equals( manifest ) ) | |||
| if( !currentManifest.equals( m_manifest ) ) | |||
| { | |||
| getLogger().debug( "Updating jar since jar manifest has changed" ); | |||
| return false; | |||
| @@ -199,22 +202,13 @@ public class Jar extends Zip | |||
| } | |||
| } | |||
| } | |||
| else if( manifestFile.lastModified() > zipFile.lastModified() ) | |||
| else if( m_manifestFile.lastModified() > zipFile.lastModified() ) | |||
| { | |||
| return false; | |||
| } | |||
| return super.isUpToDate( scanners, zipFile ); | |||
| } | |||
| /** | |||
| * Make sure we don't think we already have a MANIFEST next time this task | |||
| * gets executed. | |||
| */ | |||
| protected void cleanUp() | |||
| { | |||
| super.cleanUp(); | |||
| } | |||
| protected boolean createEmptyZip( File zipFile ) | |||
| { | |||
| // Jar files always contain a manifest and can never be empty | |||
| @@ -224,7 +218,7 @@ public class Jar extends Zip | |||
| protected void finalizeZipOutputStream( ZipOutputStream zOut ) | |||
| throws IOException, TaskException | |||
| { | |||
| if( index ) | |||
| if( m_index ) | |||
| { | |||
| createIndexList( zOut ); | |||
| } | |||
| @@ -235,13 +229,13 @@ public class Jar extends Zip | |||
| { | |||
| try | |||
| { | |||
| execManifest = Manifest.getDefaultManifest(); | |||
| m_execManifest = Manifest.getDefaultManifest(); | |||
| if( manifest != null ) | |||
| if( m_manifest != null ) | |||
| { | |||
| execManifest.merge( manifest ); | |||
| m_execManifest.merge( m_manifest ); | |||
| } | |||
| for( Iterator e = execManifest.getWarnings(); e.hasNext(); ) | |||
| for( Iterator e = m_execManifest.getWarnings(); e.hasNext(); ) | |||
| { | |||
| getLogger().warn( "Manifest warning: " + (String)e.next() ); | |||
| } | |||
| @@ -250,7 +244,7 @@ public class Jar extends Zip | |||
| // time to write the manifest | |||
| ByteArrayOutputStream baos = new ByteArrayOutputStream(); | |||
| PrintWriter writer = new PrintWriter( baos ); | |||
| execManifest.write( writer ); | |||
| m_execManifest.write( writer ); | |||
| writer.flush(); | |||
| ByteArrayInputStream bais = new ByteArrayInputStream( baos.toByteArray() ); | |||
| @@ -273,9 +267,9 @@ public class Jar extends Zip | |||
| // a <fileset> element. | |||
| if( vPath.equalsIgnoreCase( "META-INF/MANIFEST.MF" ) ) | |||
| { | |||
| final String message = "Warning: selected " + archiveType + | |||
| final String message = "Warning: selected " + m_archiveType + | |||
| " files include a META-INF/MANIFEST.MF which will be ignored " + | |||
| "(please use manifest attribute to " + archiveType + " task)"; | |||
| "(please use manifest attribute to " + m_archiveType + " task)"; | |||
| getLogger().warn( message ); | |||
| } | |||
| else | |||
| @@ -328,12 +322,12 @@ public class Jar extends Zip | |||
| writer.println(); | |||
| // header newline | |||
| writer.println( zipFile.getName() ); | |||
| writer.println( m_file.getName() ); | |||
| // JarIndex is sorting the directories by ascending order. | |||
| // it's painful to do in JDK 1.1 and it has no value but cosmetic | |||
| // since it will be read into a hashtable by the classloader. | |||
| Enumeration enum = addedDirs.keys(); | |||
| Enumeration enum = m_addedDirs.keys(); | |||
| while( enum.hasMoreElements() ) | |||
| { | |||
| String dir = (String)enum.nextElement(); | |||
| @@ -377,13 +371,13 @@ public class Jar extends Zip | |||
| { | |||
| try | |||
| { | |||
| if( execManifest == null ) | |||
| if( m_execManifest == null ) | |||
| { | |||
| execManifest = new Manifest( new InputStreamReader( is ) ); | |||
| m_execManifest = new Manifest( new InputStreamReader( is ) ); | |||
| } | |||
| else if( isAddingNewFiles() ) | |||
| { | |||
| execManifest.merge( new Manifest( new InputStreamReader( is ) ) ); | |||
| m_execManifest.merge( new Manifest( new InputStreamReader( is ) ) ); | |||
| } | |||
| } | |||
| catch( ManifestException e ) | |||
| @@ -18,70 +18,59 @@ import org.apache.tools.zip.ZipOutputStream; | |||
| * | |||
| * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> | |||
| */ | |||
| public class War extends Jar | |||
| public class War | |||
| extends Jar | |||
| { | |||
| private File deploymentDescriptor; | |||
| private boolean descriptorAdded; | |||
| private File m_webxml; | |||
| private boolean m_descriptorAdded; | |||
| public War() | |||
| { | |||
| super(); | |||
| archiveType = "war"; | |||
| emptyBehavior = "create"; | |||
| m_archiveType = "war"; | |||
| m_emptyBehavior = "create"; | |||
| } | |||
| public void setWebxml( File descr ) | |||
| public void setWebxml( final File descr ) | |||
| throws TaskException | |||
| { | |||
| deploymentDescriptor = descr; | |||
| if( !deploymentDescriptor.exists() ) | |||
| throw new TaskException( "Deployment descriptor: " + deploymentDescriptor + " does not exist." ); | |||
| m_webxml = descr; | |||
| if( !m_webxml.exists() ) | |||
| { | |||
| final String message = "Deployment descriptor: " + | |||
| m_webxml + " does not exist."; | |||
| throw new TaskException( message ); | |||
| } | |||
| // Create a ZipFileSet for this file, and pass it up. | |||
| ZipFileSet fs = new ZipFileSet(); | |||
| fs.setDir( new File( deploymentDescriptor.getParent() ) ); | |||
| fs.setIncludes( deploymentDescriptor.getName() ); | |||
| fs.setFullpath( "WEB-INF/web.xml" ); | |||
| super.addFileset( fs ); | |||
| addFileAs(descr, "WEB-INF/web.xml" ); | |||
| } | |||
| public void addClasses( ZipFileSet fs ) | |||
| public void addClasses( final ZipFileSet fs ) | |||
| { | |||
| // We just set the prefix for this fileset, and pass it up. | |||
| fs.setPrefix( "WEB-INF/classes/" ); | |||
| super.addFileset( fs ); | |||
| } | |||
| public void addLib( ZipFileSet fs ) | |||
| public void addLib( final ZipFileSet fs ) | |||
| { | |||
| // We just set the prefix for this fileset, and pass it up. | |||
| fs.setPrefix( "WEB-INF/lib/" ); | |||
| super.addFileset( fs ); | |||
| } | |||
| public void addWebinf( ZipFileSet fs ) | |||
| public void addWebinf( final ZipFileSet fs ) | |||
| { | |||
| // We just set the prefix for this fileset, and pass it up. | |||
| fs.setPrefix( "WEB-INF/" ); | |||
| super.addFileset( fs ); | |||
| } | |||
| /** | |||
| * Make sure we don't think we already have a web.xml next time this task | |||
| * gets executed. | |||
| */ | |||
| protected void cleanUp() | |||
| { | |||
| descriptorAdded = false; | |||
| super.cleanUp(); | |||
| } | |||
| protected void initZipOutputStream( ZipOutputStream zOut ) | |||
| protected void initZipOutputStream( final ZipOutputStream zOut ) | |||
| throws IOException, TaskException | |||
| { | |||
| // If no webxml file is specified, it's an error. | |||
| if( deploymentDescriptor == null && !isInUpdateMode() ) | |||
| if( m_webxml == null && !isInUpdateMode() ) | |||
| { | |||
| throw new TaskException( "webxml attribute is required" ); | |||
| } | |||
| @@ -89,7 +78,9 @@ public class War extends Jar | |||
| super.initZipOutputStream( zOut ); | |||
| } | |||
| protected void zipFile( File file, ZipOutputStream zOut, String vPath ) | |||
| protected void zipFile( final File file, | |||
| final ZipOutputStream zOut, | |||
| final String vPath ) | |||
| throws IOException, TaskException | |||
| { | |||
| // If the file being added is WEB-INF/web.xml, we warn if it's not the | |||
| @@ -98,17 +89,17 @@ public class War extends Jar | |||
| // a <fileset> element. | |||
| if( vPath.equalsIgnoreCase( "WEB-INF/web.xml" ) ) | |||
| { | |||
| if( deploymentDescriptor == null || !deploymentDescriptor.equals( file ) || descriptorAdded ) | |||
| if( m_webxml == null || !m_webxml.equals( file ) || m_descriptorAdded ) | |||
| { | |||
| final String message = "Warning: selected " + archiveType + | |||
| final String message = "Warning: selected " + m_archiveType + | |||
| " files include a WEB-INF/web.xml which will be ignored " + | |||
| "(please use webxml attribute to " + archiveType + " task)"; | |||
| "(please use webxml attribute to " + m_archiveType + " task)"; | |||
| getLogger().warn( message ); | |||
| } | |||
| else | |||
| { | |||
| super.zipFile( file, zOut, vPath ); | |||
| descriptorAdded = true; | |||
| m_descriptorAdded = true; | |||
| } | |||
| } | |||
| else | |||
| @@ -0,0 +1,22 @@ | |||
| /* | |||
| * Copyright (C) The Apache Software Foundation. All rights reserved. | |||
| * | |||
| * This software is published under the terms of the Apache Software License | |||
| * version 1.1, a copy of which has been included with this distribution in | |||
| * the LICENSE.txt file. | |||
| */ | |||
| package org.apache.tools.ant.taskdefs; | |||
| import org.apache.tools.ant.types.EnumeratedAttribute; | |||
| /** | |||
| * Possible behaviors when there are no matching files for the task. | |||
| */ | |||
| public class WhenEmpty | |||
| extends EnumeratedAttribute | |||
| { | |||
| public String[] getValues() | |||
| { | |||
| return new String[]{"fail", "skip", "create"}; | |||
| } | |||
| } | |||
| @@ -23,12 +23,11 @@ import java.util.zip.ZipInputStream; | |||
| import org.apache.myrmidon.api.TaskException; | |||
| import org.apache.tools.ant.types.DirectoryScanner; | |||
| import org.apache.tools.ant.types.FileScanner; | |||
| import org.apache.tools.ant.types.EnumeratedAttribute; | |||
| import org.apache.tools.ant.types.FileSet; | |||
| import org.apache.tools.ant.types.SourceFileScanner; | |||
| import org.apache.tools.ant.types.ZipFileSet; | |||
| import org.apache.tools.ant.types.ZipScanner; | |||
| import org.apache.tools.ant.util.mappers.MergingMapper; | |||
| import org.apache.tools.ant.types.SourceFileScanner; | |||
| import org.apache.tools.zip.ZipEntry; | |||
| import org.apache.tools.zip.ZipOutputStream; | |||
| @@ -39,36 +38,35 @@ import org.apache.tools.zip.ZipOutputStream; | |||
| * @author Jon S. Stevens <a href="mailto:jon@clearink.com">jon@clearink.com</a> | |||
| * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> | |||
| */ | |||
| public class Zip extends MatchingTask | |||
| public class Zip | |||
| extends MatchingTask | |||
| { | |||
| // For directories: | |||
| private final static long EMPTY_CRC = new CRC32().getValue(); | |||
| private boolean doCompress = true; | |||
| private boolean doUpdate = false; | |||
| private boolean doFilesonly = false; | |||
| protected String archiveType = "zip"; | |||
| protected String emptyBehavior = "skip"; | |||
| private ArrayList filesets = new ArrayList(); | |||
| protected Hashtable addedDirs = new Hashtable(); | |||
| private ArrayList addedFiles = new ArrayList(); | |||
| protected File zipFile; | |||
| private boolean m_compress = true; | |||
| private boolean m_update; | |||
| private boolean m_filesonly; | |||
| protected String m_archiveType = "zip"; | |||
| protected String m_emptyBehavior = "skip"; | |||
| private ArrayList m_filesets = new ArrayList(); | |||
| protected Hashtable m_addedDirs = new Hashtable(); | |||
| private ArrayList m_addedFiles = new ArrayList(); | |||
| protected File m_file; | |||
| /** | |||
| * true when we are adding new files into the Zip file, as opposed to adding | |||
| * back the unchanged files | |||
| */ | |||
| private boolean addingNewFiles; | |||
| private File baseDir; | |||
| private boolean m_addingNewFiles; | |||
| private File m_baseDir; | |||
| /** | |||
| * Encoding to use for filenames, defaults to the platform's default | |||
| * encoding. | |||
| */ | |||
| private String encoding; | |||
| private String m_encoding; | |||
| protected static String[][] grabFileNames( FileScanner[] scanners ) | |||
| private static String[][] grabFileNames( final FileScanner[] scanners ) | |||
| throws TaskException | |||
| { | |||
| String[][] result = new String[ scanners.length ][]; | |||
| @@ -83,15 +81,17 @@ public class Zip extends MatchingTask | |||
| return result; | |||
| } | |||
| protected static File[] grabFiles( FileScanner[] scanners, | |||
| String[][] fileNames ) | |||
| private static File[] grabFiles( final FileScanner[] scanners, | |||
| final String[][] filenames ) | |||
| { | |||
| ArrayList files = new ArrayList(); | |||
| for( int i = 0; i < fileNames.length; i++ ) | |||
| final ArrayList files = new ArrayList(); | |||
| for( int i = 0; i < filenames.length; i++ ) | |||
| { | |||
| File thisBaseDir = scanners[ i ].getBasedir(); | |||
| for( int j = 0; j < fileNames[ i ].length; j++ ) | |||
| files.add( new File( thisBaseDir, fileNames[ i ][ j ] ) ); | |||
| final File baseDir = scanners[ i ].getBasedir(); | |||
| for( int j = 0; j < filenames[ i ].length; j++ ) | |||
| { | |||
| files.add( new File( baseDir, filenames[ i ][ j ] ) ); | |||
| } | |||
| } | |||
| final File[] toret = new File[ files.size() ]; | |||
| return (File[])files.toArray( toret ); | |||
| @@ -102,9 +102,9 @@ public class Zip extends MatchingTask | |||
| * | |||
| * @param baseDir The new Basedir value | |||
| */ | |||
| public void setBasedir( File baseDir ) | |||
| public void setBasedir( final File baseDir ) | |||
| { | |||
| this.baseDir = baseDir; | |||
| m_baseDir = baseDir; | |||
| } | |||
| /** | |||
| @@ -112,9 +112,9 @@ public class Zip extends MatchingTask | |||
| * | |||
| * @param c The new Compress value | |||
| */ | |||
| public void setCompress( boolean c ) | |||
| public void setCompress( final boolean compress ) | |||
| { | |||
| doCompress = c; | |||
| m_compress = compress; | |||
| } | |||
| /** | |||
| @@ -128,9 +128,9 @@ public class Zip extends MatchingTask | |||
| * | |||
| * @param encoding The new Encoding value | |||
| */ | |||
| public void setEncoding( String encoding ) | |||
| public void setEncoding( final String encoding ) | |||
| { | |||
| this.encoding = encoding; | |||
| m_encoding = encoding; | |||
| } | |||
| /** | |||
| @@ -138,9 +138,9 @@ public class Zip extends MatchingTask | |||
| * | |||
| * @param file The new File value | |||
| */ | |||
| public void setFile( File file ) | |||
| public void setFile( final File file ) | |||
| { | |||
| this.zipFile = file; | |||
| m_file = file; | |||
| } | |||
| /** | |||
| @@ -148,9 +148,9 @@ public class Zip extends MatchingTask | |||
| * | |||
| * @param f The new Filesonly value | |||
| */ | |||
| public void setFilesonly( boolean f ) | |||
| public void setFilesonly( final boolean filesonly ) | |||
| { | |||
| doFilesonly = f; | |||
| m_filesonly = filesonly; | |||
| } | |||
| /** | |||
| @@ -159,9 +159,9 @@ public class Zip extends MatchingTask | |||
| * | |||
| * @param c The new Update value | |||
| */ | |||
| public void setUpdate( boolean c ) | |||
| public void setUpdate( final boolean update ) | |||
| { | |||
| doUpdate = c; | |||
| m_update = update; | |||
| } | |||
| /** | |||
| @@ -173,9 +173,9 @@ public class Zip extends MatchingTask | |||
| * | |||
| * @param we The new Whenempty value | |||
| */ | |||
| public void setWhenempty( WhenEmpty we ) | |||
| public void setWhenempty( final WhenEmpty we ) | |||
| { | |||
| emptyBehavior = we.getValue(); | |||
| m_emptyBehavior = we.getValue(); | |||
| } | |||
| /** | |||
| @@ -183,19 +183,17 @@ public class Zip extends MatchingTask | |||
| * | |||
| * @return The InUpdateMode value | |||
| */ | |||
| public boolean isInUpdateMode() | |||
| protected final boolean isInUpdateMode() | |||
| { | |||
| return doUpdate; | |||
| return m_update; | |||
| } | |||
| /** | |||
| * Adds a set of files (nested fileset attribute). | |||
| * | |||
| * @param set The feature to be added to the Fileset attribute | |||
| */ | |||
| public void addFileset( FileSet set ) | |||
| public void addFileset( final FileSet set ) | |||
| { | |||
| filesets.add( set ); | |||
| m_filesets.add( set ); | |||
| } | |||
| /** | |||
| @@ -204,23 +202,27 @@ public class Zip extends MatchingTask | |||
| * | |||
| * @param set The feature to be added to the Zipfileset attribute | |||
| */ | |||
| public void addZipfileset( ZipFileSet set ) | |||
| public void addZipfileset( final ZipFileSet set ) | |||
| { | |||
| filesets.add( set ); | |||
| m_filesets.add( set ); | |||
| } | |||
| public void execute() | |||
| throws TaskException | |||
| { | |||
| if( baseDir == null && filesets.size() == 0 && "zip".equals( archiveType ) ) | |||
| if( m_baseDir == null && m_filesets.size() == 0 && | |||
| "zip".equals( m_archiveType ) ) | |||
| { | |||
| throw new TaskException( "basedir attribute must be set, or at least " + | |||
| "one fileset must be given!" ); | |||
| final String message = "basedir attribute must be set, or at least " + | |||
| "one fileset must be given!"; | |||
| throw new TaskException( message ); | |||
| } | |||
| if( zipFile == null ) | |||
| if( m_file == null ) | |||
| { | |||
| throw new TaskException( "You must specify the " + archiveType + " file to create!" ); | |||
| final String message = "You must specify the " + | |||
| m_archiveType + " file to create!"; | |||
| throw new TaskException( message ); | |||
| } | |||
| // Renamed version of original file, if it exists | |||
| @@ -228,14 +230,14 @@ public class Zip extends MatchingTask | |||
| // Whether or not an actual update is required - | |||
| // we don't need to update if the original file doesn't exist | |||
| addingNewFiles = true; | |||
| doUpdate = doUpdate && zipFile.exists(); | |||
| if( doUpdate ) | |||
| m_addingNewFiles = true; | |||
| m_update = m_update && m_file.exists(); | |||
| if( m_update ) | |||
| { | |||
| try | |||
| { | |||
| renamedFile = File.createTempFile( "zip", ".tmp", | |||
| zipFile.getParentFile() ); | |||
| m_file.getParentFile() ); | |||
| } | |||
| catch( final IOException ioe ) | |||
| { | |||
| @@ -244,7 +246,7 @@ public class Zip extends MatchingTask | |||
| try | |||
| { | |||
| if( !zipFile.renameTo( renamedFile ) ) | |||
| if( !m_file.renameTo( renamedFile ) ) | |||
| { | |||
| throw new TaskException( "Unable to rename old file to temporary file" ); | |||
| } | |||
| @@ -257,13 +259,13 @@ public class Zip extends MatchingTask | |||
| // Create the scanners to pass to isUpToDate(). | |||
| ArrayList dss = new ArrayList(); | |||
| if( baseDir != null ) | |||
| if( m_baseDir != null ) | |||
| { | |||
| dss.add( getDirectoryScanner( baseDir ) ); | |||
| dss.add( getDirectoryScanner( m_baseDir ) ); | |||
| } | |||
| for( int i = 0; i < filesets.size(); i++ ) | |||
| for( int i = 0; i < m_filesets.size(); i++ ) | |||
| { | |||
| FileSet fs = (FileSet)filesets.get( i ); | |||
| FileSet fs = (FileSet)m_filesets.get( i ); | |||
| dss.add( fs.getDirectoryScanner() ); | |||
| } | |||
| int dssSize = dss.size(); | |||
| @@ -272,24 +274,24 @@ public class Zip extends MatchingTask | |||
| // quick exit if the target is up to date | |||
| // can also handle empty archives | |||
| if( isUpToDate( scanners, zipFile ) ) | |||
| if( isUpToDate( scanners, m_file ) ) | |||
| { | |||
| return; | |||
| } | |||
| String action = doUpdate ? "Updating " : "Building "; | |||
| String action = m_update ? "Updating " : "Building "; | |||
| getLogger().info( action + archiveType + ": " + zipFile.getAbsolutePath() ); | |||
| getLogger().info( action + m_archiveType + ": " + m_file.getAbsolutePath() ); | |||
| boolean success = false; | |||
| try | |||
| { | |||
| ZipOutputStream zOut = | |||
| new ZipOutputStream( new FileOutputStream( zipFile ) ); | |||
| zOut.setEncoding( encoding ); | |||
| new ZipOutputStream( new FileOutputStream( m_file ) ); | |||
| zOut.setEncoding( m_encoding ); | |||
| try | |||
| { | |||
| if( doCompress ) | |||
| if( m_compress ) | |||
| { | |||
| zOut.setMethod( ZipOutputStream.DEFLATED ); | |||
| } | |||
| @@ -300,26 +302,26 @@ public class Zip extends MatchingTask | |||
| initZipOutputStream( zOut ); | |||
| // Add the implicit fileset to the archive. | |||
| if( baseDir != null ) | |||
| if( m_baseDir != null ) | |||
| { | |||
| addFiles( getDirectoryScanner( baseDir ), zOut, "", "" ); | |||
| addFiles( getDirectoryScanner( m_baseDir ), zOut, "", "" ); | |||
| } | |||
| // Add the explicit filesets to the archive. | |||
| addFiles( filesets, zOut ); | |||
| if( doUpdate ) | |||
| addFiles( m_filesets, zOut ); | |||
| if( m_update ) | |||
| { | |||
| addingNewFiles = false; | |||
| m_addingNewFiles = false; | |||
| ZipFileSet oldFiles = new ZipFileSet(); | |||
| oldFiles.setSrc( renamedFile ); | |||
| StringBuffer exclusionPattern = new StringBuffer(); | |||
| for( int i = 0; i < addedFiles.size(); i++ ) | |||
| for( int i = 0; i < m_addedFiles.size(); i++ ) | |||
| { | |||
| if( i != 0 ) | |||
| { | |||
| exclusionPattern.append( "," ); | |||
| } | |||
| exclusionPattern.append( (String)addedFiles.get( i ) ); | |||
| exclusionPattern.append( (String)m_addedFiles.get( i ) ); | |||
| } | |||
| oldFiles.setExcludes( exclusionPattern.toString() ); | |||
| ArrayList tmp = new ArrayList(); | |||
| @@ -354,17 +356,17 @@ public class Zip extends MatchingTask | |||
| } | |||
| catch( IOException ioe ) | |||
| { | |||
| String msg = "Problem creating " + archiveType + ": " + ioe.getMessage(); | |||
| String msg = "Problem creating " + m_archiveType + ": " + ioe.getMessage(); | |||
| // delete a bogus ZIP file | |||
| if( !zipFile.delete() ) | |||
| if( !m_file.delete() ) | |||
| { | |||
| msg += " (and the archive is probably corrupt but I could not delete it)"; | |||
| } | |||
| if( doUpdate ) | |||
| if( m_update ) | |||
| { | |||
| if( !renamedFile.renameTo( zipFile ) ) | |||
| if( !renamedFile.renameTo( m_file ) ) | |||
| { | |||
| msg += " (and I couldn't rename the temporary file " + | |||
| renamedFile.getName() + " back)"; | |||
| @@ -373,13 +375,9 @@ public class Zip extends MatchingTask | |||
| throw new TaskException( msg, ioe ); | |||
| } | |||
| finally | |||
| { | |||
| cleanUp(); | |||
| } | |||
| // If we've been successful on an update, delete the temporary file | |||
| if( success && doUpdate ) | |||
| if( success && m_update ) | |||
| { | |||
| if( !renamedFile.delete() ) | |||
| { | |||
| @@ -390,15 +388,26 @@ public class Zip extends MatchingTask | |||
| } | |||
| } | |||
| protected void addFileAs( final File file, final String name ) | |||
| throws TaskException | |||
| { | |||
| // Create a ZipFileSet for this file, and pass it up. | |||
| final ZipFileSet fs = new ZipFileSet(); | |||
| fs.setDir( file.getParentFile() ); | |||
| fs.setIncludes( file.getName() ); | |||
| fs.setFullpath( name ); | |||
| addFileset( fs ); | |||
| } | |||
| /** | |||
| * Indicates if the task is adding new files into the archive as opposed to | |||
| * copying back unchanged files from the backup copy | |||
| * | |||
| * @return The AddingNewFiles value | |||
| */ | |||
| protected boolean isAddingNewFiles() | |||
| protected final boolean isAddingNewFiles() | |||
| { | |||
| return addingNewFiles; | |||
| return m_addingNewFiles; | |||
| } | |||
| /** | |||
| @@ -418,16 +427,16 @@ public class Zip extends MatchingTask | |||
| File[] files = grabFiles( scanners, fileNames ); | |||
| if( files.length == 0 ) | |||
| { | |||
| if( emptyBehavior.equals( "skip" ) ) | |||
| if( m_emptyBehavior.equals( "skip" ) ) | |||
| { | |||
| final String message = "Warning: skipping " + archiveType + " archive " + zipFile + | |||
| final String message = "Warning: skipping " + m_archiveType + " archive " + zipFile + | |||
| " because no files were included."; | |||
| getLogger().warn( message ); | |||
| return true; | |||
| } | |||
| else if( emptyBehavior.equals( "fail" ) ) | |||
| else if( m_emptyBehavior.equals( "fail" ) ) | |||
| { | |||
| throw new TaskException( "Cannot create " + archiveType + " archive " + zipFile + | |||
| throw new TaskException( "Cannot create " + m_archiveType + " archive " + zipFile + | |||
| ": no files were included." ); | |||
| } | |||
| else | |||
| @@ -597,7 +606,7 @@ public class Zip extends MatchingTask | |||
| ZipOutputStream zOut, String prefix ) | |||
| throws IOException | |||
| { | |||
| if( !doFilesonly ) | |||
| if( !m_filesonly ) | |||
| { | |||
| Stack directories = new Stack(); | |||
| int slashPos = entry.length(); | |||
| @@ -605,7 +614,7 @@ public class Zip extends MatchingTask | |||
| while( ( slashPos = entry.lastIndexOf( (int)'/', slashPos - 1 ) ) != -1 ) | |||
| { | |||
| String dir = entry.substring( 0, slashPos + 1 ); | |||
| if( addedDirs.get( prefix + dir ) != null ) | |||
| if( m_addedDirs.get( prefix + dir ) != null ) | |||
| { | |||
| break; | |||
| } | |||
| @@ -677,26 +686,6 @@ public class Zip extends MatchingTask | |||
| } | |||
| } | |||
| /** | |||
| * Do any clean up necessary to allow this instance to be used again. <p> | |||
| * | |||
| * When we get here, the Zip file has been closed and all we need to do is | |||
| * to reset some globals.</p> | |||
| */ | |||
| protected void cleanUp() | |||
| { | |||
| addedDirs = new Hashtable(); | |||
| addedFiles = new ArrayList(); | |||
| filesets = new ArrayList(); | |||
| zipFile = null; | |||
| baseDir = null; | |||
| doCompress = true; | |||
| doUpdate = false; | |||
| doFilesonly = false; | |||
| addingNewFiles = false; | |||
| encoding = null; | |||
| } | |||
| /** | |||
| * Create an empty zip file | |||
| * | |||
| @@ -709,7 +698,7 @@ public class Zip extends MatchingTask | |||
| // In this case using java.util.zip will not work | |||
| // because it does not permit a zero-entry archive. | |||
| // Must create it manually. | |||
| getLogger().info( "Note: creating empty " + archiveType + " archive " + zipFile ); | |||
| getLogger().info( "Note: creating empty " + m_archiveType + " archive " + zipFile ); | |||
| try | |||
| { | |||
| OutputStream os = new FileOutputStream( zipFile ); | |||
| @@ -749,13 +738,13 @@ public class Zip extends MatchingTask | |||
| protected void zipDir( File dir, ZipOutputStream zOut, String vPath ) | |||
| throws IOException | |||
| { | |||
| if( addedDirs.get( vPath ) != null ) | |||
| if( m_addedDirs.get( vPath ) != null ) | |||
| { | |||
| // don't add directories we've already added. | |||
| // no warning if we try, it is harmless in and of itself | |||
| return; | |||
| } | |||
| addedDirs.put( vPath, vPath ); | |||
| m_addedDirs.put( vPath, vPath ); | |||
| ZipEntry ze = new ZipEntry( vPath ); | |||
| if( dir != null && dir.exists() ) | |||
| @@ -794,7 +783,7 @@ public class Zip extends MatchingTask | |||
| * I couldn't find any documentation on this, just found out by try | |||
| * and error. | |||
| */ | |||
| if( !doCompress ) | |||
| if( !m_compress ) | |||
| { | |||
| long size = 0; | |||
| CRC32 cal = new CRC32(); | |||
| @@ -844,13 +833,13 @@ public class Zip extends MatchingTask | |||
| } | |||
| count = in.read( buffer, 0, buffer.length ); | |||
| } while( count != -1 ); | |||
| addedFiles.add( vPath ); | |||
| m_addedFiles.add( vPath ); | |||
| } | |||
| protected void zipFile( File file, ZipOutputStream zOut, String vPath ) | |||
| throws IOException, TaskException | |||
| { | |||
| if( file.equals( zipFile ) ) | |||
| if( file.equals( m_file ) ) | |||
| { | |||
| throw new TaskException( "A zip file cannot include itself" ); | |||
| } | |||
| @@ -865,17 +854,4 @@ public class Zip extends MatchingTask | |||
| fIn.close(); | |||
| } | |||
| } | |||
| /** | |||
| * Possible behaviors when there are no matching files for the task. | |||
| * | |||
| * @author RT | |||
| */ | |||
| public static class WhenEmpty extends EnumeratedAttribute | |||
| { | |||
| public String[] getValues() | |||
| { | |||
| return new String[]{"fail", "skip", "create"}; | |||
| } | |||
| } | |||
| } | |||
| @@ -21,30 +21,27 @@ import org.apache.tools.zip.ZipOutputStream; | |||
| */ | |||
| public class Ear extends Jar | |||
| { | |||
| private File deploymentDescriptor; | |||
| private boolean descriptorAdded; | |||
| private File m_appxml; | |||
| private boolean m_descriptorAdded; | |||
| public Ear() | |||
| { | |||
| super(); | |||
| archiveType = "ear"; | |||
| emptyBehavior = "create"; | |||
| m_archiveType = "ear"; | |||
| m_emptyBehavior = "create"; | |||
| } | |||
| public void setAppxml( File descr ) | |||
| public void setAppxml( final File appxml ) | |||
| throws TaskException | |||
| { | |||
| deploymentDescriptor = descr; | |||
| if( !deploymentDescriptor.exists() ) | |||
| throw new TaskException( "Deployment descriptor: " + deploymentDescriptor + " does not exist." ); | |||
| m_appxml = appxml; | |||
| if( !m_appxml.exists() ) | |||
| { | |||
| final String message = "Deployment descriptor: " + | |||
| m_appxml + " does not exist."; | |||
| throw new TaskException( message ); | |||
| } | |||
| // Create a ZipFileSet for this file, and pass it up. | |||
| ZipFileSet fs = new ZipFileSet(); | |||
| fs.setDir( new File( deploymentDescriptor.getParent() ) ); | |||
| fs.setIncludes( deploymentDescriptor.getName() ); | |||
| fs.setFullpath( "META-INF/application.xml" ); | |||
| super.addFileset( fs ); | |||
| addFileAs( m_appxml, "META-INF/application.xml" ); | |||
| } | |||
| public void addArchives( ZipFileSet fs ) | |||
| @@ -56,23 +53,13 @@ public class Ear extends Jar | |||
| super.addFileset( fs ); | |||
| } | |||
| /** | |||
| * Make sure we don't think we already have a web.xml next time this task | |||
| * gets executed. | |||
| */ | |||
| protected void cleanUp() | |||
| { | |||
| descriptorAdded = false; | |||
| super.cleanUp(); | |||
| } | |||
| protected void initZipOutputStream( ZipOutputStream zOut ) | |||
| protected void initZipOutputStream( final ZipOutputStream zOut ) | |||
| throws IOException, TaskException | |||
| { | |||
| // If no webxml file is specified, it's an error. | |||
| if( deploymentDescriptor == null && !isInUpdateMode() ) | |||
| if( m_appxml == null && !isInUpdateMode() ) | |||
| { | |||
| throw new TaskException( "appxml attribute is required" ); | |||
| final String message = "appxml attribute is required"; | |||
| throw new TaskException( message ); | |||
| } | |||
| super.initZipOutputStream( zOut ); | |||
| @@ -87,17 +74,19 @@ public class Ear extends Jar | |||
| // a <fileset> element. | |||
| if( vPath.equalsIgnoreCase( "META-INF/aplication.xml" ) ) | |||
| { | |||
| if( deploymentDescriptor == null || !deploymentDescriptor.equals( file ) || descriptorAdded ) | |||
| if( m_appxml == null || | |||
| !m_appxml.equals( file ) || | |||
| m_descriptorAdded ) | |||
| { | |||
| final String message = "Warning: selected " + archiveType + | |||
| final String message = "Warning: selected " + m_archiveType + | |||
| " files include a META-INF/application.xml which will be ignored " + | |||
| "(please use appxml attribute to " + archiveType + " task)"; | |||
| "(please use appxml attribute to " + m_archiveType + " task)"; | |||
| getLogger().warn( message ); | |||
| } | |||
| else | |||
| { | |||
| super.zipFile( file, zOut, vPath ); | |||
| descriptorAdded = true; | |||
| m_descriptorAdded = true; | |||
| } | |||
| } | |||
| else | |||
| @@ -29,7 +29,8 @@ import org.apache.tools.zip.ZipOutputStream; | |||
| * | |||
| * @author James Davidson <a href="mailto:duncan@x180.com">duncan@x180.com</a> | |||
| */ | |||
| public class Jar extends Zip | |||
| public class Jar | |||
| extends Zip | |||
| { | |||
| /** | |||
| * The index file name. | |||
| @@ -39,16 +40,15 @@ public class Jar extends Zip | |||
| /** | |||
| * true if a manifest has been specified in the task | |||
| */ | |||
| private boolean buildFileManifest = false; | |||
| private boolean buildFileManifest; | |||
| /** | |||
| * jar index is JDK 1.3+ only | |||
| */ | |||
| private boolean index = false; | |||
| private Manifest execManifest; | |||
| private Manifest manifest; | |||
| private File manifestFile; | |||
| private boolean m_index; | |||
| private Manifest m_execManifest; | |||
| private Manifest m_manifest; | |||
| private File m_manifestFile; | |||
| /** | |||
| * constructor | |||
| @@ -56,8 +56,8 @@ public class Jar extends Zip | |||
| public Jar() | |||
| { | |||
| super(); | |||
| archiveType = "jar"; | |||
| emptyBehavior = "create"; | |||
| m_archiveType = "jar"; | |||
| m_emptyBehavior = "create"; | |||
| setEncoding( "UTF8" ); | |||
| } | |||
| @@ -69,7 +69,7 @@ public class Jar extends Zip | |||
| */ | |||
| public void setIndex( boolean flag ) | |||
| { | |||
| index = flag; | |||
| m_index = flag; | |||
| } | |||
| public void setManifest( File manifestFile ) | |||
| @@ -77,30 +77,33 @@ public class Jar extends Zip | |||
| { | |||
| if( !manifestFile.exists() ) | |||
| { | |||
| throw new TaskException( "Manifest file: " + manifestFile + " does not exist." ); | |||
| final String message = "Manifest file: " + manifestFile + " does not exist."; | |||
| throw new TaskException( message ); | |||
| } | |||
| this.manifestFile = manifestFile; | |||
| this.m_manifestFile = manifestFile; | |||
| Reader r = null; | |||
| try | |||
| { | |||
| r = new FileReader( manifestFile ); | |||
| Manifest newManifest = new Manifest( r ); | |||
| if( manifest == null ) | |||
| if( m_manifest == null ) | |||
| { | |||
| manifest = Manifest.getDefaultManifest(); | |||
| m_manifest = Manifest.getDefaultManifest(); | |||
| } | |||
| manifest.merge( newManifest ); | |||
| m_manifest.merge( newManifest ); | |||
| } | |||
| catch( ManifestException e ) | |||
| { | |||
| getLogger().error( "Manifest is invalid: " + e.getMessage() ); | |||
| throw new TaskException( "Invalid Manifest: " + manifestFile, e ); | |||
| final String message = "Manifest " + manifestFile + " is invalid: " + e.getMessage(); | |||
| getLogger().error( message ); | |||
| throw new TaskException( message, e ); | |||
| } | |||
| catch( IOException e ) | |||
| { | |||
| throw new TaskException( "Unable to read manifest file: " + manifestFile, e ); | |||
| final String message = "Unable to read manifest file: " + manifestFile; | |||
| throw new TaskException( message, e ); | |||
| } | |||
| finally | |||
| { | |||
| @@ -127,11 +130,11 @@ public class Jar extends Zip | |||
| public void addConfiguredManifest( Manifest newManifest ) | |||
| throws ManifestException, TaskException | |||
| { | |||
| if( manifest == null ) | |||
| if( m_manifest == null ) | |||
| { | |||
| manifest = Manifest.getDefaultManifest(); | |||
| m_manifest = Manifest.getDefaultManifest(); | |||
| } | |||
| manifest.merge( newManifest ); | |||
| m_manifest.merge( newManifest ); | |||
| buildFileManifest = true; | |||
| } | |||
| @@ -155,7 +158,7 @@ public class Jar extends Zip | |||
| throws TaskException | |||
| { | |||
| // need to handle manifest as a special check | |||
| if( buildFileManifest || manifestFile == null ) | |||
| if( buildFileManifest || m_manifestFile == null ) | |||
| { | |||
| java.util.zip.ZipFile theZipFile = null; | |||
| try | |||
| @@ -168,11 +171,11 @@ public class Jar extends Zip | |||
| return false; | |||
| } | |||
| Manifest currentManifest = new Manifest( new InputStreamReader( theZipFile.getInputStream( entry ) ) ); | |||
| if( manifest == null ) | |||
| if( m_manifest == null ) | |||
| { | |||
| manifest = Manifest.getDefaultManifest(); | |||
| m_manifest = Manifest.getDefaultManifest(); | |||
| } | |||
| if( !currentManifest.equals( manifest ) ) | |||
| if( !currentManifest.equals( m_manifest ) ) | |||
| { | |||
| getLogger().debug( "Updating jar since jar manifest has changed" ); | |||
| return false; | |||
| @@ -199,22 +202,13 @@ public class Jar extends Zip | |||
| } | |||
| } | |||
| } | |||
| else if( manifestFile.lastModified() > zipFile.lastModified() ) | |||
| else if( m_manifestFile.lastModified() > zipFile.lastModified() ) | |||
| { | |||
| return false; | |||
| } | |||
| return super.isUpToDate( scanners, zipFile ); | |||
| } | |||
| /** | |||
| * Make sure we don't think we already have a MANIFEST next time this task | |||
| * gets executed. | |||
| */ | |||
| protected void cleanUp() | |||
| { | |||
| super.cleanUp(); | |||
| } | |||
| protected boolean createEmptyZip( File zipFile ) | |||
| { | |||
| // Jar files always contain a manifest and can never be empty | |||
| @@ -224,7 +218,7 @@ public class Jar extends Zip | |||
| protected void finalizeZipOutputStream( ZipOutputStream zOut ) | |||
| throws IOException, TaskException | |||
| { | |||
| if( index ) | |||
| if( m_index ) | |||
| { | |||
| createIndexList( zOut ); | |||
| } | |||
| @@ -235,13 +229,13 @@ public class Jar extends Zip | |||
| { | |||
| try | |||
| { | |||
| execManifest = Manifest.getDefaultManifest(); | |||
| m_execManifest = Manifest.getDefaultManifest(); | |||
| if( manifest != null ) | |||
| if( m_manifest != null ) | |||
| { | |||
| execManifest.merge( manifest ); | |||
| m_execManifest.merge( m_manifest ); | |||
| } | |||
| for( Iterator e = execManifest.getWarnings(); e.hasNext(); ) | |||
| for( Iterator e = m_execManifest.getWarnings(); e.hasNext(); ) | |||
| { | |||
| getLogger().warn( "Manifest warning: " + (String)e.next() ); | |||
| } | |||
| @@ -250,7 +244,7 @@ public class Jar extends Zip | |||
| // time to write the manifest | |||
| ByteArrayOutputStream baos = new ByteArrayOutputStream(); | |||
| PrintWriter writer = new PrintWriter( baos ); | |||
| execManifest.write( writer ); | |||
| m_execManifest.write( writer ); | |||
| writer.flush(); | |||
| ByteArrayInputStream bais = new ByteArrayInputStream( baos.toByteArray() ); | |||
| @@ -273,9 +267,9 @@ public class Jar extends Zip | |||
| // a <fileset> element. | |||
| if( vPath.equalsIgnoreCase( "META-INF/MANIFEST.MF" ) ) | |||
| { | |||
| final String message = "Warning: selected " + archiveType + | |||
| final String message = "Warning: selected " + m_archiveType + | |||
| " files include a META-INF/MANIFEST.MF which will be ignored " + | |||
| "(please use manifest attribute to " + archiveType + " task)"; | |||
| "(please use manifest attribute to " + m_archiveType + " task)"; | |||
| getLogger().warn( message ); | |||
| } | |||
| else | |||
| @@ -328,12 +322,12 @@ public class Jar extends Zip | |||
| writer.println(); | |||
| // header newline | |||
| writer.println( zipFile.getName() ); | |||
| writer.println( m_file.getName() ); | |||
| // JarIndex is sorting the directories by ascending order. | |||
| // it's painful to do in JDK 1.1 and it has no value but cosmetic | |||
| // since it will be read into a hashtable by the classloader. | |||
| Enumeration enum = addedDirs.keys(); | |||
| Enumeration enum = m_addedDirs.keys(); | |||
| while( enum.hasMoreElements() ) | |||
| { | |||
| String dir = (String)enum.nextElement(); | |||
| @@ -377,13 +371,13 @@ public class Jar extends Zip | |||
| { | |||
| try | |||
| { | |||
| if( execManifest == null ) | |||
| if( m_execManifest == null ) | |||
| { | |||
| execManifest = new Manifest( new InputStreamReader( is ) ); | |||
| m_execManifest = new Manifest( new InputStreamReader( is ) ); | |||
| } | |||
| else if( isAddingNewFiles() ) | |||
| { | |||
| execManifest.merge( new Manifest( new InputStreamReader( is ) ) ); | |||
| m_execManifest.merge( new Manifest( new InputStreamReader( is ) ) ); | |||
| } | |||
| } | |||
| catch( ManifestException e ) | |||
| @@ -18,70 +18,59 @@ import org.apache.tools.zip.ZipOutputStream; | |||
| * | |||
| * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> | |||
| */ | |||
| public class War extends Jar | |||
| public class War | |||
| extends Jar | |||
| { | |||
| private File deploymentDescriptor; | |||
| private boolean descriptorAdded; | |||
| private File m_webxml; | |||
| private boolean m_descriptorAdded; | |||
| public War() | |||
| { | |||
| super(); | |||
| archiveType = "war"; | |||
| emptyBehavior = "create"; | |||
| m_archiveType = "war"; | |||
| m_emptyBehavior = "create"; | |||
| } | |||
| public void setWebxml( File descr ) | |||
| public void setWebxml( final File descr ) | |||
| throws TaskException | |||
| { | |||
| deploymentDescriptor = descr; | |||
| if( !deploymentDescriptor.exists() ) | |||
| throw new TaskException( "Deployment descriptor: " + deploymentDescriptor + " does not exist." ); | |||
| m_webxml = descr; | |||
| if( !m_webxml.exists() ) | |||
| { | |||
| final String message = "Deployment descriptor: " + | |||
| m_webxml + " does not exist."; | |||
| throw new TaskException( message ); | |||
| } | |||
| // Create a ZipFileSet for this file, and pass it up. | |||
| ZipFileSet fs = new ZipFileSet(); | |||
| fs.setDir( new File( deploymentDescriptor.getParent() ) ); | |||
| fs.setIncludes( deploymentDescriptor.getName() ); | |||
| fs.setFullpath( "WEB-INF/web.xml" ); | |||
| super.addFileset( fs ); | |||
| addFileAs(descr, "WEB-INF/web.xml" ); | |||
| } | |||
| public void addClasses( ZipFileSet fs ) | |||
| public void addClasses( final ZipFileSet fs ) | |||
| { | |||
| // We just set the prefix for this fileset, and pass it up. | |||
| fs.setPrefix( "WEB-INF/classes/" ); | |||
| super.addFileset( fs ); | |||
| } | |||
| public void addLib( ZipFileSet fs ) | |||
| public void addLib( final ZipFileSet fs ) | |||
| { | |||
| // We just set the prefix for this fileset, and pass it up. | |||
| fs.setPrefix( "WEB-INF/lib/" ); | |||
| super.addFileset( fs ); | |||
| } | |||
| public void addWebinf( ZipFileSet fs ) | |||
| public void addWebinf( final ZipFileSet fs ) | |||
| { | |||
| // We just set the prefix for this fileset, and pass it up. | |||
| fs.setPrefix( "WEB-INF/" ); | |||
| super.addFileset( fs ); | |||
| } | |||
| /** | |||
| * Make sure we don't think we already have a web.xml next time this task | |||
| * gets executed. | |||
| */ | |||
| protected void cleanUp() | |||
| { | |||
| descriptorAdded = false; | |||
| super.cleanUp(); | |||
| } | |||
| protected void initZipOutputStream( ZipOutputStream zOut ) | |||
| protected void initZipOutputStream( final ZipOutputStream zOut ) | |||
| throws IOException, TaskException | |||
| { | |||
| // If no webxml file is specified, it's an error. | |||
| if( deploymentDescriptor == null && !isInUpdateMode() ) | |||
| if( m_webxml == null && !isInUpdateMode() ) | |||
| { | |||
| throw new TaskException( "webxml attribute is required" ); | |||
| } | |||
| @@ -89,7 +78,9 @@ public class War extends Jar | |||
| super.initZipOutputStream( zOut ); | |||
| } | |||
| protected void zipFile( File file, ZipOutputStream zOut, String vPath ) | |||
| protected void zipFile( final File file, | |||
| final ZipOutputStream zOut, | |||
| final String vPath ) | |||
| throws IOException, TaskException | |||
| { | |||
| // If the file being added is WEB-INF/web.xml, we warn if it's not the | |||
| @@ -98,17 +89,17 @@ public class War extends Jar | |||
| // a <fileset> element. | |||
| if( vPath.equalsIgnoreCase( "WEB-INF/web.xml" ) ) | |||
| { | |||
| if( deploymentDescriptor == null || !deploymentDescriptor.equals( file ) || descriptorAdded ) | |||
| if( m_webxml == null || !m_webxml.equals( file ) || m_descriptorAdded ) | |||
| { | |||
| final String message = "Warning: selected " + archiveType + | |||
| final String message = "Warning: selected " + m_archiveType + | |||
| " files include a WEB-INF/web.xml which will be ignored " + | |||
| "(please use webxml attribute to " + archiveType + " task)"; | |||
| "(please use webxml attribute to " + m_archiveType + " task)"; | |||
| getLogger().warn( message ); | |||
| } | |||
| else | |||
| { | |||
| super.zipFile( file, zOut, vPath ); | |||
| descriptorAdded = true; | |||
| m_descriptorAdded = true; | |||
| } | |||
| } | |||
| else | |||
| @@ -0,0 +1,22 @@ | |||
| /* | |||
| * Copyright (C) The Apache Software Foundation. All rights reserved. | |||
| * | |||
| * This software is published under the terms of the Apache Software License | |||
| * version 1.1, a copy of which has been included with this distribution in | |||
| * the LICENSE.txt file. | |||
| */ | |||
| package org.apache.tools.ant.taskdefs; | |||
| import org.apache.tools.ant.types.EnumeratedAttribute; | |||
| /** | |||
| * Possible behaviors when there are no matching files for the task. | |||
| */ | |||
| public class WhenEmpty | |||
| extends EnumeratedAttribute | |||
| { | |||
| public String[] getValues() | |||
| { | |||
| return new String[]{"fail", "skip", "create"}; | |||
| } | |||
| } | |||
| @@ -23,12 +23,11 @@ import java.util.zip.ZipInputStream; | |||
| import org.apache.myrmidon.api.TaskException; | |||
| import org.apache.tools.ant.types.DirectoryScanner; | |||
| import org.apache.tools.ant.types.FileScanner; | |||
| import org.apache.tools.ant.types.EnumeratedAttribute; | |||
| import org.apache.tools.ant.types.FileSet; | |||
| import org.apache.tools.ant.types.SourceFileScanner; | |||
| import org.apache.tools.ant.types.ZipFileSet; | |||
| import org.apache.tools.ant.types.ZipScanner; | |||
| import org.apache.tools.ant.util.mappers.MergingMapper; | |||
| import org.apache.tools.ant.types.SourceFileScanner; | |||
| import org.apache.tools.zip.ZipEntry; | |||
| import org.apache.tools.zip.ZipOutputStream; | |||
| @@ -39,36 +38,35 @@ import org.apache.tools.zip.ZipOutputStream; | |||
| * @author Jon S. Stevens <a href="mailto:jon@clearink.com">jon@clearink.com</a> | |||
| * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> | |||
| */ | |||
| public class Zip extends MatchingTask | |||
| public class Zip | |||
| extends MatchingTask | |||
| { | |||
| // For directories: | |||
| private final static long EMPTY_CRC = new CRC32().getValue(); | |||
| private boolean doCompress = true; | |||
| private boolean doUpdate = false; | |||
| private boolean doFilesonly = false; | |||
| protected String archiveType = "zip"; | |||
| protected String emptyBehavior = "skip"; | |||
| private ArrayList filesets = new ArrayList(); | |||
| protected Hashtable addedDirs = new Hashtable(); | |||
| private ArrayList addedFiles = new ArrayList(); | |||
| protected File zipFile; | |||
| private boolean m_compress = true; | |||
| private boolean m_update; | |||
| private boolean m_filesonly; | |||
| protected String m_archiveType = "zip"; | |||
| protected String m_emptyBehavior = "skip"; | |||
| private ArrayList m_filesets = new ArrayList(); | |||
| protected Hashtable m_addedDirs = new Hashtable(); | |||
| private ArrayList m_addedFiles = new ArrayList(); | |||
| protected File m_file; | |||
| /** | |||
| * true when we are adding new files into the Zip file, as opposed to adding | |||
| * back the unchanged files | |||
| */ | |||
| private boolean addingNewFiles; | |||
| private File baseDir; | |||
| private boolean m_addingNewFiles; | |||
| private File m_baseDir; | |||
| /** | |||
| * Encoding to use for filenames, defaults to the platform's default | |||
| * encoding. | |||
| */ | |||
| private String encoding; | |||
| private String m_encoding; | |||
| protected static String[][] grabFileNames( FileScanner[] scanners ) | |||
| private static String[][] grabFileNames( final FileScanner[] scanners ) | |||
| throws TaskException | |||
| { | |||
| String[][] result = new String[ scanners.length ][]; | |||
| @@ -83,15 +81,17 @@ public class Zip extends MatchingTask | |||
| return result; | |||
| } | |||
| protected static File[] grabFiles( FileScanner[] scanners, | |||
| String[][] fileNames ) | |||
| private static File[] grabFiles( final FileScanner[] scanners, | |||
| final String[][] filenames ) | |||
| { | |||
| ArrayList files = new ArrayList(); | |||
| for( int i = 0; i < fileNames.length; i++ ) | |||
| final ArrayList files = new ArrayList(); | |||
| for( int i = 0; i < filenames.length; i++ ) | |||
| { | |||
| File thisBaseDir = scanners[ i ].getBasedir(); | |||
| for( int j = 0; j < fileNames[ i ].length; j++ ) | |||
| files.add( new File( thisBaseDir, fileNames[ i ][ j ] ) ); | |||
| final File baseDir = scanners[ i ].getBasedir(); | |||
| for( int j = 0; j < filenames[ i ].length; j++ ) | |||
| { | |||
| files.add( new File( baseDir, filenames[ i ][ j ] ) ); | |||
| } | |||
| } | |||
| final File[] toret = new File[ files.size() ]; | |||
| return (File[])files.toArray( toret ); | |||
| @@ -102,9 +102,9 @@ public class Zip extends MatchingTask | |||
| * | |||
| * @param baseDir The new Basedir value | |||
| */ | |||
| public void setBasedir( File baseDir ) | |||
| public void setBasedir( final File baseDir ) | |||
| { | |||
| this.baseDir = baseDir; | |||
| m_baseDir = baseDir; | |||
| } | |||
| /** | |||
| @@ -112,9 +112,9 @@ public class Zip extends MatchingTask | |||
| * | |||
| * @param c The new Compress value | |||
| */ | |||
| public void setCompress( boolean c ) | |||
| public void setCompress( final boolean compress ) | |||
| { | |||
| doCompress = c; | |||
| m_compress = compress; | |||
| } | |||
| /** | |||
| @@ -128,9 +128,9 @@ public class Zip extends MatchingTask | |||
| * | |||
| * @param encoding The new Encoding value | |||
| */ | |||
| public void setEncoding( String encoding ) | |||
| public void setEncoding( final String encoding ) | |||
| { | |||
| this.encoding = encoding; | |||
| m_encoding = encoding; | |||
| } | |||
| /** | |||
| @@ -138,9 +138,9 @@ public class Zip extends MatchingTask | |||
| * | |||
| * @param file The new File value | |||
| */ | |||
| public void setFile( File file ) | |||
| public void setFile( final File file ) | |||
| { | |||
| this.zipFile = file; | |||
| m_file = file; | |||
| } | |||
| /** | |||
| @@ -148,9 +148,9 @@ public class Zip extends MatchingTask | |||
| * | |||
| * @param f The new Filesonly value | |||
| */ | |||
| public void setFilesonly( boolean f ) | |||
| public void setFilesonly( final boolean filesonly ) | |||
| { | |||
| doFilesonly = f; | |||
| m_filesonly = filesonly; | |||
| } | |||
| /** | |||
| @@ -159,9 +159,9 @@ public class Zip extends MatchingTask | |||
| * | |||
| * @param c The new Update value | |||
| */ | |||
| public void setUpdate( boolean c ) | |||
| public void setUpdate( final boolean update ) | |||
| { | |||
| doUpdate = c; | |||
| m_update = update; | |||
| } | |||
| /** | |||
| @@ -173,9 +173,9 @@ public class Zip extends MatchingTask | |||
| * | |||
| * @param we The new Whenempty value | |||
| */ | |||
| public void setWhenempty( WhenEmpty we ) | |||
| public void setWhenempty( final WhenEmpty we ) | |||
| { | |||
| emptyBehavior = we.getValue(); | |||
| m_emptyBehavior = we.getValue(); | |||
| } | |||
| /** | |||
| @@ -183,19 +183,17 @@ public class Zip extends MatchingTask | |||
| * | |||
| * @return The InUpdateMode value | |||
| */ | |||
| public boolean isInUpdateMode() | |||
| protected final boolean isInUpdateMode() | |||
| { | |||
| return doUpdate; | |||
| return m_update; | |||
| } | |||
| /** | |||
| * Adds a set of files (nested fileset attribute). | |||
| * | |||
| * @param set The feature to be added to the Fileset attribute | |||
| */ | |||
| public void addFileset( FileSet set ) | |||
| public void addFileset( final FileSet set ) | |||
| { | |||
| filesets.add( set ); | |||
| m_filesets.add( set ); | |||
| } | |||
| /** | |||
| @@ -204,23 +202,27 @@ public class Zip extends MatchingTask | |||
| * | |||
| * @param set The feature to be added to the Zipfileset attribute | |||
| */ | |||
| public void addZipfileset( ZipFileSet set ) | |||
| public void addZipfileset( final ZipFileSet set ) | |||
| { | |||
| filesets.add( set ); | |||
| m_filesets.add( set ); | |||
| } | |||
| public void execute() | |||
| throws TaskException | |||
| { | |||
| if( baseDir == null && filesets.size() == 0 && "zip".equals( archiveType ) ) | |||
| if( m_baseDir == null && m_filesets.size() == 0 && | |||
| "zip".equals( m_archiveType ) ) | |||
| { | |||
| throw new TaskException( "basedir attribute must be set, or at least " + | |||
| "one fileset must be given!" ); | |||
| final String message = "basedir attribute must be set, or at least " + | |||
| "one fileset must be given!"; | |||
| throw new TaskException( message ); | |||
| } | |||
| if( zipFile == null ) | |||
| if( m_file == null ) | |||
| { | |||
| throw new TaskException( "You must specify the " + archiveType + " file to create!" ); | |||
| final String message = "You must specify the " + | |||
| m_archiveType + " file to create!"; | |||
| throw new TaskException( message ); | |||
| } | |||
| // Renamed version of original file, if it exists | |||
| @@ -228,14 +230,14 @@ public class Zip extends MatchingTask | |||
| // Whether or not an actual update is required - | |||
| // we don't need to update if the original file doesn't exist | |||
| addingNewFiles = true; | |||
| doUpdate = doUpdate && zipFile.exists(); | |||
| if( doUpdate ) | |||
| m_addingNewFiles = true; | |||
| m_update = m_update && m_file.exists(); | |||
| if( m_update ) | |||
| { | |||
| try | |||
| { | |||
| renamedFile = File.createTempFile( "zip", ".tmp", | |||
| zipFile.getParentFile() ); | |||
| m_file.getParentFile() ); | |||
| } | |||
| catch( final IOException ioe ) | |||
| { | |||
| @@ -244,7 +246,7 @@ public class Zip extends MatchingTask | |||
| try | |||
| { | |||
| if( !zipFile.renameTo( renamedFile ) ) | |||
| if( !m_file.renameTo( renamedFile ) ) | |||
| { | |||
| throw new TaskException( "Unable to rename old file to temporary file" ); | |||
| } | |||
| @@ -257,13 +259,13 @@ public class Zip extends MatchingTask | |||
| // Create the scanners to pass to isUpToDate(). | |||
| ArrayList dss = new ArrayList(); | |||
| if( baseDir != null ) | |||
| if( m_baseDir != null ) | |||
| { | |||
| dss.add( getDirectoryScanner( baseDir ) ); | |||
| dss.add( getDirectoryScanner( m_baseDir ) ); | |||
| } | |||
| for( int i = 0; i < filesets.size(); i++ ) | |||
| for( int i = 0; i < m_filesets.size(); i++ ) | |||
| { | |||
| FileSet fs = (FileSet)filesets.get( i ); | |||
| FileSet fs = (FileSet)m_filesets.get( i ); | |||
| dss.add( fs.getDirectoryScanner() ); | |||
| } | |||
| int dssSize = dss.size(); | |||
| @@ -272,24 +274,24 @@ public class Zip extends MatchingTask | |||
| // quick exit if the target is up to date | |||
| // can also handle empty archives | |||
| if( isUpToDate( scanners, zipFile ) ) | |||
| if( isUpToDate( scanners, m_file ) ) | |||
| { | |||
| return; | |||
| } | |||
| String action = doUpdate ? "Updating " : "Building "; | |||
| String action = m_update ? "Updating " : "Building "; | |||
| getLogger().info( action + archiveType + ": " + zipFile.getAbsolutePath() ); | |||
| getLogger().info( action + m_archiveType + ": " + m_file.getAbsolutePath() ); | |||
| boolean success = false; | |||
| try | |||
| { | |||
| ZipOutputStream zOut = | |||
| new ZipOutputStream( new FileOutputStream( zipFile ) ); | |||
| zOut.setEncoding( encoding ); | |||
| new ZipOutputStream( new FileOutputStream( m_file ) ); | |||
| zOut.setEncoding( m_encoding ); | |||
| try | |||
| { | |||
| if( doCompress ) | |||
| if( m_compress ) | |||
| { | |||
| zOut.setMethod( ZipOutputStream.DEFLATED ); | |||
| } | |||
| @@ -300,26 +302,26 @@ public class Zip extends MatchingTask | |||
| initZipOutputStream( zOut ); | |||
| // Add the implicit fileset to the archive. | |||
| if( baseDir != null ) | |||
| if( m_baseDir != null ) | |||
| { | |||
| addFiles( getDirectoryScanner( baseDir ), zOut, "", "" ); | |||
| addFiles( getDirectoryScanner( m_baseDir ), zOut, "", "" ); | |||
| } | |||
| // Add the explicit filesets to the archive. | |||
| addFiles( filesets, zOut ); | |||
| if( doUpdate ) | |||
| addFiles( m_filesets, zOut ); | |||
| if( m_update ) | |||
| { | |||
| addingNewFiles = false; | |||
| m_addingNewFiles = false; | |||
| ZipFileSet oldFiles = new ZipFileSet(); | |||
| oldFiles.setSrc( renamedFile ); | |||
| StringBuffer exclusionPattern = new StringBuffer(); | |||
| for( int i = 0; i < addedFiles.size(); i++ ) | |||
| for( int i = 0; i < m_addedFiles.size(); i++ ) | |||
| { | |||
| if( i != 0 ) | |||
| { | |||
| exclusionPattern.append( "," ); | |||
| } | |||
| exclusionPattern.append( (String)addedFiles.get( i ) ); | |||
| exclusionPattern.append( (String)m_addedFiles.get( i ) ); | |||
| } | |||
| oldFiles.setExcludes( exclusionPattern.toString() ); | |||
| ArrayList tmp = new ArrayList(); | |||
| @@ -354,17 +356,17 @@ public class Zip extends MatchingTask | |||
| } | |||
| catch( IOException ioe ) | |||
| { | |||
| String msg = "Problem creating " + archiveType + ": " + ioe.getMessage(); | |||
| String msg = "Problem creating " + m_archiveType + ": " + ioe.getMessage(); | |||
| // delete a bogus ZIP file | |||
| if( !zipFile.delete() ) | |||
| if( !m_file.delete() ) | |||
| { | |||
| msg += " (and the archive is probably corrupt but I could not delete it)"; | |||
| } | |||
| if( doUpdate ) | |||
| if( m_update ) | |||
| { | |||
| if( !renamedFile.renameTo( zipFile ) ) | |||
| if( !renamedFile.renameTo( m_file ) ) | |||
| { | |||
| msg += " (and I couldn't rename the temporary file " + | |||
| renamedFile.getName() + " back)"; | |||
| @@ -373,13 +375,9 @@ public class Zip extends MatchingTask | |||
| throw new TaskException( msg, ioe ); | |||
| } | |||
| finally | |||
| { | |||
| cleanUp(); | |||
| } | |||
| // If we've been successful on an update, delete the temporary file | |||
| if( success && doUpdate ) | |||
| if( success && m_update ) | |||
| { | |||
| if( !renamedFile.delete() ) | |||
| { | |||
| @@ -390,15 +388,26 @@ public class Zip extends MatchingTask | |||
| } | |||
| } | |||
| protected void addFileAs( final File file, final String name ) | |||
| throws TaskException | |||
| { | |||
| // Create a ZipFileSet for this file, and pass it up. | |||
| final ZipFileSet fs = new ZipFileSet(); | |||
| fs.setDir( file.getParentFile() ); | |||
| fs.setIncludes( file.getName() ); | |||
| fs.setFullpath( name ); | |||
| addFileset( fs ); | |||
| } | |||
| /** | |||
| * Indicates if the task is adding new files into the archive as opposed to | |||
| * copying back unchanged files from the backup copy | |||
| * | |||
| * @return The AddingNewFiles value | |||
| */ | |||
| protected boolean isAddingNewFiles() | |||
| protected final boolean isAddingNewFiles() | |||
| { | |||
| return addingNewFiles; | |||
| return m_addingNewFiles; | |||
| } | |||
| /** | |||
| @@ -418,16 +427,16 @@ public class Zip extends MatchingTask | |||
| File[] files = grabFiles( scanners, fileNames ); | |||
| if( files.length == 0 ) | |||
| { | |||
| if( emptyBehavior.equals( "skip" ) ) | |||
| if( m_emptyBehavior.equals( "skip" ) ) | |||
| { | |||
| final String message = "Warning: skipping " + archiveType + " archive " + zipFile + | |||
| final String message = "Warning: skipping " + m_archiveType + " archive " + zipFile + | |||
| " because no files were included."; | |||
| getLogger().warn( message ); | |||
| return true; | |||
| } | |||
| else if( emptyBehavior.equals( "fail" ) ) | |||
| else if( m_emptyBehavior.equals( "fail" ) ) | |||
| { | |||
| throw new TaskException( "Cannot create " + archiveType + " archive " + zipFile + | |||
| throw new TaskException( "Cannot create " + m_archiveType + " archive " + zipFile + | |||
| ": no files were included." ); | |||
| } | |||
| else | |||
| @@ -597,7 +606,7 @@ public class Zip extends MatchingTask | |||
| ZipOutputStream zOut, String prefix ) | |||
| throws IOException | |||
| { | |||
| if( !doFilesonly ) | |||
| if( !m_filesonly ) | |||
| { | |||
| Stack directories = new Stack(); | |||
| int slashPos = entry.length(); | |||
| @@ -605,7 +614,7 @@ public class Zip extends MatchingTask | |||
| while( ( slashPos = entry.lastIndexOf( (int)'/', slashPos - 1 ) ) != -1 ) | |||
| { | |||
| String dir = entry.substring( 0, slashPos + 1 ); | |||
| if( addedDirs.get( prefix + dir ) != null ) | |||
| if( m_addedDirs.get( prefix + dir ) != null ) | |||
| { | |||
| break; | |||
| } | |||
| @@ -677,26 +686,6 @@ public class Zip extends MatchingTask | |||
| } | |||
| } | |||
| /** | |||
| * Do any clean up necessary to allow this instance to be used again. <p> | |||
| * | |||
| * When we get here, the Zip file has been closed and all we need to do is | |||
| * to reset some globals.</p> | |||
| */ | |||
| protected void cleanUp() | |||
| { | |||
| addedDirs = new Hashtable(); | |||
| addedFiles = new ArrayList(); | |||
| filesets = new ArrayList(); | |||
| zipFile = null; | |||
| baseDir = null; | |||
| doCompress = true; | |||
| doUpdate = false; | |||
| doFilesonly = false; | |||
| addingNewFiles = false; | |||
| encoding = null; | |||
| } | |||
| /** | |||
| * Create an empty zip file | |||
| * | |||
| @@ -709,7 +698,7 @@ public class Zip extends MatchingTask | |||
| // In this case using java.util.zip will not work | |||
| // because it does not permit a zero-entry archive. | |||
| // Must create it manually. | |||
| getLogger().info( "Note: creating empty " + archiveType + " archive " + zipFile ); | |||
| getLogger().info( "Note: creating empty " + m_archiveType + " archive " + zipFile ); | |||
| try | |||
| { | |||
| OutputStream os = new FileOutputStream( zipFile ); | |||
| @@ -749,13 +738,13 @@ public class Zip extends MatchingTask | |||
| protected void zipDir( File dir, ZipOutputStream zOut, String vPath ) | |||
| throws IOException | |||
| { | |||
| if( addedDirs.get( vPath ) != null ) | |||
| if( m_addedDirs.get( vPath ) != null ) | |||
| { | |||
| // don't add directories we've already added. | |||
| // no warning if we try, it is harmless in and of itself | |||
| return; | |||
| } | |||
| addedDirs.put( vPath, vPath ); | |||
| m_addedDirs.put( vPath, vPath ); | |||
| ZipEntry ze = new ZipEntry( vPath ); | |||
| if( dir != null && dir.exists() ) | |||
| @@ -794,7 +783,7 @@ public class Zip extends MatchingTask | |||
| * I couldn't find any documentation on this, just found out by try | |||
| * and error. | |||
| */ | |||
| if( !doCompress ) | |||
| if( !m_compress ) | |||
| { | |||
| long size = 0; | |||
| CRC32 cal = new CRC32(); | |||
| @@ -844,13 +833,13 @@ public class Zip extends MatchingTask | |||
| } | |||
| count = in.read( buffer, 0, buffer.length ); | |||
| } while( count != -1 ); | |||
| addedFiles.add( vPath ); | |||
| m_addedFiles.add( vPath ); | |||
| } | |||
| protected void zipFile( File file, ZipOutputStream zOut, String vPath ) | |||
| throws IOException, TaskException | |||
| { | |||
| if( file.equals( zipFile ) ) | |||
| if( file.equals( m_file ) ) | |||
| { | |||
| throw new TaskException( "A zip file cannot include itself" ); | |||
| } | |||
| @@ -865,17 +854,4 @@ public class Zip extends MatchingTask | |||
| fIn.close(); | |||
| } | |||
| } | |||
| /** | |||
| * Possible behaviors when there are no matching files for the task. | |||
| * | |||
| * @author RT | |||
| */ | |||
| public static class WhenEmpty extends EnumeratedAttribute | |||
| { | |||
| public String[] getValues() | |||
| { | |||
| return new String[]{"fail", "skip", "create"}; | |||
| } | |||
| } | |||
| } | |||