Save PDB file to disk
[jalview.git] / src / MCview / PDBViewer.java
index 87c2739..1f1f94d 100755 (executable)
@@ -26,19 +26,22 @@ import jalview.gui.*;
 import jalview.io.EBIFetchClient;\r
 import java.awt.event.ActionListener;\r
 import java.awt.event.ActionEvent;\r
+import java.io.*;\r
+import jalview.io.JalviewFileChooser;\r
+import jalview.io.JalviewFileView;\r
 \r
 public class PDBViewer extends JInternalFrame implements Runnable\r
 {\r
   PDBEntry pdb;\r
   Sequence sequence;\r
   PDBCanvas pdbcanvas;\r
+  String tmpPDBFile;\r
 \r
 \r
   public PDBViewer(PDBEntry entry,\r
                    Sequence seq,\r
                    SeqCanvas seqcanvas)\r
   {\r
-    /*Uncomment this to modify in Jbuilder\r
     try\r
     {\r
       jbInit();\r
@@ -46,17 +49,35 @@ public class PDBViewer extends JInternalFrame implements Runnable
     catch (Exception ex)\r
     {\r
       ex.printStackTrace();\r
-    }*/\r
+    }\r
+\r
 \r
     if (entry==null)\r
       return;\r
     pdb = entry;\r
     sequence = seq;\r
+    pdbcanvas = new PDBCanvas(seqcanvas, sequence);\r
+\r
+    if(pdb.getFile()!=null)\r
+    {\r
+        try{\r
+          tmpPDBFile = pdb.getFile();\r
+          PDBfile pdbfile = new PDBfile(tmpPDBFile,\r
+                                        jalview.io.AppletFormatAdapter.FILE);\r
+          pdbcanvas.setPDBFile(pdbfile);\r
+\r
+        }catch(java.io.IOException ex)\r
+        {\r
+          ex.printStackTrace();\r
+        }\r
+    }\r
+    else\r
+    {\r
+      Thread worker = new Thread(this);\r
+      worker.start();\r
+    }\r
 \r
-    Thread worker = new Thread(this);\r
-    worker.start();\r
 \r
-    pdbcanvas = new PDBCanvas(seqcanvas, seq);\r
 \r
     setContentPane(pdbcanvas);\r
     StringBuffer title = new StringBuffer(sequence.getName() + ":" + pdb.getId());\r
@@ -80,24 +101,18 @@ public class PDBViewer extends JInternalFrame implements Runnable
   {\r
     try\r
     {\r
-      EBIFetchClient ebi = new EBIFetchClient();\r
-      String query = "pdb:" + pdb.getId();\r
-      String[] result = ebi.fetchData(query, "default","raw");\r
-      if (result!=null) {\r
-        PDBfile pdbfile = new PDBfile(result);\r
-        pdbcanvas.setPDBFile(pdbfile);\r
-      } else {\r
-        throw new Exception("Empty result for WSDbFetch Query: "+query);\r
-      }\r
-\r
-      try\r
-      {\r
-        jbInit();\r
-      }\r
-      catch (Exception ex)\r
-      {\r
-        ex.printStackTrace();\r
-      }\r
+        EBIFetchClient ebi = new EBIFetchClient();\r
+        String query = "pdb:" + pdb.getId();\r
+        tmpPDBFile = ebi.fetchDataAsFile(query, "default", "raw").getAbsolutePath();\r
+        if (tmpPDBFile != null)\r
+        {\r
+          PDBfile pdbfile = new PDBfile(tmpPDBFile, jalview.io.AppletFormatAdapter.FILE);\r
+          pdbcanvas.setPDBFile(pdbfile);\r
+        }\r
+        else\r
+        {\r
+          throw new Exception("Empty result for WSDbFetch Query: " + query);\r
+        }\r
     }\r
     catch (Exception ex)\r
     {\r
@@ -280,11 +295,20 @@ public class PDBViewer extends JInternalFrame implements Runnable
         background_actionPerformed(e);\r
       }\r
     });\r
+    savePDB.setText("PDB File");\r
+    savePDB.addActionListener(new ActionListener()\r
+    {\r
+      public void actionPerformed(ActionEvent e)\r
+      {\r
+        savePDB_actionPerformed(e);\r
+      }\r
+    });\r
     jMenuBar1.add(fileMenu);\r
     jMenuBar1.add(coloursMenu);\r
     jMenuBar1.add(viewMenu);\r
     fileMenu.add(saveMenu);\r
     fileMenu.add(mapping);\r
+    saveMenu.add(savePDB);\r
     saveMenu.add(png);\r
     saveMenu.add(eps);\r
     coloursMenu.add(seqButton);\r
@@ -394,6 +418,7 @@ public class PDBViewer extends JInternalFrame implements Runnable
   JRadioButtonMenuItem helix = new JRadioButtonMenuItem();\r
   JMenu viewMenu = new JMenu();\r
   JMenuItem background = new JMenuItem();\r
+  JMenuItem savePDB = new JMenuItem();\r
 \r
   /**\r
    * DOCUMENT ME!\r
@@ -595,4 +620,39 @@ public class PDBViewer extends JInternalFrame implements Runnable
          pdbcanvas.repaint();\r
        }\r
   }\r
+\r
+  public void savePDB_actionPerformed(ActionEvent e)\r
+  {\r
+    JalviewFileChooser chooser = new JalviewFileChooser(\r
+        jalview.bin.Cache.getProperty(\r
+            "LAST_DIRECTORY"));\r
+\r
+    chooser.setFileView(new JalviewFileView());\r
+    chooser.setDialogTitle("Save PDB File");\r
+    chooser.setToolTipText("Save");\r
+\r
+    int value = chooser.showSaveDialog(this);\r
+\r
+    if (value == JalviewFileChooser.APPROVE_OPTION)\r
+    {\r
+        try\r
+        {\r
+          BufferedReader in = new BufferedReader(new FileReader(tmpPDBFile));\r
+          File outFile = chooser.getSelectedFile();\r
+\r
+          PrintWriter out = new PrintWriter(new FileOutputStream(outFile));\r
+          String data;\r
+          while ( (data = in.readLine()) != null)\r
+          {\r
+            if (data.indexOf("<PRE>") == -1 && data.indexOf("</PRE>") == -1)\r
+              out.println(data);\r
+          }\r
+          out.close();\r
+        }\r
+        catch (Exception ex)\r
+        {\r
+          ex.printStackTrace();\r
+        }\r
+      }\r
+  }\r
 }\r