/** * */ package siena.core.async; import java.util.List; import java.util.Map; import siena.BaseQueryData; import siena.Query; import siena.core.options.QueryOption; /** * The base implementation of QueryAsync<T> where T is the model being queried (not necessarily inheriting siena.Model) * * @author mandubian <pascal.voitot@mandubian.org> */ public class BaseQueryAsync<T> extends BaseQueryData<T> implements QueryAsync<T> { private static final long serialVersionUID = -7039977099068819124L; private PersistenceManagerAsync pm; public BaseQueryAsync(PersistenceManagerAsync pm, Class<T> clazz) { super(clazz); this.pm = pm; } public BaseQueryAsync(BaseQueryAsync<T> query) { super(query); this.pm = query.pm; } public BaseQueryAsync(PersistenceManagerAsync pm, BaseQueryData<T> data) { super(data); this.pm = pm; } public PersistenceManagerAsync getPersistenceManager(){ return pm; } public QueryAsync<T> filter(String fieldName, Object value) { addFilter(fieldName, value, pm.supportedOperators()); return this; } public QueryAsync<T> order(String fieldName) { addOrder(fieldName); return this; } public QueryAsync<T> join(String fieldName, String... sortFields) { addJoin(fieldName, sortFields); return this; } public QueryAsync<T> aggregated(Object aggregator, String fieldName) { addAggregated(aggregator, fieldName); return this; } public QueryAsync<T> owned(Object owner, String fieldName) { addOwned(owner, fieldName); return this; } public QueryAsync<T> search(String match, String... fields) { addSearch(match, fields); return this; } public QueryAsync<T> search(String match, QueryOption opt, String... fields) { addSearch(match, opt, fields); return this; } public SienaFuture<T> get() { return pm.get(this); } public SienaFuture<T> getByKey(Object key) { return pm.getByKey(clazz, key); } public SienaFuture<Integer> delete() { return pm.delete(this); } public SienaFuture<Integer> update(Map<String, ?> fieldValues) { return pm.update(this, fieldValues); } public SienaFuture<Integer> count() { return pm.count(this); } public SienaFuture<List<T>> fetch() { return pm.fetch(this); } public SienaFuture<List<T>> fetch(int limit) { return pm.fetch(this, limit); } public SienaFuture<List<T>> fetch(int limit, Object offset) { return pm.fetch(this, limit, offset); } public SienaFuture<List<T>> fetchKeys() { return pm.fetchKeys(this); } public SienaFuture<List<T>> fetchKeys(int limit) { return pm.fetchKeys(this, limit); } public SienaFuture<List<T>> fetchKeys(int limit, Object offset) { return pm.fetchKeys(this, limit, offset); } public SienaFuture<Iterable<T>> iter() { return pm.iter(this); } public SienaFuture<Iterable<T>> iter(int limit) { return pm.iter(this, limit); } public SienaFuture<Iterable<T>> iter(int limit, Object offset) { return pm.iter(this, limit, offset); } public SienaFuture<Iterable<T>> iterPerPage(int limit) { return pm.iterPerPage(this, limit); } public SienaFuture<Object> raw(String request) { // TODO return null; } public QueryAsync<T> limit(int limit) { optionLimit(limit); return this; } public QueryAsync<T> offset(Object offset) { optionOffset((Integer)offset); return this; } public QueryAsync<T> paginate(int pageSize) { optionPaginate(pageSize); pm.paginate(this); return this; } public QueryAsync<T> nextPage() { pm.nextPage(this); return this; } public QueryAsync<T> previousPage() { pm.previousPage(this); return this; } public QueryAsync<T> customize(QueryOption... options) { addOptions(options); return this; } public QueryAsync<T> stateful() { optionStateful(); return this; } @Override public QueryAsync<T> stateless() { // when going to stateless mode, we reset the options to default values resetOptions(); optionStateless(); return this; } public QueryAsync<T> release() { pm.release(this); return this; } @Override public QueryAsync<T> resetData() { super.reset(); pm.release(this); return this; } @Override public String dump() { // TODO Auto-generated method stub return null; } @Override public QueryAsync<T> restore(String dump) { // TODO Auto-generated method stub return null; } @Override public Query<T> sync() { return pm.sync().createQuery(this); } public QueryAsync<T> clone(){ // TODO code a real deep clone function return new BaseQueryAsync<T>(this); } }