JAL-2089 patch broken merge to master for Release 2.10.0b1
[jalview.git] / src / jalview / gui / AnnotationExporter.java
old mode 100755 (executable)
new mode 100644 (file)
index ffc5c1c..0d47e36
-/*\r
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.7)\r
- * Copyright (C) 2011 J Procter, AM Waterhouse, J Engelhardt, LM Lui, G Barton, M Clamp, S Searle\r
- * \r
- * This file is part of Jalview.\r
- * \r
- * Jalview 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 3 of the License, or (at your option) any later version.\r
- * \r
- * Jalview is distributed in the hope that it will be useful, but \r
- * WITHOUT ANY WARRANTY; without even the implied warranty \r
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR \r
- * PURPOSE.  See the GNU General Public License for more details.\r
- * \r
- * You should have received a copy of the GNU General Public License along with Jalview.  If not, see <http://www.gnu.org/licenses/>.\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
-/**\r
- * \r
- * GUI dialog for exporting features or alignment annotations depending upon\r
- * which method is called.\r
- * \r
- * @author AMW\r
- * \r
- */\r
-public class AnnotationExporter extends JPanel\r
-{\r
-  JInternalFrame frame;\r
-\r
-  AlignmentPanel ap;\r
-\r
-  boolean features = true;\r
-\r
-  AlignmentAnnotation[] annotations;\r
-\r
-  Vector sequenceGroups;\r
-\r
-  Hashtable alignmentProperties;\r
-\r
-  public AnnotationExporter()\r
-  {\r
-    try\r
-    {\r
-      jbInit();\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, "", frame.getPreferredSize().width, frame.getPreferredSize().height);\r
-  }\r
-\r
-  public void exportFeatures(AlignmentPanel ap)\r
-  {\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, 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
-\r
-    chooser.setFileView(new JalviewFileView());\r
-    chooser.setDialogTitle(features ? "Save Features to File"\r
-            : "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(ap.av.getAlignment()\r
-                  .getDataset().getSequencesArray(),\r
-                  getDisplayedFeatureCols(), true, ap.av.isShowNpFeats());// ap.av.featuresDisplayed//);\r
-        }\r
-        else\r
-        {\r
-          text = new FeaturesFile().printJalviewFormat(ap.av.getAlignment()\r
-                  .getDataset().getSequencesArray(),\r
-                  getDisplayedFeatureCols(), true, ap.av.isShowNpFeats()); // ap.av.featuresDisplayed);\r
-        }\r
-      }\r
-      else\r
-      {\r
-        if (CSVFormat.isSelected())\r
-        {\r
-          text = new AnnotationFile().printCSVAnnotations(annotations);\r
-        }\r
-        else\r
-        {\r
-          text = new AnnotationFile().printAnnotations(annotations,\r
-                  sequenceGroups, 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
-      } 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
-    {\r
-      if (GFFFormat.isSelected())\r
-      {\r
-        text = new FeaturesFile().printGFFFormat(ap.av.getAlignment()\r
-                .getDataset().getSequencesArray(),\r
-                getDisplayedFeatureCols(), true, ap.av.isShowNpFeats());\r
-      }\r
-      else\r
-      {\r
-        text = new FeaturesFile().printJalviewFormat(ap.av.getAlignment()\r
-                .getDataset().getSequencesArray(),\r
-                getDisplayedFeatureCols(), true, ap.av.isShowNpFeats());\r
-      }\r
-    }\r
-    else if (!features)\r
-    {\r
-      if (CSVFormat.isSelected())\r
-      {\r
-        text = new AnnotationFile().printCSVAnnotations(annotations);\r
-      }\r
-      else\r
-      {\r
-        text = new AnnotationFile().printAnnotations(annotations,\r
-                sequenceGroups, alignmentProperties);\r
-      }\r
-    }\r
-\r
-    CutAndPasteTransfer cap = new CutAndPasteTransfer();\r
-    try\r
-    {\r
-      cap.setText(text);\r
-      Desktop.addInternalFrame(cap, (features ? "Features for - "\r
-              : "Annotations for - ") + ap.alignFrame.getTitle(), 600, 500);\r
-    } catch (OutOfMemoryError oom)\r
-    {\r
-      new OOMWarning("generating "\r
-              + (features ? "Features for - " : "Annotations for - ")\r
-              + ap.alignFrame.getTitle(), oom);\r
-      cap.dispose();\r
-    }\r
-\r
-    close_actionPerformed(null);\r
-  }\r
-\r
-  private Hashtable getDisplayedFeatureCols()\r
-  {\r
-    Hashtable fcols = new Hashtable();\r
-    if (ap.av.featuresDisplayed == null)\r
-    {\r
-      return fcols;\r
-    }\r
-    Enumeration en = ap.av.featuresDisplayed.keys();\r
-    FeatureRenderer fr = ap.seqPanel.seqCanvas.getFeatureRenderer(); // consider\r
-                                                                     // higher\r
-                                                                     // level\r
-                                                                     // method ?\r
-    while (en.hasMoreElements())\r
-    {\r
-      Object col = en.nextElement();\r
-      fcols.put(col, fr.featureColours.get(col));\r
-    }\r
-    return fcols;\r
-  }\r
-\r
-  public void close_actionPerformed(ActionEvent e)\r
-  {\r
-    try\r
-    {\r
-      frame.setClosed(true);\r
-    } catch (java.beans.PropertyVetoException ex)\r
-    {\r
-    }\r
-  }\r
-\r
-  private void jbInit() throws Exception\r
-  {\r
-    this.setLayout(new BorderLayout());\r
-    \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
-    CSVFormat.setOpaque(false);\r
-    CSVFormat.setText("CSV(Spreadsheet)");\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
-    jPanel3.add(CSVFormat);\r
-    buttonGroup.add(jalviewFormat);\r
-    buttonGroup.add(GFFFormat);\r
-    buttonGroup.add(CSVFormat);\r
-    this.add(jPanel3, BorderLayout.CENTER);\r
-    this.add(jPanel1, BorderLayout.SOUTH);\r
-  }\r
-\r
-  JPanel jPanel1 = new JPanel();\r
-\r
-  JButton toFile = new JButton();\r
-\r
-  JButton toTextbox = new JButton();\r
-\r
-  JButton close = new JButton();\r
-\r
-  ButtonGroup buttonGroup = new ButtonGroup();\r
-\r
-  JRadioButton jalviewFormat = new JRadioButton();\r
-\r
-  JRadioButton GFFFormat = new JRadioButton();\r
-\r
-  JRadioButton CSVFormat = new JRadioButton();\r
-\r
-  JLabel jLabel1 = new JLabel();\r
-\r
-  JPanel jPanel3 = new JPanel();\r
-\r
-  FlowLayout flowLayout1 = new FlowLayout();\r
-\r
-}\r
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ 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.api.FeatureColourI;
+import jalview.datamodel.AlignmentAnnotation;
+import jalview.datamodel.SequenceI;
+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 java.util.Map;
+
+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)
+    {
+      Map<String, FeatureColourI> displayedFeatureColours = ap
+              .getFeatureRenderer().getDisplayedFeatureCols();
+      FeaturesFile formatter = new FeaturesFile();
+      SequenceI[] sequences = ap.av.getAlignment().getSequencesArray();
+      Map<String, FeatureColourI> featureColours = ap.getFeatureRenderer()
+              .getDisplayedFeatureCols();
+      boolean includeNonPositional = ap.av.isShowNPFeats();
+      if (GFFFormat.isSelected())
+      {
+        text = new FeaturesFile().printGffFormat(ap.av.getAlignment()
+                .getDataset().getSequencesArray(), displayedFeatureColours,
+                true, ap.av.isShowNPFeats());
+        text = formatter.printGffFormat(sequences, featureColours, true,
+                includeNonPositional);
+      }
+      else
+      {
+        text = new FeaturesFile().printJalviewFormat(ap.av.getAlignment()
+                .getDataset().getSequencesArray(), displayedFeatureColours,
+                true, ap.av.isShowNPFeats()); // ap.av.featuresDisplayed);
+        text = formatter.printJalviewFormat(sequences, featureColours,
+                true, includeNonPositional);
+      }
+    }
+    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()
+    {
+      @Override
+      public void actionPerformed(ActionEvent e)
+      {
+        toFile_actionPerformed(e);
+      }
+    });
+    toTextbox.setText(MessageManager.getString("label.to_textbox"));
+    toTextbox.addActionListener(new ActionListener()
+    {
+      @Override
+      public void actionPerformed(ActionEvent e)
+      {
+        toTextbox_actionPerformed(e);
+      }
+    });
+    close.setText(MessageManager.getString("action.close"));
+    close.addActionListener(new ActionListener()
+    {
+      @Override
+      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();
+}