*/
package jalview.datamodel;
+import java.util.Locale;
+
import jalview.api.DBRefEntryI;
import jalview.util.DBRefUtils;
import jalview.util.MapList;
int sourceKey = Integer.MIN_VALUE;
String canonicalSourceName;
+
+ boolean isCanonicalAccession;
/*
* maps from associated sequence to the database sequence's coordinate system
*/
public DBRefEntry(String source, String version, String accessionId)
{
- this(source, version, accessionId, null);
+ this(source, version, accessionId, null,false);
}
/**
*
* @param source
+ * may not be null
+ * @param version
+ * may be null
+ * @param accessionId
+ * may be null
+ */
+ public DBRefEntry(String source, String version, String accessionId, Mapping map)
+ {
+ this(source, version, accessionId, map,false);
+ }
+ /**
+ *
+ * @param source
* canonical source (turned to uppercase; cannot be null)
* @param version
* (source dependent version string or null)
* numbering or null)
*/
public DBRefEntry(String source, String version, String accessionId,
- Mapping map)
+ Mapping map,boolean isCanonical)
{
- this.source = source.toUpperCase();
+ this.source = source.toUpperCase(Locale.ROOT);
setVersion(version);
this.accessionId = accessionId;
this.map = map;
+ this.isCanonicalAccession=isCanonical;
}
/**
: new String(entry.getVersion())),
(entry.getAccessionId() == null ? ""
: new String(entry.getAccessionId())),
- (entry.getMap() == null ? null : new Mapping(entry.getMap())));
+ (entry.getMap() == null ? null : new Mapping(entry.getMap())),entry.isCanonical());
}
@Override
return true;
}
+ boolean improved=false;
/*
* source must either match or be both null
*/
return false;
}
+ if (!isCanonicalAccession && other.isCanonical())
+ {
+ isCanonicalAccession = true;
+ improved = true;
+ }
+ else
+ {
+ if (isCanonicalAccession && !other.isCanonical())
+ {
+ // other is not an authoritative source of canonical accessions
+ return false;
+ }
+ }
/*
* if my version is null, "0" or "source:0" then replace with other version,
* otherwise the versions have to match
if (version != null && (otherVersion == null
|| !version.equalsIgnoreCase(otherVersion)))
{
- return false;
+ // FIXME: there may be a problem with old version strings not allowing
+ // updating of dbrefentries
+ return improved;
}
}
/*
- * if I have no mapping, take that of the other dbref
+ * if I have no mapping, take that of the other dbref
+ * - providing it had a version and so do I
*/
if (map == null)
{
public void setAccessionId(String accessionId)
{
this.accessionId = accessionId;
-// this.accessionId = (accessionId == null ? "" : accessionId).toUpperCase();
+// this.accessionId = (accessionId == null ? "" : accessionId).toUpperCase(Locale.ROOT);
}
/**
{
this.source = source;
-// this.source = (source == null ? "" : source).toUpperCase();
+// this.source = (source == null ? "" : source).toUpperCase(Locale.ROOT);
// this.canonicalSourceName = DBRefUtils.getCanonicalName(this.source);
// this.sourceKey = DBRefSource.getSourceKey(this.canonicalSourceName);
}
public void setVersion(String version)
{
this.version = version;
- this.ucversion = (version == null ? null : version.toUpperCase());
+ this.ucversion = (version == null ? null : version.toUpperCase(Locale.ROOT));
}
@Override
public String getCanonicalSourceName() {
return (canonicalSourceName == null ? (canonicalSourceName = DBRefUtils.getCanonicalName(this.source)) : canonicalSourceName);
}
+
+ /**
+ *
+ * @param canonical
+ */
+ public void setCanonical(boolean canonical)
+ {
+ isCanonicalAccession = canonical;
+ }
+ /**
+ *
+ * @return true if this is the primary canonical accession for the database source
+ */
+ public boolean isCanonical()
+ {
+ // TODO Auto-generated method stub
+ return isCanonicalAccession;
+ }
}