package jef.database.query; import java.util.List; import jef.database.Condition; import jef.database.IConditionField; import jef.database.IConditionField.Not; public abstract class ConditionAccessor { private List<Condition> removeHandler; ConditionAccessor(List<Condition> list) { this.removeHandler = list; } abstract Condition add(Condition cond); public boolean remove(Condition cond) { return removeHandler.remove(cond); } final static class Q extends ConditionAccessor { private Query<?> query; Q(Query<?> q) { super(q.getConditions()); this.query = q; } @Override Condition add(Condition cond) { query.addCondition(cond); return cond; } } final static class I extends ConditionAccessor { private IConditionField ic; public Condition wrapped; ConditionAccessor parent; @Override public boolean remove(Condition cond) { if(ic instanceof Not){ Not not=(Not)ic; return not.get()==cond; }else{ return super.remove(cond); } } I(IConditionField cond,Condition wrapped) { super(cond.getConditions()); this.wrapped=wrapped; this.ic = cond; } @Override Condition add(Condition cond) { if(ic instanceof Not){ ((Not) ic).set(cond); if(parent!=null){ parent.add(wrapped); parent=null; } }else{ ic.getConditions().add(cond); } return cond; } } }