package org.objectstyle.woproject.ant;
import java.io.File;
import java.util.HashSet;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.DirectoryScanner;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.types.FileSet;
/**
* @author mnolte
*
*/
public class OtherClasspathSet extends FileSet {
protected File aDirectory;
protected boolean packagesOnly = false;
protected boolean embed = false;
protected boolean eclipse = false;
/**
* Constructor for OtherClasspathSet.
*/
public OtherClasspathSet() {
super();
}
public void setEclipse(boolean eclipse) {
this.eclipse = eclipse;
}
public boolean isEclipse() {
return eclipse;
}
private File[] findPackages(Project aProject, String packageDir) {
// scan directory for packages (zip or jar)
DirectoryScanner ds = new DirectoryScanner();
ds.setIncludes(new String[] { "**/*.jar", "**/*.zip" });
ds.setBasedir(getDir(aProject) + File.separator + packageDir);
ds.setCaseSensitive(true);
ds.scan();
String[] foundPackages = ds.getIncludedFiles();
int size = foundPackages.length;
File[] finalFiles = new File[size];
for (int i = 0; i < size; i++) {
finalFiles[i] = new File(getDir(aProject), foundPackages[i]);
}
return finalFiles;
}
public void collectClassPaths(Project aProject, HashSet<File> pathSet) throws BuildException {
DirectoryScanner ds = getDirectoryScanner(aProject);
String[] directories = ds.getIncludedDirectories();
String[] files = ds.getIncludedFiles();
// searching for directories or packages
for (int i = 0; i < directories.length; i++) {
if (isPackagesOnly()) {
// don't add any dirs, search for packages in this dirs instead
File[] paths = findPackages(aProject, directories[i]);
if (paths == null || paths.length == 0) {
log("No Jars in project:" + aProject + ", ignoring.", Project.MSG_VERBOSE);
continue;
}
if (getEmbed()) {
log("embed and isPackagesOnly are mutually exclusive");
continue;
}
int jsize = paths.length;
for (int k = 0; k < jsize; k++) {
pathSet.add(paths[k]);
}
} else {
File directory = new File(getDir(aProject), directories[i]);
if (directory.exists()) {
if (getEmbed()) {
pathSet.add(new File("APPROOT", directories[i]));
} else {
pathSet.add(directory);
}
}
}
}
// files must be packages - ignoring packages only flag
for (int i = 0; i < files.length; i++) {
if (!files[i].endsWith(".zip") && !files[i].endsWith(".jar")) {
log("No Jars in " + files[i] + ", ignoring.", Project.MSG_VERBOSE);
continue;
}
File packageFile = new File(getDir(aProject), files[i]);
if (packageFile.exists()) {
pathSet.add(packageFile);
}
}
}
/**
* Returns the packagesOnly.
*
* @return boolean
*/
public boolean isPackagesOnly() {
return packagesOnly;
}
@Override
public void setDir(File dir) throws BuildException {
aDirectory = dir;
super.setDir(this.aDirectory);
}
public void setRoot(File aRoot) throws BuildException {
aDirectory = aRoot;
super.setDir(this.aDirectory);
}
/**
* Sets the packagesOnly.
*
* @param packagesOnly
* The packagesOnly to set
*/
public void setPackagesOnly(boolean packagesOnly) {
this.packagesOnly = packagesOnly;
}
/**
* Sets the embed.
*
* @param embed
*/
public void setEmbed(boolean embed) {
this.embed = embed;
}
public boolean getEmbed() {
return embed;
}
}