1
1
/*
2
- * Copyright 2011-2021 B2i Healthcare Pte Ltd, http://b2i.sg
2
+ * Copyright 2011-2022 B2i Healthcare Pte Ltd, http://b2i.sg
3
3
*
4
4
* Licensed under the Apache License, Version 2.0 (the "License");
5
5
* you may not use this file except in compliance with the License.
26
26
27
27
import java .io .IOException ;
28
28
import java .util .*;
29
- import java .util .concurrent .TimeUnit ;
30
29
import java .util .stream .Collectors ;
31
30
32
31
import javax .annotation .Nullable ;
@@ -624,22 +623,29 @@ protected Promise<Expression> eval(BranchContext context, final SemanticTagFilte
624
623
return Promise .immediate (expression );
625
624
}
626
625
627
- protected Promise <Expression > eval (BranchContext context , final TypedTermFilter typedTermFilter ) {
628
- return eval (context , typedTermFilter .getClause ());
629
- }
630
-
631
- protected Promise <Expression > eval (BranchContext context , final TypedTermFilterSet termFilterSet ) {
626
+ protected Promise <Expression > eval (BranchContext context , final TermFilter termFilter ) {
627
+ final List <TypedSearchTermClause > clauses ;
628
+
629
+ SearchTerm searchTerm = termFilter .getSearchTerm ();
630
+ if (searchTerm instanceof TypedSearchTerm ) {
631
+ clauses = List .of (((TypedSearchTerm ) searchTerm ).getClause ());
632
+ } else if (searchTerm instanceof TypedSearchTermSet ) {
633
+ clauses = ((TypedSearchTermSet ) searchTerm ).getClauses ();
634
+ } else {
635
+ return throwUnsupported (searchTerm );
636
+ }
637
+
632
638
// Filters are combined with an OR ("should") operator
633
- final Expressions .ExpressionBuilder builder = Expressions .builder ();
639
+ final Expressions .ExpressionBuilder builder = Expressions .bool ();
634
640
635
- for (final TypedTermFilterClause clause : termFilterSet . getClauses () ) {
636
- builder .should (eval ( context , clause ). getSync ( ));
641
+ for (final TypedSearchTermClause clause : clauses ) {
642
+ builder .should (toExpression ( clause ));
637
643
}
638
644
639
645
return Promise .immediate (builder .build ());
640
646
}
641
-
642
- protected Promise < Expression > eval ( BranchContext context , final TypedTermFilterClause clause ) {
647
+
648
+ protected Expression toExpression ( final TypedSearchTermClause clause ) {
643
649
final String term = clause .getTerm ();
644
650
645
651
LexicalSearchType lexicalSearchType = LexicalSearchType .fromString (clause .getLexicalSearchType ());
@@ -650,14 +656,14 @@ protected Promise<Expression> eval(BranchContext context, final TypedTermFilterC
650
656
switch (lexicalSearchType ) {
651
657
case MATCH :
652
658
final com .b2international .snowowl .core .request .TermFilter match = com .b2international .snowowl .core .request .TermFilter .defaultTermMatch (term );
653
- return Promise . immediate ( SnomedDescriptionIndexEntry .Expressions .termDisjunctionQuery (match ) );
659
+ return SnomedDescriptionIndexEntry .Expressions .termDisjunctionQuery (match );
654
660
case WILD :
655
661
final String regexTerm = term .replace ("*" , ".*" );
656
- return Promise . immediate ( SnomedDescriptionIndexEntry .Expressions .matchTermRegex (regexTerm ) );
662
+ return SnomedDescriptionIndexEntry .Expressions .matchTermRegex (regexTerm );
657
663
case REGEX :
658
- return Promise . immediate ( SnomedDescriptionIndexEntry .Expressions .matchTermRegex (term ) );
664
+ return SnomedDescriptionIndexEntry .Expressions .matchTermRegex (term );
659
665
case EXACT :
660
- return Promise . immediate ( SnomedDescriptionIndexEntry .Expressions .matchTermCaseInsensitive (term ) );
666
+ return SnomedDescriptionIndexEntry .Expressions .matchTermCaseInsensitive (term );
661
667
default :
662
668
throw new UnsupportedOperationException ("Not implemented lexical search type: '" + lexicalSearchType + "'." );
663
669
}
0 commit comments