X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fjalview%2Fgui%2FSequenceFetcher.java;h=ce366c83fd2005db916e60547264d0513dba13c3;hb=7bc226b58110fa26d9dbd3f0c78095d06909ffc3;hp=b4370b7f73f4001318e11eb4d1fb132dc727ad12;hpb=dd74fc4938723fe5ec48d4e5fdcfbe58ac42a48d;p=jalview.git diff --git a/src/jalview/gui/SequenceFetcher.java b/src/jalview/gui/SequenceFetcher.java index b4370b7..ce366c8 100755 --- a/src/jalview/gui/SequenceFetcher.java +++ b/src/jalview/gui/SequenceFetcher.java @@ -1,6 +1,6 @@ /* * Jalview - A Sequence Alignment Editor and Viewer - * Copyright (C) 2006 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle + * Copyright (C) 2007 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 @@ -18,16 +18,16 @@ */ package jalview.gui; -import javax.swing.*; +import java.io.*; +import java.util.*; + import java.awt.*; import java.awt.event.*; -import jalview.io.EBIFetchClient; +import javax.swing.*; + 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 @@ -58,14 +58,19 @@ public class SequenceFetcher 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"; + return ( (alignFrame == null) ? "New " : "Additional ") + + "Sequence Fetcher"; } private void jbInit() @@ -163,11 +168,15 @@ public class SequenceFetcher { 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); @@ -184,7 +193,7 @@ public class SequenceFetcher || database.getSelectedItem().equals("EMBLCDS")) { StringTokenizer st = new StringTokenizer(textfield.getText(), ";"); - while(st.hasMoreTokens()) + while (st.hasMoreTokens()) { EBIFetchClient dbFetch = new EBIFetchClient(); @@ -196,11 +205,13 @@ public class SequenceFetcher 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 + if (result != null && result.length() > 1) // arbitrary minimum length for a seuqence file { System.out.println(result.toString()); @@ -212,49 +223,68 @@ public class SequenceFetcher StringTokenizer qset = new StringTokenizer(textfield.getText(), ";"); String query; SequenceI[] seqs = null; - while (qset.hasMoreTokens() && ((query = qset.nextToken())!=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 (;i0) { - if (parseResult(new Alignment(seqs), null, null)!=null) - result.append("# Successfully parsed the PDB File Queries into an Alignment"); + if (seqs != null && seqs.length > 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")) + else if (database.getSelectedItem().equals("PFAM")) { - try{ + try + { result.append(new FastaFile( - "http://www.sanger.ac.uk/cgi-bin/Pfam/getalignment.pl?format=fal&acc=" - + textfield.getText().toUpperCase(), "URL").print() - ); + "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() ); + if (result.length() > 0) + { + parseResult(result.toString(), textfield.getText().toUpperCase()); + } - }catch(java.io.IOException ex) - { result = null; } + } + catch (java.io.IOException ex) + { + result = null; + } } if (result == null || result.length() == 0) + { showErrorMessage("Error retrieving " + textfield.getText() + " from " + database.getSelectedItem()); + } resetDialog(); return; @@ -292,7 +322,7 @@ public class SequenceFetcher if (entry.getProtein() != null) { - name.append(" " + entry.getProtein().getName().elementAt(0)); + name.append(" " + entry.getProtein().getName().elementAt(0)); } result.append(name + "\n" + entry.getUniprotSequence().getContent() + @@ -311,7 +341,9 @@ public class SequenceFetcher { PDBEntry pdb = (PDBEntry) e.nextElement(); if (!pdb.getType().equals("PDB")) + { continue; + } onlyPdbEntries.addElement(pdb); } @@ -319,14 +351,12 @@ public class SequenceFetcher 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().addDBRef(new DBRefEntry( + DBRefSource.UNIPROT, + "0", + en2.nextElement().toString())); } - - - al.getSequenceAt(i).getDatasetSequence().setPDBId(onlyPdbEntries); if (entry.getFeature() != null) { @@ -335,7 +365,7 @@ public class SequenceFetcher { SequenceFeature sf = (SequenceFeature) e.nextElement(); sf.setFeatureGroup("Uniprot"); - al.getSequenceAt(i).getDatasetSequence().addSequenceFeature( sf ); + al.getSequenceAt(i).getDatasetSequence().addSequenceFeature(sf); } } } @@ -353,9 +383,12 @@ public class SequenceFetcher } EBIFetchClient ebi = new EBIFetchClient(); - String file = ebi.fetchDataAsFile("pdb:" + id, "pdb", "raw").getAbsolutePath(); + String file = ebi.fetchDataAsFile("pdb:" + id, "pdb", "raw"). + getAbsolutePath(); if (file == null) + { return null; + } try { PDBfile pdbfile = new PDBfile(file, jalview.io.AppletFormatAdapter.FILE); @@ -363,33 +396,35 @@ public class SequenceFetcher { 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()); + 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()); } } } @@ -401,75 +436,91 @@ public class SequenceFetcher return null; } SequenceI[] results = new SequenceI[result.size()]; - for (int i=0,j=result.size();i 0) + + Alignment parseResult(Alignment al, String title, String currentFileFormat) + { + + if (al != null && al.getHeight() > 0) + { + if (alignFrame == null) { - 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? - - 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) - {} + af.currentFileFormat = currentFileFormat; // WHAT IS THE DEFAULT FORMAT FOR NON-FormatAdapter Sourced Alignments? } - else + + if (title == null) { - for (int i = 0; i < al.getHeight(); i++) - { - alignFrame.viewport.alignment.addSequence(al.getSequenceAt(i)); // this also creates dataset sequence entries - } - alignFrame.viewport.setEndSeq(alignFrame.viewport.alignment. - getHeight()); - alignFrame.viewport.alignment.getWidth(); - alignFrame.viewport.firePropertyChange("alignment", null, - alignFrame.viewport. - getAlignment().getSequences()); + 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 < al.getHeight(); i++) + { + alignFrame.viewport.alignment.addSequence(al.getSequenceAt(i)); // this also creates dataset sequence entries + } + alignFrame.viewport.setEndSeq(alignFrame.viewport.alignment. + getHeight()); + alignFrame.viewport.alignment.getWidth(); + alignFrame.viewport.firePropertyChange("alignment", null, + alignFrame.viewport. + getAlignment().getSequences()); + } + } return al; } @@ -482,9 +533,8 @@ public class SequenceFetcher { JOptionPane.showInternalMessageDialog(Desktop.desktop, error, "Error Retrieving Data", - JOptionPane.WARNING_MESSAGE); + JOptionPane.WARNING_MESSAGE); } }); } } -