package fr.openwide.core.jpa.querydsl.group;
import com.mysema.commons.lang.CloseableIterator;
import com.querydsl.core.FetchableQuery;
import com.querydsl.core.ResultTransformer;
import com.querydsl.core.group.GroupCollector;
import com.querydsl.core.group.GroupExpression;
class GroupExpressionResultTransformer<T, R> implements ResultTransformer<R> {
private final GroupExpression<T, R> groupExpression;
public GroupExpressionResultTransformer(GroupExpression<T, R> groupExpression) {
super();
this.groupExpression = groupExpression;
}
@Override
public R transform(FetchableQuery<?, ?> query) {
CloseableIterator<T> iter = query.select(groupExpression.getExpression()).iterate();
GroupCollector<T, R> collector = groupExpression.createGroupCollector();
try {
while (iter.hasNext()) {
T collectable = iter.next();
collector.add(collectable);
}
} finally {
iter.close();
}
return collector.get();
}
}