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 Desktop.addInternalFrame(frame, "Sequence Fetcher", 390, 120);
\r
45 private void jbInit()
\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
52 "Separate multiple accession ids with semi colon \";\"");
\r
54 ok.addActionListener(new ActionListener()
\r
56 public void actionPerformed(ActionEvent e)
\r
58 ok_actionPerformed(e);
\r
61 cancel.setText("Cancel");
\r
62 cancel.addActionListener(new ActionListener()
\r
64 public void actionPerformed(ActionEvent e)
\r
66 cancel_actionPerformed(e);
\r
69 textfield.setFont(new java.awt.Font("Verdana", Font.PLAIN, 11));
\r
70 textfield.addActionListener(new ActionListener()
\r
72 public void actionPerformed(ActionEvent e)
\r
74 ok_actionPerformed(e);
\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
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
108 frame.setClosed(true);
\r
110 catch (Exception ex)
\r
114 public void ok_actionPerformed(ActionEvent e)
\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
123 Thread worker = new Thread(this);
\r
130 String error = null;
\r
131 StringBuffer result = new StringBuffer();
\r
132 if (database.getSelectedItem().equals("Uniprot")
\r
133 || database.getSelectedItem().equals("EMBL")
\r
134 || database.getSelectedItem().equals("EMBLCDS"))
\r
136 EBIFetchClient dbFetch = new EBIFetchClient();
\r
137 String[] reply = dbFetch.fetchData(
\r
138 database.getSelectedItem().toString().toLowerCase(
\r
139 ) + ":" + textfield.getText(),
\r
142 for (int i = 0; i < reply.length; i++)
\r
143 result.append(reply[i] + "\n");
\r
145 else if (database.getSelectedItem().equals("PDB"))
\r
147 EBIFetchClient ebi = new EBIFetchClient();
\r
148 String[] reply = ebi.fetchData("pdb:" + textfield.getText(), "pdb",
\r
151 PDBfile pdbfile = new PDBfile(reply);
\r
152 for (int i = 0; i < pdbfile.chains.size(); i++)
\r
154 result.append("\n>" +
\r
155 ( (PDBChain) pdbfile.chains.elementAt(i)).sequence.
\r
159 ( (PDBChain) pdbfile.chains.elementAt(i)).sequence.
\r
162 }catch(Exception ex)// Problem parsing PDB file
\r
164 error = "Error retrieving "+textfield.getText()+" from "+database.getSelectedItem();
\r
168 if (result.length() > 0 && error==null)
\r
170 String format = IdentifyFile.Identify(result.toString(), "Paste");
\r
171 SequenceI[] sequences = null;
\r
173 if (FormatAdapter.formats.contains(format))
\r
175 sequences = new FormatAdapter().readFile(result.toString(), "Paste", format);
\r
176 if (sequences != null && sequences.length>0)
\r
178 if(alignFrame==null)
\r
180 AlignFrame af = new AlignFrame(new Alignment(sequences));
\r
181 af.currentFileFormat = format;
\r
182 Desktop.addInternalFrame(af, "Cut & Paste input - " + format,
\r
183 AlignFrame.NEW_WINDOW_WIDTH,
\r
184 AlignFrame.NEW_WINDOW_HEIGHT);
\r
185 af.statusBar.setText("Successfully pasted alignment file");
\r
188 af.setMaximum(jalview.bin.Cache.getDefault("SHOW_FULLSCREEN", false));
\r
190 catch (Exception ex)
\r
195 for (int i = 0; i < sequences.length; i++)
\r
197 alignFrame.viewport.alignment.addSequence(sequences[i]);
\r
199 ////////////////////////////
\r
200 //Datset needs extension;
\r
201 /////////////////////////////
\r
202 Sequence ds = new Sequence(sequences[i].getName(),
\r
203 AlignSeq.extractGaps("-. ",
\r
204 sequences[i].getSequence()),
\r
205 sequences[i].getStart(),
\r
206 sequences[i].getEnd());
\r
207 sequences[i].setDatasetSequence(ds);
\r
208 alignFrame.viewport.alignment.getDataset().addSequence(ds);
\r
210 alignFrame.viewport.setEndSeq(alignFrame.viewport.alignment.
\r
212 alignFrame.viewport.alignment.getWidth();
\r
213 alignFrame.viewport.firePropertyChange("alignment", null,
\r
214 alignFrame.viewport.getAlignment().getSequences());
\r
218 if (database.getSelectedItem().equals("PDB"))
\r
220 for (int i = 0; i < sequences.length; i++)
\r
222 PDBEntry entry = new PDBEntry();
\r
223 entry.setId(textfield.getText());
\r
224 sequences[i].getDatasetSequence().addPDBId(entry);
\r
230 error = "Error retrieving "+textfield.getText()+" from "+database.getSelectedItem();
\r
238 showErrorMessage(error);
\r
240 database.setEnabled(true);
\r
241 textfield.setEnabled(true);
\r
242 ok.setEnabled(true);
\r
243 cancel.setEnabled(true);
\r
244 frame.setTitle("Sequence Fetcher");
\r
249 void showErrorMessage(String error)
\r
251 JOptionPane.showInternalMessageDialog(Desktop.desktop,
\r
252 error, "Error Retrieving Data", JOptionPane.WARNING_MESSAGE);
\r