package net.jangaroo.jooc.input;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class PathInputSource extends DirectoryInputSource {
private String name;
private List<InputSource> entries;
private boolean inSourcePath;
public static PathInputSource fromFiles(List<File> files, String[] rootDirs, boolean inSourcePath) throws IOException {
List<InputSource> entries = new ArrayList<InputSource>();
StringBuilder name = new StringBuilder();
for (File file : files) {
if (file.isDirectory()) {
entries.add(new FileInputSource(file, file, inSourcePath));
} else if (file.getName().endsWith(".jar") || file.getName().endsWith(".zip")) {
entries.add(new ZipFileInputSource(file, rootDirs));
}
if (!(name.length() == 0)) {
name.append(File.pathSeparatorChar);
}
name.append(file.getAbsolutePath());
}
return new PathInputSource(name.toString(), entries, inSourcePath);
}
public PathInputSource(final String name, final List<InputSource> entries, boolean inSourcePath) {
super();
this.name = name;
this.entries = entries;
this.inSourcePath = inSourcePath;
}
@Override
public String getName() {
return name;
}
@Override
public String getPath() {
return getName();
}
@Override
public String getRelativePath() {
return "";
}
@Override
public boolean isInSourcePath() {
return inSourcePath;
}
@Override
public List<InputSource> list() {
List<InputSource> result = new ArrayList<InputSource>();
for (InputSource entry : entries) {
result.addAll(entry.list());
}
return result;
}
@Override
public InputSource getChild(final String path) {
List<InputSource> result = null;
for (InputSource entry : entries) {
final InputSource child = entry.getChild(path);
if (child != null) {
if (!child.isDirectory()) {
return child;
}
if (result == null) {
result = new ArrayList<InputSource>();
}
result.add(child);
}
}
return result == null ? null : new PathInputSource("(" + getName() + ")" + path, result, inSourcePath);
}
@Override
public char getFileSeparatorChar() {
return '/';
}
}