/**
* Copyright (c)2010-2011 Enterprise Website Content Management System(EWCMS), All rights reserved.
* EWCMS PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
* http://www.ewcms.com
*/
package com.ewcms.common.query.jpa;
import java.util.Calendar;
import java.util.Date;
import javax.persistence.EntityManager;
import javax.persistence.TemporalType;
import com.ewcms.common.query.Result;
import com.ewcms.common.query.cache.CacheResultable;
import com.ewcms.common.query.cache.ResultCacheable;
public class HqlQuery extends AbstractQuery implements HqlQueryable {
private ResultCacheable cache;
private HqlQueryTemplate listTemplate;
private HqlQueryTemplate countTemplate;
private HqlQueryTemplate extTemplate;
private int row = DEFAULT_ROW ;
private int page = DEFAULT_PAGE ;
public HqlQuery(final EntityManager em,final String hql,final String countHql) {
this(em, hql, countHql, null);
}
public HqlQuery(final EntityManager em,final String hql,final String countHql,final String extHql) {
listTemplate = new HqlQueryTemplate(em,hql);
countTemplate = new HqlQueryTemplate(em,countHql);
if(extHql != null){
extTemplate = new HqlQueryTemplate(em,extHql);
}
}
@Override
public Result queryResult(){
return getResult(countTemplate,listTemplate,extTemplate,row,page);
}
@Override
public CacheResultable queryCacheResult(String cacheKey) {
return getCacheResult(cache,cacheKey,
countTemplate,listTemplate,extTemplate,
row,page);
}
@Override
public HqlQueryable setParameter(String name, Object value) {
listTemplate.setParameter(name, value);
countTemplate.setParameter(name, value);
if(extTemplate != null){
extTemplate.setParameter(name, value);
}
return this;
}
@Override
public HqlQueryable setParameter(int position, Object value) {
listTemplate.setParameter(position, value);
countTemplate.setParameter(position, value);
if(extTemplate != null){
extTemplate.setParameter(position, value);
}
return this;
}
@Override
public HqlQueryable setParameter(String name, Date date, TemporalType type) {
listTemplate.setParameter(name, date,type);
countTemplate.setParameter(name, date,type);
if(extTemplate != null){
extTemplate.setParameter(name, date,type);
}
return this;
}
@Override
public HqlQueryable setParameter(int position, Date date, TemporalType type) {
listTemplate.setParameter(position, date,type);
countTemplate.setParameter(position, date,type);
if(extTemplate != null){
extTemplate.setParameter(position, date,type);
}
return this;
}
@Override
public HqlQueryable setParameter(String name, Calendar calendar,TemporalType type) {
listTemplate.setParameter(name, calendar,type);
countTemplate.setParameter(name, calendar,type);
if(extTemplate != null){
extTemplate.setParameter(name, calendar,type);
}
return this;
}
@Override
public HqlQueryable setParameter(int position, Calendar calendar,TemporalType type) {
listTemplate.setParameter(position, calendar,type);
countTemplate.setParameter(position, calendar,type);
if(extTemplate != null){
extTemplate.setParameter(position, calendar,type);
}
return this;
}
@Override
public HqlQueryable setCache(ResultCacheable cache){
this.cache = cache;
return this;
}
@Override
public HqlQueryable setRow(int row) {
this.row = row;
return this;
}
@Override
public HqlQueryable setPage(int page) {
this.page = page;
return this;
}
}