package squill.builder;
import java.util.List;
import squill.Result;
import squill.callback.ResultCallback;
import squill.format.SqlFormat;
import squill.tree.QueryPartHandler;
import squill.tuple.Tuple;
import squill.tuple.Tuple2;
/**
* @author Michael Hunger
* @since 29.08.2008
*/
public class ResultBuilder<P extends Tuple> implements Result<P> {
private final BaseOrderByBuilder orderByBuilder;
private final Class<P> tupleType;
@SuppressWarnings({"unchecked"})
public ResultBuilder(BaseOrderByBuilder orderByBuilder, Class<? extends Tuple> tupleType) {
this.orderByBuilder = orderByBuilder;
this.tupleType = (Class<P>) tupleType;
}
public <R> List<R> map(ResultCallback<P, R> callback) {
return this.orderByBuilder.queryCallback(tupleType, callback);
}
public long count() {
return this.orderByBuilder.count();
}
public String toString() {
return getSql();
}
public String getSql() {
return this.orderByBuilder.getSql();
}
public List<Object> getParams() {
return this.orderByBuilder.getArgs();
}
@SuppressWarnings({"unchecked"})
public P tuple() {
return (P) this.orderByBuilder.queryTuple(tupleType);
}
@SuppressWarnings({"unchecked"}) public List<P> list() {
return (List<P>)this.orderByBuilder.queryTuples(tupleType);
}
public ResultBuilder<P> resolve(String name, Object param) {
this.orderByBuilder.addParam(name,param);
return this;
}
public ResultBuilder<P> resolve(Tuple2<String,?>...params) {
for (Tuple2<String, ?> param : params) {
this.orderByBuilder.addParam(param.v1,param.v2);
}
return this;
}
public <T> T traverse(final QueryPartHandler<T> handler, T collectingParameter) {
return this.orderByBuilder.traverse(handler, collectingParameter);
}
public String getSql(final SqlFormat format) {
return this.orderByBuilder.getSql(format);
}
}