X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAnnotationExporter.java;h=81960e08a22ba15256ba12bf4750b8ce73576842;hb=3da878124135ff033f42d19d8733891b09e953cd;hp=a058c87fb613f02ac60f5cf6bc5631a07edfdf25;hpb=57562fca802eeba735a6b6eaf47208816a6c004d;p=jalview.git diff --git a/src/jalview/gui/AnnotationExporter.java b/src/jalview/gui/AnnotationExporter.java old mode 100755 new mode 100644 index a058c87..81960e0 --- a/src/jalview/gui/AnnotationExporter.java +++ b/src/jalview/gui/AnnotationExporter.java @@ -1,286 +1,351 @@ -/* - * Jalview - A Sequence Alignment Editor and Viewer (Version 2.4) - * Copyright (C) 2008 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle - * - * This program 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 2 - * of the License, or (at your option) any later version. - * - * This program 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 this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - */ -package jalview.gui; - -import java.util.*; - -import java.awt.*; -import java.awt.event.*; -import javax.swing.*; - -import jalview.datamodel.*; -import jalview.io.*; - -/** - * - * 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; - - AlignmentAnnotation[] annotations; - - Vector sequenceGroups; - - Hashtable alignmentProperties; - - public AnnotationExporter() - { - try - { - jbInit(); - } catch (Exception ex) - { - ex.printStackTrace(); - } - - frame = new JInternalFrame(); - frame.setContentPane(this); - frame.setLayer(JLayeredPane.PALETTE_LAYER); - Desktop.addInternalFrame(frame, "", 260, 125); - } - - public void exportFeatures(AlignmentPanel ap) - { - this.ap = ap; - features = true; - CSVFormat.setVisible(false); - frame.setTitle("Export Features"); - } - - public void exportAnnotations(AlignmentPanel ap, - AlignmentAnnotation[] annotations, Vector sequenceGroups, - Hashtable alProperties) - { - this.ap = ap; - features = false; - GFFFormat.setVisible(false); - CSVFormat.setVisible(true); - this.annotations = annotations; - this.sequenceGroups = sequenceGroups; - this.alignmentProperties = alProperties; - frame.setTitle("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 ? "Save Features to File" - : "Save Annotation to File"); - chooser.setToolTipText("Save"); - - int value = chooser.showSaveDialog(this); - - if (value == JalviewFileChooser.APPROVE_OPTION) - { - String text = "No features found on alignment"; - if (features) - { - if (GFFFormat.isSelected()) - { - text = new FeaturesFile().printGFFFormat(ap.av.alignment - .getDataset().getSequencesArray(), - getDisplayedFeatureCols());//ap.av.featuresDisplayed//); - } - else - { - text = new FeaturesFile().printJalviewFormat(ap.av.alignment - .getDataset().getSequencesArray(), - getDisplayedFeatureCols()); // ap.av.featuresDisplayed); - } - } - else - { - if (CSVFormat.isSelected()) - { - text = new AnnotationFile().printCSVAnnotations(annotations); - } - else - { - text = new AnnotationFile().printAnnotations(annotations, - sequenceGroups, alignmentProperties); - } - } - - 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); - } - - public void toTextbox_actionPerformed(ActionEvent e) - { - String text = "No features found on alignment"; - if (features) - { - if (GFFFormat.isSelected()) - { - text = new FeaturesFile().printGFFFormat(ap.av.alignment - .getDataset().getSequencesArray(), getDisplayedFeatureCols()); - } - else - { - text = new FeaturesFile().printJalviewFormat(ap.av.alignment - .getDataset().getSequencesArray(), getDisplayedFeatureCols()); - } - } - else if (!features) - { - if (CSVFormat.isSelected()) - { - text = new AnnotationFile().printCSVAnnotations(annotations); - } - else - { - text = new AnnotationFile().printAnnotations(annotations, - sequenceGroups, alignmentProperties); - } - } - - CutAndPasteTransfer cap = new CutAndPasteTransfer(); - cap.setText(text); - Desktop.addInternalFrame(cap, (features ? "Features for - " - : "Annotations for - ") - + ap.alignFrame.getTitle(), 600, 500); - - close_actionPerformed(null); - } - - private Hashtable getDisplayedFeatureCols() - { - Hashtable fcols = new Hashtable(); - Enumeration en = ap.av.featuresDisplayed.keys(); - FeatureRenderer fr = ap.seqPanel.seqCanvas.getFeatureRenderer(); // consider higher level method ? - while (en.hasMoreElements()) - { - Object col = en.nextElement(); - fcols.put(col, fr.featureColours.get(col)); - } - return fcols; - } - - public void close_actionPerformed(ActionEvent e) - { - try - { - frame.setClosed(true); - } catch (java.beans.PropertyVetoException ex) - { - } - } - - private void jbInit() throws Exception - { - this.setLayout(flowLayout1); - toFile.setText("to File"); - toFile.addActionListener(new ActionListener() - { - public void actionPerformed(ActionEvent e) - { - toFile_actionPerformed(e); - } - }); - toTextbox.setText("to Textbox"); - toTextbox.addActionListener(new ActionListener() - { - public void actionPerformed(ActionEvent e) - { - toTextbox_actionPerformed(e); - } - }); - close.setText("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("CSV(Spreadsheet)"); - jLabel1.setHorizontalAlignment(SwingConstants.TRAILING); - jLabel1.setText("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, null); - this.add(jPanel1, null); - } - - 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(); - -} +/* + * 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 . + * The Jalview Authors are detailed in the 'AUTHORS' file. + */ +package jalview.gui; + +import jalview.api.FeatureRenderer; +import jalview.bin.Cache; +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.io.FileWriter; +import java.io.PrintWriter; + +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 +{ + private JInternalFrame frame; + + private AlignmentPanel ap; + + /* + * true if exporting features, false if exporting annotations + */ + private boolean exportFeatures = true; + + private AlignmentAnnotation[] annotations; + + private boolean wholeView; + + public AnnotationExporter(AlignmentPanel panel) + { + this.ap = panel; + 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); + } + + /** + * Configures the diglog for options to export visible features + */ + public void exportFeatures() + { + exportFeatures = true; + CSVFormat.setVisible(false); + frame.setTitle(MessageManager.getString("label.export_features")); + } + + /** + * Configures the dialog for options to export all visible annotations + */ + public void exportAnnotations() + { + boolean showAnnotation = ap.av.isShowAnnotation(); + exportAnnotation(showAnnotation ? null + : ap.av.getAlignment().getAlignmentAnnotation(), true); + } + + /** + * Configures the dialog for options to export the given annotation row + * + * @param toExport + */ + public void exportAnnotation(AlignmentAnnotation toExport) + { + exportAnnotation(new AlignmentAnnotation[] { toExport }, false); + } + + private void exportAnnotation(AlignmentAnnotation[] toExport, + boolean forWholeView) + { + wholeView = forWholeView; + annotations = toExport; + exportFeatures = false; + GFFFormat.setVisible(false); + CSVFormat.setVisible(true); + frame.setTitle(MessageManager.getString("label.export_annotations")); + } + + private void toFile_actionPerformed() + { + // TODO: JAL-3048 JalviewFileChooser - Save option + JalviewFileChooser chooser = new JalviewFileChooser( + Cache.getProperty("LAST_DIRECTORY")); + + chooser.setFileView(new JalviewFileView()); + chooser.setDialogTitle(exportFeatures + ? 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 = getText(); + + try + { + PrintWriter out = new PrintWriter( + new FileWriter(chooser.getSelectedFile())); + out.print(text); + out.close(); + } catch (Exception ex) + { + ex.printStackTrace(); + } + } + + close_actionPerformed(); + } + + /** + * Answers the text to output for either Features (in GFF or Jalview format) or + * Annotations (in CSV or Jalview format) + * + * @return + */ + private String getText() + { + return exportFeatures ? getFeaturesText() : getAnnotationsText(); + } + + /** + * Returns the text contents for output of annotations in either CSV or Jalview + * format + * + * @return + */ + private String getAnnotationsText() + { + String text; + 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; + } + + /** + * Returns the text contents for output of features in either GFF or Jalview + * format + * + * @return + */ + private String getFeaturesText() + { + String text; + SequenceI[] sequences = ap.av.getAlignment().getSequencesArray(); + boolean includeNonPositional = ap.av.isShowNPFeats(); + + FeaturesFile formatter = new FeaturesFile(); + final FeatureRenderer fr = ap.getFeatureRenderer(); + if (GFFFormat.isSelected()) + { + text = formatter.printGffFormat(sequences, fr, includeNonPositional); + } + else + { + text = formatter.printJalviewFormat(sequences, fr, + includeNonPositional); + } + return text; + } + + private void toTextbox_actionPerformed() + { + CutAndPasteTransfer cap = new CutAndPasteTransfer(); + + try + { + String text = getText(); + cap.setText(text); + Desktop.addInternalFrame(cap, (exportFeatures ? 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((exportFeatures ? 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(); + } + + private void close_actionPerformed() + { + 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(); + } + }); + toTextbox.setText(MessageManager.getString("label.to_textbox")); + toTextbox.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + toTextbox_actionPerformed(); + } + }); + close.setText(MessageManager.getString("action.close")); + close.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + close_actionPerformed(); + } + }); + 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(); +}