package com.dragome.commons.compiler.classpath.serverside;
import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.jar.JarOutputStream;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.filefilter.DirectoryFileFilter;
import org.apache.commons.io.filefilter.WildcardFileFilter;
import com.dragome.commons.compiler.CopyUtils;
import com.dragome.commons.compiler.classpath.ClasspathEntry;
import com.dragome.commons.compiler.classpath.ClasspathFile;
import com.dragome.commons.compiler.classpath.ClasspathFileFilter;
import com.dragome.commons.compiler.classpath.JavaFileClasspathFile;
public class FolderClasspathEntry extends AbstractClasspathEntry implements ClasspathEntry
{
private File folder;
public FolderClasspathEntry(File folder)
{
this.folder= folder;
}
public ClasspathFile getClasspathFileOf(String relativeName)
{
File file= new File(folder, relativeName);
if (file.exists())
return new JavaFileClasspathFile(folder, relativeName);
else
return null;
}
public List<ClasspathFile> getClasspathFilesFiltering(ClasspathFileFilter classpathFilter)
{
List<ClasspathFile> files= new ArrayList<ClasspathFile>();
//TODO: it's listing only .class files, not resources?
Collection<File> listFiles= FileUtils.listFiles(folder, new WildcardFileFilter("*"), DirectoryFileFilter.DIRECTORY);
for (File file : listFiles)
{
String substring= file.toString().substring(folder.toString().length() + 1);
JavaFileClasspathFile classpathFile= new JavaFileClasspathFile(folder, substring);
if (classpathFilter == null || classpathFilter.accept(classpathFile))
files.add(classpathFile);
}
return files;
}
public static ClasspathEntry createFromPath(String classPathEntry)
{
return new FolderClasspathEntry(new File(classPathEntry));
}
// public void copyFilesToJar(JarOutputStream jos, ClasspathFileFilter classpathFileFilter)
// {
// try
// {
// CopyUtils.copyClassToJarFile(folder, jos, classpathFileFilter);
// }
// catch (Exception e)
// {
// throw new RuntimeException(e);
// }
// }
public String toString()
{
return folder.getAbsolutePath();
}
public String getName()
{
return folder.getAbsolutePath();
}
}