GPL
[jalview.git] / src / jalview / analysis / SeqsetUtils.java
index cdcecc0..faa08e1 100755 (executable)
@@ -1,3 +1,22 @@
+/*
+* Jalview - A Sequence Alignment Editor and Viewer
+* Copyright (C) 2005 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.analysis;
 
 import jalview.datamodel.SequenceI;
@@ -17,15 +36,73 @@ import java.util.Hashtable;
  */
 public class SeqsetUtils
 {
-  public static Hashtable uniquify(SequenceI[] sequences)
+    /**
+     * Store essential properties of a sequence in a hashtable for later recovery
+     *  Keys are Name, Start, End, SeqFeatures, PdbId
+     * @param seq SequenceI
+     * @return Hashtable
+     */
+    public static Hashtable SeqCharacterHash(SequenceI seq) {
+    Hashtable sqinfo = new Hashtable();
+    sqinfo.put("Name", seq.getName());
+    sqinfo.put("Start", new Integer(seq.getStart()));
+    sqinfo.put("End", new Integer(seq.getEnd()));
+    sqinfo.put("SeqFeatures", seq.getSequenceFeatures());
+    sqinfo.put("PdbId", (seq.getPDBId()!=null) ? seq.getPDBId() : new String("") );
+    return sqinfo;
+  }
+  /**
+   * Recover essential properties of a sequence from a hashtable
+   * TODO: replace these methods with something more elegant.
+   * @param sq SequenceI
+   * @param sqinfo Hashtable
+   * @return boolean
+   */
+  public static boolean SeqCharacterUnhash(SequenceI sq, Hashtable sqinfo) {
+    boolean namePresent = true;
+    String oldname = (String) sqinfo.get("Name");
+    Integer start = (Integer) sqinfo.get("Start");
+    Integer end = (Integer) sqinfo.get("End");
+    java.util.Vector sfeatures = (java.util.Vector) sqinfo.get("SeqFeatures");
+    String pdbid = (String) sqinfo.get("PdbId");
+    if (oldname==null)
+      namePresent = false;
+    else
+      sq.setName(oldname);
+    if (!pdbid.equals(""))
+      sq.setPDBId(pdbid);
+
+    if ((start!=null) && (end!=null)) {
+      sq.setStart(start.intValue());
+      sq.setEnd(end.intValue());
+    }
+    if (sfeatures!=null)
+      sq.setSequenceFeatures(sfeatures);
+    return namePresent;
+  }
+
+  /**
+   * Form of the unique name used in uniquify for the i'th sequence in an ordered vector of sequences.
+   * @param i int
+   * @return String
+   */
+  public static String unique_name(int i) {
+      return new String("Sequence"+i);
+  }
+
+  public static Hashtable uniquify(SequenceI[] sequences, boolean write_names)
   {
     // Generate a safely named sequence set and a hash to recover the sequence names
     Hashtable map = new Hashtable();
+    String[] un_names = new String[sequences.length];
+    if (!write_names)
+
     for (int i = 0; i < sequences.length; i++)
     {
       String safename = new String("Sequence" + i);
-      map.put(safename, sequences[i].getName());
-      sequences[i].setName(safename);
+      map.put(safename, SeqCharacterHash(sequences[i]));
+      if (write_names)
+        sequences[i].setName(safename);
     }
     return map;
   }
@@ -38,8 +115,8 @@ public class SeqsetUtils
     {
       if (map.containsKey(sequences[i].getName()))
       {
-        String unsafename = (String) map.get(sequences[i].getName());
-        sequences[i].setName(unsafename);
+        Hashtable sqinfo = (Hashtable) map.get(sequences[i].getName());
+        SeqCharacterUnhash(sequences[i], sqinfo);
       }
       else
       {