added CSV export of annotation rows to application.
[jalview.git] / src / jalview / gui / AnnotationExporter.java
index d4975a6..ab3f0d1 100755 (executable)
@@ -1,6 +1,6 @@
 /*\r
  * Jalview - A Sequence Alignment Editor and Viewer\r
- * Copyright (C) 2006 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
+ * Copyright (C) 2007 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
  *\r
  * This program is free software; you can redistribute it and/or\r
  * modify it under the terms of the GNU General Public License\r
 \r
 package jalview.gui;\r
 \r
+import java.util.*;\r
+\r
+import java.awt.*;\r
+import java.awt.event.*;\r
 import javax.swing.*;\r
-import java.awt.event.ActionListener;\r
-import java.awt.event.ActionEvent;\r
 \r
+import jalview.datamodel.*;\r
 import jalview.io.*;\r
-import jalview.datamodel.AlignmentAnnotation;\r
-\r
-import java.awt.Color;\r
-import java.awt.FlowLayout;\r
-import javax.swing.BorderFactory;\r
-\r
 \r
+/**\r
+ * \r
+ * GUI dialog for exporting features or alignment annotations depending upon which method is called.\r
+ * \r
+ * @author AMW\r
+ *\r
+ */\r
 public class AnnotationExporter\r
     extends JPanel\r
 {\r
   JInternalFrame frame;\r
   AlignmentPanel ap;\r
   boolean features = true;\r
-  AlignmentAnnotation [] annotations;\r
+  AlignmentAnnotation[] annotations;\r
+  Vector sequenceGroups;\r
+  Hashtable alignmentProperties;\r
 \r
   public AnnotationExporter()\r
   {\r
@@ -62,106 +68,138 @@ public class AnnotationExporter
   {\r
     this.ap = ap;\r
     features = true;\r
+    CSVFormat.setVisible(false);\r
     frame.setTitle("Export Features");\r
   }\r
 \r
   public void exportAnnotations(AlignmentPanel ap,\r
-                                AlignmentAnnotation [] annotations)\r
+                                AlignmentAnnotation[] annotations,\r
+                                Vector sequenceGroups,\r
+                                Hashtable alProperties)\r
   {\r
     this.ap = ap;\r
     features = false;\r
     GFFFormat.setVisible(false);\r
+    CSVFormat.setVisible(true);\r
     this.annotations = annotations;\r
+    this.sequenceGroups = sequenceGroups;\r
+    this.alignmentProperties = alProperties;\r
     frame.setTitle("Export Annotations");\r
   }\r
 \r
   public void toFile_actionPerformed(ActionEvent e)\r
   {\r
-      JalviewFileChooser chooser = new JalviewFileChooser(\r
-      jalview.bin.Cache.getProperty( "LAST_DIRECTORY"));\r
+    JalviewFileChooser chooser = new JalviewFileChooser(\r
+        jalview.bin.Cache.getProperty("LAST_DIRECTORY"));\r
 \r
-      chooser.setFileView(new JalviewFileView());\r
-      chooser.setDialogTitle(\r
-          features ? "Save Features to File" : "Save Annotation to File");\r
-      chooser.setToolTipText("Save");\r
+    chooser.setFileView(new JalviewFileView());\r
+    chooser.setDialogTitle(\r
+        features ? "Save Features to File" : "Save Annotation to File");\r
+    chooser.setToolTipText("Save");\r
 \r
-      int value = chooser.showSaveDialog(this);\r
+    int value = chooser.showSaveDialog(this);\r
 \r
-      if (value == JalviewFileChooser.APPROVE_OPTION)\r
+    if (value == JalviewFileChooser.APPROVE_OPTION)\r
+    {\r
+      String text = "No features found on alignment";\r
+      if (features)\r
       {\r
-        String text = "No features found on alignment";\r
-        if (features)\r
+        if (GFFFormat.isSelected())\r
         {\r
-          if (GFFFormat.isSelected())\r
-            text = new FeaturesFile().printGFFFormat(\r
-                ap.av.alignment.getDataset().getSequencesArray(),\r
-                ap.av.featuresDisplayed);\r
-          else\r
-            text = new FeaturesFile().printJalviewFormat(\r
-                ap.av.alignment.getDataset().getSequencesArray(),\r
-                ap.av.featuresDisplayed);\r
+          text = new FeaturesFile().printGFFFormat(\r
+              ap.av.alignment.getDataset().getSequencesArray(),\r
+              ap.av.featuresDisplayed);\r
         }\r
         else\r
         {\r
-           text = new AnnotationFile().printAnnotations( annotations );\r
-        }\r
-\r
-        try\r
-        {\r
-          java.io.PrintWriter out = new java.io.PrintWriter(\r
-              new java.io.FileWriter(chooser.getSelectedFile()));\r
-\r
-          out.print(text);\r
-          out.close();\r
+          text = new FeaturesFile().printJalviewFormat(\r
+              ap.av.alignment.getDataset().getSequencesArray(),\r
+              ap.av.featuresDisplayed);\r
         }\r
-        catch (Exception ex)\r
+      }\r
+      else\r
+      {\r
+        if (CSVFormat.isSelected())\r
         {\r
-          ex.printStackTrace();\r
+          text = new AnnotationFile().printCSVAnnotations(annotations);\r
+        } else {\r
+          text = new AnnotationFile().printAnnotations(\r
+            annotations,\r
+            sequenceGroups,\r
+            alignmentProperties);\r
         }\r
       }\r
+\r
+      try\r
+      {\r
+        java.io.PrintWriter out = new java.io.PrintWriter(\r
+            new java.io.FileWriter(chooser.getSelectedFile()));\r
+\r
+        out.print(text);\r
+        out.close();\r
+      }\r
+      catch (Exception ex)\r
+      {\r
+        ex.printStackTrace();\r
+      }\r
+    }\r
+\r
+    close_actionPerformed(null);\r
   }\r
 \r
   public void toTextbox_actionPerformed(ActionEvent e)\r
   {\r
     String text = "No features found on alignment";\r
-    if(features)\r
+    if (features)\r
     {\r
       if (GFFFormat.isSelected())\r
+      {\r
         text = new FeaturesFile().printGFFFormat(\r
             ap.av.alignment.getDataset().getSequencesArray(),\r
             ap.av.featuresDisplayed);\r
+      }\r
       else\r
+      {\r
         text = new FeaturesFile().printJalviewFormat(\r
             ap.av.alignment.getDataset().getSequencesArray(),\r
-                ap.av.featuresDisplayed);\r
+            ap.av.featuresDisplayed);\r
+      }\r
     }\r
-    else if(!features)\r
+    else if (!features)\r
     {\r
-      text = new AnnotationFile().printAnnotations( annotations );\r
+      if (CSVFormat.isSelected())\r
+      {\r
+        text = new AnnotationFile().printCSVAnnotations(annotations);\r
+      } else {\r
+        text = new AnnotationFile().printAnnotations(\r
+          annotations,\r
+          sequenceGroups,\r
+          alignmentProperties);\r
+      }\r
     }\r
 \r
-\r
     CutAndPasteTransfer cap = new CutAndPasteTransfer();\r
     cap.setText(text);\r
     Desktop.addInternalFrame(cap,\r
-                             (features ?  "Features for - " : "Annotations for - ")\r
+                             (features ? "Features for - " :\r
+                              "Annotations for - ")\r
                              + ap.alignFrame.getTitle(),\r
                              600,\r
                              500);\r
 \r
-\r
+    close_actionPerformed(null);\r
   }\r
 \r
   public void close_actionPerformed(ActionEvent e)\r
   {\r
-    try{\r
+    try\r
+    {\r
       frame.setClosed(true);\r
-    }catch(java.beans.PropertyVetoException ex)\r
+    }\r
+    catch (java.beans.PropertyVetoException ex)\r
     {}\r
   }\r
 \r
