package org.n3r.eql.parser; import org.n3r.eql.base.ExpressionEvaluator; import org.n3r.eql.map.EqlRun; import java.util.Collection; import java.util.Map; public class IsEmptyPart implements EqlPart { protected final String expr; protected final MultiPart multiPart; protected final MultiPart elsePart; public IsEmptyPart(String expr, MultiPart multiPart, MultiPart elsePart) { this.expr = expr; this.multiPart = multiPart; this.elsePart = elsePart; } @Override public String evalSql(EqlRun eqlRun) { return (isEmpty(eqlRun) ? multiPart : elsePart).evalSql(eqlRun); } protected boolean isEmpty(EqlRun eqlRun) { ExpressionEvaluator evaluator = eqlRun.getEqlConfig().getExpressionEvaluator(); Object target = evaluator.eval(expr, eqlRun); return isEmpty(target) || target.toString().length() == 0; } protected boolean isBlank(EqlRun eqlRun) { ExpressionEvaluator evaluator = eqlRun.getEqlConfig().getExpressionEvaluator(); Object target = evaluator.eval(expr, eqlRun); return isEmpty(target) || target.toString().trim().length() == 0; } public static boolean isEmpty(Object target) { if (target == null) return true; if (target instanceof Collection) return ((Collection) target).isEmpty(); if (target instanceof Map) return ((Map) target).isEmpty(); if (target instanceof Iterable) return !((Iterable) target).iterator().hasNext(); if (target instanceof CharSequence) return ((CharSequence)target).length() == 0; if (target.getClass().isArray()) return ((Object[])target).length == 0; return false; } protected boolean isNull(EqlRun eqlRun) { ExpressionEvaluator evaluator = eqlRun.getEqlConfig().getExpressionEvaluator(); Object target = evaluator.eval(expr, eqlRun); return target == null; } }