package org.pitest.classpath;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import org.pitest.functional.Option;
public class CompoundClassPathRoot implements ClassPathRoot,
Iterable<ClassPathRoot> {
private final List<ClassPathRoot> roots = new ArrayList<ClassPathRoot>();
public CompoundClassPathRoot(final List<ClassPathRoot> roots) {
this.roots.addAll(roots);
}
@Override
public InputStream getData(final String name) throws IOException {
for (final ClassPathRoot each : this.roots) {
final InputStream is = each.getData(name);
if (is != null) {
return is;
}
}
return null;
}
@Override
public Collection<String> classNames() {
final List<String> arrayList = new ArrayList<String>();
for (final ClassPathRoot root : this.roots) {
arrayList.addAll(root.classNames());
}
return arrayList;
}
@Override
public URL getResource(String name) throws MalformedURLException {
try {
return findRootForResource(name);
} catch (final IOException exception) {
return null;
}
}
private URL findRootForResource(final String name) throws IOException {
for (final ClassPathRoot root : this.roots) {
final URL u = root.getResource(name);
if (u != null) {
return u;
}
}
return null;
}
@Override
public Option<String> cacheLocation() {
StringBuilder classpath = new StringBuilder();
for (final ClassPathRoot each : this.roots) {
final Option<String> additional = each.cacheLocation();
for (final String path : additional) {
classpath = classpath.append(File.pathSeparator + path);
}
}
return Option.some(classpath.toString());
}
@Override
public Iterator<ClassPathRoot> iterator() {
return this.roots.iterator();
}
}