git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@268327 13f79535-47bb-0310-9956-ffa450edef68master
@@ -73,7 +73,6 @@ public class War extends Jar { | |||
private Vector libFileSets = new Vector(); | |||
private Vector classesFileSets = new Vector(); | |||
private Vector webInfFileSets = new Vector(); | |||
private Vector locFileSets = new Vector(); | |||
public War() { | |||
super(); | |||
@@ -101,24 +100,6 @@ public class War extends Jar { | |||
webInfFileSets.addElement(fs); | |||
} | |||
/** | |||
* FileSet with an additional prefix attribute to specify the | |||
* location we want to move the files to (inside the archive). | |||
*/ | |||
public static class PrefixedFileSet extends FileSet { | |||
private String prefix = ""; | |||
public void setPrefix(String loc) { | |||
prefix = loc; | |||
} | |||
public String getPrefix() {return prefix;} | |||
} | |||
public void addPrefixedFileSet(PrefixedFileSet fs) { | |||
locFileSets.addElement(fs); | |||
} | |||
/** | |||
* Add the deployment descriptor as well as all files added the | |||
* special way of nested lib, classes or webinf filesets. | |||
@@ -138,7 +119,6 @@ public class War extends Jar { | |||
addFiles(libFileSets, zOut, "WEB-INF/lib/"); | |||
addFiles(classesFileSets, zOut, "WEB-INF/classes/"); | |||
addFiles(webInfFileSets, zOut, "WEB-INF/"); | |||
addPrefixedFiles(locFileSets, zOut); | |||
super.initZipOutputStream(zOut); | |||
} | |||
@@ -156,8 +136,7 @@ public class War extends Jar { | |||
+ 1 // web.xml | |||
+ libFileSets.size() | |||
+ classesFileSets.size() | |||
+ webInfFileSets.size() | |||
+ locFileSets.size()]; | |||
+ webInfFileSets.size()]; | |||
System.arraycopy(scanners, 0, myScanners, 0, scanners.length); | |||
@@ -172,9 +151,6 @@ public class War extends Jar { | |||
classesFileSets); | |||
addScanners(myScanners, scanners.length+1+libFileSets.size()+classesFileSets.size(), | |||
webInfFileSets); | |||
addScanners(myScanners, scanners.length + 1 + libFileSets.size() | |||
+classesFileSets.size()+webInfFileSets.size(), | |||
locFileSets); | |||
return super.isUpToDate(myScanners, zipFile); | |||
} | |||
@@ -190,49 +166,4 @@ public class War extends Jar { | |||
"(please use webxml attribute to "+archiveType+" task)", Project.MSG_WARN); | |||
} | |||
} | |||
/** | |||
* Add a DirectoryScanner for each FileSet included in fileSets to scanners | |||
* starting with index startIndex. | |||
*/ | |||
protected void addScanners(FileScanner[] scanners, int startIndex, | |||
Vector fileSets) { | |||
for (int i=0; i<fileSets.size(); i++) { | |||
FileSet fs = (FileSet) fileSets.elementAt(i); | |||
scanners[startIndex+i] = fs.getDirectoryScanner(project); | |||
} | |||
} | |||
/** | |||
* Iterate over the given Vector of filesets and add all files to the | |||
* ZipOutputStream using the given prefix. | |||
*/ | |||
protected void addFiles(Vector v, ZipOutputStream zOut, String prefix) | |||
throws IOException { | |||
for (int i=0; i<v.size(); i++) { | |||
FileSet fs = (FileSet) v.elementAt(i); | |||
DirectoryScanner ds = fs.getDirectoryScanner(project); | |||
addFiles(ds, zOut, prefix); | |||
} | |||
} | |||
/** | |||
* Iterate over the given Vector of relocatablefilesets and add | |||
* all files to the ZipOutputStream using the given prefix. | |||
*/ | |||
protected void addPrefixedFiles(Vector v, ZipOutputStream zOut) | |||
throws IOException { | |||
for (int i=0; i<v.size(); i++) { | |||
PrefixedFileSet fs = (PrefixedFileSet) v.elementAt(i); | |||
DirectoryScanner ds = fs.getDirectoryScanner(project); | |||
String prefix = fs.getPrefix(); | |||
if (prefix.length() > 0 | |||
&& !prefix.endsWith("/") | |||
&& !prefix.endsWith("\\")) { | |||
prefix += "/"; | |||
} | |||
zipDir(null, zOut, prefix); | |||
addFiles(ds, zOut, prefix); | |||
} | |||
} | |||
} |
@@ -82,6 +82,7 @@ public class Zip extends MatchingTask { | |||
protected String emptyBehavior = "skip"; | |||
private Vector filesets = new Vector (); | |||
private Hashtable addedDirs = new Hashtable(); | |||
private Vector locFileSets = new Vector(); | |||
/** | |||
* This is the name/location of where to | |||
@@ -113,6 +114,24 @@ public class Zip extends MatchingTask { | |||
filesets.addElement(set); | |||
} | |||
/** | |||
* FileSet with an additional prefix attribute to specify the | |||
* location we want to move the files to (inside the archive). | |||
*/ | |||
public static class PrefixedFileSet extends FileSet { | |||
private String prefix = ""; | |||
public void setPrefix(String loc) { | |||
prefix = loc; | |||
} | |||
public String getPrefix() {return prefix;} | |||
} | |||
public void addPrefixedFileSet(PrefixedFileSet fs) { | |||
locFileSets.addElement(fs); | |||
} | |||
/** | |||
* Sets behavior of the task when no files match. | |||
* Possible values are: <code>fail</code> (throw an exception | |||
@@ -146,9 +165,12 @@ public class Zip extends MatchingTask { | |||
FileSet fs = (FileSet) filesets.elementAt(i); | |||
dss.addElement (fs.getDirectoryScanner(project)); | |||
} | |||
FileScanner[] scanners = new FileScanner[dss.size()]; | |||
int dssSize = dss.size(); | |||
FileScanner[] scanners = new FileScanner[dssSize + locFileSets.size()]; | |||
dss.copyInto(scanners); | |||
addScanners(scanners, dssSize, locFileSets); | |||
// quick exit if the target is up to date | |||
// can also handle empty archives | |||
if (isUpToDate(scanners, zipFile)) return; | |||
@@ -164,8 +186,10 @@ public class Zip extends MatchingTask { | |||
zOut.setMethod(ZipOutputStream.STORED); | |||
} | |||
initZipOutputStream(zOut); | |||
for (int j = 0; j < scanners.length; j++) { | |||
addPrefixedFiles(locFileSets, zOut); | |||
for (int j = 0; j < dssSize; j++) { | |||
addFiles(scanners[j], zOut, ""); | |||
} | |||
} finally { | |||
@@ -183,6 +207,18 @@ public class Zip extends MatchingTask { | |||
} | |||
} | |||
/** | |||
* Add a DirectoryScanner for each FileSet included in fileSets to scanners | |||
* starting with index startIndex. | |||
*/ | |||
protected void addScanners(FileScanner[] scanners, int startIndex, | |||
Vector fileSets) { | |||
for (int i=0; i<fileSets.size(); i++) { | |||
FileSet fs = (FileSet) fileSets.elementAt(i); | |||
scanners[startIndex+i] = fs.getDirectoryScanner(project); | |||
} | |||
} | |||
/** | |||
* Add all files of the given FileScanner to the ZipOutputStream | |||
* prependig the given prefix to each filename. | |||
@@ -418,4 +454,37 @@ public class Zip extends MatchingTask { | |||
zipDir(f, zOut, prefix+dir); | |||
} | |||
} | |||
/** | |||
* Iterate over the given Vector of filesets and add all files to the | |||
* ZipOutputStream using the given prefix. | |||
*/ | |||
protected void addFiles(Vector v, ZipOutputStream zOut, String prefix) | |||
throws IOException { | |||
for (int i=0; i<v.size(); i++) { | |||
FileSet fs = (FileSet) v.elementAt(i); | |||
DirectoryScanner ds = fs.getDirectoryScanner(project); | |||
addFiles(ds, zOut, prefix); | |||
} | |||
} | |||
/** | |||
* Iterate over the given Vector of relocatablefilesets and add | |||
* all files to the ZipOutputStream using the given prefix. | |||
*/ | |||
protected void addPrefixedFiles(Vector v, ZipOutputStream zOut) | |||
throws IOException { | |||
for (int i=0; i<v.size(); i++) { | |||
PrefixedFileSet fs = (PrefixedFileSet) v.elementAt(i); | |||
DirectoryScanner ds = fs.getDirectoryScanner(project); | |||
String prefix = fs.getPrefix(); | |||
if (prefix.length() > 0 | |||
&& !prefix.endsWith("/") | |||
&& !prefix.endsWith("\\")) { | |||
prefix += "/"; | |||
} | |||
zipDir(null, zOut, prefix); | |||
addFiles(ds, zOut, prefix); | |||
} | |||
} | |||
} |