package org.n3r.eql.parser; import org.n3r.eql.util.PairsParser; import java.util.List; import java.util.Map; import java.util.regex.Matcher; public class TrimParser implements PartParser { private final String prefix; private final String suffix; private final String prefixOverrides; private final String suffixOverrides; private MultiPart multiPart = new MultiPart(); // trim prefix=WHERE prefixOverrides=AND|OR // trim prefix=SET suffixOverrides=, // trim prefix=( prefixOverrides=OR suffix=) public TrimParser(String options) { Map<String, String> optionsMap = new PairsParser().parse(options.trim()); prefix = optionsMap.get("prefix"); suffix = optionsMap.get("suffix"); prefixOverrides = optionsMap.get("prefixOverrides"); suffixOverrides = optionsMap.get("suffixOverrides"); } @Override public EqlPart createPart() { return new TrimPart(prefix, suffix, prefixOverrides, suffixOverrides, multiPart); } @Override public int parse(List<String> mergedLines, int index) { int i = index; for (int ii = mergedLines.size(); i < ii; ++i) { String line = mergedLines.get(i); String clearLine; if (line.startsWith("--")) { clearLine = ParserUtils.substr(line, "--".length()); } else { Matcher matcher = ParserUtils.inlineComment.matcher(line); if (matcher.matches()) { clearLine = matcher.group(1).trim(); } else { multiPart.addPart(new LiteralPart(line)); continue; } } if ("end".equalsIgnoreCase(clearLine)) { return i + 1; } PartParser partParser = PartParserFactory.tryParse(clearLine); if (partParser != null) { i = partParser.parse(mergedLines, i + 1) - 1; multiPart.addPart(partParser.createPart()); } } return i; } }