JAL-2679 case-insensitive comparison of query and retrieved accession
[jalview.git] / src / jalview / ext / ensembl / EnsemblFeatures.java
index 22faba9..cb6f548 100644 (file)
@@ -1,3 +1,23 @@
+/*
+ * 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 <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
 package jalview.ext.ensembl;
 
 import jalview.datamodel.Alignment;
@@ -27,6 +47,24 @@ class EnsemblFeatures extends EnsemblRestClient
   private EnsemblFeatureType[] featuresWanted = { EnsemblFeatureType.cds,
       EnsemblFeatureType.exon, EnsemblFeatureType.variation };
 
+  /**
+   * Default constructor (to use rest.ensembl.org)
+   */
+  public EnsemblFeatures()
+  {
+    super();
+  }
+
+  /**
+   * Constructor given the target domain to fetch data from
+   * 
+   * @param d
+   */
+  public EnsemblFeatures(String d)
+  {
+    super(d);
+  }
+
   @Override
   public String getDbName()
   {
@@ -44,9 +82,13 @@ class EnsemblFeatures extends EnsemblRestClient
   public AlignmentI getSequenceRecords(String query) throws IOException
   {
     // TODO: use a vararg String... for getSequenceRecords instead?
-    List<String> queries = new ArrayList<String>();
+    List<String> queries = new ArrayList<>();
     queries.add(query);
     FileParse fp = getSequenceReader(queries);
+    if (fp == null || !fp.isValid())
+    {
+      return null;
+    }
     FeaturesFile fr = new FeaturesFile(fp);
     return new Alignment(fr.getSeqsAsArray());
   }
@@ -61,16 +103,23 @@ class EnsemblFeatures extends EnsemblRestClient
   protected URL getUrl(List<String> ids) throws MalformedURLException
   {
     StringBuffer urlstring = new StringBuffer(128);
-    urlstring.append(ENSEMBL_REST).append("/overlap/id/")
-            .append(ids.get(0));
+    urlstring.append(getDomain()).append("/overlap/id/").append(ids.get(0));
 
     // @see https://github.com/Ensembl/ensembl-rest/wiki/Output-formats
     urlstring.append("?content-type=text/x-gff3");
 
     /*
+     * specify object_type=gene in case is shared by transcript and/or protein;
+     * currently only fetching features for gene sequences;
+     * refactor in future if needed to fetch for transcripts
+     */
+    urlstring.append("&").append(OBJECT_TYPE).append("=")
+            .append(OBJECT_TYPE_GENE);
+
+    /*
      * specify  features to retrieve
      * @see http://rest.ensembl.org/documentation/info/overlap_id
-     * could make the list a configurable entry in jalview.properties
+     * could make the list a configurable entry in .jalview_properties
      */
     for (EnsemblFeatureType feature : featuresWanted)
     {