+ };
+
+ /**
+ * accession ID and DB must be identical. Version is ignored. No map on both
+ * or or map but no maplist on either or maplist of map on a is equivalent to
+ * the maplist of map on b.
+ */
+ // TODO unused - remove?
+ public static DbRefComp matchDbAndIdAndEquivalentMapList = new DbRefComp()
+ {
+ @Override
+ public boolean matches(DBRefEntry refa, DBRefEntry refb, int mode)
+ {
+ if (refa.getSource() != null && refb.getSource() != null
+ && DBRefUtils.getCanonicalName(refb.getSource()).equals(
+ DBRefUtils.getCanonicalName(refa.getSource())))
+ {
+ // We dont care about version
+ // if ((refa.getVersion()==null || refb.getVersion()==null)
+ // || refb.getVersion().equals(refa.getVersion()))
+ // {
+ if (refa.getAccessionId() != null && refb.getAccessionId() != null
+ || refb.getAccessionId().equals(refa.getAccessionId()))
+ {
+ if (refa.getMap() == null && refb.getMap() == null)
+ {
+ return true;
+ }
+ if (refa.getMap() != null && refb.getMap() != null
+ && ((refb.getMap().getMap() == null
+ && refa.getMap().getMap() == null)
+ || (refb.getMap().getMap() != null
+ && refa.getMap().getMap() != null
+ && refb.getMap().getMap()
+ .equals(refa.getMap().getMap()))))
+ {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+ };
+
+ /**
+ * accession ID and DB must be identical, or null on a. Version is ignored. No
+ * map on either or map but no maplist on either or maplist of map on a is
+ * equivalent to the maplist of map on b.
+ */
+ public static DbRefComp matchDbAndIdAndEitherMapOrEquivalentMapList = new DbRefComp()
+ {
+ @Override
+ public boolean matches(DBRefEntry refa, DBRefEntry refb, int mode)
+ {
+ if (refa.getSource() != null && refb.getSource() != null
+ && DBRefUtils.getCanonicalName(refb.getSource()).equals(
+ DBRefUtils.getCanonicalName(refa.getSource())))
+ {
+ // We dont care about version
+ if (refa.getAccessionId() == null
+ || refa.getAccessionId().equals(refb.getAccessionId()))
+ {
+ if (refa.getMap() == null || refb.getMap() == null)
+ {
+ return true;
+ }
+ if ((refa.getMap() != null && refb.getMap() != null)
+ && (refb.getMap().getMap() == null
+ && refa.getMap().getMap() == null)
+ || (refb.getMap().getMap() != null
+ && refa.getMap().getMap() != null
+ && (refb.getMap().getMap()
+ .equals(refa.getMap().getMap()))))
+ {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+ };
+
+ /**
+ * Returns the (possibly empty) list of those supplied dbrefs which have the
+ * specified source database, with a case-insensitive match of source name
+ *
+ * @param dbRefs
+ * @param source
+ * @return
+ */
+ public static List<DBRefEntry> searchRefsForSource(DBRefEntry[] dbRefs,
+ String source)
+ {
+ List<DBRefEntry> matches = new ArrayList<>();
+ if (dbRefs != null && source != null)
+ {
+ for (DBRefEntry dbref : dbRefs)
+ {
+ if (source.equalsIgnoreCase(dbref.getSource()))
+ {
+ matches.add(dbref);
+ }
+ }
+ }
+ return matches;