SequenceFetcher new class
[jalview.git] / src / jalview / gui / SequenceFetcher.java
1 package jalview.gui;\r
2 \r
3 import javax.swing.*;\r
4 import java.awt.*;\r
5 import java.awt.event.ActionListener;\r
6 import java.awt.event.ActionEvent;\r
7 import MCview.PDBfile;\r
8 import jalview.io.EBIFetchClient;\r
9 import MCview.PDBChain;\r
10 import jalview.datamodel.Alignment;\r
11 import jalview.io.FormatAdapter;\r
12 import jalview.datamodel.SequenceI;\r
13 import jalview.io.IdentifyFile;\r
14 import jalview.analysis.AlignSeq;\r
15 import jalview.datamodel.*;\r
16 \r
17 public class SequenceFetcher\r
18     extends JPanel implements Runnable\r
19 {\r
20   JInternalFrame frame;\r
21   AlignFrame alignFrame;\r
22   public SequenceFetcher(AlignFrame af)\r
23   {\r
24     alignFrame = af;\r
25     database.addItem("-- Select Database --");\r
26     database.addItem("Uniprot");\r
27     database.addItem("EMBL");\r
28     database.addItem("EMBLCDS");\r
29     database.addItem("PDB");\r
30 \r
31     try\r
32     {\r
33       jbInit();\r
34     }\r
35     catch (Exception ex)\r
36     {\r
37       ex.printStackTrace();\r
38     }\r
39 \r
40     frame = new JInternalFrame();\r
41     frame.setContentPane(this);\r
42     Desktop.addInternalFrame(frame, "Sequence Fetcher", 390, 120);\r
43   }\r
44 \r
45   private void jbInit()\r
46       throws Exception\r
47   {\r
48     this.setLayout(gridBagLayout1);\r
49     database.setFont(new java.awt.Font("Verdana", Font.PLAIN, 11));\r
50     jLabel1.setFont(new java.awt.Font("Verdana", Font.ITALIC, 11));\r
51     jLabel1.setText(\r
52         "Separate multiple accession ids with semi colon \";\"");\r
53     ok.setText("OK");\r
54     ok.addActionListener(new ActionListener()\r
55     {\r
56       public void actionPerformed(ActionEvent e)\r
57       {\r
58         ok_actionPerformed(e);\r
59       }\r
60     });\r
61     cancel.setText("Cancel");\r
62     cancel.addActionListener(new ActionListener()\r
63     {\r
64       public void actionPerformed(ActionEvent e)\r
65       {\r
66         cancel_actionPerformed(e);\r
67       }\r
68     });\r
69     textfield.setFont(new java.awt.Font("Verdana", Font.PLAIN, 11));\r
70     textfield.addActionListener(new ActionListener()\r
71     {\r
72       public void actionPerformed(ActionEvent e)\r
73       {\r
74         ok_actionPerformed(e);\r
75       }\r
76     });\r
77     jPanel1.add(ok);\r
78     jPanel1.add(cancel);\r
79     this.add(jLabel1, new GridBagConstraints(0, 0, 2, 1, 0.0, 0.0\r
80                                              , GridBagConstraints.WEST,\r
81                                              GridBagConstraints.NONE,\r
82                                              new Insets(7, 4, 0, 6), 77, 6));\r
83     this.add(textfield, new GridBagConstraints(1, 1, 1, 1, 1.0, 0.0\r
84                                                , GridBagConstraints.WEST,\r
85                                                GridBagConstraints.HORIZONTAL,\r
86                                                new Insets(0, 0, 0, 6), 221, 1));\r
87     this.add(jPanel1, new GridBagConstraints(0, 2, 2, 1, 1.0, 1.0\r
88                                              , GridBagConstraints.WEST,\r
89                                              GridBagConstraints.BOTH,\r
90                                              new Insets(7, -2, 7, 12), 241, -2));\r
91     this.add(database, new GridBagConstraints(0, 1, 1, 1, 1.0, 0.0\r
92                                               , GridBagConstraints.CENTER,\r
93                                               GridBagConstraints.NONE,\r
94                                               new Insets(0, 4, 0, 0), 1, 0));\r
95   }\r
96 \r
97   JComboBox database = new JComboBox();\r
98   JLabel jLabel1 = new JLabel();\r
99   JButton ok = new JButton();\r
100   JButton cancel = new JButton();\r
101   JPanel jPanel1 = new JPanel();\r
102   JTextField textfield = new JTextField();\r
103   GridBagLayout gridBagLayout1 = new GridBagLayout();\r
104   public void cancel_actionPerformed(ActionEvent e)\r
105   {\r
106     try\r
107     {\r
108       frame.setClosed(true);\r
109     }\r
110     catch (Exception ex)\r
111     {}\r
112   }\r
113 \r
114   public void ok_actionPerformed(ActionEvent e)\r
115   {\r
116     frame.setTitle("Sequence Fetcher - Fetching Sequence from " +\r
117                    database.getSelectedItem());\r
118     database.setEnabled(false);\r
119     textfield.setEnabled(false);\r
120     ok.setEnabled(false);\r
121     cancel.setEnabled(false);\r
122 \r
123     Thread worker = new Thread(this);\r
124     worker.start();\r
125 \r
126   }\r
127 \r
128   public void run()\r
129   {\r
130     StringBuffer result = new StringBuffer();\r
131     if (database.getSelectedItem().equals("Uniprot")\r
132         || database.getSelectedItem().equals("EMBL")\r
133         || database.getSelectedItem().equals("EMBLCDS"))\r
134     {\r
135       EBIFetchClient dbFetch = new EBIFetchClient();\r
136       String[] reply = dbFetch.fetchData(\r
137           database.getSelectedItem().toString().toLowerCase(\r
138           ) + ":" + textfield.getText(),\r
139           "fasta", "raw");\r
140 \r
141       for (int i = 0; i < reply.length; i++)\r
142         result.append(reply[i]+"\n");\r
143     }\r
144     else if (database.getSelectedItem().equals("PDB"))\r
145     {\r
146       EBIFetchClient ebi = new EBIFetchClient();\r
147       String[] reply = ebi.fetchData("pdb:" + textfield.getText(), "pdb",\r
148                                      "raw");\r
149       PDBfile pdbfile = new PDBfile(reply);\r
150       for (int i = 0; i < pdbfile.chains.size(); i++)\r
151       {\r
152         result.append("\n>" +\r
153                      ( (PDBChain) pdbfile.chains.elementAt(i)).sequence.getName() +\r
154                      "\n"\r
155                      +\r
156                      ( (PDBChain) pdbfile.chains.elementAt(i)).sequence.\r
157                      getSequence());\r
158       }\r
159     }\r
160 \r
161     if (result.length() > 0)\r
162     {\r
163       String format = IdentifyFile.Identify(result.toString(), "Paste");\r
164       SequenceI[] sequences = null;\r
165 \r
166       if (FormatAdapter.formats.contains(format))\r
167       {\r
168         sequences = new FormatAdapter().readFile(result.toString(), "Paste", format);\r
169         if (sequences != null)\r
170         {\r
171           if(alignFrame==null)\r
172           {\r
173             AlignFrame af = new AlignFrame(new Alignment(sequences));\r
174             af.currentFileFormat = format;\r
175             Desktop.addInternalFrame(af, "Cut & Paste input - " + format,\r
176                                      AlignFrame.NEW_WINDOW_WIDTH,\r
177                                      AlignFrame.NEW_WINDOW_HEIGHT);\r
178             af.statusBar.setText("Successfully pasted alignment file");\r
179             try\r
180             {\r
181               af.setMaximum(jalview.bin.Cache.getDefault("SHOW_FULLSCREEN", false));\r
182             }\r
183             catch (Exception ex)\r
184             {}\r
185           }\r
186           else\r
187           {\r
188             for (int i = 0; i < sequences.length; i++)\r
189             {\r
190               alignFrame.viewport.alignment.addSequence(sequences[i]);\r
191 \r
192               ////////////////////////////\r
193               //Datset needs extension;\r
194               /////////////////////////////\r
195               Sequence ds = new Sequence(sequences[i].getName(),\r
196                                          AlignSeq.extractGaps("-. ",\r
197                   sequences[i].getSequence()),\r
198                                          sequences[i].getStart(),\r
199                                          sequences[i].getEnd());\r
200               sequences[i].setDatasetSequence(ds);\r
201               alignFrame.viewport.alignment.getDataset().addSequence(ds);\r
202             }\r
203             alignFrame.viewport.setEndSeq(alignFrame.viewport.alignment.\r
204                                           getHeight());\r
205             alignFrame.viewport.alignment.getWidth();\r
206             alignFrame.viewport.firePropertyChange("alignment", null,\r
207                 alignFrame.viewport.getAlignment().getSequences());\r
208 \r
209           }\r
210 \r
211           if (database.getSelectedItem().equals("PDB"))\r
212           {\r
213             for (int i = 0; i < sequences.length; i++)\r
214             {\r
215               PDBEntry entry = new PDBEntry();\r
216               entry.setId(textfield.getText());\r
217               sequences[i].getDatasetSequence().addPDBId(entry);\r
218             }\r
219           }\r
220 \r
221         }\r
222       }\r
223     }\r
224 \r
225     database.setEnabled(true);\r
226     textfield.setEnabled(true);\r
227     ok.setEnabled(true);\r
228     cancel.setEnabled(true);\r
229     frame.setTitle("Sequence Fetcher");\r
230   }\r
231 }\r
232 \r
233 \r
234 \r
235 \r