Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
/*
* JavaBeanStack FrameWork
*
* Copyright (C) 2017 Jorge Enciso
* Email: [email protected]
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301 USA
*/
package org.javabeanstack.data.services;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.sql.Connection;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.ejb.EJB;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.persistence.JoinColumn;
import javax.persistence.Query;
import javax.validation.constraints.NotNull;
import org.apache.log4j.Logger;
import org.javabeanstack.error.ErrorManager;
import org.javabeanstack.error.IErrorReg;
import org.javabeanstack.exceptions.SessionError;
import org.javabeanstack.security.model.IUserSession;
import org.javabeanstack.data.DataInfo;
import org.javabeanstack.data.model.DataResult;
import org.javabeanstack.data.IDataResult;
import org.javabeanstack.data.IDataRow;
import org.javabeanstack.annotation.CheckMethod;
import org.javabeanstack.annotation.ColumnFunction;
import org.javabeanstack.data.IDBConnectFactory;
import org.javabeanstack.data.IDBFilter;
import org.javabeanstack.data.IDBLinkInfo;
import org.javabeanstack.data.IDBManager;
import org.javabeanstack.datactrl.IDataObject;
import org.javabeanstack.data.IDataSet;
import org.javabeanstack.data.IGenericDAO;
import org.javabeanstack.data.model.DataSet;
import org.javabeanstack.error.ErrorReg;
import org.javabeanstack.exceptions.CheckException;
import org.javabeanstack.security.IOAuthConsumerData;
import org.javabeanstack.util.Fn;
import org.javabeanstack.util.ParamsUtil;
import org.javabeanstack.util.Strings;
import static org.javabeanstack.util.Strings.isNullorEmpty;
import org.javabeanstack.annotation.CheckForeignkey;
/**
* Esta clase deriva de AbstractDAO, a travéz de ella se recupera, válida y se
* graban los registros en la base de datos. Es un ejb que se ejecuta en la capa
* de la lógica del negocio.
*
* @author Jorge Enciso
*/
@TransactionAttribute(TransactionAttributeType.SUPPORTS)
public abstract class AbstractDataService implements IDataService {
private static final Logger LOGGER = Logger.getLogger(AbstractDataService.class);
protected List methodList = this.getListCheckMethods();
@EJB
protected IGenericDAO dao;
protected boolean inheritCheckMethod = false;
@Override
public IDBLinkInfo getDBLinkInfo(String sessionId) {
return dao.getDBLinkInfo(sessionId);
}
/**
* Devuelve la unidad de persistencia asociado a la empresa en la cual
* inicio sesión el usuario.
*
* @param sessionId identificador de la sesión.
* @return unidad de persistencia.
*/
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
protected String getPersistentUnit(String sessionId) {
IDBLinkInfo dbInfo = getDBLinkInfo(sessionId);
return dbInfo.getPersistUnit();
}
/**
*
* @param sessionId id de sesión del usuario
* @return el objeto userSession con la información de la sesión
*/
@Override
public IUserSession getUserSession(String sessionId) {
return dao.getUserSession(sessionId);
}
/**
* Busca y devuelve el valor de una propiedad solicitada del entity manager
*
* @param persistUnit unidad de persistencia
* @return el valor de una propiedad del entity manager
*/
@Override
public Map getEntityManagerProp(String persistUnit) {
return dao.getEntityManagerProp(persistUnit);
}
/**
* Busca y devuelve el valor de una propiedad solicitada 1
*
* @param persistUnit unidad de persistencia.
* @return devuelve un map con todas las propiedades de la unidad de
* persistencia solicitada
*/
@Override
public Map getPersistUnitProp(String persistUnit) {
return dao.getPersistUnitProp(persistUnit);
}
/**
*
* @param persistentUnit unidad de persistencia
* @return devuelve el nombre del motor de la base de datos
*/
@Override
public String getDataEngine(String persistentUnit) {
return dao.getDataEngine(persistentUnit);
}
/**
*
* @param persistentUnit unidad de persistencia
* @return devuelve el schema
*/
@Override
public String getSchema(String persistentUnit) {
return dao.getSchema(persistentUnit);
}
/**
* Genera una lista de los metodos que existen con el proposito de validar
* datos.
*
* @return lista de metodos.
*/
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
protected final List getListCheckMethods() {
List methods = new ArrayList();
Method[] methodsFromClass;
if (!inheritCheckMethod){
methodsFromClass = this.getClass().getDeclaredMethods();
}
else {
methodsFromClass = this.getClass().getMethods();
}
for (Method method : methodsFromClass) {
CheckMethod anotation = method.getAnnotation(CheckMethod.class);
/* Ejecutar los metodos cuyo nombre inician con check */
if (anotation != null) {
methods.add(method);
}
}
return methods;
}
/**
* Asigna el map fieldsChecked, que básicamente va a informar que campos se
* verificarón y cuales no
*
* @param
* @param row objeto ejb
* @return Objeto ejb con atributo fieldsChecked preparado para recibir la
* información de las validaciones.
*/
@Override
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
public T setFieldsToCheck(T row) {
if (row != null && row.getFieldsChecked() == null) {
String fieldName;
String key;
CheckMethod anotation;
Map fieldsChecked = new HashMap<>();
for (Method method : methodList) {
anotation = method.getAnnotation(CheckMethod.class);
if (anotation != null) {
fieldName = anotation.fieldName().toLowerCase();
key = "_" + fieldName;
fieldsChecked.put(key, true);
}
}
row.setFieldsChecked(fieldsChecked);
}
return row;
}
/**
* Devuelve un registro de una tabla dada
*
* @param
* @param entityClass clase mapeada a la tabla
* @param sessionId identificador de la sesión que permite realizar las
* operaciones
* @param id identificador del registro
* @return un registro solicitado
* @throws Exception
*/
@Override
public T findById(Class entityClass, String sessionId, Object id) throws Exception {
return dao.findById(entityClass, sessionId, id);
}
/**
* Devuelve un registro a travéz de su clave unica.
*
* @param
* @param sessionId identificador de la sesión que permite realizar las
* operaciones
* @param ejb objeto ejb con los datos de la clave unica
* @return un registro que cumple la condición de la clave unica solicitada.
* @throws Exception
*/
@Override
public T findByUk(String sessionId, T ejb) throws Exception {
return dao.findByUk(sessionId, ejb);
}
/**
* Devuelve una lista de registros de una tabla dada
*
* @param
* @param entityClass clase mapeada a la tabla
* @param sessionId identificador de la sesión que permite realizar las
* operaciones
* @return lista de objetos
* @throws Exception
*/
@Override
public List find(Class entityClass, String sessionId) throws Exception {
return dao.find(entityClass, sessionId);
}
/**
* Devuelve una lista de registros de una tabla dada
*
* @param
* @param entityClass clase mapeada a la tabla
* @param sessionId identificador de la sesión que permite realizar las
* operaciones
* @param order
* @param filter
* @param params
* @return lista de objetos
* @throws Exception
*/
@Override
public List find(Class entityClass, String sessionId, String order, String filter, Map params) throws Exception {
return dao.find(entityClass, sessionId, order, filter, params);
}
/**
* Devuelve una lista de registro de una tabla dada
*
* @param
* @param entityClass clase mapeada a la tabla
* @param sessionId identificador de la sesión que permite realizar las
* operaciones
* @param order
* @param filter
* @param params
* @param first a partir de este nro. de registro se va a traer los datos
* @param max cantidad maxima de registros
* @return lista de objetos
* @throws Exception
*/
@Override
public List find(Class entityClass, String sessionId, String order, String filter, Map params, int first, int max) throws Exception {
return dao.find(entityClass, sessionId, order, filter, params, first, max);
}
/**
*
* @param
* @param sessionId identificador de la sesión que permite realizar las
* operaciones
* @param queryString sentencia jpql
* @param parameters parametros de la sentencia
* @return un objeto con valores del registro de la tabla solicitada
* @throws Exception
*/
@Override
public T findByQuery(String sessionId, String queryString, Map parameters) throws Exception {
return dao.findByQuery(sessionId, queryString, parameters);
}
/**
*
* @param
* @param sessionId identificador de la sesión que permite realizar las
* operaciones
* @param queryString sentencia jpql
* @param parameters parametros de la sentencia
* @return una lista de objetos conteniendo los registros de la tabla
* solicitada
* @throws Exception
*/
@Override
public List findListByQuery(String sessionId, String queryString, Map parameters) throws Exception {
return dao.findListByQuery(sessionId, queryString, parameters);
}
/**
*
* @param
* @param sessionId identificador de la sesión que permite realizar las
* operaciones
* @param queryString sentencia jpql
* @param first a partir de este nro. de registro se va a traer los datos
* @param max cantidad maxima de registros
* @return una lista de objetos conteniendo los registros de la tabla
* solicitada
* @throws Exception
*/
@Override
public List findListByQuery(String sessionId, String queryString, int first, int max) throws Exception {
return dao.findListByQuery(sessionId, queryString, first, max);
}
/**
*
* @param
* @param sessionId identificador de la sesión que permite realizar las
* operaciones
* @param queryString sentencia jpql
* @param parameters parametros de la sentencia
* @param first a partir de este nro. de registro se va a traer los datos
* @param max cantidad maxima de registros
* @return una lista de objetos conteniendo los registros de la tabla
* solicitada
* @throws Exception
*/
@Override
public List findListByQuery(String sessionId, String queryString, Map parameters, int first, int max) throws Exception {
return dao.findListByQuery(sessionId, queryString, parameters, first, max);
}
/**
*
* @param
* @param sessionId identificador de la sesión que permite realizar las
* operaciones
* @param namedQuery namedQuery
* @param parameters parámetros de la sentencia.
* @return un objeto con los datos del registro de la tabla solicitada
* @throws Exception
*/
@Override
public T findByNamedQuery(String sessionId, String namedQuery, Map parameters) throws Exception {
return dao.findByNamedQuery(sessionId, namedQuery, parameters);
}
/**
*
* @param
* @param sessionId identificador de la sesión que permite realizar las
* operaciones
* @param namedQuery namedQuery
* @param parameters parámetros de la sentencia.
* @return una lista de objetos con los datos de los registros de la tabla
* solicitada
* @throws Exception
*/
@Override
public List findListByNamedQuery(String sessionId, String namedQuery, Map parameters) throws Exception {
return dao.findListByNamedQuery(sessionId, namedQuery, parameters);
}
/**
*
* @param
* @param sessionId identificador de la sesión que permite realizar las
* operaciones
* @param first a partir de este nro. de registro se va a traer los datos
* @param max cantidad maxima de registros
* @return una lista de objetos conteniendo los registros de la tabla
* solicitada
* @throws Exception
*/
@Override
public List findListByNamedQuery(String sessionId, String namedQuery, int first, int max) throws Exception {
return dao.findListByNamedQuery(sessionId, namedQuery, first, max);
}
/**
*
* @param
* @param sessionId identificador de la sesión que permite realizar las
* operaciones
* @param namedQuery namedQuery
* @param first a partir de este nro. de registro se va a traer los datos
* @param max cantidad maxima de registros
* @return una lista de objetos con los datos de los registros de la tabla
* solicitada
* @throws Exception
*/
@Override
public List findListByNamedQuery(String sessionId, String namedQuery, Map parameters, int first, int max) throws Exception {
return dao.findListByNamedQuery(sessionId, namedQuery, parameters, first, max);
}
/**
*
* @param sessionId identificador de la sesión que permite realizar las
* operaciones
* @param queryString sentencia sql
* @param parameters parámetros de la sentencia.
* @return una lista de objetos con datos de los registros solicitados
* @throws Exception
*/
@Override
public List