package jalview.datamodel;
import jalview.api.DBRefEntryI;
-import jalview.io.vamsas.Dbref;
import jalview.util.DBRefUtils;
import jalview.util.MapList;
public class DBRefEntry implements DBRefEntryI
{
- /*
- * the mapping to chromosome (genome) is held as an instance with
- * source = speciesId
- * version = assemblyId
- * accessionId = "chromosome:" + chromosomeId
- * map = mapping from sequence to reference assembly
- */
- public static final String CHROMOSOME = "chromosome";
-
- private String source = "";
+ String source = "";
private String version = "";
int sourceKey = Integer.MIN_VALUE;
String canonicalSourceName;
+
+ boolean isCanonicalAccession;
-
- /**
+ /*
* maps from associated sequence to the database sequence's coordinate system
*/
Mapping map = null;
{
}
-/**
- *
- * @param source may not be null
- * @param version may be null
- * @param accessionId may be null
- */
+
+ /**
+ *
+ * @param source
+ * may not be null
+ * @param version
+ * may be null
+ * @param accessionId
+ * may be null
+ */
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();
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)
{
}
/**
- * Mappings to chromosome are held with accessionId as "chromosome:id"
- *
- * @return
- */
- public boolean isChromosome()
- {
- return accessionId != null && accessionId.startsWith(CHROMOSOME + ":");
- }
-
- /**
* stores the upper-case canonical name of the source for use in
* Sequence.getPrimaryDBRefs().
*
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;
+ }
}