JAL-1517 update copyright to version 2.8.2
[jalview.git] / src / jalview / ws / dbsources / Pdb.java
index 3dff679..b28ce8a 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.0b1)
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2)
  * Copyright (C) 2014 The Jalview Authors
  * 
  * This file is part of Jalview.
@@ -21,8 +21,11 @@ package jalview.ws.dbsources;
 import jalview.datamodel.Alignment;
 import jalview.datamodel.DBRefEntry;
 import jalview.datamodel.DBRefSource;
+import jalview.datamodel.PDBEntry;
 import jalview.datamodel.SequenceI;
 
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Vector;
 
 import MCview.PDBChain;
@@ -31,6 +34,7 @@ import MCview.PDBfile;
 import com.stevesoft.pat.Regex;
 
 import jalview.datamodel.AlignmentI;
+import jalview.io.FormatAdapter;
 import jalview.ws.ebi.EBIFetchClient;
 import jalview.ws.seqfetcher.DbSourceProxy;
 
@@ -94,7 +98,7 @@ public class Pdb extends EbiFileRetrievedProxy implements DbSourceProxy
    */
   public AlignmentI getSequenceRecords(String queries) throws Exception
   {
-
+    AlignmentI pdbfile = null;
     Vector result = new Vector();
     String chain = null;
     String id = null;
@@ -128,62 +132,78 @@ public class Pdb extends EbiFileRetrievedProxy implements DbSourceProxy
     try
     {
 
-      PDBfile pdbfile = new PDBfile(file,
-              jalview.io.AppletFormatAdapter.FILE);
-      for (int i = 0; i < pdbfile.chains.size(); i++)
+      pdbfile = new FormatAdapter().readFile(file,
+              jalview.io.AppletFormatAdapter.FILE, "PDB");
+      if (pdbfile != null)
       {
-        if (chain == null
-                || ((PDBChain) pdbfile.chains.elementAt(i)).id
-                        .toUpperCase().equals(chain))
+        List<SequenceI> toremove=new ArrayList<SequenceI>();
+        for (SequenceI pdbcs : pdbfile.getSequences())
         {
-          PDBChain pdbchain = (PDBChain) pdbfile.chains.elementAt(i);
-          // Get the Chain's Sequence - who's dataset includes any special
-          // features added from the PDB file
-          SequenceI sq = pdbchain.sequence;
-          // Specially formatted name for the PDB chain sequences retrieved from
-          // the PDB
-          sq.setName(jalview.datamodel.DBRefSource.PDB + "|" + id + "|"
-                  + sq.getName());
-          // Might need to add more metadata to the PDBEntry object
-          // like below
-          /*
-           * PDBEntry entry = new PDBEntry(); // Construct the PDBEntry
-           * entry.setId(id); if (entry.getProperty() == null)
-           * entry.setProperty(new Hashtable());
-           * entry.getProperty().put("chains", pdbchain.id + "=" + sq.getStart()
-           * + "-" + sq.getEnd()); sq.getDatasetSequence().addPDBId(entry);
-           */
-          // Add PDB DB Refs
-          // We make a DBRefEtntry because we have obtained the PDB file from a
-          // verifiable source
-          // JBPNote - PDB DBRefEntry should also carry the chain and mapping
-          // information
-          DBRefEntry dbentry = new DBRefEntry(getDbSource(),
-                  getDbVersion(), id + pdbchain.id);
-          sq.addDBRef(dbentry);
-          // and add seuqence to the retrieved set
-          result.addElement(sq.deriveSequence());
+          String chid = null;
+          // Mapping map=null;
+          for (PDBEntry pid : (Vector<PDBEntry>) pdbcs.getPDBId())
+          {
+            if (pid.getFile() == file)
+            {
+              chid = (String) pid.getProperty().get("CHAIN");
+
+            }
+            ;
+
+          }
+          if (chain == null
+                  || (chid != null && (chid.equals(chain)
+                          || chid.trim().equals(chain.trim()) || (chain
+                          .trim().length() == 0 && chid.equals("_")))))
+          {
+            pdbcs.setName(jalview.datamodel.DBRefSource.PDB + "|" + id
+                    + "|" + pdbcs.getName());
+            // Might need to add more metadata to the PDBEntry object
+            // like below
+            /*
+             * PDBEntry entry = new PDBEntry(); // Construct the PDBEntry
+             * entry.setId(id); if (entry.getProperty() == null)
+             * entry.setProperty(new Hashtable());
+             * entry.getProperty().put("chains", pdbchain.id + "=" +
+             * sq.getStart() + "-" + sq.getEnd());
+             * sq.getDatasetSequence().addPDBId(entry);
+             */
+            // Add PDB DB Refs
+            // We make a DBRefEtntry because we have obtained the PDB file from
+            // a
+            // verifiable source
+            // JBPNote - PDB DBRefEntry should also carry the chain and mapping
+            // information
+            DBRefEntry dbentry = new DBRefEntry(getDbSource(),
+                    getDbVersion(), (chid == null ? id : id + chid));
+            // dbentry.setMap()
+            pdbcs.addDBRef(dbentry);
+          }
+          else
+          {
+            // mark this sequence to be removed from the alignment 
+            // - since it's not from the right chain
+            toremove.add(pdbcs);
+          }
+        }
+        // now remove marked sequences 
+        for (SequenceI pdbcs:toremove) {
+          pdbfile.deleteSequence(pdbcs);
         }
       }
-
-      if (result.size() < 1)
+      
+      if (pdbfile == null || pdbfile.getHeight() < 1)
       {
         throw new Exception("No PDB Records for " + id + " chain "
                 + ((chain == null) ? "' '" : chain));
       }
+
     } catch (Exception ex) // Problem parsing PDB file
     {
       stopQuery();
       throw (ex);
     }
-
-    SequenceI[] results = new SequenceI[result.size()];
-    for (int i = 0, j = result.size(); i < j; i++)
-    {
-      results[i] = (SequenceI) result.elementAt(i);
-      result.setElementAt(null, i);
-    }
-    return new Alignment(results);
+    return pdbfile;
   }
 
   /*