*/
public static DBRefEntry[] searchRefs(DBRefEntry[] ref, DBRefEntry entry)
{
+ return searchRefs(ref, entry, matchDbAndIdAndEitherMapOrEquivalentMapList);
+ }
+ public static DBRefEntry[] searchRefs(DBRefEntry[] ref, DBRefEntry entry, DbRefComp comparator)
+ {
if (ref==null || entry==null)
return null;
Vector rfs = new Vector();
for (int i=0; i<ref.length;i++)
{
- if (entry.getSource()==null || ref[i].getSource().equals(entry.getSource()))
+ if (comparator.matches(entry, ref[i]))
{
- if (entry.getVersion()==null || ref[i].getVersion().equals(entry.getVersion()))
- {
- if (entry.getAccessionId()==null || ref[i].getAccessionId().equals(entry.getAccessionId()))
- {
- if (entry.getMap()==null || (ref[i].getMap()!=null && ref[i].getMap().equals(entry.getMap())))
- {
rfs.addElement(ref[i]);
- }
- }
- }
}
}
// TODO Auto-generated method stub
}
return null;
}
+ public interface DbRefComp {
+ public boolean matches(DBRefEntry refa, DBRefEntry refb);
+ }
+ public static DbRefComp matchNonNullonA = new DbRefComp()
+ {
+ public boolean matches(DBRefEntry refa, DBRefEntry refb)
+ {
+ if (refa.getSource()==null || refb.getSource().equals(refa.getSource()))
+ {
+ if (refa.getVersion()==null || refb.getVersion().equals(refa.getVersion()))
+ {
+ if (refa.getAccessionId()==null || refb.getAccessionId().equals(refa.getAccessionId()))
+ {
+ if (refa.getMap()==null || (refb.getMap()!=null && refb.getMap().equals(refa.getMap())))
+ {
+ return true;
+ }
+ }
+ }
+ }
+ return false;
+ }
+ };
+ /**
+ * either field is null or field matches for all of source, version, accession id and map.
+ */
+ public static DbRefComp matchEitherNonNull = new DbRefComp()
+ {
+ public boolean matches(DBRefEntry refa, DBRefEntry refb)
+ {
+ if ((refa.getSource()==null || refb.getSource()==null)
+ || refb.getSource().equals(refa.getSource()))
+ {
+ 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)
+ || (refb.getMap()!=null && refb.getMap().equals(refa.getMap())))
+ {
+ return true;
+ }
+ }
+ }
+ }
+ return false;
+ }
+ };
+ /**
+ * accession ID and DB must be identical. Version is ignored. Map is either not defined or is a match (or is compatible?)
+ */
+ public static DbRefComp matchDbAndIdAndEitherMap = new DbRefComp()
+ {
+ public boolean matches(DBRefEntry refa, DBRefEntry refb)
+ {
+ if (refa.getSource()!=null && refb.getSource()!=null
+ && refb.getSource().equals(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)
+ || (refa.getMap()!=null && refb.getMap()!=null && refb.getMap().equals(refa.getMap())))
+ {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+ };
+ /**
+ * accession ID and DB must be identical. Version is ignored.
+ * No map on either or map but no maplist on either or maplist of map on a is the complement of maplist of map on b.
+ */
+ public static DbRefComp matchDbAndIdAndComplementaryMapList = new DbRefComp()
+ {
+ public boolean matches(DBRefEntry refa, DBRefEntry refb)
+ {
+ if (refa.getSource()!=null && refb.getSource()!=null
+ && refb.getSource().equals(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)
+ || (refa.getMap()!=null && refb.getMap()!=null))
+ if ((refb.getMap().getMap()==null && refa.getMap().getMap()==null)
+ || (refb.getMap().getMap()!=null && refa.getMap().getMap()!=null
+ && refb.getMap().getMap().getInverse().equals(refa.getMap().getMap())))
+ {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+ };
+ /**
+ * 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.
+ */
+ public static DbRefComp matchDbAndIdAndEquivalentMapList = new DbRefComp()
+ {
+ public boolean matches(DBRefEntry refa, DBRefEntry refb)
+ {
+ if (refa.getSource()!=null && refb.getSource()!=null
+ && refb.getSource().equals(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. 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()
+ {
+ public boolean matches(DBRefEntry refa, DBRefEntry refb)
+ {
+ if (refa.getSource()!=null && refb.getSource()!=null
+ && refb.getSource().equals(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;
+ }
+ };
+
+
}