16
16
* @author Gavin King
17
17
*/
18
18
record Pattern (String pattern , boolean caseSensitive ) implements Range <String > {
19
+
20
+ // default escape and wildcard characters
21
+ private static final char ESCAPE = '\\' ;
22
+ private static final char WILDCARD_CHAR = '_' ;
23
+ private static final char WILDCARD_STRING = '%' ;
24
+
19
25
Pattern (String pattern , boolean caseSensitive , char charWildcard , char stringWildcard ) {
20
26
this ( translate ( pattern , charWildcard , stringWildcard ), caseSensitive );
21
27
}
@@ -25,10 +31,8 @@ public Predicate toPredicate(Path<? extends String> path, CriteriaBuilder builde
25
31
@ SuppressWarnings ("unchecked" )
26
32
final Path <String > stringPath = (Path <String >) path ; // safe, because String is final
27
33
return caseSensitive
28
- ? builder .like ( stringPath , builder .literal ( pattern ), '\\' )
29
- : builder .like ( builder .lower ( stringPath ),
30
- builder .literal ( pattern .toLowerCase ( Locale .ROOT ) ),
31
- '\\' );
34
+ ? builder .like ( stringPath , pattern , ESCAPE )
35
+ : builder .like ( builder .lower ( stringPath ), pattern .toLowerCase ( Locale .ROOT ), ESCAPE );
32
36
}
33
37
34
38
@ Override
@@ -41,14 +45,14 @@ private static String translate(String pattern, char charWildcard, char stringWi
41
45
for ( int i = 0 ; i < pattern .length (); i ++ ) {
42
46
final char ch = pattern .charAt ( i );
43
47
if ( ch == charWildcard ) {
44
- result .append ( '_' );
48
+ result .append ( WILDCARD_CHAR );
45
49
}
46
50
else if ( ch == stringWildcard ) {
47
- result .append ( '%' );
51
+ result .append ( WILDCARD_STRING );
48
52
}
49
53
else {
50
- if ( ch == '%' || ch == '_' || ch == '\\' ) {
51
- result .append ( '\\' );
54
+ if ( ch == WILDCARD_STRING || ch == WILDCARD_CHAR || ch == ESCAPE ) {
55
+ result .append ( ESCAPE );
52
56
}
53
57
result .append ( ch );
54
58
}
0 commit comments