package com.fp.bpm.query;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;
import org.hibernate.Criteria;
import org.hibernate.ScrollMode;
import org.hibernate.ScrollableResults;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Property;
import org.hibernate.criterion.Restrictions;
import com.fp.common.helper.BeanManager;
import com.fp.dto.AbstractDataTransport;
import com.fp.dto.Response;
import com.fp.dto.hb.HibernateBean;
import com.fp.dto.query.QueryBean;
import com.fp.dto.query.QueryCriteria;
import com.fp.dto.query.QueryRequest;
import com.fp.persistence.commondb.PersistenceHelper;
import com.fp.persistence.commondb.db.DataHelper;
import com.fp.persistence.commondb.exception.CommondbException;
import com.fp.persistence.pgeneral.gene.TgeneCatalogDetail;
/**
* Motor de consultas generico.
* @author Jorge Vaca
* @version 2.1
*/
public class QueryHQL {
public QueryHQL() {
}
/**
* Metodo que se encarga de ejecutar consultas genericas.
* Proceso.
*
* - Obtiene una lista de QueryBean del Objeto QueryRequest
* - Ejecuta la consulta para cada QueryBean
* - Llena la respuesta en el response.
*
* @param pReq
* @return boolean
* @throws CommondbException
* @throws ClassNotFoundException
* @throws InstantiationException
* @throws IllegalAccessException
* @throws Exception
*/
public boolean process(QueryRequest pQueryRequest) throws CommondbException, ClassNotFoundException, InstantiationException, IllegalAccessException, Exception {
Response response = pQueryRequest.getResponse();
Map bean = pQueryRequest.getBeans();
for (String k : bean.keySet()) {
QueryBean qbean = bean.get(k);
response.put(k, this.processByQueryBean(qbean));
}
return true;
}
/**
* Metodo que ejecuta una consulta por QueryBean.
* Si el QueryType asociado al QueryBean es E, Crea y entrega un objeto vacio.
* @param pQueryBean Datos del QueryBean
* @return Object
* @throws CommondbException
* @throws ClassNotFoundException
* @throws InstantiationException
* @throws IllegalAccessException
* @throws Exception
*/
private Object processByQueryBean(QueryBean pQueryBean) throws CommondbException, ClassNotFoundException, InstantiationException, IllegalAccessException, Exception {
if (pQueryBean.getQuerytype() != null && pQueryBean.getQuerytype().compareTo("E") == 0) {
if (pQueryBean.isMultirecord()) {
List