Callback counter = new BaseSqlWidget.Callback() {
@Override
public void handle(BaseSqlWidget w) {
if (w instanceof ExpressionColumn) {
ExpressionColumn ec = (ExpressionColumn) w;
TableFilter tf = ec.getTableFilter();
if (used.add(tf)) {
if (tf.getJoinCondition() != null) {
tf.getJoinCondition().traverse(this);
}
}
}
}
};
if (getCondition() != null) {
getCondition().traverse(counter);
}
boolean removed;
do {
removed = false;
TableFilter prev = filters.get(0);
TableFilter x = prev.getJoin();
while (x != null) {
if (!used.contains(x)) {
// look for used in all other filters?
int i = filters.indexOf(x);
if (i > 0) {
filters.remove(i);
}
// XXX why is this the case?
// just when comma seperated?
prev.setJoin(x.getJoin());
removed = true;
}
prev = x;
x = x.getJoin();
}
} while (removed);
}
}