JMenuItem _collapse_species_specific_subtrees;
JMenuItem _collapse_below_threshold; //TODO implememt me
JMenuItem _obtain_detailed_taxonomic_information_jmi;
+ JMenuItem _obtain_uniprot_seq_information_jmi;
JMenuItem _move_node_names_to_tax_sn_jmi;
JMenuItem _move_node_names_to_seq_names_jmi;
JMenuItem _extract_tax_code_from_node_names_jmi;
}
boolean isSubtreeDisplayed() {
- if ( getCurrentTreePanel().isCurrentTreeIsSubtree() ) {
- JOptionPane
- .showMessageDialog( this,
- "This operation can only be performed on a complete tree, not on the currently displayed sub-tree only.",
- "Operation can not be exectuted on a sub-tree",
- JOptionPane.WARNING_MESSAGE );
- return true;
+ if ( getCurrentTreePanel() != null ) {
+ if ( getCurrentTreePanel().isCurrentTreeIsSubtree() ) {
+ JOptionPane
+ .showMessageDialog( this,
+ "This operation can only be performed on a complete tree, not on the currently displayed sub-tree only.",
+ "Operation can not be exectuted on a sub-tree",
+ JOptionPane.WARNING_MESSAGE );
+ return true;
+ }
}
return false;
}
void buildViewMenu() {
_view_jmenu = createMenu( "View", getConfiguration() );
+ _view_jmenu.add( _display_basic_information_item = new JMenuItem( "Display Basic Information" ) );
+ _view_jmenu.addSeparator();
_view_jmenu.add( _view_as_XML_item = new JMenuItem( "View as phyloXML" ) );
_view_jmenu.add( _view_as_NH_item = new JMenuItem( "View as Newick" ) );
_view_jmenu.add( _view_as_NHX_item = new JMenuItem( "View as NHX" ) );
_view_jmenu.add( _view_as_nexus_item = new JMenuItem( "View as Nexus" ) );
- _view_jmenu.add( _display_basic_information_item = new JMenuItem( "Display Basic Information" ) );
customizeJMenuItem( _display_basic_information_item );
customizeJMenuItem( _view_as_NH_item );
customizeJMenuItem( _view_as_NHX_item );
}
obtainDetailedTaxonomicInformation();
}
+ else if ( o == _obtain_uniprot_seq_information_jmi ) {
+ obtainUniProtSequenceInformation();
+ }
else if ( o == _read_values_jmi ) {
if ( isSubtreeDisplayed() ) {
return;
customizeJMenuItem( _obtain_detailed_taxonomic_information_jmi );
_obtain_detailed_taxonomic_information_jmi
.setToolTipText( "To add additional taxonomic information (from UniProt Taxonomy)" );
+ _tools_menu
+ .add( _obtain_uniprot_seq_information_jmi = new JMenuItem( "Obtain Sequence Information (from UniProt)" ) );
+ customizeJMenuItem( _obtain_uniprot_seq_information_jmi );
+ _obtain_uniprot_seq_information_jmi.setToolTipText( "To add additional sequence information (from UniProt)" );
_tools_menu.addSeparator();
if ( !Constants.__RELEASE ) {
_tools_menu.add( _function_analysis = new JMenuItem( "Add UniProtKB Annotations" ) );
}
}
+ private void obtainUniProtSequenceInformation() {
+ if ( getCurrentTreePanel() != null ) {
+ final Phylogeny phy = getCurrentTreePanel().getPhylogeny();
+ if ( ( phy != null ) && !phy.isEmpty() ) {
+ final UniProtSequenceObtainer u = new UniProtSequenceObtainer( this,
+ _mainpanel.getCurrentTreePanel(),
+ phy.copy() );
+ new Thread( u ).start();
+ }
+ }
+ }
+
private void print() {
if ( ( getCurrentTreePanel() == null ) || ( getCurrentTreePanel().getPhylogeny() == null )
|| getCurrentTreePanel().getPhylogeny().isEmpty() ) {
--- /dev/null
+// Exp $
+// forester -- software libraries and applications
+// for genomics and evolutionary biology research.
+//
+// Copyright (C) 2010 Christian M Zmasek
+// Copyright (C) 2010 Sanford-Burnham Medical Research Institute
+// All rights reserved
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library 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
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+//
+// Contact: phylosoft @ gmail . com
+// WWW: www.phylosoft.org/forester
+
+package org.forester.archaeopteryx;
+
+import java.io.IOException;
+import java.net.UnknownHostException;
+import java.util.List;
+import java.util.SortedSet;
+import java.util.TreeSet;
+
+import javax.swing.JOptionPane;
+
+import org.forester.phylogeny.Phylogeny;
+import org.forester.phylogeny.PhylogenyNode;
+import org.forester.phylogeny.data.Accession;
+import org.forester.phylogeny.data.Identifier;
+import org.forester.phylogeny.data.Sequence;
+import org.forester.phylogeny.data.Taxonomy;
+import org.forester.phylogeny.iterators.PhylogenyNodeIterator;
+import org.forester.util.ForesterUtil;
+import org.forester.ws.uniprot.UniProtEntry;
+import org.forester.ws.uniprot.UniProtWsTools;
+
+public class UniProtSequenceObtainer implements Runnable {
+
+ private final Phylogeny _phy;
+ private final MainFrameApplication _mf;
+ private final TreePanel _treepanel;
+
+ UniProtSequenceObtainer( final MainFrameApplication mf, final TreePanel treepanel, final Phylogeny phy ) {
+ _phy = phy;
+ _mf = mf;
+ _treepanel = treepanel;
+ }
+
+ private String getBaseUrl() {
+ return UniProtWsTools.BASE_URL;
+ }
+
+ private void execute() {
+ _mf.getMainPanel().getCurrentTreePanel().setWaitCursor();
+ SortedSet<String> not_found = null;
+ try {
+ not_found = obtainSeqInformation( _phy );
+ }
+ catch ( final UnknownHostException e ) {
+ _mf.getMainPanel().getCurrentTreePanel().setArrowCursor();
+ JOptionPane.showMessageDialog( _mf,
+ "Could not connect to \"" + getBaseUrl() + "\"",
+ "Network error during taxonomic information gathering",
+ JOptionPane.ERROR_MESSAGE );
+ return;
+ }
+ catch ( final IOException e ) {
+ _mf.getMainPanel().getCurrentTreePanel().setArrowCursor();
+ e.printStackTrace();
+ JOptionPane.showMessageDialog( _mf,
+ e.toString(),
+ "Failed to obtain taxonomic information",
+ JOptionPane.ERROR_MESSAGE );
+ return;
+ }
+ finally {
+ _mf.getMainPanel().getCurrentTreePanel().setArrowCursor();
+ }
+ _treepanel.setTree( _phy );
+ _mf.showWhole();
+ _treepanel.setEdited( true );
+ if ( ( not_found != null ) && ( not_found.size() > 0 ) ) {
+ int max = not_found.size();
+ boolean more = false;
+ if ( max > 20 ) {
+ more = true;
+ max = 20;
+ }
+ final StringBuffer sb = new StringBuffer();
+ sb.append( "Not all identifiers could be resolved.\n" );
+ if ( not_found.size() == 1 ) {
+ sb.append( "The following identifier was not found:\n" );
+ }
+ else {
+ sb.append( "The following identifiers were not found (total: " + not_found.size() + "):\n" );
+ }
+ int i = 0;
+ for( final String string : not_found ) {
+ if ( i > 19 ) {
+ break;
+ }
+ sb.append( string );
+ sb.append( "\n" );
+ ++i;
+ }
+ if ( more ) {
+ sb.append( "..." );
+ }
+ try {
+ JOptionPane.showMessageDialog( _mf,
+ sb.toString(),
+ "UniProt Sequence Tool Completed",
+ JOptionPane.WARNING_MESSAGE );
+ }
+ catch ( final Exception e ) {
+ // Not important if this fails, do nothing.
+ }
+ }
+ else {
+ try {
+ JOptionPane.showMessageDialog( _mf,
+ "UniProt sequence tool successfully completed",
+ "UniProt Sequence Tool Completed",
+ JOptionPane.INFORMATION_MESSAGE );
+ }
+ catch ( final Exception e ) {
+ // Not important if this fails, do nothing.
+ }
+ }
+ }
+
+ synchronized public static SortedSet<String> obtainSeqInformation( final Phylogeny phy ) throws IOException {
+ final SortedSet<String> not_found = new TreeSet<String>();
+ for( final PhylogenyNodeIterator iter = phy.iteratorPostorder(); iter.hasNext(); ) {
+ final PhylogenyNode node = iter.next();
+ if ( node.getNodeData().isHasSequence() ) {
+ //TODO Do something
+ }
+ // else if ( !ForesterUtil.isEmpty( node.getName() ) ) {
+ // not_found.add( node.getName() );
+ // }
+ else if ( !ForesterUtil.isEmpty( node.getName() ) ) {
+ String query = node.getName();
+ if ( query.indexOf( '/' ) > 0 ) {
+ query = query.substring( 0, query.indexOf( '/' ) );
+ }
+ final UniProtEntry upe = obtainUniProtEntry( query );
+ if ( upe != null ) {
+ final Sequence seq = new Sequence();
+ final Taxonomy tax = new Taxonomy();
+ if ( !ForesterUtil.isEmpty( upe.getAc() ) ) {
+ seq.setAccession( new Accession( upe.getAc(), "uniprot" ) );
+ }
+ if ( !ForesterUtil.isEmpty( upe.getRecName() ) ) {
+ seq.setName( upe.getRecName() );
+ }
+ if ( !ForesterUtil.isEmpty( upe.getSymbol() ) ) {
+ seq.setSymbol( upe.getSymbol() );
+ }
+ if ( !ForesterUtil.isEmpty( upe.getOsScientificName() ) ) {
+ tax.setScientificName( upe.getOsScientificName() );
+ }
+ if ( !ForesterUtil.isEmpty( upe.getTaxId() ) ) {
+ tax.setIdentifier( new Identifier( upe.getTaxId(), "uniprot" ) );
+ }
+ node.getNodeData().setTaxonomy( tax );
+ node.getNodeData().setSequence( seq );
+ }
+ else {
+ not_found.add( node.getName() );
+ }
+ //}
+ }
+ }
+ return not_found;
+ }
+
+ static UniProtEntry obtainUniProtEntry( final String query ) throws IOException {
+ final List<String> lines = UniProtWsTools.queryUniprot( "uniprot/" + query + ".txt", 200 );
+ return UniProtEntry.createInstanceFromPlainText( lines );
+ }
+
+ @Override
+ public void run() {
+ execute();
+ }
+}
import java.util.List;
-public final class UniProtTaxonomyEntry {
+public final class UniProtEntry {
- private String _id;
private String _ac;
private String _rec_name;
private String _os_scientific_name;
- private String _os_common_name;
private String _tax_id;
+ private String _symbol;
- private UniProtTaxonomyEntry() {
+ private UniProtEntry() {
}
- public static UniProtTaxonomyEntry createInstanceFromPlainText( final List<String> lines ) {
- final UniProtTaxonomyEntry e = new UniProtTaxonomyEntry();
+ public static UniProtEntry createInstanceFromPlainText( final List<String> lines ) {
+ final UniProtEntry e = new UniProtEntry();
for( final String line : lines ) {
- if ( line.startsWith( "ID" ) ) {
- e.setId( line.split( "\\s+" )[ 1 ] );
- }
- else if ( line.startsWith( "AC" ) ) {
+ if ( line.startsWith( "AC" ) ) {
e.setAc( extract( line, "AC", ";" ) );
}
else if ( line.startsWith( "DE" ) ) {
if ( ( line.indexOf( "RecName:" ) > 0 ) && ( line.indexOf( "Full=" ) > 0 ) ) {
e.setRecName( extract( line, "Full=", ";" ) );
}
- if ( ( line.indexOf( "RecName:" ) > 0 ) && ( line.indexOf( "Full=" ) > 0 ) ) {
- e.setRecName( extract( line, "Full=", ";" ) );
+ }
+ else if ( line.startsWith( "GN" ) ) {
+ if ( ( line.indexOf( "Name=" ) > 0 ) ) {
+ e.setSymbol( extract( line, "Name=", ";" ) );
}
}
else if ( line.startsWith( "OS" ) ) {
}
}
else if ( line.startsWith( "OX" ) ) {
- e.setTaxId( extract( line, "OX", ";" ) );
+ if ( line.indexOf( "NCBI_TaxID=" ) > 0 ) {
+ e.setTaxId( extract( line, "NCBI_TaxID=", ";" ) );
+ }
}
}
return e;
throw new IllegalArgumentException( "attempt to extract from [" + target + "] between [" + a + "] and ["
+ b + "]" );
}
- return target.substring( i_a + a.length() + 1, i_b - 1 ).trim();
- }
-
- public String getId() {
- return _id;
- }
-
- private void setId( final String id ) {
- _id = id;
+ return target.substring( i_a + a.length(), i_b ).trim();
}
public String getAc() {
}
private void setAc( final String ac ) {
- _ac = ac;
+ if ( _ac == null ) {
+ _ac = ac;
+ }
}
public String getRecName() {
}
private void setRecName( final String rec_name ) {
- _rec_name = rec_name;
+ if ( _rec_name == null ) {
+ _rec_name = rec_name;
+ }
}
public String getOsScientificName() {
}
private void setOsScientificName( final String os_scientific_name ) {
- _os_scientific_name = os_scientific_name;
+ if ( _os_scientific_name == null ) {
+ _os_scientific_name = os_scientific_name;
+ }
}
- public String getOsCommonName() {
- return _os_common_name;
+ public String getTaxId() {
+ return _tax_id;
}
- private void setOsCommonName( final String os_common_name ) {
- _os_common_name = os_common_name;
+ private void setTaxId( final String tax_id ) {
+ if ( _tax_id == null ) {
+ _tax_id = tax_id;
+ }
}
- public String getTaxId() {
- return _tax_id;
+ public String getSymbol() {
+ return _symbol;
}
- private void setTaxId( final String tax_id ) {
- _tax_id = tax_id;
+ private void setSymbol( final String symbol ) {
+ if ( _symbol == null ) {
+ _symbol = symbol;
+ }
}
}