1 package jalview.ws.dbsources;
3 import jalview.datamodel.Alignment;
4 import jalview.datamodel.DBRefSource;
5 import jalview.datamodel.Sequence;
6 import jalview.ws.HttpClientUtils;
7 import jalview.ws.seqfetcher.DbSourceProxyImpl;
9 import java.io.IOException;
10 import java.util.Iterator;
11 import java.util.StringTokenizer;
13 import org.apache.http.client.ClientProtocolException;
14 import org.json.simple.JSONArray;
15 import org.json.simple.JSONObject;
16 import org.json.simple.parser.JSONParser;
18 import com.stevesoft.pat.Regex;
20 public abstract class Intermine extends DbSourceProxyImpl
22 protected int seqStart = 1;
24 protected int seqEnd = 500;
26 protected String domain = "7227";
28 protected String name = "Intermine";
30 protected String baseUrl = "";
32 protected String testQuery = "";
35 public String getDbSource()
37 return DBRefSource.INTERMINE;
41 public String getDbName()
43 return "INTERMINE_" + this.name;
47 public String getDbVersion()
54 public String getAccessionSeparator()
60 public Regex getAccessionValidator()
66 public String getTestQuery()
72 public boolean isValidReference(String accession)
77 @SuppressWarnings("unchecked")
78 public Alignment getAlignmentData(String baseUrl, String query,
79 String domain, int seqStart, int seqEnd)
82 StringTokenizer queries = new StringTokenizer(query, ";");
85 Sequence[] retrievedSeq = new Sequence[queries.countTokens()];
88 while (queries.hasMoreTokens())
90 String uniquequery = queries.nextToken();
91 String seqRef = uniquequery;
92 // StringTokenizer queryParam = new StringTokenizer(uniquequery, ":");
93 String[] queryParam = uniquequery.split(":");
94 if (queryParam.length > 1)
96 seqRef = queryParam[0];
97 String[] positions = queryParam[1].split("-");
98 if (positions.length > 1)
100 seqStart = Integer.valueOf(positions[0]);
101 seqEnd = Integer.valueOf(positions[1]);
106 String rawSequenceData = fetchData(baseUrl,
108 seqStart, seqEnd, true);
109 String rawAnnotationData = fetchData(baseUrl,
110 uniquequery, domain, seqStart, seqEnd, false);
113 String sequenceString = "";
115 // System.out.println("Sequence data: " + rawSequenceData);
116 // System.out.println("Annotation data : " + rawAnnotationData);
117 JSONParser jsonParser = new JSONParser();
118 JSONObject rawSeqJson = (JSONObject) jsonParser
119 .parse(rawSequenceData);
120 // JSONObject rawAnotJson = (JSONObject)
121 // jsonParser.parse(rawAnnotationData);
122 JSONArray rawSeqJsonArray = (JSONArray) rawSeqJson.get("features");
123 for (Iterator<JSONObject> sequenceIter = rawSeqJsonArray.iterator(); sequenceIter
126 // retrievedSeq = new Sequence[rawSeqJsonArray.size()];
127 JSONObject feature = sequenceIter.next();
128 sequenceString = feature.get("seq").toString();
129 int start = Integer.valueOf(feature.get("start").toString());
130 int end = Integer.valueOf(feature.get("end").toString());
132 retrievedSeq[count++] = new Sequence(uniquequery, sequenceString,
137 } catch (Exception e)
141 return new Alignment(retrievedSeq);
145 private static String fetchData(String baseUrl, String seqRef,
146 String domain, int start, int end, Boolean fetchRef)
147 throws ClientProtocolException, IOException
149 String resourceUrl = baseUrl + "/service/jbrowse/" + domain
150 + "/features/" + seqRef + "?start=" + start + "&end=" + end
151 + "&reference=" + fetchRef;
152 return HttpClientUtils.doHttpUrlGet(resourceUrl);