JAL-3438 spotless for 2.11.2.0
[jalview.git] / src / jalview / ext / ensembl / EnsemblSymbol.java
index 9f86731..ef79d72 100644 (file)
  */
 package jalview.ext.ensembl;
 
-import java.io.BufferedReader;
 import java.io.IOException;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 
-import org.json.simple.JSONArray;
-import org.json.simple.JSONObject;
-import org.json.simple.parser.JSONParser;
 import org.json.simple.parser.ParseException;
 
 /**
@@ -42,6 +39,10 @@ import org.json.simple.parser.ParseException;
  */
 public class EnsemblSymbol extends EnsemblXref
 {
+  private static final String GENE = "gene";
+
+  private static final String TYPE = "type";
+
   /**
    * Constructor given the target domain to fetch data from
    * 
@@ -54,45 +55,44 @@ public class EnsemblSymbol extends EnsemblXref
     super(domain, dbName, dbVersion);
   }
 
+  // /**
+  // * Returns the first "id" value in gene identifier format from the JSON
+  // * response, or null if none found
+  // *
+  // * @param br
+  // * @return
+  // * @throws IOException
+  // */
+  // @SuppressWarnings("unchecked")
+  // protected String parseSymbolResponse(BufferedReader br) throws IOException
+  // {
+  // }
+
   /**
-   * Returns the first "id" value in gene identifier format from the JSON
-   * response, or null if none found
+   * Constructs the URL for the REST symbol endpoint
    * 
-   * @param br
+   * @param id
+   *          the accession id (Ensembl or external)
+   * @param species
+   *          a species name recognisable by Ensembl
+   * @param type
+   *          an optional type to filter the response (gene, transcript,
+   *          translation)
    * @return
-   * @throws IOException
    */
-  protected String parseSymbolResponse(BufferedReader br) throws IOException
+  protected URL getUrl(String id, Species species, String... type)
   {
-    JSONParser jp = new JSONParser();
-    String result = null;
-    try
+    StringBuilder sb = new StringBuilder();
+    sb.append(getDomain()).append("/xrefs/symbol/")
+            .append(species.toString()).append("/").append(id)
+            .append(CONTENT_TYPE_JSON);
+    for (String t : type)
     {
-      JSONArray responses = (JSONArray) jp.parse(br);
-      Iterator rvals = responses.iterator();
-      while (rvals.hasNext())
-      {
-        JSONObject val = (JSONObject) rvals.next();
-        String id = val.get("id").toString();
-        if (id != null && isGeneIdentifier(id))
-        {
-          result = id;
-          break;
-        }
-      }
-    } catch (ParseException e)
-    {
-      // ignore
+      sb.append("&object_type=").append(t);
     }
-    return result;
-  }
-
-  protected URL getUrl(String id, Species species)
-  {
-    String url = getDomain() + "/xrefs/symbol/" + species.toString() + "/"
-            + id + "?content-type=application/json";
     try
     {
+      String url = sb.toString();
       return new URL(url);
     } catch (MalformedURLException e)
     {
@@ -107,50 +107,53 @@ public class EnsemblSymbol extends EnsemblXref
    * @param identifier
    * @return
    */
-  public List<String> getIds(String identifier)
+  @SuppressWarnings("unchecked")
+  public List<String> getGeneIds(String identifier)
   {
     List<String> result = new ArrayList<String>();
     List<String> ids = new ArrayList<String>();
     ids.add(identifier);
 
     String[] queries = identifier.split(getAccessionSeparator());
-    BufferedReader br = null;
     try
     {
       for (String query : queries)
       {
-        for (Species taxon : Species.values())
+        for (Species taxon : Species.getModelOrganisms())
         {
-          if (taxon.isModelOrganism())
+          String geneId = null;/// parseSymbolResponse(br);
+          try
           {
-            URL url = getUrl(query, taxon);
-            if (url != null)
-            {
-              br = getHttpResponse(url, ids);
-            }
-            String geneId = parseSymbolResponse(br);
-            if (geneId != null)
+            Iterator<Object> rvals = (Iterator<Object>) getJSON(
+                    getUrl(query, taxon, GENE), ids, -1, MODE_ITERATOR,
+                    null);
+            if (rvals == null)
+              continue;
+            while (rvals.hasNext())
             {
-              result.add(geneId);
+              Map<String, Object> val = (Map<String, Object>) rvals.next();
+              String id = val.get(JSON_ID).toString();
+              String type = val.get(TYPE).toString();
+              if (id != null && GENE.equals(type))
+              {
+                geneId = id;
+                break;
+              }
             }
+          } catch (ParseException e)
+          {
+            // ignore
+          }
+
+          if (geneId != null && !result.contains(geneId))
+          {
+            result.add(geneId);
           }
         }
       }
     } catch (IOException e)
     {
       // ignore
-    } finally
-    {
-      if (br != null)
-      {
-        try
-        {
-          br.close();
-        } catch (IOException e)
-        {
-          // ignore
-        }
-      }
     }
     return result;
   }