package jalview.analysis; import java.util.Vector; import java.util.Hashtable; import jalview.datamodel.SequenceI; /** *

Title:

* SequenceIdMatcher *

Description:

* Routine which does approximate Sequence Id resolution by name using string containment rather than equivalence *

Copyright: Copyright (c) 2004

* *

Company: Dundee University

* * @author not attributable * @version 1.0 */ public class SequenceIdMatcher { private class SeqIdName { String id; SeqIdName(String s) { id = new String(s); } public int hashCode() { return (id.substring(0, 4).hashCode()); } public boolean equals(Object s) { if (s instanceof SeqIdName) { return this.equals( (SeqIdName) s); } else { if (s instanceof String) { return this.equals( (String) s); } } return false; } public boolean equals(SeqIdName s) { if (id.startsWith(s.id) || s.id.startsWith(id)) { return true; } return false; } public boolean equals(String s) { if (id.startsWith(s) || s.startsWith(id)) { return true; } return false; } } private Hashtable names; public SequenceIdMatcher(SequenceI[] seqs) { names = new Hashtable(); for (int i = 0; i < seqs.length; i++) { names.put(new SeqIdName(seqs[i].getName()), seqs[i]); } } SequenceI findIdMatch(SequenceI seq) { SeqIdName nam = new SeqIdName(seq.getName()); if (names.containsKey(nam)) { return (SequenceI) names.get(nam); } return null; } SequenceI findIdMatch(String seqnam) { SeqIdName nam = new SeqIdName(seqnam); if (names.containsKey(nam)) { return (SequenceI) names.get(nam); } return null; } /** * @method findIdMatch * * Return pointers to sequences (or sequence object containers) * which have same Id as a given set of different sequence objects * * @param seqs SequenceI[] * @return SequenceI[] */ SequenceI[] findIdMatch(SequenceI[] seqs) { SequenceI[] namedseqs = new SequenceI[seqs.length]; int i = 0; SeqIdName nam; if (seqs.length > 0) { do { nam = new SeqIdName(seqs[i].getName()); if (names.containsKey(nam)) { namedseqs[i] = (SequenceI) names.get(nam); } else { namedseqs[i] = null; } } while (i++ < seqs.length); } return namedseqs; } }