From 964f27f06912574ac9d0c65c3f741852f48e558a Mon Sep 17 00:00:00 2001 From: gmungoc Date: Fri, 19 Feb 2016 16:42:34 +0000 Subject: [PATCH] JAL-1705 lenient DBRef matcher added (accession id only) --- src/jalview/util/DBRefUtils.java | 36 +++++++++++++++++++++++++++++++++ test/jalview/util/DBRefUtilsTest.java | 26 ++++++++++++++++++++++++ 2 files changed, 62 insertions(+) diff --git a/src/jalview/util/DBRefUtils.java b/src/jalview/util/DBRefUtils.java index e7053ed..424d40b 100755 --- a/src/jalview/util/DBRefUtils.java +++ b/src/jalview/util/DBRefUtils.java @@ -169,6 +169,25 @@ public class DBRefUtils } /** + * Returns an array of those references that match the given accession id + * + * + * @param ref + * Set of references to search + * @param entry + * pattern to match + * @return + */ + public static DBRefEntry[] searchRefs(DBRefEntry[] ref, String accId) + { + return searchRefs(ref, new DBRefEntry("", "", accId), matchId); + } + + /** * Returns an array of those references that match the given entry, according * to the given comparator. Returns null if no matches. * @@ -397,6 +416,23 @@ public class DBRefUtils }; /** + * accession ID only must be identical. + */ + public static DbRefComp matchId = new DbRefComp() + { + @Override + public boolean matches(DBRefEntry refa, DBRefEntry refb) + { + if (refa.getAccessionId() != null && refb.getAccessionId() != null + && refb.getAccessionId().equals(refa.getAccessionId())) + { + return true; + } + return false; + } + }; + + /** * Parses a DBRefEntry and adds it to the sequence, also a PDBEntry if the * database is PDB. *

diff --git a/test/jalview/util/DBRefUtilsTest.java b/test/jalview/util/DBRefUtilsTest.java index e1eb2a6..371bb91 100644 --- a/test/jalview/util/DBRefUtilsTest.java +++ b/test/jalview/util/DBRefUtilsTest.java @@ -230,4 +230,30 @@ public class DBRefUtilsTest assertSame(ref1, matches[0]); assertSame(ref2, matches[1]); } + + /** + * Test the method that searches for matching references based on accession id + * only + */ + @Test(groups = { "Functional" }) + public void testSearchRefs_accessionid() + { + + DBRefEntry ref1 = new DBRefEntry("Uniprot", "1", "A1234"); // matches + DBRefEntry ref2 = new DBRefEntry("embl", "1", "A1234"); // matches + // constructor does not upper-case accession id + DBRefEntry ref3 = new DBRefEntry("EMBL", "1", "a1234"); // no match + DBRefEntry ref4 = new DBRefEntry("EMBLCDS", "1", "A1235"); // no match + // ref5 matches although it has a mapping - ignored + DBRefEntry ref5 = new DBRefEntry("EMBL", "1", "A1234"); + ref5.setMap(new Mapping(new MapList(new int[] { 1, 1 }, new int[] { 1, + 1 }, 1, 1))); + + DBRefEntry[] matches = DBRefUtils.searchRefs(new DBRefEntry[] { ref1, + ref2, ref3, ref4, ref5 }, "A1234"); + assertEquals(3, matches.length); + assertSame(ref1, matches[0]); + assertSame(ref2, matches[1]); + assertSame(ref5, matches[2]); + } } -- 1.7.10.2