package com.ctp.cdi.query.builder.part;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import com.ctp.cdi.query.builder.QueryBuilderContext;
import com.ctp.cdi.query.meta.DaoComponent;
/**
*
* @author thomashug
*/
public abstract class QueryPart {
protected List<QueryPart> children = new LinkedList<QueryPart>();
protected abstract QueryPart build(String queryPart, String method, DaoComponent dao);
protected abstract QueryPart buildQuery(QueryBuilderContext ctx);
protected void buildQueryForChildren(QueryBuilderContext ctx) {
for (QueryPart child : children) {
child.buildQuery(ctx);
}
}
protected boolean hasChildren(Set<Class<? extends QueryPart>> excluded) {
if (children == null || children.isEmpty()) {
return false;
}
for (QueryPart part : children) {
if (!excluded.contains(part.getClass())) {
return true;
}
}
return false;
}
}