Exemplo n.º 1
0
  private boolean eval(PredicateContext ctx) {
    if (CriteriaType.EXISTS == criteriaType) {
      boolean exists = ((Boolean) right);
      try {
        Configuration c =
            Configuration.builder()
                .jsonProvider(ctx.configuration().jsonProvider())
                .options(Option.REQUIRE_PROPERTIES)
                .build();
        ((Path) left).evaluate(ctx.item(), ctx.root(), c).getValue();
        return exists;
      } catch (PathNotFoundException e) {
        return !exists;
      }
    } else {
      try {
        Object leftVal = evaluateIfPath(left, ctx);
        Object rightVal = evaluateIfPath(right, ctx);

        return criteriaType.eval(rightVal, leftVal, ctx);
      } catch (ValueCompareException e) {
        return false;
      } catch (PathNotFoundException e) {
        return false;
      }
    }
  }
Exemplo n.º 2
0
 @Override
 boolean eval(Object left, Object right, PredicateContext ctx) {
   int size = (Integer) left;
   boolean res;
   if (ctx.configuration().jsonProvider().isArray(right)) {
     int length = ctx.configuration().jsonProvider().length(right);
     res = (length == size);
     if (logger.isDebugEnabled())
       logger.debug("Array with size {} {} {} => {}", length, name(), size, res);
   } else if (right instanceof String) {
     int length = ((String) right).length();
     res = length == size;
     if (logger.isDebugEnabled())
       logger.debug("String with length {} {} {} => {}", length, name(), size, res);
   } else {
     res = false;
     if (logger.isDebugEnabled())
       logger.debug(
           "{} {} {} => {}",
           right == null ? "null" : right.getClass().getName(),
           name(),
           size,
           res);
   }
   return res;
 }
Exemplo n.º 3
0
 @Override
 boolean eval(Object left, Object right, PredicateContext ctx) {
   boolean res = true;
   Collection exps = (Collection) left;
   if (ctx.configuration().jsonProvider().isArray(right)) {
     for (Object exp : exps) {
       boolean found = false;
       for (Object check : ctx.configuration().jsonProvider().toIterable(right)) {
         if (0 == safeCompare(exp, check)) {
           found = true;
           break;
         }
       }
       if (!found) {
         res = false;
         break;
       }
     }
     if (logger.isDebugEnabled())
       logger.debug(
           "[{}] {} [{}] => {}",
           join(", ", ctx.configuration().jsonProvider().toIterable(right)),
           name(),
           join(", ", exps),
           res);
   } else {
     res = false;
     if (logger.isDebugEnabled())
       logger.debug("[{}] {} [{}] => {}", "<NOT AN ARRAY>", name(), join(", ", exps), res);
   }
   return res;
 }
Exemplo n.º 4
0
 @Override
 boolean eval(Object left, final Object right, final PredicateContext ctx) {
   PredicateContextImpl pci = (PredicateContextImpl) ctx;
   Predicate exp = (Predicate) left;
   return exp.apply(
       new PredicateContextImpl(
           right, ctx.root(), ctx.configuration(), pci.documentPathCache()));
 }
Exemplo n.º 5
0
  private Object evaluateIfPath(Object target, PredicateContext ctx) {
    Object res = target;
    if (res instanceof Path) {
      Path leftPath = (Path) target;

      if (ctx instanceof PredicateContextImpl) {
        // This will use cache for document ($) queries
        PredicateContextImpl ctxi = (PredicateContextImpl) ctx;
        res = ctxi.evaluate(leftPath);
      } else {
        Object doc = leftPath.isRootPath() ? ctx.root() : ctx.item();
        res = leftPath.evaluate(doc, ctx.root(), ctx.configuration()).getValue();
      }
    }
    return res;
  }
Exemplo n.º 6
0
 @Override
 boolean eval(Object left, Object right, PredicateContext ctx) {
   boolean res = false;
   if (right != null) {
     if (ctx.configuration().jsonProvider().isArray(right)) {
       int len = ctx.configuration().jsonProvider().length(right);
       res = (0 != len);
       if (logger.isDebugEnabled())
         logger.debug("array length = {} {} => {}", len, name(), res);
     } else if (right instanceof String) {
       int len = ((String) right).length();
       res = (0 != len);
       if (logger.isDebugEnabled())
         logger.debug("string length = {} {} => {}", len, name(), res);
     }
   }
   return res;
 }
  @SuppressWarnings("unchecked")
  @Override
  public boolean apply(PredicateContext ctx) {
    final Map<String, Object> items = ctx.item(Map.class);

    if (items != null) {
      for (Map.Entry<String, Object> entry : items.entrySet()) {

        final String value = entry.getValue().toString();

        if (isVariable(value)) {

          final String variable = extractVariable(value);
          final Object newValue = lookupContext.read(variable);

          entry.setValue(newValue);
        }
      }

      return isRootElement(items);
    }

    return false;
  }