All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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