72 lines
1.8 KiB
Java
72 lines
1.8 KiB
Java
package eu.eudat.data.query.definition;
|
|
|
|
import eu.eudat.data.dao.criteria.Criteria;
|
|
import eu.eudat.queryable.QueryableList;
|
|
import eu.eudat.queryable.queryableentity.DataEntity;
|
|
|
|
public abstract class Query<C extends Criteria<T>, T extends DataEntity> implements CriteriaQuery<C, T> {
|
|
private C criteria;
|
|
private QueryableList<T> query;
|
|
|
|
public static class QueryBuilder<C extends Criteria<T>, T extends DataEntity, Q extends Query<C, T>> {
|
|
private C criteria;
|
|
private QueryableList<T> query;
|
|
private Class<Q> tClass;
|
|
|
|
public QueryBuilder(Class<Q> tClass) {
|
|
this.tClass = tClass;
|
|
}
|
|
|
|
public QueryBuilder<C, T, Q> criteria(C criteria) {
|
|
this.criteria = criteria;
|
|
return this;
|
|
}
|
|
|
|
public QueryBuilder<C, T, Q> query(QueryableList<T> query) {
|
|
this.query = query;
|
|
return this;
|
|
}
|
|
|
|
public Q build() {
|
|
try {
|
|
Q q = tClass.newInstance();
|
|
q.setCriteria(criteria);
|
|
q.setQuery(query);
|
|
return q;
|
|
} catch (InstantiationException e) {
|
|
e.printStackTrace();
|
|
} catch (IllegalAccessException e) {
|
|
e.printStackTrace();
|
|
}
|
|
return null;
|
|
}
|
|
}
|
|
|
|
public QueryableList<T> getQuery() {
|
|
return query;
|
|
}
|
|
|
|
public void setQuery(QueryableList<T> query) {
|
|
this.query = query;
|
|
}
|
|
|
|
public C getCriteria() {
|
|
return criteria;
|
|
}
|
|
|
|
public void setCriteria(C criteria) {
|
|
this.criteria = criteria;
|
|
}
|
|
|
|
@Override
|
|
public QueryableList<T> collect() {
|
|
return this.applyCriteria();
|
|
}
|
|
|
|
@Override
|
|
public QueryableList<T> collect(QueryableList<T> repo) {
|
|
this.query = repo;
|
|
return this.applyCriteria();
|
|
}
|
|
}
|