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