Formatting
[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 public class AnnotationExporter\r
32     extends JPanel\r
33 {\r
34   JInternalFrame frame;\r
35   AlignmentPanel ap;\r
36   boolean features = true;\r
37   AlignmentAnnotation[] annotations;\r
38   Vector sequenceGroups;\r
39 \r
40   public AnnotationExporter()\r
41   {\r
42     try\r
43     {\r
44       jbInit();\r
45     }\r
46     catch (Exception ex)\r
47     {\r
48       ex.printStackTrace();\r
49     }\r
50 \r
51     frame = new JInternalFrame();\r
52     frame.setContentPane(this);\r
53     frame.setLayer(JLayeredPane.PALETTE_LAYER);\r
54     Desktop.addInternalFrame(frame,\r
55                              "",\r
56                              260, 125);\r
57   }\r
58 \r
59   public void exportFeatures(AlignmentPanel ap)\r
60   {\r
61     this.ap = ap;\r
62     features = true;\r
63     frame.setTitle("Export Features");\r
64   }\r
65 \r
66   public void exportAnnotations(AlignmentPanel ap,\r
67                                 AlignmentAnnotation[] annotations,\r
68                                 Vector sequenceGroups)\r
69   {\r
70     this.ap = ap;\r
71     features = false;\r
72     GFFFormat.setVisible(false);\r
73     this.annotations = annotations;\r
74     this.sequenceGroups = sequenceGroups;\r
75     frame.setTitle("Export Annotations");\r
76   }\r
77 \r
78   public void toFile_actionPerformed(ActionEvent e)\r
79   {\r
80     JalviewFileChooser chooser = new JalviewFileChooser(\r
81         jalview.bin.Cache.getProperty("LAST_DIRECTORY"));\r
82 \r
83     chooser.setFileView(new JalviewFileView());\r
84     chooser.setDialogTitle(\r
85         features ? "Save Features to File" : "Save Annotation to File");\r
86     chooser.setToolTipText("Save");\r
87 \r
88     int value = chooser.showSaveDialog(this);\r
89 \r
90     if (value == JalviewFileChooser.APPROVE_OPTION)\r
91     {\r
92       String text = "No features found on alignment";\r
93       if (features)\r
94       {\r
95         if (GFFFormat.isSelected())\r
96         {\r
97           text = new FeaturesFile().printGFFFormat(\r
98               ap.av.alignment.getDataset().getSequencesArray(),\r
99               ap.av.featuresDisplayed);\r
100         }\r
101         else\r
102         {\r
103           text = new FeaturesFile().printJalviewFormat(\r
104               ap.av.alignment.getDataset().getSequencesArray(),\r
105               ap.av.featuresDisplayed);\r
106         }\r
107       }\r
108       else\r
109       {\r
110         text = new AnnotationFile().printAnnotations(\r
111             annotations,\r
112             sequenceGroups);\r
113       }\r
114 \r
115       try\r
116       {\r
117         java.io.PrintWriter out = new java.io.PrintWriter(\r
118             new java.io.FileWriter(chooser.getSelectedFile()));\r
119 \r
120         out.print(text);\r
121         out.close();\r
122       }\r
123       catch (Exception ex)\r
124       {\r
125         ex.printStackTrace();\r
126       }\r
127     }\r
128   }\r
129 \r
130   public void toTextbox_actionPerformed(ActionEvent e)\r
131   {\r
132     String text = "No features found on alignment";\r
133     if (features)\r
134     {\r
135       if (GFFFormat.isSelected())\r
136       {\r
137         text = new FeaturesFile().printGFFFormat(\r
138             ap.av.alignment.getDataset().getSequencesArray(),\r
139             ap.av.featuresDisplayed);\r
140       }\r
141       else\r
142       {\r
143         text = new FeaturesFile().printJalviewFormat(\r
144             ap.av.alignment.getDataset().getSequencesArray(),\r
145             ap.av.featuresDisplayed);\r
146       }\r
147     }\r
148     else if (!features)\r
149     {\r
150       text = new AnnotationFile().printAnnotations(\r
151           annotations,\r
152           sequenceGroups);\r
153     }\r
154 \r
155     CutAndPasteTransfer cap = new CutAndPasteTransfer();\r
156     cap.setText(text);\r
157     Desktop.addInternalFrame(cap,\r
158                              (features ? "Features for - " :\r
159                               "Annotations for - ")\r
160                              + ap.alignFrame.getTitle(),\r
161                              600,\r
162                              500);\r
163 \r
164   }\r
165 \r
166   public void close_actionPerformed(ActionEvent e)\r
167   {\r
168     try\r
169     {\r
170       frame.setClosed(true);\r
171     }\r
172     catch (java.beans.PropertyVetoException ex)\r
173     {}\r
174   }\r
175 \r
176   private void jbInit()\r
177       throws Exception\r
178   {\r
179     this.setLayout(flowLayout1);\r
180     toFile.setText("to File");\r
181     toFile.addActionListener(new ActionListener()\r
182     {\r
183       public void actionPerformed(ActionEvent e)\r
184       {\r
185         toFile_actionPerformed(e);\r
186       }\r
187     });\r
188     toTextbox.setText("to Textbox");\r
189     toTextbox.addActionListener(new ActionListener()\r
190     {\r
191       public void actionPerformed(ActionEvent e)\r
192       {\r
193         toTextbox_actionPerformed(e);\r
194       }\r
195     });\r
196     close.setText("Close");\r
197     close.addActionListener(new ActionListener()\r
198     {\r
199       public void actionPerformed(ActionEvent e)\r
200       {\r
201         close_actionPerformed(e);\r
202       }\r
203     });\r
204     jalviewFormat.setOpaque(false);\r
205     jalviewFormat.setSelected(true);\r
206     jalviewFormat.setText("Jalview");\r
207     GFFFormat.setOpaque(false);\r
208     GFFFormat.setText("GFF");\r
209     jLabel1.setHorizontalAlignment(SwingConstants.TRAILING);\r
210     jLabel1.setText("Format: ");\r
211     this.setBackground(Color.white);\r
212     jPanel3.setBorder(BorderFactory.createEtchedBorder());\r
213     jPanel3.setOpaque(false);\r
214     jPanel1.setOpaque(false);\r
215     jPanel1.add(toFile);\r
216     jPanel1.add(toTextbox);\r
217     jPanel1.add(close);\r
218     jPanel3.add(jLabel1);\r
219     jPanel3.add(jalviewFormat);\r
220     jPanel3.add(GFFFormat);\r
221     buttonGroup.add(jalviewFormat);\r
222     buttonGroup.add(GFFFormat);\r
223     this.add(jPanel3, null);\r
224     this.add(jPanel1, null);\r
225   }\r
226 \r
227   JPanel jPanel1 = new JPanel();\r
228   JButton toFile = new JButton();\r
229   JButton toTextbox = new JButton();\r
230   JButton close = new JButton();\r
231   ButtonGroup buttonGroup = new ButtonGroup();\r
232   JRadioButton jalviewFormat = new JRadioButton();\r
233   JRadioButton GFFFormat = new JRadioButton();\r
234   JLabel jLabel1 = new JLabel();\r
235   JPanel jPanel3 = new JPanel();\r
236   FlowLayout flowLayout1 = new FlowLayout();\r
237 \r
238 }\r