From: jprocter Date: Tue, 28 Nov 2006 16:52:52 +0000 (+0000) Subject: EBI web service interface update (and SequenceFetcher bugfix) X-Git-Tag: Release_2_2~7 X-Git-Url: http://source.jalview.org/gitweb/?a=commitdiff_plain;h=7504b4be0f02232f3a73b42fe177564546bb7547;p=jalview.git EBI web service interface update (and SequenceFetcher bugfix) --- diff --git a/src/jalview/gui/SequenceFetcher.java b/src/jalview/gui/SequenceFetcher.java index 2beb3d9..3f3f9cc 100755 --- a/src/jalview/gui/SequenceFetcher.java +++ b/src/jalview/gui/SequenceFetcher.java @@ -1,503 +1,503 @@ -/* - * Jalview - A Sequence Alignment Editor and Viewer - * Copyright (C) 2006 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - */ -package jalview.gui; - -import javax.swing.*; -import java.awt.*; -import java.awt.event.*; -import jalview.io.EBIFetchClient; -import MCview.*; -import jalview.datamodel.*; -import jalview.analysis.AlignSeq; -import java.io.File; -import jalview.io.*; -import java.util.*; - -public class SequenceFetcher - extends JPanel implements Runnable -{ - JInternalFrame frame; - AlignFrame alignFrame; - StringBuffer result; - final String noDbSelected = "-- Select Database --"; - public SequenceFetcher(AlignFrame af) - { - alignFrame = af; - database.addItem(noDbSelected); - database.addItem("Uniprot"); - database.addItem("EMBL"); - database.addItem("EMBLCDS"); - database.addItem("PDB"); - database.addItem("PFAM"); - - try - { - jbInit(); - } - catch (Exception ex) - { - ex.printStackTrace(); - } - - frame = new JInternalFrame(); - frame.setContentPane(this); - if (System.getProperty("os.name").startsWith("Mac")) - Desktop.addInternalFrame(frame, getFrameTitle(), 400, 140); - else - Desktop.addInternalFrame(frame, getFrameTitle(), 400, 125); - } - - private String getFrameTitle() - { - return ( (alignFrame == null) ? "New " : "Additional ") + "Sequence Fetcher"; - } - - private void jbInit() - throws Exception - { - this.setLayout(gridBagLayout1); - - database.setFont(new java.awt.Font("Verdana", Font.PLAIN, 11)); - database.setMinimumSize(new Dimension(160, 21)); - database.setPreferredSize(new Dimension(160, 21)); - jLabel1.setFont(new java.awt.Font("Verdana", Font.ITALIC, 11)); - jLabel1.setText( - "Separate multiple accession ids with semi colon \";\""); - ok.setText("OK"); - ok.addActionListener(new ActionListener() - { - public void actionPerformed(ActionEvent e) - { - ok_actionPerformed(e); - } - }); - close.setText("Close"); - close.addActionListener(new ActionListener() - { - public void actionPerformed(ActionEvent e) - { - close_actionPerformed(e); - } - }); - textfield.setFont(new java.awt.Font("Verdana", Font.PLAIN, 11)); - textfield.addActionListener(new ActionListener() - { - public void actionPerformed(ActionEvent e) - { - ok_actionPerformed(e); - } - }); - jPanel1.add(ok); - jPanel1.add(close); - this.add(jLabel1, new GridBagConstraints(0, 0, 2, 1, 0.0, 0.0 - , GridBagConstraints.WEST, - GridBagConstraints.NONE, - new Insets(7, 4, 0, 6), 77, 6)); - this.add(jPanel1, new GridBagConstraints(0, 2, 2, 1, 1.0, 1.0 - , GridBagConstraints.WEST, - GridBagConstraints.BOTH, - new Insets(7, -2, 7, 12), 241, -2)); - this.add(database, new GridBagConstraints(0, 1, 1, 1, 1.0, 0.0 - , GridBagConstraints.WEST, - GridBagConstraints.NONE, - new Insets(0, 4, 0, 0), 1, 0)); - this.add(textfield, new GridBagConstraints(1, 1, 1, 1, 1.0, 0.0 - , GridBagConstraints.CENTER, - GridBagConstraints.NONE, - new Insets(0, 0, 0, 6), 211, 1)); - } - - JComboBox database = new JComboBox(); - JLabel jLabel1 = new JLabel(); - JButton ok = new JButton(); - JButton close = new JButton(); - JPanel jPanel1 = new JPanel(); - JTextField textfield = new JTextField(); - GridBagLayout gridBagLayout1 = new GridBagLayout(); - public void close_actionPerformed(ActionEvent e) - { - try - { - frame.setClosed(true); - } - catch (Exception ex) - {} - } - - public void ok_actionPerformed(ActionEvent e) - { - database.setEnabled(false); - textfield.setEnabled(false); - ok.setEnabled(false); - close.setEnabled(false); - - Thread worker = new Thread(this); - worker.start(); - } - - private void resetDialog() - { - database.setEnabled(true); - textfield.setEnabled(true); - ok.setEnabled(true); - close.setEnabled(true); - } - - public void run() - { - String error = ""; - if (database.getSelectedItem().equals(noDbSelected)) - error += "Please select the source database\n"; - com.stevesoft.pat.Regex empty = new com.stevesoft.pat.Regex("\\s+", ""); - textfield.setText(empty.replaceAll(textfield.getText())); - if (textfield.getText().length() == 0) - error += "Please enter a (semi-colon separated list of) database id(s)"; - if (error.length() > 0) - { - showErrorMessage(error); - resetDialog(); - return; - } - - result = new StringBuffer(); - if (database.getSelectedItem().equals("Uniprot")) - { - getUniprotFile(textfield.getText()); - } - else if (database.getSelectedItem().equals("EMBL") - || database.getSelectedItem().equals("EMBLCDS")) - { - StringTokenizer st = new StringTokenizer(textfield.getText(), ";"); - while(st.hasMoreTokens()) - { - EBIFetchClient dbFetch = new EBIFetchClient(); - - String[] reply = dbFetch.fetchData( - database.getSelectedItem().toString().toLowerCase( - ) + ":" + st.nextToken(), - "fasta", "raw"); -// - if (reply != null) - { - for (int i = 0; i < reply.length; i++) - result.append(reply[i] + "\n"); - } - } - - if(result!=null) - { - System.out.println(result.toString()); - - parseResult(result.toString(), null); - } - } - else if (database.getSelectedItem().equals("PDB")) - { - StringTokenizer qset = new StringTokenizer(textfield.getText(), ";"); - String query; - while (qset.hasMoreTokens() && ((query = qset.nextToken())!=null)) - { - StringBuffer respart = getPDBFile(query.toUpperCase()); - if(respart!=null) - result.append(respart); - } - - - if (result.length()>0) - parseResult(result.toString(), null); - } - else if( database.getSelectedItem().equals("PFAM")) - { - try{ - result.append(new FastaFile( - "http://www.sanger.ac.uk/cgi-bin/Pfam/getalignment.pl?format=fal&acc=" - + textfield.getText().toUpperCase(), "URL").print() - ); - - if(result.length()>0) - parseResult( result.toString(), textfield.getText().toUpperCase() ); - - }catch(java.io.IOException ex) - { result = null; } - } - - if (result == null || result.length() == 0) - showErrorMessage("Error retrieving " + textfield.getText() - + " from " + database.getSelectedItem()); - - resetDialog(); - return; - } - - void getUniprotFile(String id) - { - EBIFetchClient ebi = new EBIFetchClient(); - File file = ebi.fetchDataAsFile("uniprot:" + id, "xml", null); - - DBRefFetcher dbref = new DBRefFetcher(); - Vector entries = dbref.getUniprotEntries(file); - - if (entries != null) - { - //First, make the new sequences - Enumeration en = entries.elements(); - while (en.hasMoreElements()) - { - UniprotEntry entry = (UniprotEntry) en.nextElement(); - - StringBuffer name = new StringBuffer(">UniProt/Swiss-Prot"); - Enumeration en2 = entry.getAccession().elements(); - while (en2.hasMoreElements()) - { - name.append("|"); - name.append(en2.nextElement()); - } - en2 = entry.getName().elements(); - while (en2.hasMoreElements()) - { - name.append("|"); - name.append(en2.nextElement()); - } - - if (entry.getProtein() != null) - { - name.append(" " + entry.getProtein().getName().elementAt(0)); - } - - result.append(name + "\n" + entry.getUniprotSequence().getContent() + - "\n"); - - } - - //Then read in the features and apply them to the dataset - SequenceI[] sequence = parseResult(result.toString(), null); - for (int i = 0; i < entries.size(); i++) - { - UniprotEntry entry = (UniprotEntry) entries.elementAt(i); - Enumeration e = entry.getDbReference().elements(); - Vector onlyPdbEntries = new Vector(); - while (e.hasMoreElements()) - { - PDBEntry pdb = (PDBEntry) e.nextElement(); - if (!pdb.getType().equals("PDB")) - continue; - - onlyPdbEntries.addElement(pdb); - } - - Enumeration en2 = entry.getAccession().elements(); - while (en2.hasMoreElements()) - { - sequence[i].getDatasetSequence().addDBRef(new DBRefEntry(DBRefSource.UNIPROT, - "0", - en2.nextElement().toString())); - } - - - - - sequence[i].getDatasetSequence().setPDBId(onlyPdbEntries); - if (entry.getFeature() != null) - { - e = entry.getFeature().elements(); - while (e.hasMoreElements()) - { - SequenceFeature sf = (SequenceFeature) e.nextElement(); - sf.setFeatureGroup("Uniprot"); - sequence[i].getDatasetSequence().addSequenceFeature( sf ); - } - } - } - } - } - - StringBuffer getPDBFile(String id) - { - StringBuffer result = new StringBuffer(); - String chain = null; - if (id.indexOf(":") > -1) - { - chain = id.substring(id.indexOf(":") + 1); - id = id.substring(0, id.indexOf(":")); - } - - EBIFetchClient ebi = new EBIFetchClient(); - String file = ebi.fetchDataAsFile("pdb:" + id, "pdb", "raw").getAbsolutePath(); - if (file == null) - return null; - try - { - PDBfile pdbfile = new PDBfile(file, jalview.io.AppletFormatAdapter.FILE); - for (int i = 0; i < pdbfile.chains.size(); i++) - { - if (chain == null || - ( (PDBChain) pdbfile.chains.elementAt(i)).id. - toUpperCase().equals(chain)) - - result.append("\n>PDB|" + id + "|" + - ( (PDBChain) pdbfile.chains.elementAt(i)).sequence. - getName() + - "\n" - + - ( (PDBChain) pdbfile.chains.elementAt(i)).sequence. - getSequence()); - } - } - catch (Exception ex) // Problem parsing PDB file - { - jalview.bin.Cache.log.warn("Exception when retrieving " + - textfield.getText() + " from " + - database.getSelectedItem(), ex); - return null; - } - - return result; - } - - SequenceI[] parseResult(String result, String title) - { - String format = new IdentifyFile().Identify(result, "Paste"); - SequenceI[] sequences = null; - - if (FormatAdapter.isValidFormat(format)) - { - sequences = null; - try{ sequences = new FormatAdapter().readFile(result.toString(), "Paste", - format);} - catch(Exception ex){} - - if (sequences != null && sequences.length > 0) - { - if (alignFrame == null) - { - AlignFrame af = new AlignFrame(new Alignment(sequences), - AlignFrame.DEFAULT_WIDTH, - AlignFrame.DEFAULT_HEIGHT -); - af.currentFileFormat = format; - if(title==null) - title = "Retrieved from " + database.getSelectedItem(); - Desktop.addInternalFrame(af, - title, - AlignFrame.DEFAULT_WIDTH, - AlignFrame.DEFAULT_HEIGHT); - af.statusBar.setText("Successfully pasted alignment file"); - - try - { - af.setMaximum(jalview.bin.Cache.getDefault("SHOW_FULLSCREEN", false)); - } - catch (Exception ex) - {} - } - else - { - for (int i = 0; i < sequences.length; i++) - { - alignFrame.viewport.alignment.addSequence(sequences[i]); - - //////////////////////////// - //Dataset needs extension; - ///////////////////////////// - Sequence ds = new Sequence(sequences[i].getName(), - AlignSeq.extractGaps("-. ", - sequences[i].getSequence()), - sequences[i].getStart(), - sequences[i].getEnd()); - sequences[i].setDatasetSequence(ds); - alignFrame.viewport.alignment.getDataset().addSequence(ds); - } - alignFrame.viewport.setEndSeq(alignFrame.viewport.alignment. - getHeight()); - alignFrame.viewport.alignment.getWidth(); - alignFrame.viewport.firePropertyChange("alignment", null, - alignFrame.viewport. - getAlignment().getSequences()); - - } - - if (database.getSelectedItem().equals("PDB")) - { - // Parse out the ids from the structured names - boolean errors = false; - for (int i = 0; i < sequences.length; i++) - { - PDBEntry entry = new PDBEntry(); - com.stevesoft.pat.Regex idbits = new com.stevesoft.pat.Regex( - "PDB\\|([0-9A-z]{4})\\|(.)"); - if (idbits.search(sequences[i].getName())) - { - String pdbid = idbits.substring(1); - String pdbccode = idbits.substring(2); - // Construct the PDBEntry - entry.setId(pdbid); - if (entry.getProperty() == null) - entry.setProperty(new Hashtable()); - entry.getProperty().put("chains", - pdbccode - + "=" + sequences[i].getStart() - + "-" + sequences[i].getEnd()); - sequences[i].getDatasetSequence().addPDBId(entry); - - // We make a DBRefEtntry because we have obtained the PDB file from a verifiable source - // JBPNote - PDB DBRefEntry should also carry the chain and mapping information - DBRefEntry dbentry = new DBRefEntry(jalview.datamodel.DBRefSource.PDB,"0",pdbid); - sequences[i].getDatasetSequence().addDBRef(dbentry); - } - else - { - // don't add an entry for this chain, but this is probably a bug - // that the user should know about. - jalview.bin.Cache.log.warn( - "No PDBEntry constructed for sequence " + i + " : " + - sequences[i].getName()); - errors = true; - } - } - if (errors) - jalview.bin.Cache.log.warn( - "Query string that resulted in PDBEntry construction failure was :\n" + - textfield.getText()); - } - - } - else - showErrorMessage("Error retrieving " + textfield.getText() - + " from " + database.getSelectedItem()); - } - - return sequences; - - } - - void showErrorMessage(final String error) - { - resetDialog(); - javax.swing.SwingUtilities.invokeLater(new Runnable() - { - public void run() - { - JOptionPane.showInternalMessageDialog(Desktop.desktop, - error, "Error Retrieving Data", - JOptionPane.WARNING_MESSAGE); - } - }); - } -} - +/* + * Jalview - A Sequence Alignment Editor and Viewer + * Copyright (C) 2006 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ +package jalview.gui; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.*; +import jalview.io.EBIFetchClient; +import MCview.*; +import jalview.datamodel.*; +import jalview.analysis.AlignSeq; +import java.io.File; +import jalview.io.*; +import java.util.*; + +public class SequenceFetcher + extends JPanel implements Runnable +{ + JInternalFrame frame; + AlignFrame alignFrame; + StringBuffer result; + final String noDbSelected = "-- Select Database --"; + public SequenceFetcher(AlignFrame af) + { + alignFrame = af; + database.addItem(noDbSelected); + database.addItem("Uniprot"); + database.addItem("EMBL"); + database.addItem("EMBLCDS"); + database.addItem("PDB"); + database.addItem("PFAM"); + + try + { + jbInit(); + } + catch (Exception ex) + { + ex.printStackTrace(); + } + + frame = new JInternalFrame(); + frame.setContentPane(this); + if (System.getProperty("os.name").startsWith("Mac")) + Desktop.addInternalFrame(frame, getFrameTitle(), 400, 140); + else + Desktop.addInternalFrame(frame, getFrameTitle(), 400, 125); + } + + private String getFrameTitle() + { + return ( (alignFrame == null) ? "New " : "Additional ") + "Sequence Fetcher"; + } + + private void jbInit() + throws Exception + { + this.setLayout(gridBagLayout1); + + database.setFont(new java.awt.Font("Verdana", Font.PLAIN, 11)); + database.setMinimumSize(new Dimension(160, 21)); + database.setPreferredSize(new Dimension(160, 21)); + jLabel1.setFont(new java.awt.Font("Verdana", Font.ITALIC, 11)); + jLabel1.setText( + "Separate multiple accession ids with semi colon \";\""); + ok.setText("OK"); + ok.addActionListener(new ActionListener() + { + public void actionPerformed(ActionEvent e) + { + ok_actionPerformed(e); + } + }); + close.setText("Close"); + close.addActionListener(new ActionListener() + { + public void actionPerformed(ActionEvent e) + { + close_actionPerformed(e); + } + }); + textfield.setFont(new java.awt.Font("Verdana", Font.PLAIN, 11)); + textfield.addActionListener(new ActionListener() + { + public void actionPerformed(ActionEvent e) + { + ok_actionPerformed(e); + } + }); + jPanel1.add(ok); + jPanel1.add(close); + this.add(jLabel1, new GridBagConstraints(0, 0, 2, 1, 0.0, 0.0 + , GridBagConstraints.WEST, + GridBagConstraints.NONE, + new Insets(7, 4, 0, 6), 77, 6)); + this.add(jPanel1, new GridBagConstraints(0, 2, 2, 1, 1.0, 1.0 + , GridBagConstraints.WEST, + GridBagConstraints.BOTH, + new Insets(7, -2, 7, 12), 241, -2)); + this.add(database, new GridBagConstraints(0, 1, 1, 1, 1.0, 0.0 + , GridBagConstraints.WEST, + GridBagConstraints.NONE, + new Insets(0, 4, 0, 0), 1, 0)); + this.add(textfield, new GridBagConstraints(1, 1, 1, 1, 1.0, 0.0 + , GridBagConstraints.CENTER, + GridBagConstraints.NONE, + new Insets(0, 0, 0, 6), 211, 1)); + } + + JComboBox database = new JComboBox(); + JLabel jLabel1 = new JLabel(); + JButton ok = new JButton(); + JButton close = new JButton(); + JPanel jPanel1 = new JPanel(); + JTextField textfield = new JTextField(); + GridBagLayout gridBagLayout1 = new GridBagLayout(); + public void close_actionPerformed(ActionEvent e) + { + try + { + frame.setClosed(true); + } + catch (Exception ex) + {} + } + + public void ok_actionPerformed(ActionEvent e) + { + database.setEnabled(false); + textfield.setEnabled(false); + ok.setEnabled(false); + close.setEnabled(false); + + Thread worker = new Thread(this); + worker.start(); + } + + private void resetDialog() + { + database.setEnabled(true); + textfield.setEnabled(true); + ok.setEnabled(true); + close.setEnabled(true); + } + + public void run() + { + String error = ""; + if (database.getSelectedItem().equals(noDbSelected)) + error += "Please select the source database\n"; + com.stevesoft.pat.Regex empty = new com.stevesoft.pat.Regex("\\s+", ""); + textfield.setText(empty.replaceAll(textfield.getText())); + if (textfield.getText().length() == 0) + error += "Please enter a (semi-colon separated list of) database id(s)"; + if (error.length() > 0) + { + showErrorMessage(error); + resetDialog(); + return; + } + + result = new StringBuffer(); + if (database.getSelectedItem().equals("Uniprot")) + { + getUniprotFile(textfield.getText()); + } + else if (database.getSelectedItem().equals("EMBL") + || database.getSelectedItem().equals("EMBLCDS")) + { + StringTokenizer st = new StringTokenizer(textfield.getText(), ";"); + while(st.hasMoreTokens()) + { + EBIFetchClient dbFetch = new EBIFetchClient(); + + String[] reply = dbFetch.fetchData( + database.getSelectedItem().toString().toLowerCase( + ) + ":" + st.nextToken(), + "fasta", "raw"); +// + if (reply != null) + { + for (int i = 0; i < reply.length; i++) + result.append(reply[i] + "\n"); + } + } + + if(result!=null && result.length()>1) // arbitrary minimum length for a seuqence file + { + System.out.println(result.toString()); + + parseResult(result.toString(), null); + } + } + else if (database.getSelectedItem().equals("PDB")) + { + StringTokenizer qset = new StringTokenizer(textfield.getText(), ";"); + String query; + while (qset.hasMoreTokens() && ((query = qset.nextToken())!=null)) + { + StringBuffer respart = getPDBFile(query.toUpperCase()); + if(respart!=null) + result.append(respart); + } + + + if (result.length()>0) + parseResult(result.toString(), null); + } + else if( database.getSelectedItem().equals("PFAM")) + { + try{ + result.append(new FastaFile( + "http://www.sanger.ac.uk/cgi-bin/Pfam/getalignment.pl?format=fal&acc=" + + textfield.getText().toUpperCase(), "URL").print() + ); + + if(result.length()>0) + parseResult( result.toString(), textfield.getText().toUpperCase() ); + + }catch(java.io.IOException ex) + { result = null; } + } + + if (result == null || result.length() == 0) + showErrorMessage("Error retrieving " + textfield.getText() + + " from " + database.getSelectedItem()); + + resetDialog(); + return; + } + + void getUniprotFile(String id) + { + EBIFetchClient ebi = new EBIFetchClient(); + File file = ebi.fetchDataAsFile("uniprot:" + id, "xml", null); + + DBRefFetcher dbref = new DBRefFetcher(); + Vector entries = dbref.getUniprotEntries(file); + + if (entries != null) + { + //First, make the new sequences + Enumeration en = entries.elements(); + while (en.hasMoreElements()) + { + UniprotEntry entry = (UniprotEntry) en.nextElement(); + + StringBuffer name = new StringBuffer(">UniProt/Swiss-Prot"); + Enumeration en2 = entry.getAccession().elements(); + while (en2.hasMoreElements()) + { + name.append("|"); + name.append(en2.nextElement()); + } + en2 = entry.getName().elements(); + while (en2.hasMoreElements()) + { + name.append("|"); + name.append(en2.nextElement()); + } + + if (entry.getProtein() != null) + { + name.append(" " + entry.getProtein().getName().elementAt(0)); + } + + result.append(name + "\n" + entry.getUniprotSequence().getContent() + + "\n"); + + } + + //Then read in the features and apply them to the dataset + SequenceI[] sequence = parseResult(result.toString(), null); + for (int i = 0; i < entries.size(); i++) + { + UniprotEntry entry = (UniprotEntry) entries.elementAt(i); + Enumeration e = entry.getDbReference().elements(); + Vector onlyPdbEntries = new Vector(); + while (e.hasMoreElements()) + { + PDBEntry pdb = (PDBEntry) e.nextElement(); + if (!pdb.getType().equals("PDB")) + continue; + + onlyPdbEntries.addElement(pdb); + } + + Enumeration en2 = entry.getAccession().elements(); + while (en2.hasMoreElements()) + { + sequence[i].getDatasetSequence().addDBRef(new DBRefEntry(DBRefSource.UNIPROT, + "0", + en2.nextElement().toString())); + } + + + + + sequence[i].getDatasetSequence().setPDBId(onlyPdbEntries); + if (entry.getFeature() != null) + { + e = entry.getFeature().elements(); + while (e.hasMoreElements()) + { + SequenceFeature sf = (SequenceFeature) e.nextElement(); + sf.setFeatureGroup("Uniprot"); + sequence[i].getDatasetSequence().addSequenceFeature( sf ); + } + } + } + } + } + + StringBuffer getPDBFile(String id) + { + StringBuffer result = new StringBuffer(); + String chain = null; + if (id.indexOf(":") > -1) + { + chain = id.substring(id.indexOf(":") + 1); + id = id.substring(0, id.indexOf(":")); + } + + EBIFetchClient ebi = new EBIFetchClient(); + String file = ebi.fetchDataAsFile("pdb:" + id, "pdb", "raw").getAbsolutePath(); + if (file == null) + return null; + try + { + PDBfile pdbfile = new PDBfile(file, jalview.io.AppletFormatAdapter.FILE); + for (int i = 0; i < pdbfile.chains.size(); i++) + { + if (chain == null || + ( (PDBChain) pdbfile.chains.elementAt(i)).id. + toUpperCase().equals(chain)) + + result.append("\n>PDB|" + id + "|" + + ( (PDBChain) pdbfile.chains.elementAt(i)).sequence. + getName() + + "\n" + + + ( (PDBChain) pdbfile.chains.elementAt(i)).sequence. + getSequence()); + } + } + catch (Exception ex) // Problem parsing PDB file + { + jalview.bin.Cache.log.warn("Exception when retrieving " + + textfield.getText() + " from " + + database.getSelectedItem(), ex); + return null; + } + + return result; + } + + SequenceI[] parseResult(String result, String title) + { + String format = new IdentifyFile().Identify(result, "Paste"); + SequenceI[] sequences = null; + + if (FormatAdapter.isValidFormat(format)) + { + sequences = null; + try{ sequences = new FormatAdapter().readFile(result.toString(), "Paste", + format);} + catch(Exception ex){} + + if (sequences != null && sequences.length > 0) + { + if (alignFrame == null) + { + AlignFrame af = new AlignFrame(new Alignment(sequences), + AlignFrame.DEFAULT_WIDTH, + AlignFrame.DEFAULT_HEIGHT +); + af.currentFileFormat = format; + if(title==null) + title = "Retrieved from " + database.getSelectedItem(); + Desktop.addInternalFrame(af, + title, + AlignFrame.DEFAULT_WIDTH, + AlignFrame.DEFAULT_HEIGHT); + af.statusBar.setText("Successfully pasted alignment file"); + + try + { + af.setMaximum(jalview.bin.Cache.getDefault("SHOW_FULLSCREEN", false)); + } + catch (Exception ex) + {} + } + else + { + for (int i = 0; i < sequences.length; i++) + { + alignFrame.viewport.alignment.addSequence(sequences[i]); + + //////////////////////////// + //Dataset needs extension; + ///////////////////////////// + Sequence ds = new Sequence(sequences[i].getName(), + AlignSeq.extractGaps("-. ", + sequences[i].getSequence()), + sequences[i].getStart(), + sequences[i].getEnd()); + sequences[i].setDatasetSequence(ds); + alignFrame.viewport.alignment.getDataset().addSequence(ds); + } + alignFrame.viewport.setEndSeq(alignFrame.viewport.alignment. + getHeight()); + alignFrame.viewport.alignment.getWidth(); + alignFrame.viewport.firePropertyChange("alignment", null, + alignFrame.viewport. + getAlignment().getSequences()); + + } + + if (database.getSelectedItem().equals("PDB")) + { + // Parse out the ids from the structured names + boolean errors = false; + for (int i = 0; i < sequences.length; i++) + { + PDBEntry entry = new PDBEntry(); + com.stevesoft.pat.Regex idbits = new com.stevesoft.pat.Regex( + "PDB\\|([0-9A-z]{4})\\|(.)"); + if (idbits.search(sequences[i].getName())) + { + String pdbid = idbits.substring(1); + String pdbccode = idbits.substring(2); + // Construct the PDBEntry + entry.setId(pdbid); + if (entry.getProperty() == null) + entry.setProperty(new Hashtable()); + entry.getProperty().put("chains", + pdbccode + + "=" + sequences[i].getStart() + + "-" + sequences[i].getEnd()); + sequences[i].getDatasetSequence().addPDBId(entry); + + // We make a DBRefEtntry because we have obtained the PDB file from a verifiable source + // JBPNote - PDB DBRefEntry should also carry the chain and mapping information + DBRefEntry dbentry = new DBRefEntry(jalview.datamodel.DBRefSource.PDB,"0",pdbid); + sequences[i].getDatasetSequence().addDBRef(dbentry); + } + else + { + // don't add an entry for this chain, but this is probably a bug + // that the user should know about. + jalview.bin.Cache.log.warn( + "No PDBEntry constructed for sequence " + i + " : " + + sequences[i].getName()); + errors = true; + } + } + if (errors) + jalview.bin.Cache.log.warn( + "Query string that resulted in PDBEntry construction failure was :\n" + + textfield.getText()); + } + + } + else + showErrorMessage("Error retrieving " + textfield.getText() + + " from " + database.getSelectedItem()); + } + + return sequences; + + } + + void showErrorMessage(final String error) + { + resetDialog(); + javax.swing.SwingUtilities.invokeLater(new Runnable() + { + public void run() + { + JOptionPane.showInternalMessageDialog(Desktop.desktop, + error, "Error Retrieving Data", + JOptionPane.WARNING_MESSAGE); + } + }); + } +} + diff --git a/src/jalview/io/EBIFetchClient.java b/src/jalview/io/EBIFetchClient.java index 008094c..12fab86 100755 --- a/src/jalview/io/EBIFetchClient.java +++ b/src/jalview/io/EBIFetchClient.java @@ -1,203 +1,236 @@ -/* -* Jalview - A Sequence Alignment Editor and Viewer -* Copyright (C) 2006 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle -* -* This program is free software; you can redistribute it and/or -* modify it under the terms of the GNU General Public License -* as published by the Free Software Foundation; either version 2 -* of the License, or (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program; if not, write to the Free Software -* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA -*/ -package jalview.io; - -import java.io.*; - -import org.apache.axis.client.*; -import org.apache.axis.encoding.XMLType; - -import javax.xml.namespace.QName; -import javax.xml.rpc.ParameterMode; - - -/** - * DOCUMENT ME! - * - * @author $author$ - * @version $Revision$ - */ -public class EBIFetchClient -{ - Call call; - String format = "default"; - String style = "raw"; - - /** - * Creates a new EBIFetchClient object. - */ - public EBIFetchClient() - { - try - { - call = (Call) new Service().createCall(); - call.setTargetEndpointAddress(new java.net.URL( - "http://www.ebi.ac.uk/ws/services/Dbfetch")); - } - catch (Exception ex) - { - } - } - - /** - * DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public String[] getSupportedDBs() - { - try - { - call.setOperationName(new QName("urn:Dbfetch", "getSupportedDBs")); - call.setReturnType(XMLType.SOAP_ARRAY); - - return (String[]) call.invoke(new Object[] { }); - } - catch (Exception ex) - { - return null; - } - } - - /** - * DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public String[] getSupportedFormats() - { - try - { - call.setOperationName(new QName("urn:Dbfetch", "getSupportedFormats")); - call.setReturnType(XMLType.SOAP_ARRAY); - - return (String[]) call.invoke(new Object[] { }); - } - catch (Exception ex) - { - return null; - } - } - - /** - * DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public String[] getSupportedStyles() - { - try - { - call.setOperationName(new QName("urn:Dbfetch", "getSupportedStyles")); - call.setReturnType(XMLType.SOAP_ARRAY); - - return (String[]) call.invoke(new Object[] { }); - } - catch (Exception ex) - { - return null; - } - } - - public static void main (String [] args) - { - EBIFetchClient ebi = new EBIFetchClient(); - String[] result = ebi.fetchData("uniprot:25KD_SARPE;G6PD_HUMAN", - "xml", null); - - try{ - java.io.PrintWriter out = new java.io.PrintWriter( - new java.io.FileWriter("out.xml")); - - - for(int i=0; i-1 && (p+3