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;
// 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
PDBEntry case9 = new PDBEntry("1xyz", "A", null, "x/y/z/File");
// different file only
PDBEntry case10 = new PDBEntry("1xyz", "A", null, "a/b/c/File");
-
+
/*
* assertEquals will invoke PDBEntry.equals()
*/
pdb2.setProperty("hello", "moon");
assertTrue(pdb1.updateFrom(pdb2));
assertEquals(pdb1.getProperty("hello"), "moon");
+
+ /*
+ * different id but authoritative
+ */
+ pdb1 = new PDBEntry("af:1xyz", "A", null, "a/b/c/File");
+ pdb2 = new PDBEntry("af-1xyz", "A", null, "a/b/c/File");
+ pdb1.setAuthoritative(true);
+
+ assertTrue(pdb1.isAuthoritative());
+ assertFalse(pdb2.isAuthoritative());
+ // can update pdb1 (authoritative) from pdb2 (non-authoritative)
+ assertTrue(pdb1.updateFrom(pdb2));
+ // but the ID must remain the same
+ assertEquals(pdb1.getId(),"af:1xyz");
+
}
@Test(groups = { "Functional" })