package com.oculusinfo.annotation.io.impl;
import com.oculusinfo.annotation.AnnotationData;
import com.oculusinfo.annotation.io.AnnotationIO;
import com.oculusinfo.annotation.io.serialization.AnnotationSerializer;
import com.oculusinfo.binning.io.PyramidIO;
import com.oculusinfo.factory.util.Pair;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import sun.reflect.generics.reflectiveObjects.NotImplementedException;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.LinkedList;
import java.util.List;
public class UrlAnnotationSource implements AnnotationSource {
private final Logger LOGGER = LoggerFactory.getLogger(getClass());
private String _rootPath;
private String _extension;
public UrlAnnotationSource (String rootPath, String extension){
_rootPath = rootPath;
_extension = extension;
}
@Override
public void initializeForRead(String host) {}
@Override
public List<AnnotationData<?>> readData (String basePath,
AnnotationSerializer serializer,
Iterable<Pair<String, Long>> certificates) throws IOException {
List<AnnotationData<?>> results = new LinkedList<>();
for (Pair<String, Long> certificate: certificates) {
if (certificate == null) {
continue;
}
String location = String.format(
"http://%s/" + FileSystemAnnotationSource.ANNOTATIONS_FOLDERNAME + "/%s." + _extension,
_rootPath + "/" + basePath, certificate.getFirst());
InputStream stream = null;
try {
stream = new URL(location).openStream();
AnnotationData<?> data = serializer.deserialize(stream);
results.add(data);
} catch (MalformedURLException e){
LOGGER.error("Malformed URL supplied", e);
return results;
} catch (IOException e){
LOGGER.error("Unable to open URL stream", e);
return results;
}
if (stream != null) {
stream.close();
}
}
return results;
}
@Override
public void initializeForWrite(String tableName) throws IOException {
throw new UnsupportedOperationException();
}
@Override
public void writeData(String id, AnnotationSerializer serializer, Iterable<AnnotationData<?>> data) throws IOException {
throw new UnsupportedOperationException();
}
@Override
public void removeData(String id, Iterable<Pair<String, Long>> data) throws IOException {
throw new UnsupportedOperationException();
}
}