use OOMwarning to warn user when out of Memory occurs
[jalview.git] / src / jalview / datamodel / SeqCigar.java
index c896555..da8fada 100644 (file)
@@ -1,23 +1,25 @@
 /*
- * Jalview - A Sequence Alignment Editor and Viewer
- * Copyright (C) 2007 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle
- *
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.4)
+ * Copyright (C) 2008 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle
+ * 
  * This program 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 2
  * of the License, or (at your option) any later version.
- *
+ * 
  * This program 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 this program; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
  */
 package jalview.datamodel;
 
+import java.util.Hashtable;
+
 import jalview.analysis.*;
 import jalview.util.*;
 
@@ -29,6 +31,7 @@ public class SeqCigar
    */
   private int start, end;
   private SequenceI refseq = null;
+  private Hashtable seqProps;
   /**
    * Reference dataset sequence for the cigar string
    * @return SequenceI
@@ -91,9 +94,20 @@ public class SeqCigar
                        refseq.getStart() + start + bounds[0],
                        refseq.getStart() + start +
                        ( (bounds[2] == 0) ? -1 : bounds[2]));
+    seq.setDescription(refseq.getDescription());
+    int sstart = seq.getStart(),
+      send = seq.getEnd();
     // seq.checkValidRange(); probably not needed
+    // recover local properties if present 
+    if (seqProps!=null)
+    {
+      // this recovers dataset sequence reference as well as local features, names, start/end settings.
+      SeqsetUtils.SeqCharacterUnhash(seq, seqProps);
+    }
+    // ensure dataset sequence is up to date from local reference 
     seq.setDatasetSequence(refseq);
-    seq.setDescription(refseq.getDescription());
+    seq.setStart(sstart);
+    seq.setEnd(send);
     return seq;
   }
 
@@ -182,8 +196,9 @@ public class SeqCigar
       hasgaps = true;
     }
 
-    this.refseq = ds;
-
+    refseq = ds;
+    // copy over local properties for the sequence instance of the refseq
+    seqProps = SeqsetUtils.SeqCharacterHash(seq);
     // Check  offsets
     if (end > ds.getLength())
     {