+
+ /**
+ * 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()));
+ if (seq.getDescription() != null)
+ {
+ sqinfo.put("Description", seq.getDescription());
+ }
+ Vector sfeat = new Vector();
+ jalview.datamodel.SequenceFeature[] sfarray = seq.getSequenceFeatures();
+ if (sfarray != null && sfarray.length > 0)
+ {
+ for (int i = 0; i < sfarray.length; i++)
+ {
+ sfeat.add(sfarray[i]);
+ }
+ }
+ sqinfo.put("SeqFeatures", sfeat);
+ sqinfo.put("PdbId",
+ (seq.getPDBId() != null) ? seq.getPDBId() : new Vector());
+ sqinfo.put("datasetSequence",
+ (seq.getDatasetSequence() != null) ? seq.getDatasetSequence() :
+ new Sequence("THISISAPLACEHOLDER", ""));
+ 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 true if name was not updated from sqinfo Name entry
+ */
+ public static boolean SeqCharacterUnhash(SequenceI sq, Hashtable sqinfo)
+ {
+ boolean namePresent = true;
+ if (sqinfo == null)
+ {
+ return false;
+ }
+ String oldname = (String) sqinfo.get("Name");
+ Integer start = (Integer) sqinfo.get("Start");
+ Integer end = (Integer) sqinfo.get("End");
+ Vector sfeatures = (Vector) sqinfo.get(
+ "SeqFeatures");
+ Vector pdbid = (Vector) sqinfo.get("PdbId");
+ String description = (String) sqinfo.get("Description");
+ Sequence seqds = (Sequence) sqinfo.get("datasetSequence");
+ if (oldname == null)
+ {
+ namePresent = false;
+ }
+ else
+ {
+ sq.setName(oldname);
+ }
+ if (pdbid != null && pdbid.size() > 0)
+ {
+ sq.setPDBId(pdbid);
+ }
+
+ if ( (start != null) && (end != null))
+ {
+ sq.setStart(start.intValue());
+ sq.setEnd(end.intValue());
+ }
+
+ if ( (sfeatures != null) && (sfeatures.size() > 0))
+ {
+ SequenceFeature[] sfarray = (SequenceFeature[]) sfeatures.toArray();
+ sq.setSequenceFeatures(sfarray);
+ }
+ if (description != null)
+ {
+ sq.setDescription(description);
+ }
+ if ( (seqds != null) &&
+ ! (seqds.getName().equals("THISISAPLACEHOLDER") &&
+ seqds.getLength() == 0))
+ {
+ sq.setDatasetSequence(seqds);
+ }
+
+ 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);
+ }
+
+ /**
+ * Generates a hash of SeqCharacterHash properties for each sequence
+ * in a sequence set, and optionally renames the sequences to an
+ * unambiguous 'safe' name.
+ * @param sequences SequenceI[]
+ * @param write_names boolean set this to rename each of the sequences to its unique_name(index) name
+ * @return Hashtable to be passed to @see deuniquify to recover original names (and properties) for renamed sequences
+ */
+ public static Hashtable uniquify(SequenceI[] sequences, boolean write_names)