*/
package jalview.datamodel;
-import jalview.util.CaseInsensitiveString;
-
import java.util.Collections;
import java.util.Enumeration;
import java.util.Hashtable;
+import jalview.util.CaseInsensitiveString;
+
public class PDBEntry
{
private static final int PDB_ID_LENGTH = 4;
+ /**
+ * property set when id is a 'manufactured' identifier from the structure
+ * data's filename
+ */
private static final String FAKED_ID = "faked_pdbid";
+ /**
+ * property set when the id is authoritative, and should be used in preference
+ * to any identifiers in the structure data
+ */
+ private static final String AUTHORITATIVE_ID = "authoritative_pdbid";
+
private String file;
private String type;
{
// TODO is FILE needed; if not is this enum needed, or can we
// use FileFormatI for PDB, MMCIF?
- PDB("pdb", "pdb"), MMCIF("mmcif", "cif"), FILE("?", "?");
+ PDB("pdb", "pdb"), MMCIF("mmcif", "cif"), BCIF("bcif", "bcif"),
+ FILE("?", "?");
/*
* file extension for cached structure file; must be one that
{
}
+ /**
+ * Entry point when file is not known and fileType may be string
+ * @param pdbId
+ * @param chain may be null
+ * @param fileType "pdb", "mmcif", or "bcif"; null defaults to mmcif
+ */
+ public PDBEntry(String pdbId, String chain, String fileType) {
+ this.id = pdbId.toLowerCase();
+ setChainCode(chain); // I note that PDB Chains ARE case-sensitive now
+ if (fileType == null)
+ fileType = "mmcif";
+ switch (fileType.toLowerCase()) {
+ case "pdb":
+ this.type = Type.PDB.toString();
+ break;
+ case "mmcif":
+ this.type = Type.MMCIF.toString();
+ break;
+ default:
+ case "bcif":
+ System.out.println("format " + fileType + " has not been implemented; using mmCIF");
+ this.type = Type.MMCIF.toString();
+ break;
+ }
+ }
+
public PDBEntry(String pdbId, String chain, PDBEntry.Type type,
String filePath)
{
return id;
}
+ /**
+ * TODO
+ *
+ * @param key "protocol"
+ * @param value
+ */
public void setProperty(String key, Object value)
{
if (this.properties == null)
// this shouldn't happen, but could do if the id from the
// file is not the same as the id from the authority that provided
// the file
- if (!newEntry.fakedPDBId())
+ if (!newEntry.fakedPDBId() && !isAuthoritative())
{
return false;
} // otherwise we can update
*/
String key = newProps.nextElement();
Object value = newEntry.getProperty(key);
- if (FAKED_ID.equals(key))
+ if (FAKED_ID.equals(key) || AUTHORITATIVE_ID.equals(key))
{
// we never update the fake ID property
continue;
}
return true;
}
-
+
+ public void setAuthoritative(boolean isAuthoritative)
+ {
+ setProperty(AUTHORITATIVE_ID, Boolean.valueOf(isAuthoritative));
+ }
+
+ /**
+ *
+ * @return true if the identifier should be preferred over any identifiers
+ * embedded in the structure data
+ */
+ public boolean isAuthoritative()
+ {
+ if (_hasProperty(AUTHORITATIVE_ID))
+ {
+ return ((Boolean) getProperty(AUTHORITATIVE_ID));
+ }
+ return false;
+ }
+
/**
* set when Jalview has manufactured the ID using a local filename
+ *
* @return
*/
public boolean fakedPDBId()
}
return false;
}
+
public void setFakedPDBId(boolean faked)
{
if (faked)
{
setProperty(FAKED_ID, Boolean.TRUE);
}
- else
+ else
{
- if (properties!=null) {
+ if (properties != null)
+ {
properties.remove(FAKED_ID);
}
}