package org.archive.format.cdx;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.logging.Logger;
import org.archive.format.gzip.zipnum.ZipNumCluster;
import org.archive.format.gzip.zipnum.ZipNumParams;
import org.archive.util.iterator.CloseableIterator;
import org.archive.util.iterator.SortedCompositeIterator;
public class MultiCDXInputSource implements CDXInputSource {
private final static Logger LOGGER = Logger.getLogger(MultiCDXInputSource.class.getName());
protected List<CDXInputSource> cdx;
public List<CDXInputSource> getCdx() {
return cdx;
}
public void setCdx(List<CDXInputSource> cdx) {
this.cdx = cdx;
}
public void setCdxUris(List<String> cdxUris) throws IOException {
cdx = new ArrayList<CDXInputSource>();
for (String uri : cdxUris) {
if (uri.endsWith(".cdx") || uri.endsWith(".cdx.gz")) {
cdx.add(new CDXFile(uri));
} else if (uri.endsWith("ALL.summary") && uri.contains("/")) {
cdx.add(new ZipNumCluster(uri));
} else {
//Skipping?
}
}
}
Comparator<String> comparator = new Comparator<String>() {
public int compare(String s1, String s2) {
return s1.compareTo(s2);
}
};
public CloseableIterator<String> getCDXIterator(String key, String prefix, boolean exact, ZipNumParams params) throws IOException {
SortedCompositeIterator<String> scitr = new SortedCompositeIterator<String>(cdx.size(), comparator);
CloseableIterator<String> iter = null;
for (CDXInputSource cdxReader : cdx) {
try {
iter = cdxReader.getCDXIterator(key, prefix, exact, params);
scitr.addIterator(iter);
} catch (IOException io) {
LOGGER.warning(io.toString());
}
}
return scitr;
}
}