public boolean evaluate(Object currentRecord, OCommandContext ctx) { if (currentRecord instanceof OResult) { return evaluate((OResult) currentRecord, ctx); } else if (currentRecord instanceof OIdentifiable) { return evaluate((OIdentifiable) currentRecord, ctx); } else if (currentRecord instanceof Map) { ODocument doc = new ODocument(); doc.fromMap((Map<String, Object>) currentRecord); return evaluate(doc, ctx); } return false; }
private Object filterByCondition(Object iResult, OCommandContext ctx) { if (iResult == null) { return null; } List<Object> result = new ArrayList<Object>(); if (iResult.getClass().isArray()) { for (int i = 0; i < Array.getLength(iResult); i++) { Object item = Array.get(iResult, i); if (condition.evaluate(item, ctx)) { result.add(item); } } return result; } if (iResult instanceof OIdentifiable) { iResult = Collections.singleton(iResult); } if (iResult instanceof Iterable) { iResult = ((Iterable) iResult).iterator(); } if (iResult instanceof Iterator) { while (((Iterator) iResult).hasNext()) { Object item = ((Iterator) iResult).next(); if (condition.evaluate(item, ctx)) { result.add(item); } } } return result; }
@Override public boolean evaluate(OIdentifiable currentRecord, OCommandContext ctx) { Object leftValue = left.execute(currentRecord, ctx); if (leftValue instanceof Map) { Map map = (Map) leftValue; if (condition != null) { for (Object o : map.values()) { if (condition.evaluate(o, ctx)) { return true; } } return false; } else { Object rightValue = expression.execute(currentRecord, ctx); return map.values().contains(rightValue);//TODO type conversions...? } } return false; }
@Override public boolean evaluate(OResult currentRecord, OCommandContext ctx) { Object leftValue = left.execute(currentRecord, ctx); if (leftValue instanceof Map) { Map map = (Map) leftValue; if (condition != null) { for (Object o : map.values()) { if (condition.evaluate(o, ctx)) { return true; } } return false; } else { Object rightValue = expression.execute(currentRecord, ctx); return map.values().contains(rightValue);//TODO type conversions...? } } return false; }
@Override public boolean evaluate(OResult currentRecord, OCommandContext ctx) { Object leftValue = left.execute(currentRecord, ctx); if (right != null) { Object rightValue = right.execute(currentRecord, ctx); return execute(leftValue, rightValue); } else { if (!OMultiValue.isMultiValue(leftValue)) { return false; } Iterator<Object> iter = OMultiValue.getMultiValueIterator(leftValue); while (iter.hasNext()) { Object item = iter.next(); if (item instanceof OIdentifiable) { if (!rightBlock.evaluate((OIdentifiable) item, ctx)) { return false; } } else if (item instanceof OResult) { if (!rightBlock.evaluate((OResult) item, ctx)) { return false; } } else { return false; } } return true; } }
@Override public boolean evaluate(OIdentifiable currentRecord, OCommandContext ctx) { Object leftValue = left.execute(currentRecord, ctx); if (right != null) { Object rightValue = right.execute(currentRecord, ctx); return execute(leftValue, rightValue); } else { if (!OMultiValue.isMultiValue(leftValue)) { return false; } Iterator<Object> iter = OMultiValue.getMultiValueIterator(leftValue); while (iter.hasNext()) { Object item = iter.next(); if (item instanceof OIdentifiable) { if (!rightBlock.evaluate((OIdentifiable) item, ctx)) { return false; } } else if (item instanceof OResult) { if (!rightBlock.evaluate((OResult) item, ctx)) { return false; } } else { return false; } } return true; } }
@Override public boolean evaluate(OResult currentRecord, OCommandContext ctx) { Object leftValue = left.execute(currentRecord, ctx); if (right != null) { Object rightValue = right.execute(currentRecord, ctx); return execute(leftValue, rightValue); } else { if (!OMultiValue.isMultiValue(leftValue)) { return false; } Iterator<Object> iter = OMultiValue.getMultiValueIterator(leftValue); while (iter.hasNext()) { Object item = iter.next(); if (item instanceof OIdentifiable) { if (!rightBlock.evaluate((OIdentifiable) item, ctx)) { return false; } } else if (item instanceof OResult) { if (!rightBlock.evaluate((OResult) item, ctx)) { return false; } } else { return false; } } return true; } }
@Override public boolean evaluate(OIdentifiable currentRecord, OCommandContext ctx) { Object leftValue = left.execute(currentRecord, ctx); if (right != null) { Object rightValue = right.execute(currentRecord, ctx); return execute(leftValue, rightValue); } else { if (!OMultiValue.isMultiValue(leftValue)) { return false; } Iterator<Object> iter = OMultiValue.getMultiValueIterator(leftValue); while (iter.hasNext()) { Object item = iter.next(); if (item instanceof OIdentifiable) { if (!rightBlock.evaluate((OIdentifiable) item, ctx)) { return false; } } else if (item instanceof OResult) { if (!rightBlock.evaluate((OResult) item, ctx)) { return false; } } else { return false; } } return true; } }
} else if (condition != null) { if (target instanceof OResult || target instanceof OIdentifiable || target instanceof Map) { if (condition.evaluate(target, ctx)) { return target; } else { List<Object> result = new ArrayList<>(); for (Object o : OMultiValue.getMultiValueIterable(target)) { if (condition.evaluate(target, ctx)) { result.add(o);