import java.util.Set;\r
import java.util.regex.Matcher;\r
import java.util.regex.Pattern;\r
+import java.util.regex.PatternSyntaxException;\r
\r
import org.forester.io.parsers.FastaParser;\r
import org.forester.io.parsers.PhylogenyParser;\r
final Phylogeny phy,\r
final boolean case_sensitive,\r
final boolean partial,\r
+ final boolean regex,\r
final boolean search_domains ) {\r
final List<PhylogenyNode> nodes = new ArrayList<PhylogenyNode>();\r
if ( phy.isEmpty() || ( query == null ) ) {\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 ) ) {\r
+ if ( match( node.getName(), 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 ) ) {\r
+ && match( node.getNodeData().getTaxonomy().getTaxonomyCode(), 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 ) ) {\r
+ && match( node.getNodeData().getTaxonomy().getCommonName(), query, case_sensitive, partial, regex ) ) {\r
match = true;\r
}\r
else if ( node.getNodeData().isHasTaxonomy()\r
- && match( node.getNodeData().getTaxonomy().getScientificName(), query, case_sensitive, partial ) ) {\r
+ && match( node.getNodeData().getTaxonomy().getScientificName(),\r
+ query,\r
+ case_sensitive,\r
+ partial,\r
+ regex ) ) {\r
match = true;\r
}\r
else if ( node.getNodeData().isHasTaxonomy()\r
&& match( node.getNodeData().getTaxonomy().getIdentifier().getValue(),\r
query,\r
case_sensitive,\r
- partial ) ) {\r
+ partial,\r
+ regex ) ) {\r
match = true;\r
}\r
else if ( 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 ) ) {\r
+ if ( match( syn, 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 ) ) {\r
+ && match( node.getNodeData().getSequence().getName(), 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 ) ) {\r
+ && match( node.getNodeData().getSequence().getGeneName(), 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 ) ) {\r
+ && match( node.getNodeData().getSequence().getSymbol(), query, case_sensitive, partial, regex ) ) {\r
match = true;\r
}\r
if ( !match\r
&& match( node.getNodeData().getSequence().getAccession().getValue(),\r
query,\r
case_sensitive,\r
- partial ) ) {\r
+ partial,\r
+ regex ) ) {\r
match = true;\r
}\r
if ( search_domains && !match && 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 ) ) {\r
+ if ( match( da.getDomain( i ).getName(), query, case_sensitive, partial, regex ) ) {\r
match = true;\r
break I;\r
}\r
}\r
}\r
- //\r
if ( !match && 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 ) ) {\r
+ if ( match( ann.getDesc(), query, case_sensitive, partial, regex ) ) {\r
match = true;\r
break;\r
}\r
- if ( match( ann.getRef(), query, case_sensitive, partial ) ) {\r
+ if ( match( ann.getRef(), query, case_sensitive, partial, regex ) ) {\r
match = true;\r
break;\r
}\r
if ( !match && 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 ) ) {\r
+ if ( match( x.getComment(), query, case_sensitive, partial, regex ) ) {\r
match = true;\r
break;\r
}\r
- if ( match( x.getSource(), query, case_sensitive, partial ) ) {\r
+ if ( match( x.getSource(), query, case_sensitive, partial, regex ) ) {\r
match = true;\r
break;\r
}\r
- if ( match( x.getValue(), query, case_sensitive, partial ) ) {\r
+ if ( match( x.getValue(), query, case_sensitive, partial, regex ) ) {\r
match = true;\r
break;\r
}\r
if ( !match && ( 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 ) ) {\r
+ if ( match( it.next(), 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 ) ) {\r
+ if ( match( it.next(), query, case_sensitive, partial, regex ) ) {\r
match = true;\r
break I;\r
}\r
if ( ForesterUtil.isEmpty( query ) ) {\r
continue;\r
}\r
- if ( match( node.getName(), query, case_sensitive, partial ) ) {\r
+ if ( match( node.getName(), query, case_sensitive, partial, false ) ) {\r
match = true;\r
}\r
else if ( node.getNodeData().isHasTaxonomy()\r
- && match( node.getNodeData().getTaxonomy().getTaxonomyCode(), query, case_sensitive, partial ) ) {\r
+ && match( node.getNodeData().getTaxonomy().getTaxonomyCode(),\r
+ query,\r
+ case_sensitive,\r
+ partial,\r
+ false ) ) {\r
match = true;\r
}\r
else if ( node.getNodeData().isHasTaxonomy()\r
- && match( node.getNodeData().getTaxonomy().getCommonName(), query, case_sensitive, partial ) ) {\r
+ && match( node.getNodeData().getTaxonomy().getCommonName(),\r
+ query,\r
+ case_sensitive,\r
+ partial,\r
+ false ) ) {\r
match = true;\r
}\r
else if ( node.getNodeData().isHasTaxonomy()\r
- && match( node.getNodeData().getTaxonomy().getScientificName(), query, case_sensitive, partial ) ) {\r
+ && match( node.getNodeData().getTaxonomy().getScientificName(),\r
+ query,\r
+ case_sensitive,\r
+ partial,\r
+ false ) ) {\r
match = true;\r
}\r
else if ( node.getNodeData().isHasTaxonomy()\r
&& match( node.getNodeData().getTaxonomy().getIdentifier().getValue(),\r
query,\r
case_sensitive,\r
- partial ) ) {\r
+ partial,\r
+ false ) ) {\r
match = true;\r
}\r
else if ( node.getNodeData().isHasTaxonomy()\r
&& !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 ) ) {\r
+ if ( match( syn, query, case_sensitive, partial, false ) ) {\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 ) ) {\r
+ && match( node.getNodeData().getSequence().getName(), query, case_sensitive, partial, false ) ) {\r
match = true;\r
}\r
- if ( !match && node.getNodeData().isHasSequence()\r
- && match( node.getNodeData().getSequence().getGeneName(), query, case_sensitive, partial ) ) {\r
+ if ( !match\r
+ && node.getNodeData().isHasSequence()\r
+ && match( node.getNodeData().getSequence().getGeneName(), query, case_sensitive, partial, false ) ) {\r
match = true;\r
}\r
if ( !match && node.getNodeData().isHasSequence()\r
- && match( node.getNodeData().getSequence().getSymbol(), query, case_sensitive, partial ) ) {\r
+ && match( node.getNodeData().getSequence().getSymbol(), query, case_sensitive, partial, false ) ) {\r
match = true;\r
}\r
if ( !match\r
&& match( node.getNodeData().getSequence().getAccession().getValue(),\r
query,\r
case_sensitive,\r
- partial ) ) {\r
+ partial,\r
+ false ) ) {\r
match = true;\r
}\r
if ( search_domains && !match && 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 ) ) {\r
+ if ( match( da.getDomain( i ).getName(), query, case_sensitive, partial, false ) ) {\r
match = true;\r
break I;\r
}\r
if ( !match && 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 ) ) {\r
+ if ( match( ann.getDesc(), query, case_sensitive, partial, false ) ) {\r
match = true;\r
break;\r
}\r
- if ( match( ann.getRef(), query, case_sensitive, partial ) ) {\r
+ if ( match( ann.getRef(), query, case_sensitive, partial, false ) ) {\r
match = true;\r
break;\r
}\r
if ( !match && 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 ) ) {\r
+ if ( match( x.getComment(), query, case_sensitive, partial, false ) ) {\r
match = true;\r
break;\r
}\r
- if ( match( x.getSource(), query, case_sensitive, partial ) ) {\r
+ if ( match( x.getSource(), query, case_sensitive, partial, false ) ) {\r
match = true;\r
break;\r
}\r
- if ( match( x.getValue(), query, case_sensitive, partial ) ) {\r
+ if ( match( x.getValue(), query, case_sensitive, partial, false ) ) {\r
match = true;\r
break;\r
}\r
if ( !match && ( 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 ) ) {\r
+ if ( match( it.next(), query, case_sensitive, partial, false ) ) {\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 ) ) {\r
+ if ( match( it.next(), query, case_sensitive, partial, false ) ) {\r
match = true;\r
break I;\r
}\r
}\r
\r
final static public void sortNodeDescendents( final PhylogenyNode node, final DESCENDANT_SORT_PRIORITY pri ) {\r
- class PhylogenyNodeSortTaxonomyPriority implements Comparator<PhylogenyNode> {\r
-\r
- @Override\r
- public int compare( final PhylogenyNode n1, final PhylogenyNode n2 ) {\r
- if ( n1.getNodeData().isHasTaxonomy() && n2.getNodeData().isHasTaxonomy() ) {\r
- if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getTaxonomy().getScientificName() ) )\r
- && ( !ForesterUtil.isEmpty( n2.getNodeData().getTaxonomy().getScientificName() ) ) ) {\r
- return n1.getNodeData().getTaxonomy().getScientificName().toLowerCase()\r
- .compareTo( n2.getNodeData().getTaxonomy().getScientificName().toLowerCase() );\r
- }\r
- if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getTaxonomy().getTaxonomyCode() ) )\r
- && ( !ForesterUtil.isEmpty( n2.getNodeData().getTaxonomy().getTaxonomyCode() ) ) ) {\r
- return n1.getNodeData().getTaxonomy().getTaxonomyCode()\r
- .compareTo( n2.getNodeData().getTaxonomy().getTaxonomyCode() );\r
- }\r
- if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getTaxonomy().getCommonName() ) )\r
- && ( !ForesterUtil.isEmpty( n2.getNodeData().getTaxonomy().getCommonName() ) ) ) {\r
- return n1.getNodeData().getTaxonomy().getCommonName().toLowerCase()\r
- .compareTo( n2.getNodeData().getTaxonomy().getCommonName().toLowerCase() );\r
- }\r
- }\r
- if ( n1.getNodeData().isHasSequence() && n2.getNodeData().isHasSequence() ) {\r
- if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getSequence().getName() ) )\r
- && ( !ForesterUtil.isEmpty( n2.getNodeData().getSequence().getName() ) ) ) {\r
- return n1.getNodeData().getSequence().getName().toLowerCase()\r
- .compareTo( n2.getNodeData().getSequence().getName().toLowerCase() );\r
- }\r
- if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getSequence().getSymbol() ) )\r
- && ( !ForesterUtil.isEmpty( n2.getNodeData().getSequence().getSymbol() ) ) ) {\r
- return n1.getNodeData().getSequence().getSymbol()\r
- .compareTo( n2.getNodeData().getSequence().getSymbol() );\r
- }\r
- if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getSequence().getGeneName() ) )\r
- && ( !ForesterUtil.isEmpty( n2.getNodeData().getSequence().getGeneName() ) ) ) {\r
- return n1.getNodeData().getSequence().getGeneName()\r
- .compareTo( n2.getNodeData().getSequence().getGeneName() );\r
- }\r
- if ( ( n1.getNodeData().getSequence().getAccession() != null )\r
- && ( n2.getNodeData().getSequence().getAccession() != null )\r
- && !ForesterUtil.isEmpty( n1.getNodeData().getSequence().getAccession().getValue() )\r
- && !ForesterUtil.isEmpty( n2.getNodeData().getSequence().getAccession().getValue() ) ) {\r
- return n1.getNodeData().getSequence().getAccession().getValue()\r
- .compareTo( n2.getNodeData().getSequence().getAccession().getValue() );\r
- }\r
- }\r
- if ( ( !ForesterUtil.isEmpty( n1.getName() ) ) && ( !ForesterUtil.isEmpty( n2.getName() ) ) ) {\r
- return n1.getName().toLowerCase().compareTo( n2.getName().toLowerCase() );\r
- }\r
- return 0;\r
- }\r
- }\r
- class PhylogenyNodeSortSequencePriority implements Comparator<PhylogenyNode> {\r
-\r
- @Override\r
- public int compare( final PhylogenyNode n1, final PhylogenyNode n2 ) {\r
- if ( n1.getNodeData().isHasSequence() && n2.getNodeData().isHasSequence() ) {\r
- if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getSequence().getName() ) )\r
- && ( !ForesterUtil.isEmpty( n2.getNodeData().getSequence().getName() ) ) ) {\r
- return n1.getNodeData().getSequence().getName().toLowerCase()\r
- .compareTo( n2.getNodeData().getSequence().getName().toLowerCase() );\r
- }\r
- if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getSequence().getSymbol() ) )\r
- && ( !ForesterUtil.isEmpty( n2.getNodeData().getSequence().getSymbol() ) ) ) {\r
- return n1.getNodeData().getSequence().getSymbol()\r
- .compareTo( n2.getNodeData().getSequence().getSymbol() );\r
- }\r
- if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getSequence().getGeneName() ) )\r
- && ( !ForesterUtil.isEmpty( n2.getNodeData().getSequence().getGeneName() ) ) ) {\r
- return n1.getNodeData().getSequence().getGeneName()\r
- .compareTo( n2.getNodeData().getSequence().getGeneName() );\r
- }\r
- if ( ( n1.getNodeData().getSequence().getAccession() != null )\r
- && ( n2.getNodeData().getSequence().getAccession() != null )\r
- && !ForesterUtil.isEmpty( n1.getNodeData().getSequence().getAccession().getValue() )\r
- && !ForesterUtil.isEmpty( n2.getNodeData().getSequence().getAccession().getValue() ) ) {\r
- return n1.getNodeData().getSequence().getAccession().getValue()\r
- .compareTo( n2.getNodeData().getSequence().getAccession().getValue() );\r
- }\r
- }\r
- if ( n1.getNodeData().isHasTaxonomy() && n2.getNodeData().isHasTaxonomy() ) {\r
- if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getTaxonomy().getScientificName() ) )\r
- && ( !ForesterUtil.isEmpty( n2.getNodeData().getTaxonomy().getScientificName() ) ) ) {\r
- return n1.getNodeData().getTaxonomy().getScientificName().toLowerCase()\r
- .compareTo( n2.getNodeData().getTaxonomy().getScientificName().toLowerCase() );\r
- }\r
- if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getTaxonomy().getTaxonomyCode() ) )\r
- && ( !ForesterUtil.isEmpty( n2.getNodeData().getTaxonomy().getTaxonomyCode() ) ) ) {\r
- return n1.getNodeData().getTaxonomy().getTaxonomyCode()\r
- .compareTo( n2.getNodeData().getTaxonomy().getTaxonomyCode() );\r
- }\r
- if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getTaxonomy().getCommonName() ) )\r
- && ( !ForesterUtil.isEmpty( n2.getNodeData().getTaxonomy().getCommonName() ) ) ) {\r
- return n1.getNodeData().getTaxonomy().getCommonName().toLowerCase()\r
- .compareTo( n2.getNodeData().getTaxonomy().getCommonName().toLowerCase() );\r
- }\r
- }\r
- if ( ( !ForesterUtil.isEmpty( n1.getName() ) ) && ( !ForesterUtil.isEmpty( n2.getName() ) ) ) {\r
- return n1.getName().toLowerCase().compareTo( n2.getName().toLowerCase() );\r
- }\r
- return 0;\r
- }\r
- }\r
- class PhylogenyNodeSortNodeNamePriority implements Comparator<PhylogenyNode> {\r
-\r
- @Override\r
- public int compare( final PhylogenyNode n1, final PhylogenyNode n2 ) {\r
- if ( ( !ForesterUtil.isEmpty( n1.getName() ) ) && ( !ForesterUtil.isEmpty( n2.getName() ) ) ) {\r
- return n1.getName().toLowerCase().compareTo( n2.getName().toLowerCase() );\r
- }\r
- if ( n1.getNodeData().isHasTaxonomy() && n2.getNodeData().isHasTaxonomy() ) {\r
- if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getTaxonomy().getScientificName() ) )\r
- && ( !ForesterUtil.isEmpty( n2.getNodeData().getTaxonomy().getScientificName() ) ) ) {\r
- return n1.getNodeData().getTaxonomy().getScientificName().toLowerCase()\r
- .compareTo( n2.getNodeData().getTaxonomy().getScientificName().toLowerCase() );\r
- }\r
- if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getTaxonomy().getTaxonomyCode() ) )\r
- && ( !ForesterUtil.isEmpty( n2.getNodeData().getTaxonomy().getTaxonomyCode() ) ) ) {\r
- return n1.getNodeData().getTaxonomy().getTaxonomyCode()\r
- .compareTo( n2.getNodeData().getTaxonomy().getTaxonomyCode() );\r
- }\r
- if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getTaxonomy().getCommonName() ) )\r
- && ( !ForesterUtil.isEmpty( n2.getNodeData().getTaxonomy().getCommonName() ) ) ) {\r
- return n1.getNodeData().getTaxonomy().getCommonName().toLowerCase()\r
- .compareTo( n2.getNodeData().getTaxonomy().getCommonName().toLowerCase() );\r
- }\r
- }\r
- if ( n1.getNodeData().isHasSequence() && n2.getNodeData().isHasSequence() ) {\r
- if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getSequence().getName() ) )\r
- && ( !ForesterUtil.isEmpty( n2.getNodeData().getSequence().getName() ) ) ) {\r
- return n1.getNodeData().getSequence().getName().toLowerCase()\r
- .compareTo( n2.getNodeData().getSequence().getName().toLowerCase() );\r
- }\r
- if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getSequence().getSymbol() ) )\r
- && ( !ForesterUtil.isEmpty( n2.getNodeData().getSequence().getSymbol() ) ) ) {\r
- return n1.getNodeData().getSequence().getSymbol()\r
- .compareTo( n2.getNodeData().getSequence().getSymbol() );\r
- }\r
- if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getSequence().getGeneName() ) )\r
- && ( !ForesterUtil.isEmpty( n2.getNodeData().getSequence().getGeneName() ) ) ) {\r
- return n1.getNodeData().getSequence().getGeneName()\r
- .compareTo( n2.getNodeData().getSequence().getGeneName() );\r
- }\r
- if ( ( n1.getNodeData().getSequence().getAccession() != null )\r
- && ( n2.getNodeData().getSequence().getAccession() != null )\r
- && !ForesterUtil.isEmpty( n1.getNodeData().getSequence().getAccession().getValue() )\r
- && !ForesterUtil.isEmpty( n2.getNodeData().getSequence().getAccession().getValue() ) ) {\r
- return n1.getNodeData().getSequence().getAccession().getValue()\r
- .compareTo( n2.getNodeData().getSequence().getAccession().getValue() );\r
- }\r
- }\r
- return 0;\r
- }\r
- }\r
Comparator<PhylogenyNode> c;\r
switch ( pri ) {\r
case SEQUENCE:\r
private static boolean match( final String s,\r
final String query,\r
final boolean case_sensitive,\r
- final boolean partial ) {\r
+ final boolean partial,\r
+ final boolean regex ) {\r
if ( ForesterUtil.isEmpty( s ) || ForesterUtil.isEmpty( query ) ) {\r
return false;\r
}\r
String my_s = s.trim();\r
String my_query = query.trim();\r
- if ( !case_sensitive ) {\r
+ if ( !case_sensitive && !regex ) {\r
my_s = my_s.toLowerCase();\r
my_query = my_query.toLowerCase();\r
}\r
- if ( partial ) {\r
+ if ( regex ) {\r
+ Pattern p = null;\r
+ try {\r
+ if ( case_sensitive ) {\r
+ p = Pattern.compile( my_query );\r
+ }\r
+ else {\r
+ p = Pattern.compile( my_query, Pattern.CASE_INSENSITIVE );\r
+ }\r
+ }\r
+ catch ( final PatternSyntaxException e ) {\r
+ return false;\r
+ }\r
+ if ( p != null ) {\r
+ return p.matcher( my_s ).find();\r
+ }\r
+ else {\r
+ return false;\r
+ }\r
+ }\r
+ else if ( partial ) {\r
return my_s.indexOf( my_query ) >= 0;\r
}\r
else {\r
\r
public static void addMolecularSeqsToTree( final Phylogeny phy, final Msa msa ) {\r
for( int s = 0; s < msa.getNumberOfSequences(); ++s ) {\r
- final org.forester.sequence.Sequence seq = msa.getSequence( s );\r
+ final org.forester.sequence.MolecularSequence seq = msa.getSequence( s );\r
final PhylogenyNode node = phy.getNode( seq.getIdentifier() );\r
final org.forester.phylogeny.data.Sequence new_seq = new Sequence();\r
new_seq.setMolecularSequenceAligned( true );\r
node.getNodeData().addSequence( new_seq );\r
}\r
}\r
+\r
+ final private static class PhylogenyNodeSortTaxonomyPriority implements Comparator<PhylogenyNode> {\r
+\r
+ @Override\r
+ public int compare( final PhylogenyNode n1, final PhylogenyNode n2 ) {\r
+ if ( n1.getNodeData().isHasTaxonomy() && n2.getNodeData().isHasTaxonomy() ) {\r
+ if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getTaxonomy().getScientificName() ) )\r
+ && ( !ForesterUtil.isEmpty( n2.getNodeData().getTaxonomy().getScientificName() ) ) ) {\r
+ return n1.getNodeData().getTaxonomy().getScientificName().toLowerCase()\r
+ .compareTo( n2.getNodeData().getTaxonomy().getScientificName().toLowerCase() );\r
+ }\r
+ if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getTaxonomy().getTaxonomyCode() ) )\r
+ && ( !ForesterUtil.isEmpty( n2.getNodeData().getTaxonomy().getTaxonomyCode() ) ) ) {\r
+ return n1.getNodeData().getTaxonomy().getTaxonomyCode()\r
+ .compareTo( n2.getNodeData().getTaxonomy().getTaxonomyCode() );\r
+ }\r
+ }\r
+ if ( n1.getNodeData().isHasSequence() && n2.getNodeData().isHasSequence() ) {\r
+ if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getSequence().getName() ) )\r
+ && ( !ForesterUtil.isEmpty( n2.getNodeData().getSequence().getName() ) ) ) {\r
+ return n1.getNodeData().getSequence().getName().toLowerCase()\r
+ .compareTo( n2.getNodeData().getSequence().getName().toLowerCase() );\r
+ }\r
+ if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getSequence().getGeneName() ) )\r
+ && ( !ForesterUtil.isEmpty( n2.getNodeData().getSequence().getGeneName() ) ) ) {\r
+ return n1.getNodeData().getSequence().getGeneName()\r
+ .compareTo( n2.getNodeData().getSequence().getGeneName() );\r
+ }\r
+ if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getSequence().getSymbol() ) )\r
+ && ( !ForesterUtil.isEmpty( n2.getNodeData().getSequence().getSymbol() ) ) ) {\r
+ return n1.getNodeData().getSequence().getSymbol()\r
+ .compareTo( n2.getNodeData().getSequence().getSymbol() );\r
+ }\r
+ }\r
+ if ( ( !ForesterUtil.isEmpty( n1.getName() ) ) && ( !ForesterUtil.isEmpty( n2.getName() ) ) ) {\r
+ return n1.getName().toLowerCase().compareTo( n2.getName().toLowerCase() );\r
+ }\r
+ return 0;\r
+ }\r
+ }\r
+\r
+ final private static class PhylogenyNodeSortSequencePriority implements Comparator<PhylogenyNode> {\r
+\r
+ @Override\r
+ public int compare( final PhylogenyNode n1, final PhylogenyNode n2 ) {\r
+ if ( n1.getNodeData().isHasSequence() && n2.getNodeData().isHasSequence() ) {\r
+ if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getSequence().getName() ) )\r
+ && ( !ForesterUtil.isEmpty( n2.getNodeData().getSequence().getName() ) ) ) {\r
+ return n1.getNodeData().getSequence().getName().toLowerCase()\r
+ .compareTo( n2.getNodeData().getSequence().getName().toLowerCase() );\r
+ }\r
+ if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getSequence().getGeneName() ) )\r
+ && ( !ForesterUtil.isEmpty( n2.getNodeData().getSequence().getGeneName() ) ) ) {\r
+ return n1.getNodeData().getSequence().getGeneName()\r
+ .compareTo( n2.getNodeData().getSequence().getGeneName() );\r
+ }\r
+ if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getSequence().getSymbol() ) )\r
+ && ( !ForesterUtil.isEmpty( n2.getNodeData().getSequence().getSymbol() ) ) ) {\r
+ return n1.getNodeData().getSequence().getSymbol()\r
+ .compareTo( n2.getNodeData().getSequence().getSymbol() );\r
+ }\r
+ }\r
+ if ( n1.getNodeData().isHasTaxonomy() && n2.getNodeData().isHasTaxonomy() ) {\r
+ if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getTaxonomy().getScientificName() ) )\r
+ && ( !ForesterUtil.isEmpty( n2.getNodeData().getTaxonomy().getScientificName() ) ) ) {\r
+ return n1.getNodeData().getTaxonomy().getScientificName().toLowerCase()\r
+ .compareTo( n2.getNodeData().getTaxonomy().getScientificName().toLowerCase() );\r
+ }\r
+ if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getTaxonomy().getTaxonomyCode() ) )\r
+ && ( !ForesterUtil.isEmpty( n2.getNodeData().getTaxonomy().getTaxonomyCode() ) ) ) {\r
+ return n1.getNodeData().getTaxonomy().getTaxonomyCode()\r
+ .compareTo( n2.getNodeData().getTaxonomy().getTaxonomyCode() );\r
+ }\r
+ }\r
+ if ( ( !ForesterUtil.isEmpty( n1.getName() ) ) && ( !ForesterUtil.isEmpty( n2.getName() ) ) ) {\r
+ return n1.getName().toLowerCase().compareTo( n2.getName().toLowerCase() );\r
+ }\r
+ return 0;\r
+ }\r
+ }\r
+\r
+ final private static class PhylogenyNodeSortNodeNamePriority implements Comparator<PhylogenyNode> {\r
+\r
+ @Override\r
+ public int compare( final PhylogenyNode n1, final PhylogenyNode n2 ) {\r
+ if ( ( !ForesterUtil.isEmpty( n1.getName() ) ) && ( !ForesterUtil.isEmpty( n2.getName() ) ) ) {\r
+ return n1.getName().toLowerCase().compareTo( n2.getName().toLowerCase() );\r
+ }\r
+ if ( n1.getNodeData().isHasTaxonomy() && n2.getNodeData().isHasTaxonomy() ) {\r
+ if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getTaxonomy().getScientificName() ) )\r
+ && ( !ForesterUtil.isEmpty( n2.getNodeData().getTaxonomy().getScientificName() ) ) ) {\r
+ return n1.getNodeData().getTaxonomy().getScientificName().toLowerCase()\r
+ .compareTo( n2.getNodeData().getTaxonomy().getScientificName().toLowerCase() );\r
+ }\r
+ if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getTaxonomy().getTaxonomyCode() ) )\r
+ && ( !ForesterUtil.isEmpty( n2.getNodeData().getTaxonomy().getTaxonomyCode() ) ) ) {\r
+ return n1.getNodeData().getTaxonomy().getTaxonomyCode()\r
+ .compareTo( n2.getNodeData().getTaxonomy().getTaxonomyCode() );\r
+ }\r
+ }\r
+ if ( n1.getNodeData().isHasSequence() && n2.getNodeData().isHasSequence() ) {\r
+ if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getSequence().getName() ) )\r
+ && ( !ForesterUtil.isEmpty( n2.getNodeData().getSequence().getName() ) ) ) {\r
+ return n1.getNodeData().getSequence().getName().toLowerCase()\r
+ .compareTo( n2.getNodeData().getSequence().getName().toLowerCase() );\r
+ }\r
+ if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getSequence().getGeneName() ) )\r
+ && ( !ForesterUtil.isEmpty( n2.getNodeData().getSequence().getGeneName() ) ) ) {\r
+ return n1.getNodeData().getSequence().getGeneName()\r
+ .compareTo( n2.getNodeData().getSequence().getGeneName() );\r
+ }\r
+ if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getSequence().getSymbol() ) )\r
+ && ( !ForesterUtil.isEmpty( n2.getNodeData().getSequence().getSymbol() ) ) ) {\r
+ return n1.getNodeData().getSequence().getSymbol()\r
+ .compareTo( n2.getNodeData().getSequence().getSymbol() );\r
+ }\r
+ }\r
+ return 0;\r
+ }\r
+ }\r
}\r