X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fjalview%2Fext%2Fensembl%2FEnsemblMap.java;h=f2ab1956a49712df9c162b4c3651c18b7d7f2e74;hb=80720b941dbf0fc9c1f036f6a4efa5b3b40a0bdc;hp=05cc8977701c2293a1e792e8ae5949547d7990da;hpb=a774a016b6c07368e9e99d4568199f768a77d42f;p=jalview.git
diff --git a/src/jalview/ext/ensembl/EnsemblMap.java b/src/jalview/ext/ensembl/EnsemblMap.java
index 05cc897..f2ab195 100644
--- a/src/jalview/ext/ensembl/EnsemblMap.java
+++ b/src/jalview/ext/ensembl/EnsemblMap.java
@@ -1,22 +1,64 @@
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
+ *
+ * This file is part of Jalview.
+ *
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * Jalview is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview. If not, see .
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
package jalview.ext.ensembl;
import jalview.datamodel.AlignmentI;
import jalview.datamodel.DBRefSource;
+import jalview.datamodel.GeneLociI;
+import jalview.datamodel.GeneLocus;
+import jalview.datamodel.Mapping;
+import jalview.util.MapList;
-import java.io.BufferedReader;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collections;
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;
+/**
+ * A client for the Ensembl REST service /map endpoint, to convert from
+ * coordinates of one genome assembly to another.
+ *
+ * Note that species and assembly identifiers passed to this class must be valid
+ * in Ensembl. They are not case sensitive.
+ *
+ * @author gmcarstairs
+ * @see https://rest.ensembl.org/documentation/info/assembly_map
+ * @see https://rest.ensembl.org/info/assembly/human?content-type=text/xml
+ * @see https://rest.ensembl.org/info/species?content-type=text/xml
+ */
public class EnsemblMap extends EnsemblRestClient
{
+ private static final String MAPPED = "mapped";
+
+ private static final String MAPPINGS = "mappings";
+
+ private static final String CDS = "cds";
+
+ private static final String CDNA = "cdna";
/**
* Default constructor (to use rest.ensembl.org)
@@ -62,8 +104,8 @@ public class EnsemblMap extends EnsemblRestClient
* @return
* @throws MalformedURLException
*/
- protected URL getUrl(String species, String chromosome, String fromRef,
- String toRef, int startPos, int endPos)
+ protected URL getAssemblyMapUrl(String species, String chromosome,
+ String fromRef, String toRef, int startPos, int endPos)
throws MalformedURLException
{
/*
@@ -77,13 +119,7 @@ public class EnsemblMap extends EnsemblRestClient
"%s/map/%s/%s/%s:%d..%d:%s/%s?content-type=application/json",
getDomain(), species, fromRef, chromosome, start, end, strand,
toRef);
- try
- {
- return new URL(url);
- } catch (MalformedURLException e)
- {
- return null;
- }
+ return new URL(url);
}
@Override
@@ -93,36 +129,32 @@ public class EnsemblMap extends EnsemblRestClient
}
@Override
- protected String getRequestMimeType(boolean multipleIds)
- {
- return "application/json";
- }
-
- @Override
- protected String getResponseMimeType()
- {
- return "application/json";
- }
-
- @Override
protected URL getUrl(List ids) throws MalformedURLException
{
return null; // not used
}
- public int[] getMapping(String species, String chromosome,
+ /**
+ * Calls the REST /map service to get the chromosomal coordinates (start/end)
+ * in 'toRef' that corresponding to the (start/end) queryRange in 'fromRef'
+ *
+ * @param species
+ * @param chromosome
+ * @param fromRef
+ * @param toRef
+ * @param queryRange
+ * @return
+ * @see http://rest.ensemblgenomes.org/documentation/info/assembly_map
+ */
+ public int[] getAssemblyMapping(String species, String chromosome,
String fromRef, String toRef, int[] queryRange)
{
URL url = null;
- BufferedReader br = null;
-
try
{
- url = getUrl(species, chromosome, fromRef, toRef, queryRange[0],
- queryRange[1]);
- // System.out.println("Calling " + url);
- br = getHttpResponse(url, null);
- return (parseResponse(br));
+ url = getAssemblyMapUrl(species, chromosome, fromRef, toRef,
+ queryRange[0], queryRange[1]);
+ return (parseAssemblyMappingResponse(url));
} catch (Throwable t)
{
System.out.println("Error calling " + url + ": " + t.getMessage());
@@ -131,8 +163,8 @@ public class EnsemblMap extends EnsemblRestClient
}
/**
- * Parses the JSON response from the /map REST service. The format is (with
- * some fields omitted)
+ * Parses the JSON response from the /map/<species>/ REST service. The
+ * format is (with some fields omitted)
*
*