private static final <E extends TitanElement> Condition<E> inlineNegation(Condition<E> condition) { if (ConditionUtil.containsType(condition, Condition.Type.NOT)) { return ConditionUtil.transformation(condition, new Function<Condition<E>, Condition<E>>() { @Nullable @Override public Condition<E> apply(@Nullable Condition<E> cond) { if (cond instanceof Not) { Condition<E> child = ((Not) cond).getChild(); Preconditions.checkArgument(child.getType() == Condition.Type.LITERAL); //verify QNF if (child instanceof PredicateCondition) { PredicateCondition<?, E> pc = (PredicateCondition) child; if (pc.getPredicate().hasNegation()) { return new PredicateCondition(pc.getKey(), pc.getPredicate().negate(), pc.getValue()); } } } return null; } }); } else return condition; }
public static final boolean containsType(Condition<?> condition, Condition.Type type) { if (condition.getType()==type) return true; else if (condition.numChildren()>0) { for (Condition child : condition.getChildren()) { if (containsType(child,type)) return true; } } return false; }
private static final <E extends TitanElement> Condition<E> inlineNegation(Condition<E> condition) { if (ConditionUtil.containsType(condition, Condition.Type.NOT)) { return ConditionUtil.transformation(condition, new Function<Condition<E>, Condition<E>>() { @Nullable @Override public Condition<E> apply(@Nullable Condition<E> cond) { if (cond instanceof Not) { Condition<E> child = ((Not) cond).getChild(); Preconditions.checkArgument(child.getType() == Condition.Type.LITERAL); //verify QNF if (child instanceof PredicateCondition) { PredicateCondition<?, E> pc = (PredicateCondition) child; if (pc.getPredicate().hasNegation()) { return new PredicateCondition(pc.getKey(), pc.getPredicate().negate(), pc.getValue()); } } } return null; } }); } else return condition; }
public static final boolean containsType(Condition<?> condition, Condition.Type type) { if (condition.getType()==type) return true; else if (condition.numChildren()>0) { for (Condition child : condition.getChildren()) { if (containsType(child,type)) return true; } } return false; }
private static final <E extends TitanElement> Condition<E> inlineNegation(Condition<E> condition) { if (ConditionUtil.containsType(condition, Condition.Type.NOT)) { return ConditionUtil.transformation(condition, new Function<Condition<E>, Condition<E>>() { @Nullable @Override public Condition<E> apply(@Nullable Condition<E> cond) { if (cond instanceof Not) { Condition<E> child = ((Not) cond).getChild(); Preconditions.checkArgument(child.getType() == Condition.Type.LITERAL); //verify QNF if (child instanceof PredicateCondition) { PredicateCondition<?, E> pc = (PredicateCondition) child; if (pc.getPredicate().hasNegation()) { return new PredicateCondition(pc.getKey(), pc.getPredicate().negate(), pc.getValue()); } } } return null; } }); } else return condition; }
public static final boolean containsType(Condition<?> condition, Condition.Type type) { if (condition.getType()==type) return true; else if (condition.numChildren()>0) { for (Condition child : condition.getChildren()) { if (containsType(child,type)) return true; } } return false; }