3 import javax.swing.*;
\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
17 public class SequenceFetcher
\r
18 extends JPanel implements Runnable
\r
20 JInternalFrame frame;
\r
21 AlignFrame alignFrame;
\r
22 public SequenceFetcher(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
35 catch (Exception ex)
\r
37 ex.printStackTrace();
\r
40 frame = new JInternalFrame();
\r
41 frame.setContentPane(this);
\r
42 if(System.getProperty("os.name").startsWith("Mac"))
\r
43 Desktop.addInternalFrame(frame, "Sequence Fetcher", 390, 135);
\r
45 Desktop.addInternalFrame(frame, "Sequence Fetcher", 390, 120);
\r
48 private void jbInit()
\r
51 this.setLayout(gridBagLayout1);
\r
52 database.setFont(new java.awt.Font("Verdana", Font.PLAIN, 11));
\r
53 jLabel1.setFont(new java.awt.Font("Verdana", Font.ITALIC, 11));
\r
55 "Separate multiple accession ids with semi colon \";\"");
\r
57 ok.addActionListener(new ActionListener()
\r
59 public void actionPerformed(ActionEvent e)
\r
61 ok_actionPerformed(e);
\r
64 cancel.setText("Cancel");
\r
65 cancel.addActionListener(new ActionListener()
\r
67 public void actionPerformed(ActionEvent e)
\r
69 cancel_actionPerformed(e);
\r
72 textfield.setFont(new java.awt.Font("Verdana", Font.PLAIN, 11));
\r
73 textfield.addActionListener(new ActionListener()
\r
75 public void actionPerformed(ActionEvent e)
\r
77 ok_actionPerformed(e);
\r
81 jPanel1.add(cancel);
\r
82 this.add(jLabel1, new GridBagConstraints(0, 0, 2, 1, 0.0, 0.0
\r
83 , GridBagConstraints.WEST,
\r
84 GridBagConstraints.NONE,
\r
85 new Insets(7, 4, 0, 6), 77, 6));
\r
86 this.add(textfield, new GridBagConstraints(1, 1, 1, 1, 1.0, 0.0
\r
87 , GridBagConstraints.WEST,
\r
88 GridBagConstraints.HORIZONTAL,
\r
89 new Insets(0, 0, 0, 6), 221, 1));
\r
90 this.add(jPanel1, new GridBagConstraints(0, 2, 2, 1, 1.0, 1.0
\r
91 , GridBagConstraints.WEST,
\r
92 GridBagConstraints.BOTH,
\r
93 new Insets(7, -2, 7, 12), 241, -2));
\r
94 this.add(database, new GridBagConstraints(0, 1, 1, 1, 1.0, 0.0
\r
95 , GridBagConstraints.CENTER,
\r
96 GridBagConstraints.NONE,
\r
97 new Insets(0, 4, 0, 0), 1, 0));
\r
100 JComboBox database = new JComboBox();
\r
101 JLabel jLabel1 = new JLabel();
\r
102 JButton ok = new JButton();
\r
103 JButton cancel = new JButton();
\r
104 JPanel jPanel1 = new JPanel();
\r
105 JTextField textfield = new JTextField();
\r
106 GridBagLayout gridBagLayout1 = new GridBagLayout();
\r
107 public void cancel_actionPerformed(ActionEvent e)
\r
111 frame.setClosed(true);
\r
113 catch (Exception ex)
\r
117 public void ok_actionPerformed(ActionEvent e)
\r
119 frame.setTitle("WSDBfetch@EBI Sequence Fetcher - Fetching Sequence...");
\r
120 database.setEnabled(false);
\r
121 textfield.setEnabled(false);
\r
122 ok.setEnabled(false);
\r
123 cancel.setEnabled(false);
\r
125 Thread worker = new Thread(this);
\r
131 String error = null;
\r
132 StringBuffer result = new StringBuffer();
\r
133 if (database.getSelectedItem().equals("Uniprot")
\r
134 || database.getSelectedItem().equals("EMBL")
\r
135 || database.getSelectedItem().equals("EMBLCDS"))
\r
137 EBIFetchClient dbFetch = new EBIFetchClient();
\r
138 String[] reply = dbFetch.fetchData(
\r
139 database.getSelectedItem().toString().toLowerCase(
\r
140 ) + ":" + textfield.getText(),
\r
143 for (int i = 0; i < reply.length; i++)
\r
144 result.append(reply[i] + "\n");
\r
146 else if (database.getSelectedItem().equals("PDB"))
\r
148 String id = textfield.getText().toUpperCase();
\r
150 if(id.indexOf(":")>-1)
\r
152 chain = id.substring(id.indexOf(":")+1);
\r
153 id = id.substring(0,id.indexOf(":"));
\r
154 System.out.println(id+" "+chain);
\r
157 EBIFetchClient ebi = new EBIFetchClient();
\r
158 String[] reply = ebi.fetchData("pdb:" + id, "pdb",
\r
161 PDBfile pdbfile = new PDBfile(reply);
\r
162 for (int i = 0; i < pdbfile.chains.size(); i++)
\r
164 if( chain == null || ((PDBChain)pdbfile.chains.elementAt(i)).id.toUpperCase().equals(chain))
\r
165 result.append("\n>PDB|" + id+"|"+
\r
166 ( (PDBChain) pdbfile.chains.elementAt(i)).sequence.
\r
170 ( (PDBChain) pdbfile.chains.elementAt(i)).sequence.
\r
173 }catch(Exception ex)// Problem parsing PDB file
\r
175 error = "Error retrieving "+textfield.getText()+" from "+database.getSelectedItem();
\r
179 if (result.length() > 0 && error==null)
\r
181 String format = IdentifyFile.Identify(result.toString(), "Paste");
\r
182 SequenceI[] sequences = null;
\r
184 if (FormatAdapter.formats.contains(format))
\r
186 sequences = new FormatAdapter().readFile(result.toString(), "Paste", format);
\r
187 if (sequences != null && sequences.length>0)
\r
189 if(alignFrame==null)
\r
191 AlignFrame af = new AlignFrame(new Alignment(sequences));
\r
192 af.currentFileFormat = format;
\r
193 Desktop.addInternalFrame(af, "Cut & Paste input - " + format,
\r
194 AlignFrame.NEW_WINDOW_WIDTH,
\r
195 AlignFrame.NEW_WINDOW_HEIGHT);
\r
196 af.statusBar.setText("Successfully pasted alignment file");
\r
199 af.setMaximum(jalview.bin.Cache.getDefault("SHOW_FULLSCREEN", false));
\r
201 catch (Exception ex)
\r
206 for (int i = 0; i < sequences.length; i++)
\r
208 alignFrame.viewport.alignment.addSequence(sequences[i]);
\r
210 ////////////////////////////
\r
211 //Datset needs extension;
\r
212 /////////////////////////////
\r
213 Sequence ds = new Sequence(sequences[i].getName(),
\r
214 AlignSeq.extractGaps("-. ",
\r
215 sequences[i].getSequence()),
\r
216 sequences[i].getStart(),
\r
217 sequences[i].getEnd());
\r
218 sequences[i].setDatasetSequence(ds);
\r
219 alignFrame.viewport.alignment.getDataset().addSequence(ds);
\r
221 alignFrame.viewport.setEndSeq(alignFrame.viewport.alignment.
\r
223 alignFrame.viewport.alignment.getWidth();
\r
224 alignFrame.viewport.firePropertyChange("alignment", null,
\r
225 alignFrame.viewport.getAlignment().getSequences());
\r
229 if (database.getSelectedItem().equals("PDB"))
\r
231 for (int i = 0; i < sequences.length; i++)
\r
233 PDBEntry entry = new PDBEntry();
\r
234 entry.setId(textfield.getText());
\r
235 sequences[i].getDatasetSequence().addPDBId(entry);
\r
241 error = "Error retrieving "+textfield.getText()+" from "+database.getSelectedItem();
\r
249 showErrorMessage(error);
\r
251 database.setEnabled(true);
\r
252 textfield.setEnabled(true);
\r
253 ok.setEnabled(true);
\r
254 cancel.setEnabled(true);
\r
255 frame.setTitle("WSDBfetch@EBI Sequence Fetcher");
\r
258 void showErrorMessage(String error)
\r
260 JOptionPane.showInternalMessageDialog(Desktop.desktop,
\r
261 error, "Error Retrieving Data", JOptionPane.WARNING_MESSAGE);
\r