+ }
+ }
+ 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*;\\s*([0-9]+)-([0-9]+)");
+ if (r.search(acn.trim()))
+ {
+ String pdbid = r.stringMatched(1);
+ String chaincode = r.stringMatched(2);
+ if (chaincode==null)
+ {
+ chaincode = " ";
+ }
+ 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);
+ pdbr.setProperty(new Hashtable());
+ pdbr.getProperty().put("CHAIN", chaincode);
+ seq.addPDBId(pdbr);
+ } else {
+ System.err.println("Malformed PDB DR line:"+acn);
+ }
+ }
+ else
+ {
+ // default:
+ ref = new DBRefEntry(locsrc, version, acn);
+ }
+ }
+ if (ref != null)
+ {
+ seq.addDBRef(ref);
+ }
+ return ref;
+ }
+