added CSV export of annotation rows to application.
[jalview.git] / src / jalview / gui / AnnotationExporter.java
1 /*\r
2  * Jalview - A Sequence Alignment Editor and Viewer\r
3  * Copyright (C) 2007 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
4  *\r
5  * This program is free software; you can redistribute it and/or\r
6  * modify it under the terms of the GNU General Public License\r
7  * as published by the Free Software Foundation; either version 2\r
8  * of the License, or (at your option) any later version.\r
9  *\r
10  * This program is distributed in the hope that it will be useful,\r
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
13  * GNU General Public License for more details.\r
14  *\r
15  * You should have received a copy of the GNU General Public License\r
16  * along with this program; if not, write to the Free Software\r
17  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA\r
18  */\r
19 \r
20 package jalview.gui;\r
21 \r
22 import java.util.*;\r
23 \r
24 import java.awt.*;\r
25 import java.awt.event.*;\r
26 import javax.swing.*;\r
27 \r
28 import jalview.datamodel.*;\r
29 import jalview.io.*;\r
30 \r
31 /**\r
32  * \r
33  * GUI dialog for exporting features or alignment annotations depending upon which method is called.\r
34  * \r
35  * @author AMW\r
36  *\r
37  */\r
38 public class AnnotationExporter\r
39     extends JPanel\r
40 {\r
41   JInternalFrame frame;\r
42   AlignmentPanel ap;\r
43   boolean features = true;\r
44   AlignmentAnnotation[] annotations;\r
45   Vector sequenceGroups;\r
46   Hashtable alignmentProperties;\r
47 \r
48   public AnnotationExporter()\r
49   {\r
50     try\r
51     {\r
52       jbInit();\r
53     }\r
54     catch (Exception ex)\r
55     {\r
56       ex.printStackTrace();\r
57     }\r
58 \r
59     frame = new JInternalFrame();\r
60     frame.setContentPane(this);\r
61     frame.setLayer(JLayeredPane.PALETTE_LAYER);\r
62     Desktop.addInternalFrame(frame,\r
63                              "",\r
64                              260, 125);\r
65   }\r
66 \r
67   public void exportFeatures(AlignmentPanel ap)\r
68   {\r
69     this.ap = ap;\r
70     features = true;\r
71     CSVFormat.setVisible(false);\r
72     frame.setTitle("Export Features");\r
73   }\r
74 \r
75   public void exportAnnotations(AlignmentPanel ap,\r
76                                 AlignmentAnnotation[] annotations,\r
77                                 Vector sequenceGroups,\r
78                                 Hashtable alProperties)\r
79   {\r
80     this.ap = ap;\r
81     features = false;\r
82     GFFFormat.setVisible(false);\r
83     CSVFormat.setVisible(true);\r
84     this.annotations = annotations;\r
85     this.sequenceGroups = sequenceGroups;\r
86     this.alignmentProperties = alProperties;\r
87     frame.setTitle("Export Annotations");\r
88   }\r
89 \r
90   public void toFile_actionPerformed(ActionEvent e)\r
91   {\r
92     JalviewFileChooser chooser = new JalviewFileChooser(\r
93         jalview.bin.Cache.getProperty("LAST_DIRECTORY"));\r
94 \r
95     chooser.setFileView(new JalviewFileView());\r
96     chooser.setDialogTitle(\r
97         features ? "Save Features to File" : "Save Annotation to File");\r
98     chooser.setToolTipText("Save");\r
99 \r
100     int value = chooser.showSaveDialog(this);\r
101 \r
102     if (value == JalviewFileChooser.APPROVE_OPTION)\r
103     {\r
104       String text = "No features found on alignment";\r
105       if (features)\r
106       {\r
107         if (GFFFormat.isSelected())\r
108         {\r
109           text = new FeaturesFile().printGFFFormat(\r
110               ap.av.alignment.getDataset().getSequencesArray(),\r
111               ap.av.featuresDisplayed);\r
112         }\r
113         else\r
114         {\r
115           text = new FeaturesFile().printJalviewFormat(\r
116               ap.av.alignment.getDataset().getSequencesArray(),\r
117               ap.av.featuresDisplayed);\r
118         }\r
119       }\r
120       else\r
121       {\r
122         if (CSVFormat.isSelected())\r
123         {\r
124           text = new AnnotationFile().printCSVAnnotations(annotations);\r
125         } else {\r
126           text = new AnnotationFile().printAnnotations(\r
127             annotations,\r
128             sequenceGroups,\r
129             alignmentProperties);\r
130         }\r
131       }\r
132 \r
133       try\r
134       {\r
135         java.io.PrintWriter out = new java.io.PrintWriter(\r
136             new java.io.FileWriter(chooser.getSelectedFile()));\r
137 \r
138         out.print(text);\r
139         out.close();\r
140       }\r
141       catch (Exception ex)\r
142       {\r
143         ex.printStackTrace();\r
144       }\r
145     }\r
146 \r
147     close_actionPerformed(null);\r
148   }\r
149 \r
150   public void toTextbox_actionPerformed(ActionEvent e)\r
151   {\r
152     String text = "No features found on alignment";\r
153     if (features)\r
154     {\r
155       if (GFFFormat.isSelected())\r
156       {\r
157         text = new FeaturesFile().printGFFFormat(\r
158             ap.av.alignment.getDataset().getSequencesArray(),\r
159             ap.av.featuresDisplayed);\r
160       }\r
161       else\r
162       {\r
163         text = new FeaturesFile().printJalviewFormat(\r
164             ap.av.alignment.getDataset().getSequencesArray(),\r
165             ap.av.featuresDisplayed);\r
166       }\r
167     }\r
168     else if (!features)\r
169     {\r
170       if (CSVFormat.isSelected())\r
171       {\r
172         text = new AnnotationFile().printCSVAnnotations(annotations);\r
173       } else {\r
174         text = new AnnotationFile().printAnnotations(\r
175           annotations,\r
176           sequenceGroups,\r
177           alignmentProperties);\r
178       }\r
179     }\r
180 \r
181     CutAndPasteTransfer cap = new CutAndPasteTransfer();\r
182     cap.setText(text);\r
183     Desktop.addInternalFrame(cap,\r
184                              (features ? "Features for - " :\r
185                               "Annotations for - ")\r
186                              + ap.alignFrame.getTitle(),\r
187                              600,\r
188                              500);\r
189 \r
190     close_actionPerformed(null);\r
191   }\r
192 \r
193   public void close_actionPerformed(ActionEvent e)\r
194   {\r
195     try\r
196     {\r
197       frame.setClosed(true);\r
198     }\r
199     catch (java.beans.PropertyVetoException ex)\r
200     {}\r
201   }\r
202 \r
203   private void jbInit()\r
204       throws Exception\r
205   {\r
206     this.setLayout(flowLayout1);\r
207     toFile.setText("to File");\r
208     toFile.addActionListener(new ActionListener()\r
209     {\r
210       public void actionPerformed(ActionEvent e)\r
211       {\r
212         toFile_actionPerformed(e);\r
213       }\r
214     });\r
215     toTextbox.setText("to Textbox");\r
216     toTextbox.addActionListener(new ActionListener()\r
217     {\r
218       public void actionPerformed(ActionEvent e)\r
219       {\r
220         toTextbox_actionPerformed(e);\r
221       }\r
222     });\r
223     close.setText("Close");\r
224     close.addActionListener(new ActionListener()\r
225     {\r
226       public void actionPerformed(ActionEvent e)\r
227       {\r
228         close_actionPerformed(e);\r
229       }\r
230     });\r
231     jalviewFormat.setOpaque(false);\r
232     jalviewFormat.setSelected(true);\r
233     jalviewFormat.setText("Jalview");\r
234     GFFFormat.setOpaque(false);\r
235     GFFFormat.setText("GFF");\r
236     CSVFormat.setOpaque(false);\r
237     CSVFormat.setText("CSV(Spreadsheet)");\r
238     jLabel1.setHorizontalAlignment(SwingConstants.TRAILING);\r
239     jLabel1.setText("Format: ");\r
240     this.setBackground(Color.white);\r
241     jPanel3.setBorder(BorderFactory.createEtchedBorder());\r
242     jPanel3.setOpaque(false);\r
243     jPanel1.setOpaque(false);\r
244     jPanel1.add(toFile);\r
245     jPanel1.add(toTextbox);\r
246     jPanel1.add(close);\r
247     jPanel3.add(jLabel1);\r
248     jPanel3.add(jalviewFormat);\r
249     jPanel3.add(GFFFormat);\r
250     jPanel3.add(CSVFormat);\r
251     buttonGroup.add(jalviewFormat);\r
252     buttonGroup.add(GFFFormat);\r
253     buttonGroup.add(CSVFormat);\r
254     this.add(jPanel3, null);\r
255     this.add(jPanel1, null);\r
256   }\r
257 \r
258   JPanel jPanel1 = new JPanel();\r
259   JButton toFile = new JButton();\r
260   JButton toTextbox = new JButton();\r
261   JButton close = new JButton();\r
262   ButtonGroup buttonGroup = new ButtonGroup();\r
263   JRadioButton jalviewFormat = new JRadioButton();\r
264   JRadioButton GFFFormat = new JRadioButton();\r
265   JRadioButton CSVFormat = new JRadioButton();\r
266   JLabel jLabel1 = new JLabel();\r
267   JPanel jPanel3 = new JPanel();\r
268   FlowLayout flowLayout1 = new FlowLayout();\r
269 \r
270 }\r