From df3d63b97cc55ee0e7d078d050775f7f58ab3c42 Mon Sep 17 00:00:00 2001 From: jprocter Date: Fri, 12 Aug 2005 14:26:15 +0000 Subject: [PATCH] fixed leafMapping bug for Id's like SequenceX (where X=14 matches all X=1,10,11,12,13). Fixes Mantis 0009227 --- src/jalview/analysis/SequenceIdMatcher.java | 44 ++++++++++++++++----------- 1 file changed, 27 insertions(+), 17 deletions(-) diff --git a/src/jalview/analysis/SequenceIdMatcher.java b/src/jalview/analysis/SequenceIdMatcher.java index 1efe498..b88a03f 100755 --- a/src/jalview/analysis/SequenceIdMatcher.java +++ b/src/jalview/analysis/SequenceIdMatcher.java @@ -26,7 +26,8 @@ import jalview.datamodel.*; *

Title:

* SequenceIdMatcher *

Description:

- * Routine which does approximate Sequence Id resolution by name using string containment rather than equivalence + * Routine which does approximate Sequence Id resolution by name using + * string containment (on word boundaries) rather than equivalence *

Copyright: Copyright (c) 2004

* *

Company: Dundee University

@@ -41,7 +42,6 @@ public class SequenceIdMatcher public SequenceIdMatcher(SequenceI[] seqs) { names = new Hashtable(); - for (int i = 0; i < seqs.length; i++) { names.put(new SeqIdName(seqs[i].getName()), seqs[i]); @@ -83,13 +83,13 @@ public class SequenceIdMatcher */ SequenceI[] findIdMatch(SequenceI[] seqs) { - SequenceI[] namedseqs = new SequenceI[seqs.length]; - + SequenceI[] namedseqs = null; int i = 0; SeqIdName nam; if (seqs.length > 0) { + namedseqs = new SequenceI[seqs.length]; do { nam = new SeqIdName(seqs[i].getName()); @@ -103,7 +103,7 @@ public class SequenceIdMatcher namedseqs[i] = null; } } - while (i++ < seqs.length); + while (++i < seqs.length); } return namedseqs; @@ -140,24 +140,34 @@ public class SequenceIdMatcher return false; } + /** + * matches if one ID properly contains another at a whitespace boundary. + * TODO: (JBPNote) These are not efficient. should use char[] for speed + * @param s SeqIdName + * @return boolean + */ public boolean equals(SeqIdName s) { - if (id.startsWith(s.id) || s.id.startsWith(id)) - { - return true; - } - - return false; + if (id.length()>s.id.length()) { + return id.startsWith(s.id) ? + (id.equals(s.id) ? true : id.startsWith(s.id+" ")) + : false; + } else + return s.id.startsWith(id) ? + (s.id.equals(id) ? true : s.id.startsWith(id+" ")) + : false; } public boolean equals(String s) { - if (id.startsWith(s) || s.startsWith(id)) - { - return true; - } - - return false; + if (id.length()>s.length()) { + return id.startsWith(s) ? + (id.equals(s) ? true : id.startsWith(s+" ")) + : false; + } else + return s.startsWith(id) ? + (s.equals(id) ? true : s.startsWith(id+" ")) + : false; } } } -- 1.7.10.2