typed search is being added
authorcmzmasek@gmail.com <cmzmasek@gmail.com@ca865154-3058-d1c3-3e42-d8f55a55bdbd>
Tue, 23 Dec 2014 21:56:27 +0000 (21:56 +0000)
committercmzmasek@gmail.com <cmzmasek@gmail.com@ca865154-3058-d1c3-3e42-d8f55a55bdbd>
Tue, 23 Dec 2014 21:56:27 +0000 (21:56 +0000)
forester/java/src/org/forester/archaeopteryx/ControlPanel.java
forester/java/src/org/forester/archaeopteryx/Options.java
forester/java/src/org/forester/phylogeny/PhylogenyMethods.java

index 1e32723..98d5b54 100644 (file)
@@ -224,11 +224,12 @@ final class ControlPanel extends JPanel implements ActionListener {
                 }
                 displayedPhylogenyMightHaveChanged( true );
             }
-            else if ( e.getSource() == _show_domain_architectures ) {
+            else if ( e.getSource() == _show_domain_architectures  ) {
                 search0();
                 search1();
                 displayedPhylogenyMightHaveChanged( true );
             }
+            
             else if ( ( tp != null ) && ( tp.getPhylogeny() != null ) ) {
                 if ( e.getSource() == getDisplayAsPhylogramCb() ) {
                     setDrawPhylogram( getDisplayAsPhylogramCb().isSelected() );
@@ -291,10 +292,14 @@ final class ControlPanel extends JPanel implements ActionListener {
                 }
                 else if ( e.getSource() == _decr_domain_structure_evalue_thr ) {
                     _mainpanel.getCurrentTreePanel().decreaseDomainStructureEvalueThresholdExp();
+                    search0();
+                    search1();
                     displayedPhylogenyMightHaveChanged( true );
                 }
                 else if ( e.getSource() == _incr_domain_structure_evalue_thr ) {
                     _mainpanel.getCurrentTreePanel().increaseDomainStructureEvalueThresholdExp();
+                    search0();
+                    search1();
                     displayedPhylogenyMightHaveChanged( true );
                 }
                 else if ( e.getSource() == _search_tf_0 ) {
@@ -1822,12 +1827,16 @@ final class ControlPanel extends JPanel implements ActionListener {
                                                                          isShowDomainArchitectures() ) );
                 }
                 else {
+                    final TreePanel tp = getMainPanel().getCurrentTreePanel();
+                   
+                    
                     nodes.addAll( PhylogenyMethods.searchData( query,
                                                                tree,
                                                                getOptions().isSearchCaseSensitive(),
                                                                !getOptions().isMatchWholeTermsOnly(),
                                                                getOptions().isSearchWithRegex(),
-                                                               isShowDomainArchitectures() ) );
+                                                               isShowDomainArchitectures(),
+                                                               tp != null ? Math.pow( 10, tp.getDomainStructureEvalueThresholdExp() ) : 0 )  );
                 }
             }
             if ( getOptions().isInverseSearchResult() ) {
@@ -1877,12 +1886,14 @@ final class ControlPanel extends JPanel implements ActionListener {
                                                                          isShowDomainArchitectures() ) );
                 }
                 else {
+                    final TreePanel tp = getMainPanel().getCurrentTreePanel();
                     nodes.addAll( PhylogenyMethods.searchData( query,
                                                                tree,
                                                                getOptions().isSearchCaseSensitive(),
                                                                !getOptions().isMatchWholeTermsOnly(),
                                                                getOptions().isSearchWithRegex(),
-                                                               isShowDomainArchitectures() ) );
+                                                               isShowDomainArchitectures(),
+                                                               tp != null ? Math.pow( 10, tp.getDomainStructureEvalueThresholdExp() ) : 0 )  );
                 }
             }
             if ( getOptions().isInverseSearchResult() ) {
index 89a943e..80f0861 100644 (file)
@@ -476,7 +476,7 @@ final public class Options {
         _base_font = new Font( Configuration.getDefaultFontFamilyName(), Font.PLAIN, 10 );
         _match_whole_terms_only = false;
         _search_with_regex = false;
-        _search_case_sensitive = true;
+        _search_case_sensitive = false;
         _print_line_width = Constants.PDF_LINE_WIDTH_DEFAULT;
         _show_overview = true;
         _ov_placement = OVERVIEW_PLACEMENT_TYPE.UPPER_LEFT;
index 459138b..458ff97 100644 (file)
@@ -936,12 +936,48 @@ public class PhylogenyMethods {
         }\r
     }\r
 \r
+    \r
+    private static enum NDF {\r
+        NN( "NN" ),\r
+        TC( "TC" ),\r
+        CN( "CN" ),\r
+        TS( "TS" ),\r
+        TI( "TI" ),\r
+        SY( "SY" ),\r
+        SN( "SN" ),\r
+        GN( "GN" ),\r
+        SS( "SS" ),\r
+        SA( "SA" ),\r
+        DO( "DO" ),\r
+        AN( "AN" ),\r
+        XR( "XR" ),\r
+        BC( "BC" ),\r
+        MS( "MS" );\r
+        \r
+        private final String _text;\r
+\r
+        NDF( final String text ) {\r
+            _text = text;\r
+        }\r
+\r
+        public static NDF fromString( final String text ) {\r
+                for( NDF n : NDF.values() ) {\r
+                    if ( text.startsWith( n._text ) ) {\r
+                        return n;\r
+                    }\r
+                }\r
+            return null;\r
+        }\r
+    }\r
+  \r
+    \r
     public static List<PhylogenyNode> searchData( final String query,\r
                                                   final Phylogeny phy,\r
                                                   final boolean case_sensitive,\r
                                                   final boolean partial,\r
                                                   final boolean regex,\r
-                                                  final boolean search_domains ) {\r
+                                                  final boolean search_domains,\r
+                                                  final double domains_confidence_threshold ) {\r
         final List<PhylogenyNode> nodes = new ArrayList<PhylogenyNode>();\r
         if ( phy.isEmpty() || ( query == null ) ) {\r
             return nodes;\r
@@ -949,120 +985,147 @@ public class PhylogenyMethods {
         if ( ForesterUtil.isEmpty( query ) ) {\r
             return nodes;\r
         }\r
+\r
+        String my_query = query;\r
+        NDF ndf = null;\r
+\r
+        if ( my_query.length() > 2 &&  my_query.indexOf( ":" ) == 2 ) {\r
+            ndf = NDF.fromString( my_query );\r
+            if ( ndf != null ) {\r
+                my_query = my_query.substring( 3 );\r
+            }\r
+        }\r
+       \r
+        \r
         for( final PhylogenyNodeIterator iter = phy.iteratorPreorder(); iter.hasNext(); ) {\r
             final PhylogenyNode node = iter.next();\r
             boolean match = false;\r
-            if ( match( node.getName(), query, case_sensitive, partial, regex ) ) {\r
+            \r
+            \r
+            if ( ( ndf == null || ndf == NDF.NN ) && match( node.getName(), my_query, case_sensitive, partial, regex ) ) {\r
                 match = true;\r
             }\r
-            else if ( node.getNodeData().isHasTaxonomy()\r
-                    && match( node.getNodeData().getTaxonomy().getTaxonomyCode(), query, case_sensitive, partial, regex ) ) {\r
+            else if ( ( ndf == null || ndf == NDF.TC ) && node.getNodeData().isHasTaxonomy()\r
+                    && match( node.getNodeData().getTaxonomy().getTaxonomyCode(), my_query, case_sensitive, partial, regex ) ) {\r
                 match = true;\r
             }\r
-            else if ( node.getNodeData().isHasTaxonomy()\r
-                    && match( node.getNodeData().getTaxonomy().getCommonName(), query, case_sensitive, partial, regex ) ) {\r
+            else if ( ( ndf == null || ndf == NDF.CN ) && node.getNodeData().isHasTaxonomy()\r
+                    && match( node.getNodeData().getTaxonomy().getCommonName(), my_query, case_sensitive, partial, regex ) ) {\r
                 match = true;\r
             }\r
-            else if ( node.getNodeData().isHasTaxonomy()\r
+            else if ( ( ndf == null || ndf == NDF.TS ) && node.getNodeData().isHasTaxonomy()\r
                     && match( node.getNodeData().getTaxonomy().getScientificName(),\r
-                              query,\r
+                              my_query,\r
                               case_sensitive,\r
                               partial,\r
                               regex ) ) {\r
                 match = true;\r
             }\r
-            else if ( node.getNodeData().isHasTaxonomy()\r
+            else if ( ( ndf == null || ndf == NDF.TI ) &&\r
+                    node.getNodeData().isHasTaxonomy()\r
                     && ( node.getNodeData().getTaxonomy().getIdentifier() != null )\r
                     && match( node.getNodeData().getTaxonomy().getIdentifier().getValue(),\r
-                              query,\r
+                              my_query,\r
                               case_sensitive,\r
                               partial,\r
                               regex ) ) {\r
                 match = true;\r
             }\r
-            else if ( node.getNodeData().isHasTaxonomy() && !node.getNodeData().getTaxonomy().getSynonyms().isEmpty() ) {\r
+            else if ( \r
+                    ( ndf == null || ndf == NDF.SY ) &&\r
+                    node.getNodeData().isHasTaxonomy() && !node.getNodeData().getTaxonomy().getSynonyms().isEmpty() ) {\r
                 final List<String> syns = node.getNodeData().getTaxonomy().getSynonyms();\r
                 I: for( final String syn : syns ) {\r
-                    if ( match( syn, query, case_sensitive, partial, regex ) ) {\r
+                    if ( match( syn, my_query, case_sensitive, partial, regex ) ) {\r
                         match = true;\r
                         break I;\r
                     }\r
                 }\r
             }\r
-            if ( !match && node.getNodeData().isHasSequence()\r
-                    && match( node.getNodeData().getSequence().getName(), query, case_sensitive, partial, regex ) ) {\r
+            if (    !match && ( ndf == null || ndf == NDF.SN ) &&\r
+                     node.getNodeData().isHasSequence()\r
+                    && match( node.getNodeData().getSequence().getName(), my_query, case_sensitive, partial, regex ) ) {\r
                 match = true;\r
             }\r
-            if ( !match && node.getNodeData().isHasSequence()\r
-                    && match( node.getNodeData().getSequence().getGeneName(), query, case_sensitive, partial, regex ) ) {\r
+            if (      !match && ( ndf == null || ndf == NDF.GN ) &&\r
+                     node.getNodeData().isHasSequence()\r
+                    && match( node.getNodeData().getSequence().getGeneName(), my_query, case_sensitive, partial, regex ) ) {\r
                 match = true;\r
             }\r
-            if ( !match && node.getNodeData().isHasSequence()\r
-                    && match( node.getNodeData().getSequence().getSymbol(), query, case_sensitive, partial, regex ) ) {\r
+            if (    !match && ( ndf == null || ndf == NDF.SS ) &&\r
+                    \r
+                     node.getNodeData().isHasSequence()\r
+                    && match( node.getNodeData().getSequence().getSymbol(), my_query, case_sensitive, partial, regex ) ) {\r
                 match = true;\r
             }\r
-            if ( !match\r
-                    && node.getNodeData().isHasSequence()\r
+            if (   !match && ( ndf == null || ndf == NDF.SA ) &&\r
+                    \r
+                   \r
+                     node.getNodeData().isHasSequence()\r
                     && ( node.getNodeData().getSequence().getAccession() != null )\r
                     && match( node.getNodeData().getSequence().getAccession().getValue(),\r
-                              query,\r
+                              my_query,\r
                               case_sensitive,\r
                               partial,\r
                               regex ) ) {\r
                 match = true;\r
             }\r
-            if ( search_domains && !match && node.getNodeData().isHasSequence()\r
+            if (  !match && ( (ndf == null && search_domains ) || ndf == NDF.DO ) && node.getNodeData().isHasSequence()\r
                     && ( node.getNodeData().getSequence().getDomainArchitecture() != null ) ) {\r
                 final DomainArchitecture da = node.getNodeData().getSequence().getDomainArchitecture();\r
                 I: for( int i = 0; i < da.getNumberOfDomains(); ++i ) {\r
-                    if ( match( da.getDomain( i ).getName(), query, case_sensitive, partial, regex ) ) {\r
+                    if ( ( da.getDomain( i ).getConfidence() <= domains_confidence_threshold ) && ( match( da.getDomain( i ).getName(), my_query, case_sensitive, partial, regex ) ) ) {\r
                         match = true;\r
                         break I;\r
                     }\r
                 }\r
             }\r
-            if ( !match && node.getNodeData().isHasSequence()\r
+            if ( \r
+                    !match && ( ndf == null || ndf == NDF.AN ) &&\r
+                    node.getNodeData().isHasSequence()\r
                     && ( node.getNodeData().getSequence().getAnnotations() != null ) ) {\r
                 for( final Annotation ann : node.getNodeData().getSequence().getAnnotations() ) {\r
-                    if ( match( ann.getDesc(), query, case_sensitive, partial, regex ) ) {\r
+                    if ( match( ann.getDesc(), my_query, case_sensitive, partial, regex ) ) {\r
                         match = true;\r
                         break;\r
                     }\r
-                    if ( match( ann.getRef(), query, case_sensitive, partial, regex ) ) {\r
+                    if ( match( ann.getRef(), my_query, case_sensitive, partial, regex ) ) {\r
                         match = true;\r
                         break;\r
                     }\r
                 }\r
             }\r
-            if ( !match && node.getNodeData().isHasSequence()\r
+            if ( !match && ( ndf == null || ndf == NDF.XR ) &&\r
+                    node.getNodeData().isHasSequence()\r
                     && ( node.getNodeData().getSequence().getCrossReferences() != null ) ) {\r
                 for( final Accession x : node.getNodeData().getSequence().getCrossReferences() ) {\r
-                    if ( match( x.getComment(), query, case_sensitive, partial, regex ) ) {\r
+                    if ( match( x.getComment(), my_query, case_sensitive, partial, regex ) ) {\r
                         match = true;\r
                         break;\r
                     }\r
-                    if ( match( x.getSource(), query, case_sensitive, partial, regex ) ) {\r
+                    if ( match( x.getSource(), my_query, case_sensitive, partial, regex ) ) {\r
                         match = true;\r
                         break;\r
                     }\r
-                    if ( match( x.getValue(), query, case_sensitive, partial, regex ) ) {\r
+                    if ( match( x.getValue(), my_query, case_sensitive, partial, regex ) ) {\r
                         match = true;\r
                         break;\r
                     }\r
                 }\r
             }\r
             //\r
-            if ( !match && ( node.getNodeData().getBinaryCharacters() != null ) ) {\r
+            if ( !match && ( ndf == null || ndf == NDF.BC ) &&\r
+                    ( node.getNodeData().getBinaryCharacters() != null ) ) {\r
                 Iterator<String> it = node.getNodeData().getBinaryCharacters().getPresentCharacters().iterator();\r
                 I: while ( it.hasNext() ) {\r
-                    if ( match( it.next(), query, case_sensitive, partial, regex ) ) {\r
+                    if ( match( it.next(), my_query, case_sensitive, partial, regex ) ) {\r
                         match = true;\r
                         break I;\r
                     }\r
                 }\r
                 it = node.getNodeData().getBinaryCharacters().getGainedCharacters().iterator();\r
                 I: while ( it.hasNext() ) {\r
-                    if ( match( it.next(), query, case_sensitive, partial, regex ) ) {\r
+                    if ( match( it.next(), my_query, case_sensitive, partial, regex ) ) {\r
                         match = true;\r
                         break I;\r
                     }\r