@Override
public Resource retrieveResource(CaptureSearchResult result) throws ResourceNotAvailableException {
Resource r = null;
String resourceUrl = "http://" + host + ":" + port + "/" + table + "/"
+ ArchiveUtils.get14DigitDate(result.getCaptureDate()) + "/" + result.getOriginalUrl();
LOGGER.info("Fetching resource url: " + resourceUrl);
try {
PushbackInputStream pb = new PushbackInputStream(new URL(resourceUrl).openStream(), 4);
byte[] signature = new byte[4];
pb.read(signature, 0, 4);
pb.unread(signature);
if ((new String(signature)).equals("WARC")) {
WARCReader reader = (WARCReader) WARCReaderFactory.get(resourceUrl.toString(), pb, false);
r = ResourceFactory.WARCArchiveRecordToResource(reader.get(), reader);
} else {
ARCReader reader = (ARCReader) ARCReaderFactory.get(resourceUrl.toString(), pb, false);
r = ResourceFactory.ARCArchiveRecordToResource(reader.get(), reader);
}
} catch (IOException e) {
throw new ResourceNotAvailableException("Error reading " + resourceUrl);
}
if (r == null) {
throw new ResourceNotAvailableException("Unable to find: " + result.toString());
}
return r;
}