package com.netflix.suro.routing.filter.parser; import com.google.common.base.Joiner; public enum FilterPredicate { stringComp("xpath(\"%s\") %s \"%s\""), numberComp("xpath(\"%s\") %s %s"), between("xpath(\"%s\") between (%s, %s)") { public String create(String path, String operator, Object value) { Object[] values = (Object[])value; return String.format(getTemplate(), path, values[0], values[1]); } }, isNull("xpath(\"%s\") is null") { public String create(String path, String operator, Object value) { return String.format(getTemplate(), path); } }, regex("xpath(\"%s\") =~ \"%s\"") { public String create(String path, String operator, Object value) { return String.format(getTemplate(), path, value); } }, existsRight("xpath(\"%s\") exists") { public String create(String path, String operator, Object value) { return String.format(getTemplate(), path); } }, existsLeft("exists xpath(\"%s\")") { public String create(String path, String operator, Object value) { return String.format(getTemplate(), path); } }, trueValue("true") { public String create(String path, String operator, Object value) { return getTemplate(); } }, falseValue("false") { public String create(String path, String operator, Object value) { return getTemplate(); } }, timeComp("xpath(\"%s\") %s %s"), inPred("xpath(\"%s\") in (%s)") { public String create(String path, String operator, Object value) { Object[] values = (Object[])value; return String.format(getTemplate(), path, Joiner.on(',').join(values)); } } ; final private String template; private FilterPredicate(String template) { this.template = template; } public String create(String path, String operator, Object value) { return String.format(template, path, operator, value); } public String getTemplate() { return template; } public String create(String path) { return create(path, null); } public String create(String path, Object value) { return create(path, null, value); } public String create(String path, String operator){ return create(path, operator, null); } public String create() { return create(null, null); } }