package jalview.ws.dbsources; import jalview.datamodel.Alignment; import jalview.datamodel.AlignmentI; import jalview.datamodel.DBRefSource; import jalview.datamodel.Sequence; import jalview.io.FormatAdapter; import jalview.io.IdentifyFile; import jalview.ws.intermine.IntermineFetchClient; import jalview.ws.seqfetcher.DbSourceProxyImpl; import java.util.Iterator; import org.json.simple.JSONArray; import org.json.simple.JSONObject; import com.stevesoft.pat.Regex; public class Intermine extends DbSourceProxyImpl // implements DbSourceProxy { @Override public String getDbSource() { return DBRefSource.INTERMINE; } @Override public String getDbName() { return "Intermine"; } @Override public String getDbVersion() { return "0"; } @Override public String getAccessionSeparator() { return null; } @Override public Regex getAccessionValidator() { return null; } @Override public String getTestQuery() { // TODO Auto-generated method stub return "http://www.flymine.org/query/service/jbrowse/7227/features/2L?start=100000&end=100200&reference=true"; } @Override public boolean isValidReference(String accession) { return false; } @SuppressWarnings("unchecked") @Override public AlignmentI getSequenceRecords(String query) throws Exception { startQuery(); String jsonString = IntermineFetchClient.fetchData(query); Sequence[] retrievedSeq = null; String sequence = ""; String name = ""; System.out.println("Found json: " + jsonString); org.json.simple.parser.JSONParser jsonParser = new org.json.simple.parser.JSONParser(); try { JSONObject jobj = (JSONObject) jsonParser.parse(jsonString); JSONArray responses = (JSONArray) jobj.get("features"); int count = 0; for (Iterator rvals = responses.iterator(); rvals .hasNext();) { retrievedSeq = new Sequence[responses.size()]; JSONObject feature = rvals.next(); // name = feature.get("name").toString(); name = "name"; sequence = feature.get("seq").toString(); int start = Integer.valueOf(feature.get("start").toString()); int end = Integer.valueOf(feature.get("end").toString()); retrievedSeq[count++] = new Sequence(name, sequence, start, end); System.out.println("Sequence : " + sequence); } } catch (Exception e) { e.printStackTrace(); } stopQuery(); return parseResult(retrievedSeq); } @Override protected Alignment parseResult(String result) throws Exception { Alignment sequences = null; String format = new IdentifyFile().Identify(result, "Paste"); if (FormatAdapter.isValidFormat(format)) { sequences = new FormatAdapter().readFile(result, "Paste", format); } return sequences; } private Alignment parseResult(Sequence[] seqs) { Alignment sequences = new Alignment(seqs); return sequences; } @Override public int getTier() { return 0; } }