X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAnnotationExporter.java;h=81960e08a22ba15256ba12bf4750b8ce73576842;hb=3da878124135ff033f42d19d8733891b09e953cd;hp=ecf4b8e1aec1b66fe52c5b0600a76e2f9bf19320;hpb=227ee1c1c69c228b67d408a0a83ae51bf5811272;p=jalview.git diff --git a/src/jalview/gui/AnnotationExporter.java b/src/jalview/gui/AnnotationExporter.java index ecf4b8e..81960e0 100644 --- a/src/jalview/gui/AnnotationExporter.java +++ b/src/jalview/gui/AnnotationExporter.java @@ -1,6 +1,6 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2) - * Copyright (C) 2014 The Jalview Authors + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors * * This file is part of Jalview. * @@ -20,17 +20,34 @@ */ package jalview.gui; -import java.util.*; -import java.util.List; - -import java.awt.*; -import java.awt.event.*; -import javax.swing.*; - -import jalview.datamodel.*; -import jalview.io.*; +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 @@ -41,20 +58,22 @@ import jalview.util.MessageManager; */ public class AnnotationExporter extends JPanel { - JInternalFrame frame; + private JInternalFrame frame; - AlignmentPanel ap; + private AlignmentPanel ap; - boolean features = true; + /* + * true if exporting features, false if exporting annotations + */ + private boolean exportFeatures = true; - AlignmentAnnotation[] annotations; + private AlignmentAnnotation[] annotations; - List sequenceGroups; + private boolean wholeView; - Hashtable alignmentProperties; - - public AnnotationExporter() + public AnnotationExporter(AlignmentPanel panel) { + this.ap = panel; try { jbInit(); @@ -70,35 +89,56 @@ public class AnnotationExporter extends JPanel frame.getPreferredSize().height); } - public void exportFeatures(AlignmentPanel ap) + /** + * Configures the diglog for options to export visible features + */ + public void exportFeatures() { - this.ap = ap; - features = true; + exportFeatures = true; CSVFormat.setVisible(false); frame.setTitle(MessageManager.getString("label.export_features")); } - public void exportAnnotations(AlignmentPanel ap, - AlignmentAnnotation[] annotations, List list, - Hashtable alProperties) + /** + * Configures the dialog for options to export all visible annotations + */ + public void exportAnnotations() { - this.ap = ap; - features = false; + 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); - this.annotations = annotations; - this.sequenceGroups = list; - this.alignmentProperties = alProperties; frame.setTitle(MessageManager.getString("label.export_annotations")); } - public void toFile_actionPerformed(ActionEvent e) + private void toFile_actionPerformed() { + // TODO: JAL-3048 JalviewFileChooser - Save option JalviewFileChooser chooser = new JalviewFileChooser( - jalview.bin.Cache.getProperty("LAST_DIRECTORY")); + Cache.getProperty("LAST_DIRECTORY")); chooser.setFileView(new JalviewFileView()); - chooser.setDialogTitle(features ? MessageManager.getString("label.save_features_to_file") + chooser.setDialogTitle(exportFeatures + ? MessageManager.getString("label.save_features_to_file") : MessageManager.getString("label.save_annotation_to_file")); chooser.setToolTipText(MessageManager.getString("action.save")); @@ -106,40 +146,12 @@ public class AnnotationExporter extends JPanel if (value == JalviewFileChooser.APPROVE_OPTION) { - String text = MessageManager.getString("label.no_features_on_alignment"); - if (features) - { - if (GFFFormat.isSelected()) - { - text = new FeaturesFile().printGFFFormat(ap.av.getAlignment() - .getDataset().getSequencesArray(), - getDisplayedFeatureCols(), true, ap.av.isShowNpFeats());// ap.av.featuresDisplayed//); - } - else - { - text = new FeaturesFile().printJalviewFormat(ap.av.getAlignment() - .getDataset().getSequencesArray(), - getDisplayedFeatureCols(), true, ap.av.isShowNpFeats()); // ap.av.featuresDisplayed); - } - } - else - { - if (CSVFormat.isSelected()) - { - text = new AnnotationFile().printCSVAnnotations(annotations); - } - else - { - text = new AnnotationFile().printAnnotations(annotations, - sequenceGroups, alignmentProperties); - } - } + String text = getText(); try { - java.io.PrintWriter out = new java.io.PrintWriter( - new java.io.FileWriter(chooser.getSelectedFile())); - + PrintWriter out = new PrintWriter( + new FileWriter(chooser.getSelectedFile())); out.print(text); out.close(); } catch (Exception ex) @@ -148,86 +160,106 @@ public class AnnotationExporter extends JPanel } } - close_actionPerformed(null); + close_actionPerformed(); } - public void toTextbox_actionPerformed(ActionEvent e) + /** + * Answers the text to output for either Features (in GFF or Jalview format) or + * Annotations (in CSV or Jalview format) + * + * @return + */ + private String getText() { - String text = MessageManager.getString("label.no_features_on_alignment"); - if (features) + 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()) { - if (GFFFormat.isSelected()) - { - text = new FeaturesFile().printGFFFormat(ap.av.getAlignment() - .getDataset().getSequencesArray(), - getDisplayedFeatureCols(), true, ap.av.isShowNpFeats()); - } - else - { - text = new FeaturesFile().printJalviewFormat(ap.av.getAlignment() - .getDataset().getSequencesArray(), - getDisplayedFeatureCols(), true, ap.av.isShowNpFeats()); - } + text = new AnnotationFile().printCSVAnnotations(annotations); } - else if (!features) + else { - if (CSVFormat.isSelected()) + if (wholeView) { - text = new AnnotationFile().printCSVAnnotations(annotations); + text = new AnnotationFile().printAnnotationsForView(ap.av); } else { - text = new AnnotationFile().printAnnotations(annotations, - sequenceGroups, alignmentProperties); + 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, - (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); + 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((features ? MessageManager.formatMessage( + 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); + { ap.alignFrame.getTitle() }) + : MessageManager.formatMessage( + "label.generating_annotations_for_params", + new String[] + { ap.alignFrame.getTitle() })), + oom); cap.dispose(); } - close_actionPerformed(null); - } - - private Hashtable getDisplayedFeatureCols() - { - Hashtable fcols = new Hashtable(); - if (ap.av.getFeaturesDisplayed() == null) - { - return fcols; - } - Enumeration en = ap.av.getFeaturesDisplayed().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; + close_actionPerformed(); } - public void close_actionPerformed(ActionEvent e) + private void close_actionPerformed() { try { @@ -244,25 +276,28 @@ public class AnnotationExporter extends JPanel toFile.setText(MessageManager.getString("label.to_file")); toFile.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { - toFile_actionPerformed(e); + toFile_actionPerformed(); } }); toTextbox.setText(MessageManager.getString("label.to_textbox")); toTextbox.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { - toTextbox_actionPerformed(e); + toTextbox_actionPerformed(); } }); close.setText(MessageManager.getString("action.close")); close.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { - close_actionPerformed(e); + close_actionPerformed(); } }); jalviewFormat.setOpaque(false); @@ -313,5 +348,4 @@ public class AnnotationExporter extends JPanel JPanel jPanel3 = new JPanel(); FlowLayout flowLayout1 = new FlowLayout(); - }