package org.jboss.seam.tool;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Task;
import org.apache.tools.ant.types.Path;
/**
* @author Pete Muir
*
*/
public class EclipseClasspathTask extends Task
{
private String file;
private String toFile;
private String filterProperty;
private List<Path> paths = new ArrayList<Path>();
@Override
public void execute() throws BuildException
{
Path uberPath = new Path(getProject());
for (Path path : paths)
{
uberPath.add(path);
}
String eclipsepaths = "";
for (String path : uberPath.list())
{
// avoid placing modules on classpath
if (!path.contains("jboss-seam"))
{
String sourcePath = path.substring(0, path.lastIndexOf(".jar")) + "-sources.jar";
String javadocPath = path.substring(0, path.lastIndexOf(".jar")) + "-javadoc.jar";
String eclipsepath = "\t<classpathentry kind=\"lib\" path=\""
+ path + "\"";
if (new File(sourcePath).exists())
{
eclipsepath += " sourcepath=\"" + sourcePath + "\"";
}
if (new File(javadocPath).exists())
{
eclipsepath += ">\r\n";
eclipsepath += "\t\t<attributes>\n";
eclipsepath += "\t\t\t<attribute name=\"javadoc_location\" value=\"jar:file:" + javadocPath + "!/\"/>\n";
eclipsepath += "\t\t</attributes>\n";
eclipsepath += "\t</classpathentry>\n";
}
else
{
eclipsepath += "/>\r\n";
}
eclipsepaths += eclipsepath;
}
}
try
{
BufferedReader reader = new BufferedReader(new FileReader(new File(
file)));
BufferedWriter writer = new BufferedWriter(new FileWriter(new File(
toFile)));
while (reader.ready())
{
String line = reader.readLine();
if (line.contains(filterProperty))
{
line = line.replace("@" + filterProperty + "@", eclipsepaths);
}
writer.write(line + "\r\n");
}
writer.flush();
writer.close();
} catch (IOException e)
{
throw new BuildException(e);
}
}
/**
* @param file the file to set
*/
public void setFile(String file)
{
this.file = file;
}
/**
* @param toFile the toFile to set
*/
public void setToFile(String toFile)
{
this.toFile = toFile;
}
/**
* @param filterProperty the filterProperty to set
*/
public void setFilterProperty(String filterProperty)
{
this.filterProperty = filterProperty;
}
public void addPath(Path path)
{
paths.add(path);
}
}