package com.fp.base.persistence.util.db;
import java.util.Map;
import com.fp.core.exception.CoreException;
import com.fp.persistence.commondb.HqlStatement;
import com.fp.persistence.commondb.PersistenceHelper;
import com.fp.persistence.commondb.cache.CacheManager;
import com.fp.persistence.pgeneral.gene.TgeneCreditType;
import com.fp.persistence.pgeneral.gene.TgeneCurrency;
import com.fp.persistence.pgeneral.gene.TgeneFrequency;
import com.fp.persistence.pgeneral.installment.TgeneInstallmentType;
import com.fp.persistence.pgeneral.safe.TsafeUser;
import com.fp.persistence.pgeneral.trans.TgeneTransactionItem;
/**
* Clase que se encarga de manejo de sentencias SQL o HQL con la base de datos, Existe ciertas tablas con informacion
* estatica, las cuales se cargan a memoria.
* Otras tablas se define para que se cargue a cache la informacion de ciertos regitros que esten marcados con
* ManageCache.
*
* @author Jorge Vaca
* @version 2.1
*/
public class DataHelper {
/** Almacena una instancia de DataHelper. */
private static DataHelper cache;
/**
* Entrega una instancia de DataHelper.
*
* @return DataHelper
*/
public static DataHelper getInstance() {
if (DataHelper.cache != null) {
return DataHelper.cache;
}
synchronized (DataHelper.class) {
if (DataHelper.cache == null) {
DataHelper.cache = new DataHelper();
}
}
return DataHelper.cache;
}
private static final String VMODULECODE = "modulecode";
/** Sentencia que devuelve un registro de TgeneCreditType. */
private static final String HQL_CREDIT_TYPE = "from TgeneCreditType t " + " where t.pk = :credittypecode ";
/**
* Metodo que entrega la definicion de TgeneCreditType.
*
* @param pCreditType Codigo de tipo de credito a obtener datos.
* @return TgeneCreditType
* @throws Exception
*/
public TgeneCreditType getTgeneCreditType(String pCreditType) throws Exception {
TgeneCreditType tgeneCreditType = null;
CacheManager cm = CacheManager.getInstance();
tgeneCreditType = (TgeneCreditType) cm.getData("TgeneCreditType", pCreditType);
if (tgeneCreditType == null) {
HqlStatement hql = new HqlStatement();
hql.setSentence(DataHelper.HQL_CREDIT_TYPE);
hql.setString("credittypecode", pCreditType);
tgeneCreditType = (TgeneCreditType) hql.getObject();
Map m = cm.getMapDefinition("TgeneCreditType");
m.put(pCreditType, tgeneCreditType);
cm.putData("TgeneCreditType", m);
}
return tgeneCreditType;
}
/** Sentencia que devuelve un registro de TgeneInstallmentType. */
private static final String HQL_INSTALLMENT_TYPE = "from TgeneInstallmentType t " + " where t.pk.installmenttype = :installmenttype "
+ " and t.pk.modulecode = :modulecode ";
/**
* Metodo que entrega la definicion de TgeneInstallmentType
*
* @param TgeneInstallmentType Codigo de tipo de tabla de amortizacion.
* @return TgeneInstallmentType
* @throws Exception
*/
public TgeneInstallmentType getTgeneInstallmentType(String pInstallmentType, String pModule) throws Exception {
String key = pInstallmentType + pModule;
TgeneInstallmentType tgeneInstallmentType = null;
CacheManager cm = CacheManager.getInstance();
tgeneInstallmentType = (TgeneInstallmentType) cm.getData("TgeneInstallmentType", key);
if (tgeneInstallmentType == null) {
HqlStatement hql = new HqlStatement();
hql.setSentence(DataHelper.HQL_INSTALLMENT_TYPE);
hql.setString("installmenttype", pInstallmentType);
hql.setString(DataHelper.VMODULECODE, pModule);
hql.setReadonly(true);
tgeneInstallmentType = (TgeneInstallmentType) hql.getObject();
if (tgeneInstallmentType == null) {
throw new CoreException("CORE-0022", "TIPO TABLA DE AMORTIZACION NO DEFINIDA EN TGENEINSTALLMENTTYPE :{0}", pInstallmentType);
}
Map m = cm.getMapDefinition("TgeneInstallmentType");
m.put(key, tgeneInstallmentType);
cm.putData("TgeneInstallmentType", m);
}
return tgeneInstallmentType;
}
/** Sentencia que devuelve un registro de TgeneFrequency. */
private static final String HQL_FREQUENCY = "from TgeneFrequency t " + " where t.pk = :frequencycode ";
/**
* Metodo que entrega la definicion de TgeneFrequency
*
* @param pFrequencyCode Codigo de frecuenia a obtener su definicion.
* @return TgeneFrequency
* @throws Exception
*/
public TgeneFrequency getTgeneFrecuency(Integer pFrequencyCode) throws Exception {
TgeneFrequency tgeneFrequency = null;
String key = "" + pFrequencyCode;
CacheManager cm = CacheManager.getInstance();
tgeneFrequency = (TgeneFrequency) cm.getData("TgeneFrequency", key);
if (tgeneFrequency == null) {
HqlStatement hql = new HqlStatement();
hql.setSentence(DataHelper.HQL_FREQUENCY);
hql.setInteger("frequencycode", pFrequencyCode);
hql.setReadonly(true);
tgeneFrequency = (TgeneFrequency) hql.getObject();
if (tgeneFrequency == null) {
throw new CoreException("CORE-0015", "FRECUENCIA NO DEFINIDA EN TGENEFREQUENCY FRQCODE:{0}", pFrequencyCode);
}
Map m = cm.getMapDefinition("TgeneFrequency");
m.put(key, tgeneFrequency);
cm.putData("TgeneFrequency", m);
}
return tgeneFrequency;
}
/**
* Entrega un objeto con los datos de TsafeUser. Que contiene datos de un usuario.
*
* @param pUserCode Codigo de usuario a obtener un registro.
* @return TsafeUser
* @throws CoreException
* @throws Exception
*/
public TsafeUser getTsafeUser(String pUserCode) throws CoreException, Exception {
TsafeUser tsafeUser = TsafeUser.find(PersistenceHelper.getEntityManager(), pUserCode);
if (tsafeUser == null) {
throw new CoreException("CORE-0032", "USUARIO {0} NO DEFINIDO EN TSAFEUSER", pUserCode);
}
if (tsafeUser.getInternalcode() == null) {
throw new CoreException("CORE-0033", "CODIGO USUARIO INTERNO NO DEFINIDO EN TSAFEUSER USERCODE: {0}", pUserCode);
}
return tsafeUser;
}
/**
* Entrega un registro de tgenecurrency.
*
* @param pCurrency Codigo de moneda a obtener un registro de la base de datos.
* @return TgeneCurrency
* @throws Exception
*/
public TgeneCurrency getTgeneCurrency(String pCurrency) throws Exception {
TgeneCurrency tgeneCurrency = null;
CacheManager cm = CacheManager.getInstance();
tgeneCurrency = (TgeneCurrency) cm.getData("TgeneCurrency", pCurrency);
if (tgeneCurrency == null) {
tgeneCurrency = TgeneCurrency.find(PersistenceHelper.getEntityManager(), pCurrency);
if (tgeneCurrency == null) {
throw new CoreException("CORE-0017", "MONEDA {0} NO DEFINIDA EN TGENECURRENCY ", pCurrency);
}
Map m = cm.getMapDefinition("TgeneCurrency");
m.put(pCurrency, tgeneCurrency);
cm.putData("TgeneCurrency", m);
}
return tgeneCurrency;
}
/**
* Sentecia que devuelve el rubro de una transaccion
*/
private static final String HQL_TRANSACTION_ITEMCODE = "from TgeneTransactionItem tt " + " where tt.pk.transactionmodule = :transactionmodule"
+ " and tt.pk.transactioncode = :transactioncode" + " and tt.pk.transactionversion = :transactionversion"
+ " and tt.pk.itemcode = :itemcode";
/**
* Metodo que retorna el rubro de una transaccion
*
* @param transactionmodule Modulo de la transaccion
* @param transactioncode Codigo de la transaccion
* @param transactionversion Version de la transaccion
* @param itemcode Rubro de la transaccion
* @return
* @throws Exception
*/
public TgeneTransactionItem getTgeneTransactionItem(String transactionmodule, Integer transactioncode, Integer transactionversion,
Integer itemcode) throws Exception {
TgeneTransactionItem tgeneTransactionItem = null;
HqlStatement hql = new HqlStatement(DataHelper.HQL_TRANSACTION_ITEMCODE);
hql.setString("transactionmodule", transactionmodule);
hql.setInteger("transactioncode", transactioncode);
hql.setInteger("transactionversion", transactionversion);
hql.setInteger("itemcode", itemcode);
tgeneTransactionItem = (TgeneTransactionItem) hql.getObject();
return tgeneTransactionItem;
}
}