in core/src/main/java/org/hibernate/ogm/util/parser/impl/LikeExpressionToRegExpConverter.java [80:140]
private State handleCharacter(Character character, Character escapeCharacter, StringBuilder result) {
switch ( this ) {
case INITIAL:
if ( Character.valueOf( character ).equals( escapeCharacter ) ) {
return State.ESCAPE;
}
else if ( character == '%' ) {
result.append( ".*" );
return State.WILDCARD_CHARACTER;
}
else if ( character == '_' ) {
result.append( "." );
return State.WILDCARD_CHARACTER;
}
else {
result.append( "\\Q" );
result.append( character );
return State.PATTERN;
}
case PATTERN:
if ( Character.valueOf( character ).equals( escapeCharacter ) ) {
return State.ESCAPE;
}
else if ( character == '%' ) {
result.append( "\\E" );
result.append( ".*" );
return State.WILDCARD_CHARACTER;
}
else if ( character == '_' ) {
result.append( "\\E" );
result.append( "." );
return State.WILDCARD_CHARACTER;
}
else {
result.append( character );
return State.PATTERN;
}
case ESCAPE:
result.append( character );
return State.PATTERN;
case WILDCARD_CHARACTER:
if ( Character.valueOf( character ).equals( escapeCharacter ) ) {
return State.ESCAPE;
}
else if ( character == '%' ) {
result.append( ".*" );
return State.WILDCARD_CHARACTER;
}
else if ( character == '_' ) {
result.append( "." );
return State.WILDCARD_CHARACTER;
}
else {
result.append( "\\Q" );
result.append( character );
return State.PATTERN;
}
default:
throw new IllegalStateException( "Unsupported parsing state" );
}
}