package siena.core.async;
import java.util.List;
import siena.BaseQueryData;
import siena.core.batch.BaseBatchAsync;
import siena.core.batch.BatchAsync;
import siena.core.options.QueryOption;
import siena.core.options.QueryOptionOffset;
import siena.core.options.QueryOptionState;
public abstract class AbstractPersistenceManagerAsync implements PersistenceManagerAsync {
public <T> QueryAsync<T> createQuery(Class<T> clazz) {
return new BaseQueryAsync<T>(this, clazz);
}
public <T> QueryAsync<T> createQuery(BaseQueryData<T> data) {
return new BaseQueryAsync<T>(this, data);
}
public <T> BatchAsync<T> createBatch(Class<T> clazz) {
return new BaseBatchAsync<T>(this, clazz);
}
public <T> SienaFuture<T> get(QueryAsync<T> query) {
final SienaFuture<List<T>> future = fetch(query, 1);
return new SienaFuture<T>(){
public T get() {
List<T> list = future.get();
if(list.isEmpty()) { return null; }
return list.get(0);
}
};
}
public <T> void release(QueryAsync<T> query) {
QueryOptionOffset offset = (QueryOptionOffset)query.option(QueryOptionOffset.ID);
QueryOption reuse = query.option(QueryOptionState.ID);
// resets offset
if(offset.isActive())
offset.offset=0;
// disables reusable and cludge
if(reuse.isActive()){
reuse.passivate();
}
}
}