added d martin to authors and fixed faq/discuss message
[jalview.git] / src / jalview / gui / AnnotationExporter.java
1 /*\r
2  * Jalview - A Sequence Alignment Editor and Viewer (Version 2.4)\r
3  * Copyright (C) 2008 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 package jalview.gui;\r
20 \r
21 import java.util.*;\r
22 \r
23 import java.awt.*;\r
24 import java.awt.event.*;\r
25 import javax.swing.*;\r
26 \r
27 import jalview.datamodel.*;\r
28 import jalview.io.*;\r
29 \r
30 /**\r
31  * \r
32  * GUI dialog for exporting features or alignment annotations depending upon which method is called.\r
33  * \r
34  * @author AMW\r
35  *\r
36  */\r
37 public class AnnotationExporter\r
38     extends JPanel\r
39 {\r
40   JInternalFrame frame;\r
41   AlignmentPanel ap;\r
42   boolean features = true;\r
43   AlignmentAnnotation[] annotations;\r
44   Vector sequenceGroups;\r
45   Hashtable alignmentProperties;\r
46 \r
47   public AnnotationExporter()\r
48   {\r
49     try\r
50     {\r
51       jbInit();\r
52     }\r
53     catch (Exception ex)\r
54     {\r
55       ex.printStackTrace();\r
56     }\r
57 \r
58     frame = new JInternalFrame();\r
59     frame.setContentPane(this);\r
60     frame.setLayer(JLayeredPane.PALETTE_LAYER);\r
61     Desktop.addInternalFrame(frame,\r
62                              "",\r
63                              260, 125);\r
64   }\r
65 \r
66   public void exportFeatures(AlignmentPanel ap)\r
67   {\r
68     this.ap = ap;\r
69     features = true;\r
70     CSVFormat.setVisible(false);\r
71     frame.setTitle("Export Features");\r
72   }\r
73 \r
74   public void exportAnnotations(AlignmentPanel ap,\r
75                                 AlignmentAnnotation[] annotations,\r
76                                 Vector sequenceGroups,\r
77                                 Hashtable alProperties)\r
78   {\r
79     this.ap = ap;\r
80     features = false;\r
81     GFFFormat.setVisible(false);\r
82     CSVFormat.setVisible(true);\r
83     this.annotations = annotations;\r
84     this.sequenceGroups = sequenceGroups;\r
85     this.alignmentProperties = alProperties;\r
86     frame.setTitle("Export Annotations");\r
87   }\r
88 \r
89   public void toFile_actionPerformed(ActionEvent e)\r
90   {\r
91     JalviewFileChooser chooser = new JalviewFileChooser(\r
92         jalview.bin.Cache.getProperty("LAST_DIRECTORY"));\r
93 \r
94     chooser.setFileView(new JalviewFileView());\r
95     chooser.setDialogTitle(\r
96         features ? "Save Features to File" : "Save Annotation to File");\r
97     chooser.setToolTipText("Save");\r
98 \r
99     int value = chooser.showSaveDialog(this);\r
100 \r
101     if (value == JalviewFileChooser.APPROVE_OPTION)\r
102     {\r
103       String text = "No features found on alignment";\r
104       if (features)\r
105       {\r
106         if (GFFFormat.isSelected())\r
107         {\r
108           text = new FeaturesFile().printGFFFormat(\r
109               ap.av.alignment.getDataset().getSequencesArray(),\r
110               ap.av.featuresDisplayed);\r
111         }\r
112         else\r
113         {\r
114           text = new FeaturesFile().printJalviewFormat(\r
115               ap.av.alignment.getDataset().getSequencesArray(),\r
116               ap.av.featuresDisplayed);\r
117         }\r
118       }\r
119       else\r
120       {\r
121         if (CSVFormat.isSelected())\r
122         {\r
123           text = new AnnotationFile().printCSVAnnotations(annotations);\r
124         } else {\r
125           text = new AnnotationFile().printAnnotations(\r
126             annotations,\r
127             sequenceGroups,\r
128             alignmentProperties);\r
129         }\r
130       }\r
131 \r
132       try\r
133       {\r
134         java.io.PrintWriter out = new java.io.PrintWriter(\r
135             new java.io.FileWriter(chooser.getSelectedFile()));\r
136 \r
137         out.print(text);\r
138         out.close();\r
139       }\r
140       catch (Exception ex)\r
141       {\r
142         ex.printStackTrace();\r
143       }\r
144     }\r
145 \r
146     close_actionPerformed(null);\r
147   }\r
148 \r
149   public void toTextbox_actionPerformed(ActionEvent e)\r
150   {\r
151     String text = "No features found on alignment";\r
152     if (features)\r
153     {\r
154       if (GFFFormat.isSelected())\r
155       {\r
156         text = new FeaturesFile().printGFFFormat(\r
157             ap.av.alignment.getDataset().getSequencesArray(),\r
158             ap.av.featuresDisplayed);\r
159       }\r
160       else\r
161       {\r
162         text = new FeaturesFile().printJalviewFormat(\r
163             ap.av.alignment.getDataset().getSequencesArray(),\r
164             ap.av.featuresDisplayed);\r
165       }\r
166     }\r
167     else if (!features)\r
168     {\r
169       if (CSVFormat.isSelected())\r
170       {\r
171         text = new AnnotationFile().printCSVAnnotations(annotations);\r
172       } else {\r
173         text = new AnnotationFile().printAnnotations(\r
174           annotations,\r
175           sequenceGroups,\r
176           alignmentProperties);\r
177       }\r
178     }\r
179 \r
180     CutAndPasteTransfer cap = new CutAndPasteTransfer();\r
181     cap.setText(text);\r
182     Desktop.addInternalFrame(cap,\r
183                              (features ? "Features for - " :\r
184                               "Annotations for - ")\r
185                              + ap.alignFrame.getTitle(),\r
186                              600,\r
187                              500);\r
188 \r
189     close_actionPerformed(null);\r
190   }\r
191 \r
192   public void close_actionPerformed(ActionEvent e)\r
193   {\r
194     try\r
195     {\r
196       frame.setClosed(true);\r
197     }\r
198     catch (java.beans.PropertyVetoException ex)\r
199     {}\r
200   }\r
201 \r
202   private void jbInit()\r
203       throws Exception\r
204   {\r
205     this.setLayout(flowLayout1);\r
206     toFile.setText("to File");\r
207     toFile.addActionListener(new ActionListener()\r
208     {\r
209       public void actionPerformed(ActionEvent e)\r
210       {\r
211         toFile_actionPerformed(e);\r
212       }\r
213     });\r
214     toTextbox.setText("to Textbox");\r
215     toTextbox.addActionListener(new ActionListener()\r
216     {\r
217       public void actionPerformed(ActionEvent e)\r
218       {\r
219         toTextbox_actionPerformed(e);\r
220       }\r
221     });\r
222     close.setText("Close");\r
223     close.addActionListener(new ActionListener()\r
224     {\r
225       public void actionPerformed(ActionEvent e)\r
226       {\r
227         close_actionPerformed(e);\r
228       }\r
229     });\r
230     jalviewFormat.setOpaque(false);\r
231     jalviewFormat.setSelected(true);\r
232     jalviewFormat.setText("Jalview");\r
233     GFFFormat.setOpaque(false);\r
234     GFFFormat.setText("GFF");\r
235     CSVFormat.setOpaque(false);\r
236     CSVFormat.setText("CSV(Spreadsheet)");\r
237     jLabel1.setHorizontalAlignment(SwingConstants.TRAILING);\r
238     jLabel1.setText("Format: ");\r
239     this.setBackground(Color.white);\r
240     jPanel3.setBorder(BorderFactory.createEtchedBorder());\r
241     jPanel3.setOpaque(false);\r
242     jPanel1.setOpaque(false);\r
243     jPanel1.add(toFile);\r
244     jPanel1.add(toTextbox);\r
245     jPanel1.add(close);\r
246     jPanel3.add(jLabel1);\r
247     jPanel3.add(jalviewFormat);\r
248     jPanel3.add(GFFFormat);\r
249     jPanel3.add(CSVFormat);\r
250     buttonGroup.add(jalviewFormat);\r
251     buttonGroup.add(GFFFormat);\r
252     buttonGroup.add(CSVFormat);\r
253     this.add(jPanel3, null);\r
254     this.add(jPanel1, null);\r
255   }\r
256 \r
257   JPanel jPanel1 = new JPanel();\r
258   JButton toFile = new JButton();\r
259   JButton toTextbox = new JButton();\r
260   JButton close = new JButton();\r
261   ButtonGroup buttonGroup = new ButtonGroup();\r
262   JRadioButton jalviewFormat = new JRadioButton();\r
263   JRadioButton GFFFormat = new JRadioButton();\r
264   JRadioButton CSVFormat = new JRadioButton();\r
265   JLabel jLabel1 = new JLabel();\r
266   JPanel jPanel3 = new JPanel();\r
267   FlowLayout flowLayout1 = new FlowLayout();\r
268 \r
269 }\r