package fr.openwide.core.jpa.query;
import java.util.List;
import com.querydsl.core.QueryModifiers;
import com.querydsl.core.support.FetchableQueryBase;
public final class Queries {
private Queries() { }
/**
* A simple wrapper from {@link FetchableQueryBase} to {@link IQuery}.
* <p>The resulting query is not thread-safe.
*/
public static <T> IQuery<T> fromQueryDsl(FetchableQueryBase<T, ?> fetchableQuery) {
return new QueryDslSearchQuery<T>(fetchableQuery);
}
private static class QueryDslSearchQuery<T> implements IQuery<T> {
private final FetchableQueryBase<T, ?> fetchableQuery;
public QueryDslSearchQuery(FetchableQueryBase<T, ?> fetchableQuery) {
this.fetchableQuery = fetchableQuery;
}
@Override
public List<T> fullList() {
// Handle multiple calls to fullList/list
fetchableQuery.restrict(QueryModifiers.EMPTY);
return fetchableQuery.fetch();
}
@Override
public List<T> list(long offset, long limit) {
fetchableQuery.offset(offset);
fetchableQuery.limit(limit);
return fetchableQuery.fetch();
}
@Override
public long count() {
return fetchableQuery.fetchCount();
}
}
}