JAL-1761 pattern for structure viewer construction from project file
[jalview.git] / src / jalview / gui / PymolViewer.java
index 4e0ac95..c5a4c9a 100644 (file)
@@ -5,6 +5,7 @@ import java.awt.event.ActionListener;
 import java.io.File;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 
 import javax.swing.JInternalFrame;
 import javax.swing.JMenuItem;
@@ -16,6 +17,8 @@ import jalview.api.FeatureRenderer;
 import jalview.bin.Cache;
 import jalview.datamodel.PDBEntry;
 import jalview.datamodel.SequenceI;
+import jalview.datamodel.StructureViewerModel;
+import jalview.datamodel.StructureViewerModel.StructureData;
 import jalview.gui.StructureViewer.ViewerType;
 import jalview.io.DataSourceType;
 import jalview.io.StructureFile;
@@ -71,22 +74,36 @@ public class PymolViewer extends StructureViewerBase
    * @param colourBySequence
    * @param newViewId
    */
-  public PymolViewer(String sessionFile, AlignmentPanel alignPanel,
-          PDBEntry[] pdbArray, SequenceI[][] seqsArray,
-          boolean colourByPymol, boolean colourBySequence, String newViewId)
+  public PymolViewer(StructureViewerModel viewerModel,
+          AlignmentPanel alignPanel, String sessionFile, String vid)
   {
     // TODO convert to base/factory class method
     this();
-    setViewId(newViewId);
+    setViewId(vid);
     this.pymolSessionFile = sessionFile;
+    Map<File, StructureData> pdbData = viewerModel.getFileData();
+    PDBEntry[] pdbArray = new PDBEntry[pdbData.size()];
+    SequenceI[][] seqsArray = new SequenceI[pdbData.size()][];
+    int i = 0;
+    for (StructureData data : pdbData.values())
+    {
+      PDBEntry pdbentry = new PDBEntry(data.getPdbId(), null,
+              PDBEntry.Type.PDB, data.getFilePath());
+      pdbArray[i] = pdbentry;
+      List<SequenceI> sequencesForPdb = data.getSeqList();
+      seqsArray[i] = sequencesForPdb
+              .toArray(new SequenceI[sequencesForPdb.size()]);
+      i++;
+    }
+
     openNewPymol(alignPanel, pdbArray, seqsArray);
-    if (colourByPymol)
+    if (viewerModel.isColourByViewer())
     {
       binding.setColourBySequence(false);
       seqColour.setSelected(false);
       viewerColour.setSelected(true);
     }
-    else if (colourBySequence)
+    else if (viewerModel.isColourWithAlignPanel())
     {
       binding.setColourBySequence(true);
       seqColour.setSelected(true);
@@ -306,7 +323,8 @@ public class PymolViewer extends StructureViewerBase
       boolean opened = binding.openSession(pymolSessionFile);
       if (!opened)
       {
-        System.err.println("An error occurred opening PyMOL session file "
+        Cache.log.error(
+                "An error occurred opening PyMOL session file "
                 + pymolSessionFile);
       }
     }