private ObjectFilter simplify(OrFilter filter) { if (filter == null) { return null; } OrFilter simplified = OrFilterImpl.createOr(); // step 1 - simplify conjunctions for (ObjectFilter condition : filter.getConditions()) { AndFilter conjunction = (AndFilter) condition; if (conjunction.getConditions().size() == 1) { simplified.addCondition(conjunction.getLastCondition()); } else { simplified.addCondition(conjunction); } } // step 2 - simplify disjunction if (simplified.getConditions().size() == 0) { return null; } else if (simplified.getConditions().size() == 1) { return simplified.getLastCondition(); } else { return simplified; } }