Merge branch 'develop' into update_212_Dec_merge_with_21125_chamges
[jalview.git] / src / jalview / datamodel / PDBEntry.java
index d0ab8bf..a966ca1 100755 (executable)
@@ -38,8 +38,18 @@ 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;
@@ -50,7 +60,8 @@ public class PDBEntry
   {
     // TODO is FILE needed; if not is this enum needed, or can we
     // use FileFormatI for PDB, MMCIF?
-    PDB("pdb", "pdb"), MMCIF("mmcif", "cif"), BCIF("bcif","bcif"),FILE("?", "?");
+    PDB("pdb", "pdb"), MMCIF("mmcif", "cif"), BCIF("bcif", "bcif"),
+    FILE("?", "?");
 
     /*
      * file extension for cached structure file; must be one that
@@ -438,7 +449,7 @@ public class PDBEntry
           // 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
@@ -506,7 +517,7 @@ public class PDBEntry
        */
       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;
@@ -518,9 +529,29 @@ public class PDBEntry
     }
     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()
@@ -531,15 +562,17 @@ public class PDBEntry
     }
     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);
       }
     }