in progress
authorcmzmasek@gmail.com <cmzmasek@gmail.com@ca865154-3058-d1c3-3e42-d8f55a55bdbd>
Tue, 27 Mar 2012 23:42:43 +0000 (23:42 +0000)
committercmzmasek@gmail.com <cmzmasek@gmail.com@ca865154-3058-d1c3-3e42-d8f55a55bdbd>
Tue, 27 Mar 2012 23:42:43 +0000 (23:42 +0000)
forester/java/src/org/forester/archaeopteryx/AptxUtil.java
forester/java/src/org/forester/archaeopteryx/Configuration.java
forester/java/src/org/forester/archaeopteryx/Constants.java
forester/java/src/org/forester/archaeopteryx/ControlPanel.java
forester/java/src/org/forester/archaeopteryx/TreePanel.java
forester/java/src/org/forester/archaeopteryx/tools/Blast.java

index 5d8c854..ba95034 100644 (file)
@@ -678,7 +678,7 @@ public final class AptxUtil {
         }
     }
 
-    final static void launchWebBrowser( final URI uri,
+    final public static void launchWebBrowser( final URI uri,
                                         final boolean is_applet,
                                         final JApplet applet,
                                         final String frame_name ) throws IOException {
@@ -835,7 +835,7 @@ public final class AptxUtil {
         }
     }
 
-    final static void showErrorMessage( final Component parent, final String error_msg ) {
+    final public static void showErrorMessage( final Component parent, final String error_msg ) {
         printAppletMessage( Constants.PRG_NAME, error_msg );
         JOptionPane.showMessageDialog( parent, error_msg, "[" + Constants.PRG_NAME + " " + Constants.VERSION
                 + "] Error", JOptionPane.ERROR_MESSAGE );
index f5532e9..882e1b8 100644 (file)
@@ -133,13 +133,13 @@ public final class Configuration {
     final static int                        color_subtree                                          = 5;
     final static int                        open_seq_web                                           = 6;
     final static int                        open_tax_web                                           = 7;
-    final static int                        cut_subtree                                            = 8;
-    final static int                        copy_subtree                                           = 9;
-    final static int                        paste_subtree                                          = 10;
-    final static int                        delete_subtree_or_node                                 = 11;
-    final static int                        add_new_node                                           = 12;
-    final static int                        edit_node_data                                         = 13;
-    final static int                        blast                                                  = 14;
+    final static int                        blast                                                  = 8;
+    final static int                        cut_subtree                                            = 9;
+    final static int                        copy_subtree                                           = 10;
+    final static int                        paste_subtree                                          = 11;
+    final static int                        delete_subtree_or_node                                 = 12;
+    final static int                        add_new_node                                           = 13;
+    final static int                        edit_node_data                                         = 14;
     final static int                        sort_descendents                                       = 15;
     // ---------------------------
     // Display options for trees
@@ -166,9 +166,9 @@ public final class Configuration {
     final static String                     clickto_options[][]                                    = {
             { "Display Node Data", "display" }, { "Collapse/Uncollapse", "display" }, { "Root/Reroot", "display" },
             { "Sub/Super Tree", "display" }, { "Swap Descendants", "display" }, { "Colorize Subtree", "display" },
-            { "Open Sequence Web", "display" }, { "Open Taxonomy Web", "display" }, { "Cut Subtree", "display" },
+            { "Open Sequence Web", "display" }, { "Open Taxonomy Web", "display" }, { "Blast", "display" }, { "Cut Subtree", "display" },
             { "Copy Subtree", "display" }, { "Paste Subtree", "display" }, { "Delete Subtree/Node", "display" },
-            { "Add New Node", "display" }, { "Edit Node Data", "display" }, { "Blast", "nodisplay" },
+            { "Add New Node", "display" }, { "Edit Node Data", "display" }, 
             { "Sort Descendants", "display" }                                                     };
     // This option is selected in the dropdown
     int                                     default_clickto                                        = Configuration.display_node_data;
@@ -379,6 +379,9 @@ public final class Configuration {
         else if ( name.equals( "open_tax_web" ) ) {
             index = Configuration.open_tax_web;
         }
+        else if ( name.equals( "blast" ) ) {
+            index = Configuration.blast;
+        }
         else if ( name.equals( "cut_subtree" ) ) {
             index = Configuration.cut_subtree;
         }
index 4650f9c..c7f8414 100644 (file)
@@ -40,6 +40,7 @@ public final class Constants {
     public final static boolean __RELEASE                                                     = false;                                                    // TODO remove me
     public final static boolean __SNAPSHOT_RELEASE                                            = true;                                                     // TODO remove me
     public final static boolean __SYNTH_LF                                                    = false;                                                    // TODO remove me
+    public final static boolean ALLOW_DDBJ_BLAST  = false;
     public final static String  PRG_NAME                                                      = "Archaeopteryx";
     final static String         VERSION                                                       = "0.969 NM";
     final static String         PRG_DATE                                                      = "2012.03.05";
index 419f2c5..ad88f3b 100644 (file)
@@ -1162,9 +1162,9 @@ final class ControlPanel extends JPanel implements ActionListener {
             setActionWhenNodeClicked( NodeClickAction.SORT_DESCENDENTS );
         }
         else if ( action == _blast_item ) {
-            if ( !Constants.__RELEASE && !Constants.__SNAPSHOT_RELEASE ) {
+           
                 setActionWhenNodeClicked( NodeClickAction.BLAST );
-            }
+            
         }
         else if ( action == _open_tax_web_item ) {
             setActionWhenNodeClicked( NodeClickAction.OPEN_TAX_WEB );
@@ -1368,6 +1368,15 @@ final class ControlPanel extends JPanel implements ActionListener {
             }
             cb_index++;
         }
+        if ( _configuration.doDisplayClickToOption( Configuration.blast ) ) {
+            _blast_item = cb_index;
+            addClickToOption( Configuration.blast, _configuration.getClickToTitle( Configuration.blast ) );
+            if ( default_option == Configuration.blast ) {
+                selected_index = cb_index;
+            }
+            cb_index++;
+        }
+        
         if ( getOptions().isEditable() ) {
             if ( _configuration.doDisplayClickToOption( Configuration.cut_subtree ) ) {
                 _cut_subtree_item = cb_index;
@@ -1422,16 +1431,9 @@ final class ControlPanel extends JPanel implements ActionListener {
                 }
                 cb_index++;
             }
-            if ( !Constants.__RELEASE && !Constants.__SNAPSHOT_RELEASE ) {
-                if ( _configuration.doDisplayClickToOption( Configuration.blast ) ) {
-                    _blast_item = cb_index;
-                    addClickToOption( Configuration.blast, _configuration.getClickToTitle( Configuration.blast ) );
-                    if ( default_option == Configuration.blast ) {
-                        selected_index = cb_index;
-                    }
-                    cb_index++;
-                }
-            }
+           
+                
+            
         }
         // Set default selection and its action
         _click_to_combobox.setSelectedIndex( selected_index );
index 52d4bfb..36afa04 100644 (file)
@@ -346,10 +346,10 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee
     }
 
     final public void actionPerformed( final ActionEvent e ) {
-        int index;
+        
         boolean done = false;
         final JMenuItem node_popup_menu_item = ( JMenuItem ) e.getSource();
-        for( index = 0; ( index < _node_popup_menu_items.length ) && !done; index++ ) {
+        for( int index = 0; ( index < _node_popup_menu_items.length ) && !done; index++ ) {
             // NOTE: index corresponds to the indices of click-to options
             // in the control panel.
             if ( node_popup_menu_item == _node_popup_menu_items[ index ] ) {
@@ -465,29 +465,34 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee
             return;
         }
         if ( node.getNodeData().isHasSequence() ) {
-            String name = "";
-            if ( !ForesterUtil.isEmpty( node.getNodeData().getSequence().getName() ) ) {
-                name = node.getNodeData().getSequence().getName();
-            }
-            else if ( !ForesterUtil.isEmpty( node.getNodeData().getSequence().getSymbol() ) ) {
-                name = node.getNodeData().getSequence().getSymbol();
-            }
-            else if ( node.getNodeData().getSequence().getAccession() != null ) {
-                name = node.getNodeData().getSequence().getAccession().getValue();
-            }
-            if ( !ForesterUtil.isEmpty( name ) ) {
+            String query  = Blast.obtainQueryForBlast( node );
+            if ( !ForesterUtil.isEmpty( query ) ) {
+                
+                JApplet applet = null;
+                if ( isApplet() ) {
+                    applet = obtainApplet();
+                }
+                Blast.NcbiBlastWeb( query, applet, this );
+                
+              
+                
+                
+                if ( Constants.ALLOW_DDBJ_BLAST ) {
                 try {
-                    System.out.println( "trying: " + name );
+                    System.out.println( "trying: " + query );
                     final Blast s = new Blast();
-                    s.go( name );
+                    s.ddbjBlast( query );
                 }
                 catch ( final Exception e ) {
                     e.printStackTrace();
                 }
+                }
             }
         }
     }
 
+   
+
     final void calcMaxDepth() {
         if ( _phylogeny != null ) {
             _circ_max_depth = PhylogenyMethods.calculateMaxDepth( _phylogeny );
@@ -1444,7 +1449,8 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee
         return ( node.getNodeData().isHasSequence() && ( ( ( node.getNodeData().getSequence().getAccession() != null ) && !ForesterUtil
                 .isEmpty( node.getNodeData().getSequence().getAccession().getValue() ) )
                 || !ForesterUtil.isEmpty( node.getNodeData().getSequence().getName() ) || !ForesterUtil.isEmpty( node
-                .getNodeData().getSequence().getSymbol() ) ) );
+                .getNodeData().getSequence().getSymbol() ) || !ForesterUtil.isEmpty( node
+                                                                                     .getNodeData().getSequence().getMolecularSequence() )) );
     }
 
     final boolean isCanCollapse() {
@@ -1743,9 +1749,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee
                 _node_popup_menu_items[ i ].setEnabled( isCanOpenTaxWeb( node ) );
             }
             else if ( title.equals( Configuration.clickto_options[ Configuration.blast ][ 0 ] ) ) {
-                if ( Constants.__RELEASE || Constants.__SNAPSHOT_RELEASE ) {
-                    continue;
-                }
+               
                 _node_popup_menu_items[ i ].setEnabled( isCanBlast( node ) );
             }
             else if ( title.equals( Configuration.clickto_options[ Configuration.delete_subtree_or_node ][ 0 ] ) ) {
index 5bfc31e..d3ea4cc 100644 (file)
 
 package org.forester.archaeopteryx.tools;
 
+
 import java.io.IOException;
+import java.net.URI;
+import java.net.URISyntaxException;
 import java.util.Arrays;
 import java.util.Enumeration;
 import java.util.Hashtable;
 import java.util.Vector;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import javax.swing.JApplet;
 
+import org.forester.archaeopteryx.AptxUtil;
+import org.forester.archaeopteryx.TreePanel;
+import org.forester.phylogeny.PhylogenyNode;
+import org.forester.util.ForesterUtil;
 import org.forester.ws.wabi.RestUtil;
 
 public class Blast {
 
+    final static Pattern identifier_pattern_1 = Pattern.compile ("^([A-Za-z]{2,5})[|=:]([0-9A-Za-z\\.]{4,40})\\s*$");
+    final static Pattern identifier_pattern_2 = Pattern.compile ("^([A-Za-z]{2,5})[|=:]([0-9A-Za-z\\.]{4,40})[|,; ].*$");
+    
     public Blast() {
     }
 
-    public void go( final String geneName ) {
+
+    public static void NcbiBlastWeb( String query, JApplet applet, TreePanel p ) {
+
+      //http://www.ncbi.nlm.nih.gov/blast/Blast.cgi?CMD=Web&PAGE=Proteins&DATABASE=swissprot&QUERY=gi|163848401
+        
+        
+        StringBuilder uri_str = new StringBuilder();
+        uri_str.append( "http://www.ncbi.nlm.nih.gov/blast/Blast.cgi?CMD=Web&DATABASE=nr&PAGE=Proteins&QUERY=" );
+        uri_str.append( query );
+        try {
+
+            AptxUtil.launchWebBrowser( new URI( uri_str.toString() ), applet != null, applet, "_aptx_blast" );
+        }
+        catch ( final IOException e ) {
+            AptxUtil.showErrorMessage( p, e.toString() );
+            e.printStackTrace();
+        }
+        catch ( final URISyntaxException e ) {
+            AptxUtil.showErrorMessage( p, e.toString() );
+            e.printStackTrace();
+        }
+
+    }
+    public static String obtainQueryForBlast( final PhylogenyNode node ) {
+        String query = "";
+        if ( !ForesterUtil.isEmpty( node.getNodeData().getSequence().getMolecularSequence() ) ) {
+            query = node.getNodeData().getSequence().getMolecularSequence();
+        }
+        else if ( node.getNodeData().getSequence().getAccession() != null && !ForesterUtil.isEmpty( node.getNodeData().getSequence().getAccession().getValue() ) ) {
+            if ( !ForesterUtil.isEmpty( node.getNodeData().getSequence().getAccession().getSource() ) ) {
+                query = node.getNodeData().getSequence().getAccession().getSource() + "%7C";
+            }
+            query += node.getNodeData().getSequence().getAccession().getValue();
+        }
+        else if ( !ForesterUtil.isEmpty( node.getNodeData().getSequence().getName() ) ) {
+            String name = node.getNodeData().getSequence().getName();
+            final Matcher matcher1 = identifier_pattern_1.matcher( name );
+            final Matcher matcher2 = identifier_pattern_2.matcher( name );
+            String group1 = "";
+            String group2 = "";
+            
+            if ( matcher1.matches() ) {
+                group1 =  matcher1.group( 1 );
+                group2 =  matcher1.group( 2 );
+                System.out.println( "1 1=" + group1 );
+
+                System.out.println( "1 2=" + group2 );
+            }
+            if ( matcher2.matches() ) {
+                group1 =  matcher2.group( 1 );
+                group2 =  matcher2.group( 2 );
+                System.out.println( "2 1=" + group1 );
+
+                System.out.println( "2 2=" + group2 );
+            }
+            if (!ForesterUtil.isEmpty( group1 ) && !ForesterUtil.isEmpty( group2 )) {
+                query = group1  + "%7C" + group2;
+            }
+
+        }
+       
+        
+        System.out.println( query );
+
+        return query;
+    }
+
+
+    public void ddbjBlast( final String geneName ) {
         // Retrieve accession number list which has specified gene name from searchByXMLPath of ARSA. Please click here for details of ARSA.
         /*target: Sequence length is between 300bp and 1000bp.
         Feature key is CDS.
         Gene qualifire is same as specified gene name.*/
         String queryPath = "/ENTRY/DDBJ/division=='HUM' AND (/ENTRY/DDBJ/length>=300 AND "
-                + "/ENTRY/DDBJ/length<=1000) ";
+            + "/ENTRY/DDBJ/length<=1000) ";
         queryPath += "AND (/ENTRY/DDBJ/feature-table/feature{/f_key = 'CDS' AND ";
         queryPath += "/f_quals/qualifier{/q_name = 'gene' AND /q_value=='" + geneName + "'}})";
         String query = "service=ARSA&method=searchByXMLPath&queryPath=" + queryPath
-                + "&returnPath=/ENTRY/DDBJ/primary-accession&offset=1&count=100";
+        + "&returnPath=/ENTRY/DDBJ/primary-accession&offset=1&count=100";
         //Execute ARSA
         String arsaResult = null;
         try {
@@ -82,7 +164,7 @@ public class Blast {
         //Execute blastn by using searchParam of Blast with step2's sequence. Specified option is -e 0.0001 -m 8 -b 50 -v 50. It means "Extract top 50 hit which E-value is more than 0.0001.". The reference databases are specified as follows. ddbjpri(primates) ddbjrod(rodents) ddbjmam(mammals) ddbjvrt(vertebrates ) ddbjinv(invertebrates).
         //Execute blastn with step3's sequence
         query = "service=Blast&method=searchParam&program=blastn&database=ddbjpri ddbjrod ddbjmam ddbjvrt "
-                + "ddbjinv&query=" + dnaSeq + "&param=-m 8 -b 50 -v 50 -e 0.0001";
+            + "ddbjinv&query=" + dnaSeq + "&param=-m 8 -b 50 -v 50 -e 0.0001";
         String blastResult = null;
         try {
             blastResult = RestUtil.getResult( query );
@@ -108,7 +190,7 @@ public class Blast {
         for( int i = 0; i < parsedBlastResult.size(); i++ ) {
             final String[] parsed = parsedBlastResult.elementAt( i );
             query = "service=ARSA&method=searchByXMLPath&queryPath=/ENTRY/DDBJ/primary-accession=='" + parsed[ 0 ]
-                    + "'&returnPath=/ENTRY/DDBJ/organism&offset=1&count=100";
+                                                                                                               + "'&returnPath=/ENTRY/DDBJ/organism&offset=1&count=100";
             String organism = null;
             try {
                 organism = RestUtil.getResult( query );