X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fext%2Fparadise%2FAnnotate3D.java;h=de1d90cbdae01ac5aa4a4a7b8fbba73a4266d145;hb=290d1c0638e869b08d5f2729472197873fa06af0;hp=3930fc042d645a17d3df039a405532f1369a66c4;hpb=aced09c4feeaf3406269442c14e54abeeb4cad81;p=jalview.git diff --git a/src/jalview/ext/paradise/Annotate3D.java b/src/jalview/ext/paradise/Annotate3D.java index 3930fc0..de1d90c 100644 --- a/src/jalview/ext/paradise/Annotate3D.java +++ b/src/jalview/ext/paradise/Annotate3D.java @@ -1,6 +1,6 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2) - * Copyright (C) 2014 The Jalview Authors + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors * * This file is part of Jalview. * @@ -20,39 +20,45 @@ */ package jalview.ext.paradise; -import jalview.util.MessageManager; -import jalview.ws.HttpClientUtils; - +import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.Reader; import java.io.StringReader; import java.net.URL; import java.util.ArrayList; -import java.util.Collection; import java.util.Iterator; import java.util.List; +import java.util.Map; import org.apache.http.NameValuePair; import org.apache.http.message.BasicNameValuePair; -import org.json.simple.JSONArray; -import org.json.simple.JSONObject; -import org.json.simple.JSONStreamAware; import org.json.simple.parser.ContentHandler; import org.json.simple.parser.ParseException; +import jalview.util.JSONUtils; +import jalview.util.MessageManager; +import jalview.ws.HttpClientUtils; + /** * simple methods for calling the various paradise RNA tools * * @author jimp * - * History: v1.0 revised from original due to refactoring of - * paradise-ubmc.u-strasbg.fr/webservices/annotate3d to - * http://arn-ibmc.in2p3.fr/api/compute/2d?tool=rnaview + * @version v1.0 revised from original due to refactoring of + * paradise-ubmc.u-strasbg.fr/webservices/annotate3d to + * http://arn-ibmc.in2p3.fr/api/compute/2d?tool=rnaview
+ * See also testing URL from fjossinet:
+ * http://charn2-ibmc.u-strasbg.fr:8080/api/compute/2d
+ * If in doubt, check against the REST client at: + * https://github.com/fjossinet/RNA-Science + * -Toolbox/blob/master/pyrna/restclient.py */ public class Annotate3D { - private static String twoDtoolsURL = "http://arn-ibmc.in2p3.fr/api/compute/2d"; + // also test with + // "http://charn2-ibmc.u-strasbg.fr:8080/api/compute/2d"; + private static String twoDtoolsURL = "http://arn-ibmc.in2p3.fr/api/compute/2d?tool=rnaview"; private static ContentHandler createContentHandler() { @@ -88,8 +94,8 @@ public class Annotate3D } @Override - public boolean startObjectEntry(String key) throws ParseException, - IOException + public boolean startObjectEntry(String key) + throws ParseException, IOException { // TODO Auto-generated method stub return false; @@ -117,8 +123,8 @@ public class Annotate3D } @Override - public boolean primitive(Object value) throws ParseException, - IOException + public boolean primitive(Object value) + throws ParseException, IOException { // TODO Auto-generated method stub return false; @@ -131,14 +137,16 @@ public class Annotate3D public static Iterator getRNAMLForPDBFileAsString(String pdbfile) throws Exception { - List vals = new ArrayList(); + List vals = new ArrayList<>(); vals.add(new BasicNameValuePair("tool", "rnaview")); vals.add(new BasicNameValuePair("data", pdbfile)); vals.add(new BasicNameValuePair("output", "rnaml")); // return processJsonResponseFor(HttpClientUtils.doHttpUrlPost(twoDtoolsURL, // vals)); - ArrayList readers = new ArrayList(); - readers.add(HttpClientUtils.doHttpUrlPost(twoDtoolsURL, vals)); + ArrayList readers = new ArrayList<>(); + final BufferedReader postResponse = HttpClientUtils + .doHttpUrlPost(twoDtoolsURL, vals, 0, 0); + readers.add(postResponse); return readers.iterator(); } @@ -149,76 +157,13 @@ public class Annotate3D org.json.simple.parser.JSONParser jp = new org.json.simple.parser.JSONParser(); try { - final JSONArray responses = (JSONArray) jp.parse(respons); - final Iterator rvals = responses.iterator(); - return new Iterator() - { - @Override - public boolean hasNext() - { - return rvals.hasNext(); - } - - @Override - public Reader next() - { - JSONObject val = (JSONObject) rvals.next(); - - Object sval = null; - try - { - sval = val.get("2D"); - } catch (Exception x) - { - x.printStackTrace(); - } - ; - if (sval == null) - { - System.err - .println("DEVELOPER WARNING: Annotate3d didn't return a '2D' tag in its response. Consider checking output of server. Response was :" - + val.toString()); - - sval = ""; - } - return new StringReader( - (sval instanceof JSONObject) ? ((JSONObject) sval) - .toString() : sval.toString()); - - } - - @Override - public void remove() - { - throw new Error(MessageManager.getString("error.not_implemented_remove")); - - } - - @Override - protected Object clone() throws CloneNotSupportedException - { - throw new CloneNotSupportedException(MessageManager.getString("error.not_implemented_clone")); - } - - @Override - public boolean equals(Object obj) - { - return super.equals(obj); - } - - @Override - protected void finalize() throws Throwable - { - while (rvals.hasNext()) - { - rvals.next(); - } - super.finalize(); - } - }; + final RvalsIterator rvals = new RvalsIterator(respons); + return rvals; } catch (Exception foo) { - throw new Exception(MessageManager.getString("exception.couldnt_parse_responde_from_annotated3d_server"), foo); + throw new Exception(MessageManager.getString( + "exception.couldnt_parse_responde_from_annotated3d_server"), + foo); } } @@ -226,7 +171,7 @@ public class Annotate3D public static Iterator getRNAMLForPDBId(String pdbid) throws Exception { - List vals = new ArrayList(); + List vals = new ArrayList<>(); vals.add(new BasicNameValuePair("tool", "rnaview")); vals.add(new BasicNameValuePair("pdbid", pdbid)); vals.add(new BasicNameValuePair("output", "rnaml")); @@ -234,9 +179,97 @@ public class Annotate3D + pdbid + "&output=rnaml"); // return processJsonResponseFor(new // InputStreamReader(geturl.openStream())); - ArrayList readers = new ArrayList(); + ArrayList readers = new ArrayList<>(); readers.add(new InputStreamReader(geturl.openStream())); return readers.iterator(); } } + +class RvalsIterator implements Iterator, AutoCloseable +{ + private Iterator rvals; + + @SuppressWarnings("unchecked") + protected RvalsIterator(Reader respons) throws IOException, ParseException + { + /* + * as in 2.11.1 (pre-JalviewJS) + */ + // final JSONArray responses = (JSONArray) jp.parse(respons); + // this.rvals = responses.iterator(); + + /* + * as in JalviewJS (with comment that this code is never called) + */ + this.rvals = ((List) JSONUtils.parse(respons)).iterator(); + } + + @Override + public boolean hasNext() + { + return rvals.hasNext(); + } + + @Override + public Reader next() + { + // JSONObject val = (JSONObject) rvals.next(); // 2.11.1 + @SuppressWarnings("unchecked") + Map val = (Map) rvals.next(); + + Object sval = null; + try + { + sval = val.get("2D"); + } catch (Exception x) + { + x.printStackTrace(); + } + + if (sval == null) + { + System.err.println( + "DEVELOPER WARNING: Annotate3d didn't return a '2D' tag in its response. Consider checking output of server. Response was :" + + val.toString()); + + sval = ""; + } + // 2.11.1: + // return new StringReader( + // (sval instanceof JSONObject) ? ((JSONObject) sval).toString() + // : sval.toString()); + return new StringReader(sval.toString()); + + } + + @Override + public void remove() + { + throw new Error( + MessageManager.getString("error.not_implemented_remove")); + + } + + @Override + protected Object clone() throws CloneNotSupportedException + { + throw new CloneNotSupportedException( + MessageManager.getString("error.not_implemented_clone")); + } + + @Override + public boolean equals(Object obj) + { + return super.equals(obj); + } + + @Override + public void close() + { + while (rvals.hasNext()) + { + rvals.next(); + } + } +}