
software.amazon.event.ruler.input.WildcardParser Maven / Gradle / Ivy
package software.amazon.event.ruler.input;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import static software.amazon.event.ruler.input.DefaultParser.ASTERISK_BYTE;
import static software.amazon.event.ruler.input.DefaultParser.BACKSLASH_BYTE;
/**
* A parser to be used specifically for wildcard rules.
*/
public class WildcardParser implements StringValueParser {
WildcardParser() { }
@Override
public InputCharacter[] parse(final String value) {
final byte[] utf8Bytes = value.getBytes(StandardCharsets.UTF_8);
final List result = new ArrayList<>(utf8Bytes.length);
for (int i = 0; i < utf8Bytes.length; i++) {
byte utf8byte = utf8Bytes[i];
if (utf8byte == ASTERISK_BYTE) {
if (i + 1 < utf8Bytes.length && utf8Bytes[i + 1] == ASTERISK_BYTE) {
throw new ParseException("Consecutive wildcard characters at pos " + i);
}
result.add(new InputWildcard());
} else if (utf8byte == BACKSLASH_BYTE) {
if (i + 1 < utf8Bytes.length) {
byte nextUtf8byte = utf8Bytes[i + 1];
if (nextUtf8byte == ASTERISK_BYTE || nextUtf8byte == BACKSLASH_BYTE) {
result.add(new InputByte(nextUtf8byte));
i++;
continue;
}
}
throw new ParseException("Invalid escape character at pos " + i);
} else {
result.add(new InputByte(utf8byte));
}
}
return result.toArray(new InputCharacter[0]);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy