JAL-1894 update year/version in copyright
[jalview.git] / src / jalview / gui / AnnotationExporter.java
old mode 100755 (executable)
new mode 100644 (file)
index 1307483..4623892
-/*\r
- * Jalview - A Sequence Alignment Editor and Viewer\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
- * as published by the Free Software Foundation; either version 2\r
- * of the License, or (at your option) any later version.\r
- *\r
- * This program is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
- * GNU General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU General Public License\r
- * along with this program; if not, write to the Free Software\r
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA\r
- */\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
-\r
-import jalview.datamodel.*;\r
-import jalview.io.*;\r
-\r
-public class AnnotationExporter\r
-    extends JPanel\r
-{\r
-  JInternalFrame frame;\r
-  AlignmentPanel ap;\r
-  boolean features = true;\r
-  AlignmentAnnotation[] annotations;\r
-  Vector sequenceGroups;\r
-  Hashtable alignmentProperties;\r
-\r
-  public AnnotationExporter()\r
-  {\r
-    try\r
-    {\r
-      jbInit();\r
-    }\r
-    catch (Exception ex)\r
-    {\r
-      ex.printStackTrace();\r
-    }\r
-\r
-    frame = new JInternalFrame();\r
-    frame.setContentPane(this);\r
-    frame.setLayer(JLayeredPane.PALETTE_LAYER);\r
-    Desktop.addInternalFrame(frame,\r
-                             "",\r
-                             260, 125);\r
-  }\r
-\r
-  public void exportFeatures(AlignmentPanel ap)\r
-  {\r
-    this.ap = ap;\r
-    features = true;\r
-    frame.setTitle("Export Features");\r
-  }\r
-\r
-  public void exportAnnotations(AlignmentPanel ap,\r
-                                AlignmentAnnotation[] annotations,\r
-                                Vector sequenceGroups,\r
-                                Hashtable alProperties)\r
-  {\r
-    this.ap = ap;\r
-    features = false;\r
-    GFFFormat.setVisible(false);\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
-\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
-\r
-    if (value == JalviewFileChooser.APPROVE_OPTION)\r
-    {\r
-      String text = "No features found on alignment";\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
-        }\r
-      }\r
-      else\r
-      {\r
-        text = new AnnotationFile().printAnnotations(\r
-            annotations,\r
-            sequenceGroups,\r
-            alignmentProperties);\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
-\r
-  public void toTextbox_actionPerformed(ActionEvent e)\r
-  {\r
-    String text = "No features found on alignment";\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
-      }\r
-    }\r
-    else if (!features)\r
-    {\r
-      text = new AnnotationFile().printAnnotations(\r
-          annotations,\r
-          sequenceGroups,\r
-          alignmentProperties);\r
-    }\r
-\r
-    CutAndPasteTransfer cap = new CutAndPasteTransfer();\r
-    cap.setText(text);\r
-    Desktop.addInternalFrame(cap,\r
-                             (features ? "Features for - " :\r
-                              "Annotations for - ")\r
-                             + ap.alignFrame.getTitle(),\r
-                             600,\r
-                             500);\r
-\r
-  }\r
-\r
-  public void close_actionPerformed(ActionEvent e)\r
-  {\r
-    try\r
-    {\r
-      frame.setClosed(true);\r
-    }\r
-    catch (java.beans.PropertyVetoException ex)\r
-    {}\r
-  }\r
-\r
-  private void jbInit()\r
-      throws Exception\r
-  {\r
-    this.setLayout(flowLayout1);\r
-    toFile.setText("to File");\r
-    toFile.addActionListener(new ActionListener()\r
-    {\r
-      public void actionPerformed(ActionEvent e)\r
-      {\r
-        toFile_actionPerformed(e);\r
-      }\r
-    });\r
-    toTextbox.setText("to Textbox");\r
-    toTextbox.addActionListener(new ActionListener()\r
-    {\r
-      public void actionPerformed(ActionEvent e)\r
-      {\r
-        toTextbox_actionPerformed(e);\r
-      }\r
-    });\r
-    close.setText("Close");\r
-    close.addActionListener(new ActionListener()\r
-    {\r
-      public void actionPerformed(ActionEvent e)\r
-      {\r
-        close_actionPerformed(e);\r
-      }\r
-    });\r
-    jalviewFormat.setOpaque(false);\r
-    jalviewFormat.setSelected(true);\r
-    jalviewFormat.setText("Jalview");\r
-    GFFFormat.setOpaque(false);\r
-    GFFFormat.setText("GFF");\r
-    jLabel1.setHorizontalAlignment(SwingConstants.TRAILING);\r
-    jLabel1.setText("Format: ");\r
-    this.setBackground(Color.white);\r
-    jPanel3.setBorder(BorderFactory.createEtchedBorder());\r
-    jPanel3.setOpaque(false);\r
-    jPanel1.setOpaque(false);\r
-    jPanel1.add(toFile);\r
-    jPanel1.add(toTextbox);\r
-    jPanel1.add(close);\r
-    jPanel3.add(jLabel1);\r
-    jPanel3.add(jalviewFormat);\r
-    jPanel3.add(GFFFormat);\r
-    buttonGroup.add(jalviewFormat);\r
-    buttonGroup.add(GFFFormat);\r
-    this.add(jPanel3, null);\r
-    this.add(jPanel1, null);\r
-  }\r
-\r
-  JPanel jPanel1 = new JPanel();\r
-  JButton toFile = new JButton();\r
-  JButton toTextbox = new JButton();\r
-  JButton close = new JButton();\r
-  ButtonGroup buttonGroup = new ButtonGroup();\r
-  JRadioButton jalviewFormat = new JRadioButton();\r
-  JRadioButton GFFFormat = new JRadioButton();\r
-  JLabel jLabel1 = new JLabel();\r
-  JPanel jPanel3 = new JPanel();\r
-  FlowLayout flowLayout1 = new FlowLayout();\r
-\r
-}\r
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.9.0b1)
+ * Copyright (C) 2015 The Jalview Authors
+ * 
+ * This file is part of Jalview.
+ * 
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License 
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
+ *  
+ * Jalview is distributed in the hope that it will be useful, but 
+ * WITHOUT ANY WARRANTY; without even the implied warranty 
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
+ * PURPOSE.  See the GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
+package jalview.gui;
+
+import jalview.datamodel.AlignmentAnnotation;
+import jalview.io.AnnotationFile;
+import jalview.io.FeaturesFile;
+import jalview.io.JalviewFileChooser;
+import jalview.io.JalviewFileView;
+import jalview.util.MessageManager;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.FlowLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.BorderFactory;
+import javax.swing.ButtonGroup;
+import javax.swing.JButton;
+import javax.swing.JInternalFrame;
+import javax.swing.JLabel;
+import javax.swing.JLayeredPane;
+import javax.swing.JPanel;
+import javax.swing.JRadioButton;
+import javax.swing.SwingConstants;
+
+/**
+ * 
+ * GUI dialog for exporting features or alignment annotations depending upon
+ * which method is called.
+ * 
+ * @author AMW
+ * 
+ */
+public class AnnotationExporter extends JPanel
+{
+  JInternalFrame frame;
+
+  AlignmentPanel ap;
+
+  boolean features = true;
+
+  private AlignmentAnnotation[] annotations;
+
+  private boolean wholeView;
+
+  public AnnotationExporter()
+  {
+    try
+    {
+      jbInit();
+    } catch (Exception ex)
+    {
+      ex.printStackTrace();
+    }
+
+    frame = new JInternalFrame();
+    frame.setContentPane(this);
+    frame.setLayer(JLayeredPane.PALETTE_LAYER);
+    Desktop.addInternalFrame(frame, "", frame.getPreferredSize().width,
+            frame.getPreferredSize().height);
+  }
+
+  public void exportFeatures(AlignmentPanel ap)
+  {
+    this.ap = ap;
+    features = true;
+    CSVFormat.setVisible(false);
+    frame.setTitle(MessageManager.getString("label.export_features"));
+  }
+
+  public void exportAnnotations(AlignmentPanel ap)
+  {
+    this.ap = ap;
+    annotations = ap.av.isShowAnnotation() ? null : ap.av.getAlignment()
+            .getAlignmentAnnotation();
+    wholeView = true;
+    startExportAnnotation();
+  }
+
+  public void exportAnnotations(AlignmentPanel alp,
+          AlignmentAnnotation[] toExport)
+  {
+    ap = alp;
+    annotations = toExport;
+    wholeView = false;
+    startExportAnnotation();
+  }
+
+  private void startExportAnnotation()
+  {
+    features = false;
+    GFFFormat.setVisible(false);
+    CSVFormat.setVisible(true);
+    frame.setTitle(MessageManager.getString("label.export_annotations"));
+  }
+
+  public void toFile_actionPerformed(ActionEvent e)
+  {
+    JalviewFileChooser chooser = new JalviewFileChooser(
+            jalview.bin.Cache.getProperty("LAST_DIRECTORY"));
+
+    chooser.setFileView(new JalviewFileView());
+    chooser.setDialogTitle(features ? MessageManager
+            .getString("label.save_features_to_file") : MessageManager
+            .getString("label.save_annotation_to_file"));
+    chooser.setToolTipText(MessageManager.getString("action.save"));
+
+    int value = chooser.showSaveDialog(this);
+
+    if (value == JalviewFileChooser.APPROVE_OPTION)
+    {
+      String text = getFileContents();
+
+      try
+      {
+        java.io.PrintWriter out = new java.io.PrintWriter(
+                new java.io.FileWriter(chooser.getSelectedFile()));
+
+        out.print(text);
+        out.close();
+      } catch (Exception ex)
+      {
+        ex.printStackTrace();
+      }
+    }
+
+    close_actionPerformed(null);
+  }
+
+  private String getFileContents()
+  {
+    String text = MessageManager
+            .getString("label.no_features_on_alignment");
+    if (features)
+    {
+      if (GFFFormat.isSelected())
+      {
+        text = new FeaturesFile().printGFFFormat(ap.av.getAlignment()
+                .getDataset().getSequencesArray(), ap.getFeatureRenderer()
+                .getDisplayedFeatureCols(), true, ap.av.isShowNPFeats());// ap.av.featuresDisplayed//);
+      }
+      else
+      {
+        text = new FeaturesFile().printJalviewFormat(ap.av.getAlignment()
+                .getDataset().getSequencesArray(), ap.getFeatureRenderer()
+                .getDisplayedFeatureCols(), true, ap.av.isShowNPFeats()); // ap.av.featuresDisplayed);
+      }
+    }
+    else
+    {
+      if (CSVFormat.isSelected())
+      {
+        text = new AnnotationFile().printCSVAnnotations(annotations);
+      }
+      else
+      {
+        if (wholeView)
+        {
+          text = new AnnotationFile().printAnnotationsForView(ap.av);
+        }
+        else
+        {
+          text = new AnnotationFile().printAnnotations(annotations, null,
+                  null);
+        }
+      }
+    }
+    return text;
+  }
+
+  public void toTextbox_actionPerformed(ActionEvent e)
+  {
+    CutAndPasteTransfer cap = new CutAndPasteTransfer();
+
+    try
+    {
+      String text = getFileContents();
+      cap.setText(text);
+      Desktop.addInternalFrame(
+              cap,
+              (features ? MessageManager.formatMessage(
+                      "label.features_for_params",
+                      new String[] { ap.alignFrame.getTitle() })
+                      : MessageManager.formatMessage(
+                              "label.annotations_for_params",
+                              new String[] { ap.alignFrame.getTitle() })),
+              600, 500);
+    } catch (OutOfMemoryError oom)
+    {
+      new OOMWarning((features ? MessageManager.formatMessage(
+              "label.generating_features_for_params",
+              new String[] { ap.alignFrame.getTitle() })
+              : MessageManager.formatMessage(
+                      "label.generating_annotations_for_params",
+                      new String[] { ap.alignFrame.getTitle() })), oom);
+      cap.dispose();
+    }
+
+    close_actionPerformed(null);
+  }
+
+  public void close_actionPerformed(ActionEvent e)
+  {
+    try
+    {
+      frame.setClosed(true);
+    } catch (java.beans.PropertyVetoException ex)
+    {
+    }
+  }
+
+  private void jbInit() throws Exception
+  {
+    this.setLayout(new BorderLayout());
+
+    toFile.setText(MessageManager.getString("label.to_file"));
+    toFile.addActionListener(new ActionListener()
+    {
+      public void actionPerformed(ActionEvent e)
+      {
+        toFile_actionPerformed(e);
+      }
+    });
+    toTextbox.setText(MessageManager.getString("label.to_textbox"));
+    toTextbox.addActionListener(new ActionListener()
+    {
+      public void actionPerformed(ActionEvent e)
+      {
+        toTextbox_actionPerformed(e);
+      }
+    });
+    close.setText(MessageManager.getString("action.close"));
+    close.addActionListener(new ActionListener()
+    {
+      public void actionPerformed(ActionEvent e)
+      {
+        close_actionPerformed(e);
+      }
+    });
+    jalviewFormat.setOpaque(false);
+    jalviewFormat.setSelected(true);
+    jalviewFormat.setText("Jalview");
+    GFFFormat.setOpaque(false);
+    GFFFormat.setText("GFF");
+    CSVFormat.setOpaque(false);
+    CSVFormat.setText(MessageManager.getString("label.csv_spreadsheet"));
+    jLabel1.setHorizontalAlignment(SwingConstants.TRAILING);
+    jLabel1.setText(MessageManager.getString("action.format") + " ");
+    this.setBackground(Color.white);
+    jPanel3.setBorder(BorderFactory.createEtchedBorder());
+    jPanel3.setOpaque(false);
+    jPanel1.setOpaque(false);
+    jPanel1.add(toFile);
+    jPanel1.add(toTextbox);
+    jPanel1.add(close);
+    jPanel3.add(jLabel1);
+    jPanel3.add(jalviewFormat);
+    jPanel3.add(GFFFormat);
+    jPanel3.add(CSVFormat);
+    buttonGroup.add(jalviewFormat);
+    buttonGroup.add(GFFFormat);
+    buttonGroup.add(CSVFormat);
+    this.add(jPanel3, BorderLayout.CENTER);
+    this.add(jPanel1, BorderLayout.SOUTH);
+  }
+
+  JPanel jPanel1 = new JPanel();
+
+  JButton toFile = new JButton();
+
+  JButton toTextbox = new JButton();
+
+  JButton close = new JButton();
+
+  ButtonGroup buttonGroup = new ButtonGroup();
+
+  JRadioButton jalviewFormat = new JRadioButton();
+
+  JRadioButton GFFFormat = new JRadioButton();
+
+  JRadioButton CSVFormat = new JRadioButton();
+
+  JLabel jLabel1 = new JLabel();
+
+  JPanel jPanel3 = new JPanel();
+
+  FlowLayout flowLayout1 = new FlowLayout();
+}