/* * 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.FeatureColourI; import jalview.bin.Cache; import jalview.datamodel.AlignmentAnnotation; import jalview.datamodel.SequenceI; import jalview.datamodel.features.FeatureMatcherSetI; 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 java.util.List; 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 { 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() { 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(); Map featureColours = ap.getFeatureRenderer() .getDisplayedFeatureCols(); Map featureFilters = ap.getFeatureRenderer() .getFeatureFilters(); List featureGroups = ap.getFeatureRenderer() .getDisplayedFeatureGroups(); boolean includeNonPositional = ap.av.isShowNPFeats(); FeaturesFile formatter = new FeaturesFile(); if (GFFFormat.isSelected()) { text = formatter.printGffFormat(sequences, featureColours, featureGroups, includeNonPositional); } else { text = formatter.printJalviewFormat(sequences, featureColours, featureFilters, featureGroups, 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(); }