Moved tree leafname to alignment set matching into SequenceIdMatcher class for
[jalview.git] / src / jalview / analysis / SequenceIdMatcher.java
1 package jalview.analysis;
2
3 import java.util.Vector;
4 import java.util.Hashtable;
5 import jalview.datamodel.SequenceI;
6
7 /**
8  * <p>Title: </p>
9  * SequenceIdMatcher
10  * <p>Description: </p>
11  * Routine which does approximate Sequence Id resolution by name using string containment rather than equivalence
12  * <p>Copyright: Copyright (c) 2004</p>
13  *
14  * <p>Company: Dundee University</p>
15  *
16  * @author not attributable
17  * @version 1.0
18  */
19 public class SequenceIdMatcher
20 {
21
22   private class SeqIdName
23   {
24     String id;
25
26     SeqIdName(String s)
27     {
28       id = new String(s);
29     }
30
31     public int hashCode()
32     {
33       return (id.substring(0, 4).hashCode());
34     }
35
36     public boolean equals(Object s)
37     {
38       if (s instanceof SeqIdName)
39       {
40         return this.equals( (SeqIdName) s);
41       }
42       else
43       {
44         if (s instanceof String)
45         {
46           return this.equals( (String) s);
47         }
48       }
49       return false;
50     }
51
52     public boolean equals(SeqIdName s)
53     {
54       if (id.startsWith(s.id) || s.id.startsWith(id))
55       {
56         return true;
57       }
58       return false;
59     }
60
61     public boolean equals(String s)
62     {
63       if (id.startsWith(s) || s.startsWith(id))
64       {
65         return true;
66       }
67       return false;
68     }
69   }
70
71   private Hashtable names;
72
73   public SequenceIdMatcher(SequenceI[] seqs)
74   {
75     names = new Hashtable();
76     for (int i = 0; i < seqs.length; i++)
77     {
78       names.put(new SeqIdName(seqs[i].getName()), seqs[i]);
79     }
80   }
81
82   SequenceI findIdMatch(SequenceI seq)
83   {
84     SeqIdName nam = new SeqIdName(seq.getName());
85     if (names.containsKey(nam))
86     {
87       return (SequenceI) names.get(nam);
88     }
89     return null;
90   }
91
92   SequenceI findIdMatch(String seqnam)
93   {
94     SeqIdName nam = new SeqIdName(seqnam);
95     if (names.containsKey(nam))
96     {
97       return (SequenceI) names.get(nam);
98     }
99     return null;
100   }
101
102   /**
103    * @method findIdMatch
104    *
105    * Return pointers to sequences (or sequence object containers)
106    * which have same Id as a given set of different sequence objects
107    *
108    * @param seqs SequenceI[]
109    * @return SequenceI[]
110    */
111
112   SequenceI[] findIdMatch(SequenceI[] seqs)
113   {
114     SequenceI[] namedseqs = new SequenceI[seqs.length];
115
116     int i = 0;
117     SeqIdName nam;
118     if (seqs.length > 0)
119     {
120       do
121       {
122         nam = new SeqIdName(seqs[i].getName());
123         if (names.containsKey(nam))
124         {
125           namedseqs[i] = (SequenceI) names.get(nam);
126         }
127         else
128         {
129           namedseqs[i] = null;
130         }
131       }
132       while (i++ < seqs.length);
133     }
134     return namedseqs;
135   }
136
137 }