From: jprocter Date: Tue, 5 Aug 2008 14:51:23 +0000 (+0000) Subject: ensure das sequence sources are refreshed when das registry is changed X-Git-Tag: Release_2_4~63 X-Git-Url: http://source.jalview.org/gitweb/?a=commitdiff_plain;h=3b24654f2ada868e8a3771427cc9b180f78f2020;p=jalview.git ensure das sequence sources are refreshed when das registry is changed --- diff --git a/src/jalview/gui/DasSourceBrowser.java b/src/jalview/gui/DasSourceBrowser.java index e695d3d..807aa4b 100755 --- a/src/jalview/gui/DasSourceBrowser.java +++ b/src/jalview/gui/DasSourceBrowser.java @@ -46,8 +46,7 @@ public class DasSourceBrowser * true if thread is running and we are talking to DAS registry service */ public boolean loadingDasSources = false; - - public DasSourceBrowser() + protected static String getDasRegistryURL() { String registry = jalview.bin.Cache.getDefault("DAS_REGISTRY_URL", DEFAULT_REGISTRY); @@ -57,7 +56,12 @@ public class DasSourceBrowser jalview.bin.Cache.setProperty("DAS_REGISTRY_URL", DEFAULT_REGISTRY); registry = DEFAULT_REGISTRY; } - + return registry; + } + public DasSourceBrowser() + { + String registry = getDasRegistryURL(); + registryURL.setText(registry); setSelectedFromProperties(); diff --git a/src/jalview/gui/SequenceFetcher.java b/src/jalview/gui/SequenceFetcher.java index a66ec2f..c82f383 100755 --- a/src/jalview/gui/SequenceFetcher.java +++ b/src/jalview/gui/SequenceFetcher.java @@ -40,73 +40,90 @@ import java.awt.Rectangle; import java.awt.BorderLayout; import java.awt.Dimension; -public class SequenceFetcher -extends JPanel implements Runnable +public class SequenceFetcher extends JPanel implements Runnable { - // ASequenceFetcher sfetch; + // ASequenceFetcher sfetch; JInternalFrame frame; + IProgressIndicator guiWindow; + AlignFrame alignFrame; + StringBuffer result; + final String noDbSelected = "-- Select Database --"; + Hashtable sources = new Hashtable(); - private static jalview.ws.SequenceFetcher sfetch=null; + + private static jalview.ws.SequenceFetcher sfetch = null; + + private static String dasRegistry = null; + public SequenceFetcher(IProgressIndicator guiIndic) { - final IProgressIndicator guiWindow = guiIndic; - final SequenceFetcher us = this; - // launch initialiser thread - Thread sf = new Thread(new Runnable() { + final IProgressIndicator guiWindow = guiIndic; + final SequenceFetcher us = this; + // launch initialiser thread + Thread sf = new Thread(new Runnable() + { - public void run() + public void run() + { + if (sfetch == null + || dasRegistry != DasSourceBrowser.getDasRegistryURL()) { - if (sfetch==null) - { - /** - * give a visual indication that sequence fetcher construction is occuring + /** + * give a visual indication that sequence fetcher construction is + * occuring */ - if ( guiWindow!=null ) - { - guiWindow.setProgressBar("Initialising Sequence Database Fetchers", this.hashCode()); - } - jalview.ws.SequenceFetcher sf = new jalview.ws.SequenceFetcher(); - if ( guiWindow!=null ) - { - guiWindow.setProgressBar("Initialising Sequence Database Fetchers", this.hashCode()); - } - sfetch = sf; - + if (guiWindow != null) + { + guiWindow.setProgressBar( + "Initialising Sequence Database Fetchers", this + .hashCode()); } - us.initGui(guiWindow); + dasRegistry = DasSourceBrowser.getDasRegistryURL(); + jalview.ws.SequenceFetcher sf = new jalview.ws.SequenceFetcher(); + if (guiWindow != null) + { + guiWindow.setProgressBar( + "Initialising Sequence Database Fetchers", this + .hashCode()); + } + sfetch = sf; + } - }); - sf.start(); + us.initGui(guiWindow); + } + }); + sf.start(); } + /** * called by thread spawned by constructor + * * @param guiWindow */ - private void initGui(IProgressIndicator guiWindow) { + private void initGui(IProgressIndicator guiWindow) + { this.guiWindow = guiWindow; if (guiWindow instanceof AlignFrame) { alignFrame = (AlignFrame) guiWindow; } - + database.addItem(noDbSelected); /* - * Dynamically generated database list - * will need a translation function from - * internal source to externally distinct names. - * UNIPROT and UP_NAME are identical DB sources, - * and should be collapsed. + * Dynamically generated database list will need a translation function from + * internal source to externally distinct names. UNIPROT and UP_NAME are + * identical DB sources, and should be collapsed. */ - + String dbs[] = sfetch.getOrderedSupportedSources(); - for (int i=0; i0) { - if (parseResult(new Alignment(seqs), null, null)!=null) - { - result.append("# Successfully parsed the "+database.getSelectedItem()+" Queries into an Alignment"); - } - } - } - else if (database.getSelectedItem().equals("PDB")) - { - StringTokenizer qset = new StringTokenizer(textArea.getText(), ";"); - String query; - SequenceI[] seqs = null; - while (qset.hasMoreTokens() && ((query = qset.nextToken())!=null)) - { - SequenceI[] seqparts = getPDBFile(query.toUpperCase()); - if (seqparts != null) - { - if (seqs == null) - { - seqs = seqparts; - } - else - { - SequenceI[] newseqs = new SequenceI[seqs.length+seqparts.length]; - int i=0; - for (; i < seqs.length; i++) - { - newseqs[i] = seqs[i]; - seqs[i] = null; - } - for (int j=0;j 0) - { - if (parseResult(new Alignment(seqs), null, null)!=null) - { - result.append( - "# Successfully parsed the PDB File Queries into an Alignment"); - } - } - } - else if( database.getSelectedItem().equals("PFAM")) - { - try - { - result.append(new FastaFile( - "http://www.sanger.ac.uk/cgi-bin/Pfam/getalignment.pl?format=fal&acc=" - + textArea.getText().toUpperCase(), "URL").print() - ); - - if(result.length()>0) - { - parseResult( result.toString(), textArea.getText().toUpperCase() ); - } - - } - catch (java.io.IOException ex) - { - result = null; - } - } - - if (result == null || result.length() == 0) - { - showErrorMessage("Error retrieving " + textArea.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 - Alignment al = 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()) - { - al.getSequenceAt(i).getDatasetSequence().addDBRef(new DBRefEntry( - DBRefSource.UNIPROT, - "0", - en2.nextElement().toString())); - } - - - - - al.getSequenceAt(i).getDatasetSequence().setPDBId(onlyPdbEntries); - if (entry.getFeature() != null) - { - e = entry.getFeature().elements(); - while (e.hasMoreElements()) - { - SequenceFeature sf = (SequenceFeature) e.nextElement(); - sf.setFeatureGroup("Uniprot"); - al.getSequenceAt(i).getDatasetSequence().addSequenceFeature( sf ); - } - } - } - } - } - - SequenceI[] getPDBFile(String id) - { - Vector result = new Vector(); - 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)) - { - PDBChain pdbchain = (PDBChain) pdbfile.chains.elementAt(i); - // Get the Chain's Sequence - who's dataset includes any special features added from the PDB file - SequenceI sq = pdbchain.sequence; - // Specially formatted name for the PDB chain sequences retrieved from the PDB - sq.setName("PDB|"+id+"|"+sq.getName()); - // Might need to add more metadata to the PDBEntry object - // like below - /* - * PDBEntry entry = new PDBEntry(); - // Construct the PDBEntry - entry.setId(id); - if (entry.getProperty() == null) - entry.setProperty(new Hashtable()); - entry.getProperty().put("chains", - pdbchain.id - + "=" + sq.getStart() - + "-" + sq.getEnd()); - sq.getDatasetSequence().addPDBId(entry); - * - // Add PDB DB Refs - // 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", id + pdbchain.id); - sq.addDBRef(dbentry); - // and add seuqence to the retrieved set - result.addElement(sq.deriveSequence()); - } - } - - if (result.size() < 1) - { - throw new Exception("WsDBFetch for PDB id resulted in zero result size"); - } - } - catch (Exception ex) // Problem parsing PDB file - { - jalview.bin.Cache.log.warn("Exception when retrieving " + - textArea.getText() + " from " + - database.getSelectedItem(), ex); - return null; - } - - - SequenceI[] results = new SequenceI[result.size()]; - for (int i = 0, j = result.size(); i < j; i++) - { - results[i] = (SequenceI) result.elementAt(i); - result.setElementAt(null,i); - } - return results; - }*/ + /* + * result = new StringBuffer(); if + * (database.getSelectedItem().equals("Uniprot")) { + * getUniprotFile(textArea.getText()); } else if + * (database.getSelectedItem().equals("EMBL") || + * database.getSelectedItem().equals("EMBLCDS")) { String DBRefSource = + * database.getSelectedItem().equals("EMBLCDS") ? + * jalview.datamodel.DBRefSource.EMBLCDS : jalview.datamodel.DBRefSource.EMBL; + * + * StringTokenizer st = new StringTokenizer(textArea.getText(), ";"); + * SequenceI[] seqs = null; while(st.hasMoreTokens()) { EBIFetchClient dbFetch = + * new EBIFetchClient(); String qry = + * database.getSelectedItem().toString().toLowerCase( ) + ":" + + * st.nextToken(); File reply = dbFetch.fetchDataAsFile( qry, "emblxml",null); + * + * jalview.datamodel.xdb.embl.EmblFile efile=null; if (reply != null && + * reply.exists()) { efile = + * jalview.datamodel.xdb.embl.EmblFile.getEmblFile(reply); } if (efile!=null) { + * for (Iterator i=efile.getEntries().iterator(); i.hasNext(); ) { EmblEntry + * entry = (EmblEntry) i.next(); SequenceI[] seqparts = + * entry.getSequences(false,true, DBRefSource); if (seqparts!=null) { + * SequenceI[] newseqs = null; int si=0; if (seqs==null) { newseqs = new + * SequenceI[seqparts.length]; } else { newseqs = new + * SequenceI[seqs.length+seqparts.length]; + * + * for (;si0) { if (parseResult(new Alignment(seqs), null, null)!=null) { + * result.append("# Successfully parsed the "+database.getSelectedItem()+" + * Queries into an Alignment"); } } } else if + * (database.getSelectedItem().equals("PDB")) { StringTokenizer qset = new + * StringTokenizer(textArea.getText(), ";"); String query; SequenceI[] seqs = + * null; while (qset.hasMoreTokens() && ((query = qset.nextToken())!=null)) { + * SequenceI[] seqparts = getPDBFile(query.toUpperCase()); if (seqparts != + * null) { if (seqs == null) { seqs = seqparts; } else { SequenceI[] newseqs = + * new SequenceI[seqs.length+seqparts.length]; int i=0; for (; i < + * seqs.length; i++) { newseqs[i] = seqs[i]; seqs[i] = null; } for (int j=0;j 0) { if (parseResult(new Alignment(seqs), null, null)!=null) { + * result.append( "# Successfully parsed the PDB File Queries into an + * Alignment"); } } } else if( database.getSelectedItem().equals("PFAM")) { + * try { result.append(new FastaFile( + * "http://www.sanger.ac.uk/cgi-bin/Pfam/getalignment.pl?format=fal&acc=" + + * textArea.getText().toUpperCase(), "URL").print() ); + * + * if(result.length()>0) { parseResult( result.toString(), + * textArea.getText().toUpperCase() ); } + * } catch (java.io.IOException ex) { result = null; } } + * + * if (result == null || result.length() == 0) { showErrorMessage("Error + * retrieving " + textArea.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 Alignment al = + * 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()) { + * al.getSequenceAt(i).getDatasetSequence().addDBRef(new DBRefEntry( + * DBRefSource.UNIPROT, "0", en2.nextElement().toString())); } + * + * + * + * + * al.getSequenceAt(i).getDatasetSequence().setPDBId(onlyPdbEntries); if + * (entry.getFeature() != null) { e = entry.getFeature().elements(); while + * (e.hasMoreElements()) { SequenceFeature sf = (SequenceFeature) + * e.nextElement(); sf.setFeatureGroup("Uniprot"); + * al.getSequenceAt(i).getDatasetSequence().addSequenceFeature( sf ); } } } } } + * + * SequenceI[] getPDBFile(String id) { Vector result = new Vector(); 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)) { PDBChain + * pdbchain = (PDBChain) pdbfile.chains.elementAt(i); // Get the Chain's + * Sequence - who's dataset includes any special features added from the PDB + * file SequenceI sq = pdbchain.sequence; // Specially formatted name for the + * PDB chain sequences retrieved from the PDB + * sq.setName("PDB|"+id+"|"+sq.getName()); // Might need to add more metadata + * to the PDBEntry object // like below /* PDBEntry entry = new PDBEntry(); // + * Construct the PDBEntry entry.setId(id); if (entry.getProperty() == null) + * entry.setProperty(new Hashtable()); entry.getProperty().put("chains", + * pdbchain.id + "=" + sq.getStart() + "-" + sq.getEnd()); + * sq.getDatasetSequence().addPDBId(entry); + * // Add PDB DB Refs // 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", id + pdbchain.id); + * sq.addDBRef(dbentry); // and add seuqence to the retrieved set + * result.addElement(sq.deriveSequence()); } } + * + * if (result.size() < 1) { throw new Exception("WsDBFetch for PDB id resulted + * in zero result size"); } } catch (Exception ex) // Problem parsing PDB file { + * jalview.bin.Cache.log.warn("Exception when retrieving " + + * textArea.getText() + " from " + database.getSelectedItem(), ex); return + * null; } + * + * + * SequenceI[] results = new SequenceI[result.size()]; for (int i = 0, j = + * result.size(); i < j; i++) { results[i] = (SequenceI) result.elementAt(i); + * result.setElementAt(null,i); } return results; } + */ AlignmentI parseResult(String result, String title) { String format = new IdentifyFile().Identify(result, "Paste"); @@ -659,72 +545,78 @@ extends JPanel implements Runnable sequences = null; try { - sequences = new FormatAdapter().readFile(result.toString(), "Paste", - format); + sequences = new FormatAdapter().readFile(result.toString(), + "Paste", format); + } catch (Exception ex) + { } - catch (Exception ex) - {} - if (sequences!=null) + if (sequences != null) { return parseResult(sequences, title, format); } } else { - showErrorMessage("Error retrieving " + textArea.getText() - + " from " + database.getSelectedItem()); + showErrorMessage("Error retrieving " + textArea.getText() + " from " + + database.getSelectedItem()); } return null; } - AlignmentI parseResult(AlignmentI al, String title, String currentFileFormat) + AlignmentI parseResult(AlignmentI al, String title, + String currentFileFormat) { if (al != null && al.getHeight() > 0) { if (alignFrame == null) { - AlignFrame af = new AlignFrame(al, - AlignFrame.DEFAULT_WIDTH, - AlignFrame.DEFAULT_HEIGHT); - if (currentFileFormat!=null) + AlignFrame af = new AlignFrame(al, AlignFrame.DEFAULT_WIDTH, + AlignFrame.DEFAULT_HEIGHT); + if (currentFileFormat != null) { - af.currentFileFormat = currentFileFormat; // WHAT IS THE DEFAULT FORMAT FOR NON-FormatAdapter Sourced Alignments? + af.currentFileFormat = currentFileFormat; // WHAT IS THE DEFAULT + // FORMAT FOR + // NON-FormatAdapter Sourced + // Alignments? } - if(title==null) + if (title == null) { title = "Retrieved from " + database.getSelectedItem(); } - Desktop.addInternalFrame(af, - title, - AlignFrame.DEFAULT_WIDTH, - AlignFrame.DEFAULT_HEIGHT); + 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)); + af.setMaximum(jalview.bin.Cache.getDefault("SHOW_FULLSCREEN", + false)); + } catch (Exception ex) + { } - catch (Exception ex) - {} } else { for (int i = 0; i < al.getHeight(); i++) { - alignFrame.viewport.alignment.addSequence(al.getSequenceAt(i)); // this also creates dataset sequence entries + alignFrame.viewport.alignment.addSequence(al.getSequenceAt(i)); // this + // also + // creates + // dataset + // sequence + // entries } - alignFrame.viewport.setEndSeq(alignFrame.viewport.alignment. - getHeight()); + alignFrame.viewport.setEndSeq(alignFrame.viewport.alignment + .getHeight()); alignFrame.viewport.alignment.getWidth(); alignFrame.viewport.firePropertyChange("alignment", null, - alignFrame.viewport. - getAlignment().getSequences()); + alignFrame.viewport.getAlignment().getSequences()); } } return al; @@ -737,11 +629,9 @@ extends JPanel implements Runnable { public void run() { - JOptionPane.showInternalMessageDialog(Desktop.desktop, - error, "Error Retrieving Data", - JOptionPane.WARNING_MESSAGE); + JOptionPane.showInternalMessageDialog(Desktop.desktop, error, + "Error Retrieving Data", JOptionPane.WARNING_MESSAGE); } }); } } -