package org.genedb.crawl.elasticsearch.index.das; import java.math.BigInteger; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.List; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Unmarshaller; import org.apache.log4j.Logger; import uk.ac.ebi.das.jdas.adapters.features.DasGFFAdapter; import uk.ac.ebi.das.jdas.adapters.features.FeatureAdapter; import uk.ac.ebi.das.jdas.adapters.sequence.DasSequenceAdapter; import uk.ac.ebi.das.jdas.client.FeaturesClient; import uk.ac.ebi.das.jdas.client.SequenceClient; import uk.ac.ebi.das.jdas.exceptions.ValidationException; import uk.ac.ebi.das.jdas.schema.entryPoints.DASEP; import uk.ac.ebi.das.jdas.schema.entryPoints.ENTRYPOINTS; import uk.ac.ebi.das.jdas.schema.entryPoints.SEGMENT; import uk.ac.ebi.das.jdas.schema.sequence.DASSEQUENCE; import uk.ac.ebi.das.jdas.schema.sequence.SEQUENCE; public class DasFetcher { private static Logger logger = Logger.getLogger(DasFetcher.class); public URL url; public String source; public DasFetcher(URL url, String source) { this.url = url; this.source = source; } public List<SEGMENT> getEntryPoints() throws MalformedURLException, JAXBException { DASEP dasEP = DASEP(getSourceURL()); ENTRYPOINTS entryPoints = dasEP.getENTRYPOINTS(); List<SEGMENT> segments = new ArrayList<SEGMENT>(); for (Object segmentObject : entryPoints.getContent()) { try { uk.ac.ebi.das.jdas.schema.entryPoints.SEGMENT segment = (uk.ac.ebi.das.jdas.schema.entryPoints.SEGMENT) segmentObject; segments.add(segment); logger.debug(String.format("ID %s - %d %d", segment.getId(), segment.getStart(),segment.getStop())); } catch (Exception e){ logger.warn(e.getMessage()); } } return segments; } public String getSequence(SEGMENT segment, BigInteger bigInteger, BigInteger bigInteger2) throws MalformedURLException, JAXBException { String query = String.format("%s:%d-%d", segment.getId(), bigInteger, bigInteger2); logger.debug(query); SequenceClient sequenceClient = new SequenceClient(); List<String> segments = new ArrayList<String>(); segments.add(query); DasSequenceAdapter dasSequenceAdaptor = sequenceClient.fetchData(getSourceURL(), segments); return (String) dasSequenceAdaptor.getSequence().get(0).getContent(); } public List<FeatureAdapter> getFeatures(SEGMENT segment, BigInteger bigInteger, BigInteger bigInteger2) throws MalformedURLException, JAXBException, ValidationException { String query = String.format("%s:%d-%d", segment.getId(), bigInteger, bigInteger2); logger.debug(query); FeaturesClient featuresClient = new FeaturesClient(); List<String> segments = new ArrayList<String>(); segments.add(query); DasGFFAdapter dasGFF = featuresClient.fetchData(getSourceURL(), segments); DasGFFAdapter.SegmentAdapter segmentAdaptor = dasGFF.getGFF().getSegment().get(0); return segmentAdaptor.getFeature(); } private String getServerURL() { return url.toString(); } private String getSourceURL() { return url.toString() + "/" + source.toString(); } private static DASEP DASEP(String serverURL) throws JAXBException, MalformedURLException { JAXBContext jc = JAXBContext.newInstance("uk.ac.ebi.das.jdas.schema.entryPoints"); Unmarshaller unmarshaller = jc.createUnmarshaller(); String url = serverURL + "/entry_points"; return (DASEP) unmarshaller.unmarshal(new URL(url)); } }