JAL-1620 version bump and release notes
[jalview.git] / src / jalview / ws / DBRefFetcher.java
index 17c1bc9..9f8fb82 100644 (file)
@@ -1,19 +1,22 @@
 /*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8)
- * Copyright (C) 2012 J Procter, AM Waterhouse, LM Lui, J Engelhardt, G Barton, M Clamp, S Searle
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2b1)
+ * Copyright (C) 2014 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.
+ * 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/>.
+ * 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.ws;
 
@@ -30,6 +33,7 @@ import jalview.gui.CutAndPasteTransfer;
 import jalview.gui.Desktop;
 import jalview.gui.IProgressIndicator;
 import jalview.gui.OOMWarning;
+import jalview.util.MessageManager;
 import jalview.ws.dbsources.das.api.jalviewSourceI;
 import jalview.ws.seqfetcher.DbSourceProxy;
 
@@ -76,6 +80,12 @@ public class DBRefFetcher implements Runnable
 
   private SequenceI[] alseqs;
 
+  /**
+   * when true - retrieved sequences will be trimmed to cover longest derived
+   * alignment sequence
+   */
+  private boolean trimDsSeqs = true;
+
   public DBRefFetcher()
   {
   }
@@ -122,6 +132,9 @@ public class DBRefFetcher implements Runnable
     this.dataset = ds;
     // TODO Jalview 2.5 lots of this code should be in the gui package!
     sfetcher = jalview.gui.SequenceFetcher.getSequenceFetcherSingleton(af);
+    // set default behaviour for transferring excess sequence data to the
+    // dataset
+    trimDsSeqs = Cache.getDefault("TRIM_FETCHED_DATASET_SEQS", true);
     if (sources == null)
     {
       // af.featureSettings_actionPerformed(null);
@@ -270,11 +283,11 @@ public class DBRefFetcher implements Runnable
   {
     if (dbSources == null)
     {
-      throw new Error("Implementation error. Must initialise dbSources");
+      throw new Error(MessageManager.getString("error.implementation_error_must_init_dbsources"));
     }
     running = true;
     long startTime = System.currentTimeMillis();
-    af.setProgressBar("Fetching db refs", startTime);
+    af.setProgressBar(MessageManager.getString("status.fetching_db_refs"), startTime);
     try
     {
       if (Cache.getDefault("DBREFFETCH_USEPICR", false))
@@ -370,7 +383,7 @@ public class DBRefFetcher implements Runnable
             if (retrieved != null)
             {
               transferReferences(sdataset, dbsource.getDbSource(),
-                      retrieved);
+                      retrieved, trimDsSeqs);
             }
           }
           else
@@ -449,17 +462,20 @@ public class DBRefFetcher implements Runnable
     } // all databases have been queries.
     if (sbuffer.length() > 0)
     {
-      output.setText("Your sequences have been verified against known sequence databases. Some of the ids have been\n"
-              + "altered, most likely the start/end residue will have been updated.\n"
-              + "Save your alignment to maintain the updated id.\n\n"
+      output.setText(MessageManager
+              .getString("label.your_sequences_have_been_verified")
               + sbuffer.toString());
-      Desktop.addInternalFrame(output, "Sequence names updated ", 600, 300);
+      Desktop.addInternalFrame(output,
+              MessageManager.getString("label.sequence_names_updated"),
+              600, 300);
       // The above is the dataset, we must now find out the index
       // of the viewed sequence
 
     }
 
-    af.setProgressBar("DBRef search completed", startTime);
+    af.setProgressBar(
+            MessageManager.getString("label.dbref_search_completed"),
+            startTime);
     // promptBeforeBlast();
 
     running = false;
@@ -470,11 +486,14 @@ public class DBRefFetcher implements Runnable
    * Verify local sequences in seqRefs against the retrieved sequence database
    * records.
    * 
+   * @param trimDatasetSeqs
+   * 
    */
   void transferReferences(Vector sdataset, String dbSource,
-          AlignmentI retrievedAl) // File
+          AlignmentI retrievedAl, boolean trimDatasetSeqs) // File
   // file)
   {
+    System.out.println("trimming ? " + trimDatasetSeqs);
     if (retrievedAl == null || retrievedAl.getHeight() == 0)
     {
       return;
@@ -568,6 +587,7 @@ public class DBRefFetcher implements Runnable
         // mappings are made (but content matches retrieved set)
         boolean updateRefFrame = sequence.getDBRef() == null
                 || sequence.getDBRef().length == 0;
+        // TODO:
         // verify sequence against the entry sequence
 
         String nonGapped = AlignSeq.extractGaps("-. ",
@@ -648,11 +668,21 @@ public class DBRefFetcher implements Runnable
         // unknownSequences.remove(sequence);
         int absEnd = absStart + nonGapped.length();
         absStart += 1;
+        if (!trimDatasetSeqs)
+        {
+          // insert full length sequence from record
+          sequence.setSequence(entry.getSequenceAsString());
+          sequence.setStart(entry.getStart());
+        }
         if (updateRefFrame)
         {
           // finally, update local sequence reference frame if we're allowed
-          sequence.setStart(absStart);
-          sequence.setEnd(absEnd);
+          if (trimDatasetSeqs)
+          {
+            // just fix start/end
+            sequence.setStart(absStart);
+            sequence.setEnd(absEnd);
+          }
           // search for alignment sequences to update coordinate frame for
           for (int alsq = 0; alsq < alseqs.length; alsq++)
           {