add parsed PDB reference to sequences
[jalview.git] / src / jalview / util / DBRefUtils.java
index d94e234..49f04cb 100755 (executable)
@@ -339,6 +339,54 @@ public class DBRefUtils
             return false;
           }
     };
+    /**
+     * used by file parsers to generate DBRefs from annotation within file (eg stockholm)
+     * @param dbname
+     * @param version
+     * @param acn
+     * @param seq where to anotate with reference
+     * @return parsed version of entry that was added to seq (if any)
+     */
+    public static DBRefEntry parseToDbRef(SequenceI seq, String dbname, String version,
+            String acn)
+    {
+      DBRefEntry ref = null;
+      if (dbname!=null)
+      {
+        String locsrc = jalview.util.DBRefUtils
+        .getCanonicalName(dbname);
+        if (locsrc.equals(jalview.datamodel.DBRefSource.PDB))
+        {
+          // check for chaincode and mapping
+          // PFAM style stockhom PDB citation
+          com.stevesoft.pat.Regex r = new com.stevesoft.pat.Regex("([0-9][0-9A-Za-z]{3})\\s*(.?)\\s*;([0-9]+)-([0-9]+)");
+          if (r.search(acn.trim()))
+          {
+            String pdbid = r.stringMatched(1);
+            String chaincode = r.stringMatched(2);
+            String mapstart = r.stringMatched(3);
+            String mapend = r.stringMatched(4);
+            if (chaincode.equals(" "))
+            {
+              chaincode = "_";
+            }
+            // construct pdb ref.
+            ref = new DBRefEntry(locsrc, version, pdbid+chaincode);
+            PDBEntry pdbr = new PDBEntry();
+            pdbr.setId(pdbid);
+            seq.addPDBId(pdbr);
+          }
+        } else {
+          // default:
+          ref = new DBRefEntry(locsrc, version, acn);
+        }
+      }
+      if (ref!=null)
+      {
+        seq.addDBRef(ref);
+      }
+      return ref;
+    }
         
           
 }