}
/**
- * add more sequences to this matcher - also used by the constructor
+ * Adds sequences to this matcher
*
* @param seqs
*/
{
for (SequenceI seq : seqs)
{
- // TODO: deal with ID collisions - SequenceI should be appended to list
- // associated with this key.
- names.put(new SeqIdName(seq.getDisplayId(true)), seq);
- SequenceI dbseq = seq;
- while (dbseq.getDatasetSequence()!=null)
- {
- dbseq = dbseq.getDatasetSequence();
- }
- // add in any interesting identifiers
- if (dbseq.getDBRef() != null)
+ add(seq);
+ }
+ }
+
+ /**
+ * Adds one sequence to this matcher
+ *
+ * @param seq
+ */
+ public void add(SequenceI seq)
+ {
+ // TODO: deal with ID collisions - SequenceI should be appended to list
+ // associated with this key.
+ names.put(new SeqIdName(seq.getDisplayId(true)), seq);
+ SequenceI dbseq = seq;
+ while (dbseq.getDatasetSequence() != null)
+ {
+ dbseq = dbseq.getDatasetSequence();
+ }
+ // add in any interesting identifiers
+ if (dbseq.getDBRefs() != null)
+ {
+ DBRefEntry dbr[] = dbseq.getDBRefs();
+ SeqIdName sid = null;
+ for (int r = 0; r < dbr.length; r++)
{
- DBRefEntry dbr[] = dbseq.getDBRef();
- SeqIdName sid = null;
- for (int r = 0; r < dbr.length; r++)
+ sid = new SeqIdName(dbr[r].getAccessionId());
+ if (!names.containsKey(sid))
{
- sid = new SeqIdName(dbr[r].getAccessionId());
- if (!names.containsKey(sid))
- {
- names.put(sid, seq);
- }
+ names.put(sid, seq);
}
}
}
names.put(new SeqIdName(cand.getName()), cand);
int q, w, candlen = cand.getName().length();
// keep the one with an id 'closer' to the given seqnam string
- if ((q = Math.abs(matchlen - namlen)) > (w = Math.abs(candlen
- - namlen))
- && candlen > matchlen)
+ if ((q = Math.abs(matchlen - namlen)) > (w = Math
+ .abs(candlen - namlen)) && candlen > matchlen)
{
best.clear();
match = cand;
SeqIdName nam = new SeqIdName(seqnam);
List<SequenceI> m = findAllIdMatches(nam);
- if (m!=null)
+ if (m != null)
{
return m.toArray(new SequenceI[m.size()]);
}
return r;
}
- private class SeqIdName
+ class SeqIdName
{
String id;
{
if (s != null)
{
- id = new String(s);
+ id = s.toLowerCase();
}
else
{
@Override
public int hashCode()
{
- return ((id.length() >= 4) ? id.substring(0, 4).hashCode() : id
- .hashCode());
+ return ((id.length() >= 4) ? id.substring(0, 4).hashCode()
+ : id.hashCode());
}
@Override
}
if (s instanceof SeqIdName)
{
- return this.equals((SeqIdName) s);
+ return this.stringequals(((SeqIdName) s).id);
}
else
{
if (s instanceof String)
{
- return this.equals((String) s);
+ return this.stringequals(((String) s).toLowerCase());
}
}
* todo: (JBPNote) Set separator characters appropriately
*
* @param s
- * SeqIdName
* @return boolean
*/
- public boolean equals(SeqIdName s)
+ private boolean stringequals(String s)
{
- // TODO: JAL-732 patch for cases when name includes a list of IDs, and the
- // match contains one ID flanked
- if (id.length() > s.id.length())
+ if (id.length() > s.length())
{
- return id.startsWith(s.id) ? (WORD_SEP.indexOf(id.charAt(s.id
- .length())) > -1) : false;
+ return id.startsWith(s)
+ ? (WORD_SEP.indexOf(id.charAt(s.length())) > -1)
+ : false;
}
else
{
- return s.id.startsWith(id) ? (s.id.equals(id) ? true : (WORD_SEP
- .indexOf(s.id.charAt(id.length())) > -1)) : false;
+ return s.startsWith(id)
+ ? (s.equals(id) ? true
+ : (WORD_SEP.indexOf(s.charAt(id.length())) > -1))
+ : false;
}
}
- public boolean equals(String s)
+ /**
+ * toString method returns the wrapped sequence id. For debugging purposes
+ * only, behaviour not guaranteed not to change.
+ */
+ @Override
+ public String toString()
{
- if (id.length() > s.length())
- {
- return id.startsWith(s) ? (WORD_SEP.indexOf(id.charAt(s.length())) > -1)
- : false;
- }
- else
- {
- return s.startsWith(id) ? (s.equals(id) ? true : (WORD_SEP
- .indexOf(s.charAt(id.length())) > -1)) : false;
- }
+ return id;
}
}
}