X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAnnotationExporter.java;h=de6aaa09bb059dcc54c3ea93920940e827fef3ae;hb=153dd62dc91da13ae732600e6ea55ddbe15eab39;hp=522622d7ba7b814cf8dd683afc6ffe1e848451d0;hpb=5d455c2d0b8b1ac94d82584e2885654693abb39f;p=jalview.git diff --git a/src/jalview/gui/AnnotationExporter.java b/src/jalview/gui/AnnotationExporter.java index 522622d..de6aaa0 100755 --- a/src/jalview/gui/AnnotationExporter.java +++ b/src/jalview/gui/AnnotationExporter.java @@ -1,53 +1,59 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer - * Copyright (C) 2006 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 + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.6) + * Copyright (C) 2010 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle + * + * 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 . */ - package jalview.gui; +import java.util.*; + +import java.awt.*; +import java.awt.event.*; import javax.swing.*; -import java.awt.event.ActionListener; -import java.awt.event.ActionEvent; +import jalview.datamodel.*; import jalview.io.*; -import jalview.datamodel.AlignmentAnnotation; - -import java.awt.Color; -import java.awt.FlowLayout; -import java.util.Vector; -import javax.swing.BorderFactory; - -public class AnnotationExporter - extends JPanel +/** + * + * 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; + + AlignmentAnnotation[] annotations; + Vector sequenceGroups; + Hashtable alignmentProperties; + public AnnotationExporter() { try { jbInit(); - } - catch (Exception ex) + } catch (Exception ex) { ex.printStackTrace(); } @@ -55,123 +61,169 @@ public class AnnotationExporter frame = new JInternalFrame(); frame.setContentPane(this); frame.setLayer(JLayeredPane.PALETTE_LAYER); - Desktop.addInternalFrame(frame, - "", - 260, 125); + 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) + 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")); + 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"); + chooser.setFileView(new JalviewFileView()); + chooser.setDialogTitle(features ? "Save Features to File" + : "Save Annotation to File"); + chooser.setToolTipText("Save"); - int value = chooser.showSaveDialog(this); + int value = chooser.showSaveDialog(this); - if (value == JalviewFileChooser.APPROVE_OPTION) + if (value == JalviewFileChooser.APPROVE_OPTION) + { + String text = "No features found on alignment"; + if (features) { - String text = "No features found on alignment"; - if (features) + if (GFFFormat.isSelected()) { - if (GFFFormat.isSelected()) - text = new FeaturesFile().printGFFFormat( - ap.av.alignment.getDataset().getSequencesArray(), - ap.av.featuresDisplayed); - else - text = new FeaturesFile().printJalviewFormat( - ap.av.alignment.getDataset().getSequencesArray(), - ap.av.featuresDisplayed); + text = new FeaturesFile().printGFFFormat(ap.av.alignment + .getDataset().getSequencesArray(), + getDisplayedFeatureCols(), true, ap.av.isShowNpFeats());// ap.av.featuresDisplayed//); } else { - text = new AnnotationFile().printAnnotations( - annotations, - sequenceGroups ); + text = new FeaturesFile().printJalviewFormat(ap.av.alignment + .getDataset().getSequencesArray(), + getDisplayedFeatureCols(), true, ap.av.isShowNpFeats()); // ap.av.featuresDisplayed); } - - try + } + else + { + if (CSVFormat.isSelected()) { - java.io.PrintWriter out = new java.io.PrintWriter( - new java.io.FileWriter(chooser.getSelectedFile())); - - out.print(text); - out.close(); + text = new AnnotationFile().printCSVAnnotations(annotations); } - catch (Exception ex) + else { - ex.printStackTrace(); + 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 (features) { if (GFFFormat.isSelected()) - text = new FeaturesFile().printGFFFormat( - ap.av.alignment.getDataset().getSequencesArray(), - ap.av.featuresDisplayed); + { + text = new FeaturesFile().printGFFFormat(ap.av.alignment + .getDataset().getSequencesArray(), + getDisplayedFeatureCols(), true, ap.av.isShowNpFeats()); + } else - text = new FeaturesFile().printJalviewFormat( - ap.av.alignment.getDataset().getSequencesArray(), - ap.av.featuresDisplayed); + { + text = new FeaturesFile().printJalviewFormat(ap.av.alignment + .getDataset().getSequencesArray(), + getDisplayedFeatureCols(), true, ap.av.isShowNpFeats()); + } } - else if(!features) + else if (!features) { - text = new AnnotationFile().printAnnotations( - annotations, - sequenceGroups ); + 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); + try + { + cap.setText(text); + Desktop.addInternalFrame(cap, (features ? "Features for - " + : "Annotations for - ") + ap.alignFrame.getTitle(), 600, 500); + } catch (OutOfMemoryError oom) + { + new OOMWarning("generating " + + (features ? "Features for - " : "Annotations for - ") + + ap.alignFrame.getTitle(), oom); + cap.dispose(); + } + close_actionPerformed(null); + } + private Hashtable getDisplayedFeatureCols() + { + Hashtable fcols = new Hashtable(); + if (ap.av.featuresDisplayed==null) + { + return fcols; + } + 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{ + try + { frame.setClosed(true); - }catch(java.beans.PropertyVetoException ex) - {} + } catch (java.beans.PropertyVetoException ex) + { + } } - - - private void jbInit() - throws Exception + private void jbInit() throws Exception { this.setLayout(flowLayout1); toFile.setText("to File"); @@ -203,6 +255,8 @@ public class AnnotationExporter 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); @@ -215,21 +269,34 @@ public class AnnotationExporter 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(); }