X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fdatamodel%2FDBRefEntry.java;h=66a075e8a53e1474e0d88642f5b1ae8f7cca5260;hb=7308f8601e2037183869fd33509871e8c7a2b5e7;hp=0b1fb6ddcac21154465755813c5e33d2fca895a9;hpb=9b6d2ddd33ba5e479953700040e1129847e47a06;p=jalview.git diff --git a/src/jalview/datamodel/DBRefEntry.java b/src/jalview/datamodel/DBRefEntry.java index 0b1fb6d..66a075e 100755 --- a/src/jalview/datamodel/DBRefEntry.java +++ b/src/jalview/datamodel/DBRefEntry.java @@ -37,6 +37,7 @@ public class DBRefEntry implements DBRefEntryI } + public DBRefEntry(String source, String version, String accessionId) { this(source, version, accessionId, null); @@ -63,13 +64,14 @@ public class DBRefEntry implements DBRefEntryI this.map = map; } - public DBRefEntry(DBRefEntry entry) + public DBRefEntry(DBRefEntryI entry) { - this( - (entry.source == null ? "" : new String(entry.source)), - (entry.version == null ? "" : new String(entry.version)), - (entry.accessionId == null ? "" : new String(entry.accessionId)), - (entry.map == null ? null : new Mapping(entry.map))); + this((entry.getSource() == null ? "" : new String(entry.getSource())), + (entry.getVersion() == null ? "" : new String( + entry.getVersion())), + (entry.getAccessionId() == null ? "" : new String( + entry.getAccessionId())), + (entry.getMap() == null ? null : new Mapping(entry.getMap()))); } @Override @@ -96,6 +98,82 @@ public class DBRefEntry implements DBRefEntryI } /** + * Answers true if this object is either equivalent to, or can be 'improved' + * by, the given entry. Specifically, answers true if + * + * + * @param other + * @return + */ + @Override + public boolean updateFrom(DBRefEntryI other) + { + if (other == null) + { + return false; + } + if (other == this) + { + return true; + } + + /* + * source must either match or be both null + */ + String otherSource = other.getSource(); + if ((source == null && otherSource != null) + || (source != null && otherSource == null) + || (source != null && !source.equalsIgnoreCase(otherSource))) + { + return false; + } + + /* + * accession id must either match or be both null + */ + String otherAccession = other.getAccessionId(); + if ((accessionId == null && otherAccession != null) + || (accessionId != null && otherAccession == null) + || (accessionId != null && !accessionId.equalsIgnoreCase(otherAccession))) + { + return false; + } + + /* + * if my version is null, "0" or "source:0" then replace with other version, + * otherwise the versions have to match + */ + String otherVersion = other.getVersion(); + if ((version == null || version.equals("0") || version.endsWith(":0")) + && otherVersion != null) + { + setVersion(otherVersion); + } + else + { + if (!version.equalsIgnoreCase(otherVersion)) + { + return false; + } + } + + /* + * if I have no mapping, take that of the other dbref + */ + if (map == null) + { + setMap(other.getMap()); + } + return true; + } + + /** * test for similar DBRef attributes, except for the map object. * * @param entry @@ -104,6 +182,7 @@ public class DBRefEntry implements DBRefEntryI @Override public boolean equalRef(DBRefEntryI entry) { + // TODO is this method and equals() not needed? if (entry == null) { return false; @@ -165,6 +244,7 @@ public class DBRefEntry implements DBRefEntryI } + @Override public Mapping getMap() { return map;