package com.cloudera.flume.conf;
import static com.cloudera.flume.conf.PatternMatch.kind;
import static com.cloudera.flume.conf.PatternMatch.or;
import static com.cloudera.flume.conf.PatternMatch.recursive;
import static com.cloudera.flume.conf.PatternMatch.tuple;
import static com.cloudera.flume.conf.PatternMatch.var;
import java.util.Map;
import org.antlr.runtime.RecognitionException;
import org.antlr.runtime.tree.CommonTree;
public static PatternMatch
source(String k) {
return kind("SOURCE").child(kind(k));
}
public static PatternMatch
sinkOnly(String k) {
return kind("SINK").child(kind(k));
}
public static PatternMatch
deco(String k) {
return tuple(kind("DECO"), kind("SINK").child(kind(k)), var(k + "Child",
or(kind("SINK"), kind("DECO"), kind("MULTI"), kind("BACKUP"),
kind("LET"), kind("ROLL"), kind("FAILCHAIN"))));
}
public static PatternMatch
sink(String kind) {
return or(sinkOnly(kind), deco(kind));
}
public static CommonTree
findSink(String sink, String k)
throws RecognitionException {
CommonTree lsnkTree = FlumeBuilder.parseSink(sink);
PatternMatch p = recursive(var("lsnk", kind("SINK").child(
kind("logicalSink"))));
Map<String, CommonTree> matches = p.match(lsnkTree);
if (matches == null) {
return lsnkTree;
}
return matches.get("lsnk");
}
public static CommonTree
findSource(String src, String kind)
throws RecognitionException {
PatternMatch p = recursive(var("src", source(kind)));
CommonTree ctsrc = FlumeBuilder.parseSource(src);
Map<String, CommonTree> matches = p.match(ctsrc);
if (matches == null)
return null;
return matches.get("src");
}
}