private boolean evaluateOr(Object object) { for (BaseCondition condition : conditions) { if (condition.evaluate(object)) { return true; } } return false; }
private boolean evaluateAnd(Object object) { for (BaseCondition condition : conditions) { if (!condition.evaluate(object)) { return false; } } return true; }
@Override public boolean evaluate(Object object) { return condition.evaluate(object); } }
public <T> List<T> applyPostFilter(List<T> objects) { List<T> result = new ArrayList<>(); for (T object : objects) { if (!evaluate(object)) { continue; } result.add(object); } return result; } }
private boolean evaluateExisting() { if (condition == null) { return true; } if (objects == null) { return condition.evaluate(id.fetch()); } return evaluateObjects(new EvaluateExisting()); }
@Override public boolean evaluate(Object object) { ObjectHolder objectHolder = new ObjectHolder(object); IdRef<?> id = objectHolder.getId(); if (id == null) { return true; } Object existingObject; try { existingObject = id.fetch(); } catch (NoResultException e) { return true; } return condition.evaluate(existingObject); } }
@Test public void testSimpleConditions() { BasicObject object = new BasicObject(); object.setIntValue(10); assertTrue(c("intValue", "=", 10).evaluate(object)); assertTrue(c("intValue", ">", 9).evaluate(object)); assertTrue(c("intValue", ">=", 9).evaluate(object)); assertTrue(c("intValue", ">=", 10).evaluate(object)); assertTrue(c("intValue", "<", 11).evaluate(object)); assertTrue(c("intValue", "<=", 11).evaluate(object)); assertTrue(c("intValue", "<=", 10).evaluate(object)); assertTrue(c("intValue", "!=", 5).evaluate(object)); assertTrue(c("intValue", "IN", Arrays.asList(9, 10, 11)).evaluate(object)); assertFalse(c("intValue", "IN", Arrays.asList(9, 11)).evaluate(object)); }
private List<Object> queryWhere(QueryBuilder<?> builder) { List<Object> objectsInStore = MockStore.list(builder.getModel().getClazz(), builder.getParentId()); BaseCondition condition = builder.getCondition(); List<Object> result = new ArrayList<Object>(); for (Object object : objectsInStore) { if (condition != null && !condition.evaluate(object)) { continue; } result.add(object); } return result; }
@Test public void testJoinedConditions() { BasicObject object = new BasicObject(); object.setIntValue(10); object.setStringValue("ccc"); object.setLongValue(100l); assertTrue(c("intValue", "=", 10).and(c("stringValue", "=", "ccc")).evaluate(object)); assertFalse(c("intValue", "=", 10).and(c("stringValue", "!=", "ccc")).evaluate(object)); assertTrue(c("intValue", "=", 9).or(c("stringValue", "=", "ccc")).evaluate(object)); assertFalse(c("intValue", "=", 10).not().evaluate(object)); assertTrue(c("intValue", "=", 9).not().evaluate(object)); assertTrue(c("intValue", "=", 9).or(c("stringValue", "=", "bbb").or(c("longValue", "=", 100l))).evaluate(object)); }
@Test public void testParentRef() { Parent parent = new Parent("parent"); yawp.save(parent); Child child = new Child("child", parent.getId()); yawp.save(child); Grandchild grandchild = new Grandchild("grandchild", child.getId()); yawp.save(grandchild); BaseCondition c = c("parent->parent->name", "=", "parent"); c.init(yawp, Grandchild.class); assertTrue(c.evaluate(grandchild)); assertTrue(c.evaluate(child)); assertTrue(c.evaluate(parent)); }
@Test public void testIgnoreConditionForChildFields() { Parent parent = new Parent("parent"); yawp.save(parent); Child child = new Child("child", parent.getId()); yawp.save(child); Grandchild grandchild = new Grandchild("grandchild", child.getId()); grandchild.setAge(10); yawp.save(grandchild); BaseCondition c = c("age", "=", 11); c.init(yawp, Grandchild.class); assertFalse(c.evaluate(grandchild)); assertTrue(c.evaluate(child)); assertTrue(c.evaluate(parent)); } }