package org.springframework.data.simpledb.query;
import java.util.List;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.simpledb.core.SimpleDbOperations;
import org.springframework.util.Assert;
/**
* This class is used to get information about query field names and execute queries
*/
public class SimpleDbQueryRunner {
private final SimpleDbOperations simpledbOperations;
private final Class<?> domainClass;
private final String query;
private Pageable pageable;
public SimpleDbQueryRunner(SimpleDbOperations simpledbOperations, Class<?> domainClass, String query) {
this.simpledbOperations = simpledbOperations;
this.domainClass = domainClass;
this.query = query;
}
public SimpleDbQueryRunner(SimpleDbOperations simpledbOperations, Class<?> domainClass, String query,
Pageable pageable) {
this(simpledbOperations, domainClass, query);
Assert.notNull(pageable);
Assert.isTrue(pageable.getPageNumber() >= 0);
Assert.isTrue(pageable.getPageSize() > 0);
this.pageable = pageable;
}
public List<?> executeQuery() {
return simpledbOperations.find(domainClass, query);
}
public Object executeSingleResultQuery() {
List<?> returnListFromDb = executeQuery();
return getSingleResult(returnListFromDb);
}
Object getSingleResult(List<?> returnListFromDb) {
Assert.isTrue(returnListFromDb.size() <= 1,
"Select statement should return only one entity from database, returned elements size="
+ returnListFromDb.size() + ", for Query=" + query);
return returnListFromDb.size() > 0 ? returnListFromDb.get(0) : null;
}
public long executeCount() {
return simpledbOperations.count(query, domainClass);
}
public List<String> getRequestedQueryFieldNames() {
return QueryUtils.getQueryPartialFieldNames(query);
}
public String getSingleQueryFieldName() {
List<String> queryFieldNames = getRequestedQueryFieldNames();
Assert.isTrue(queryFieldNames.size() == 1);
return queryFieldNames.get(0);
}
public Page<?> executePagedQuery() {
return simpledbOperations.executePagedQuery(domainClass, query, pageable);
}
}