-\r
-\r
   private void jbInit()\r
       throws Exception\r
   {\r
@@ -195,6 +233,8 @@ public class AnnotationExporter
     jalviewFormat.setText("Jalview");\r
     GFFFormat.setOpaque(false);\r
     GFFFormat.setText("GFF");\r
+    CSVFormat.setOpaque(false);\r
+    CSVFormat.setText("CSV(Spreadsheet)");\r
     jLabel1.setHorizontalAlignment(SwingConstants.TRAILING);\r
     jLabel1.setText("Format: ");\r
     this.setBackground(Color.white);\r
@@ -207,8 +247,10 @@ public class AnnotationExporter
     jPanel3.add(jLabel1);\r
     jPanel3.add(jalviewFormat);\r
     jPanel3.add(GFFFormat);\r
+    jPanel3.add(CSVFormat);\r
     buttonGroup.add(jalviewFormat);\r
     buttonGroup.add(GFFFormat);\r
+    buttonGroup.add(CSVFormat);\r
     this.add(jPanel3, null);\r
     this.add(jPanel1, null);\r
   }\r
@@ -220,6 +262,7 @@ public class AnnotationExporter
   ButtonGroup buttonGroup = new ButtonGroup();\r
   JRadioButton jalviewFormat = new JRadioButton();\r
   JRadioButton GFFFormat = new JRadioButton();\r
+  JRadioButton CSVFormat = new JRadioButton();\r
   JLabel jLabel1 = new JLabel();\r
   JPanel jPanel3 = new JPanel();\r
   FlowLayout flowLayout1 = new FlowLayout();\r