
org.javabeanstack.data.AbstractDataLink Maven / Gradle / Ivy
The newest version!
/*
* 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;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import org.javabeanstack.exceptions.SessionError;
import org.javabeanstack.model.IAppTablesRelation;
import org.javabeanstack.security.model.IUserSession;
import org.javabeanstack.data.services.IDataService;
import org.javabeanstack.util.LocalDates;
import org.javabeanstack.util.Strings;
/**
* Es un wrapper de AbstractDao, gestiona el acceso a los datos.
*
* @author Jorge Enciso
*/
public abstract class AbstractDataLink implements IDataLink, Serializable {
/**
* Unidad de persistencia donde esta configurado los parámetros de la
* conexión a la base de datos
*/
private String persistUnit = IDBManager.CATALOGO;
/**
* Objeto resultante del login del usuario. Para acceder al esquema de datos
* de la base el usuario debe estar logeado
*/
private IUserSession userSession;
/**
* Token, más utilizado desde webservices donde no hay sesión de usuario
*/
private String token;
/**
* Identificador de la empresa
*/
private Long idCompany;
/**
* Es el objeto responsable del acceso a los datos
*
* @return dao
*/
@Override
public abstract IGenericDAO getDao();
@Override
public abstract void setDao(T dao);
/**
* Es el objeto responsable del acceso a los datos y logica del negocio
*
* @param
* @return la instancia del dataService
*/
@Override
public abstract T getDataService();
/**
* Unidad de persistencia donde esta configurado los parámetros de la
* conexión a la base de datos
*
* @return unidad de persistencia
*/
@Override
public String getPersistUnit() {
return persistUnit;
}
/**
* Agrega un registro en la tabla
*
* @param tipo de dato generalmente hereda de DataRow
* @param ejb el objeto con los valores del registro
* @throws org.javabeanstack.exceptions.SessionError
* @return dataResult (resultado del persist)
*/
@Override
public IDataResult persist(T ejb) throws SessionError{
ejb.setAction(IDataRow.INSERT);
return update(ejb);
}
/**
* Agregar registros a la tabla
*
* @param tipo de dato generalmente hereda de DataRow
* @param ejbs lista con los objetos con los valores de los registros
* @return dataResult (resultado del persist)
* @throws org.javabeanstack.exceptions.SessionError
*/
@Override
public IDataResult persist(List ejbs) throws SessionError{
ejbs.forEach( ejb -> {
ejb.setAction(IDataRow.INSERT);
});
return update(ejbs);
}
/**
* Actualizar un registro en la tabla
*
* @param tipo de dato generalemente hereda de DataRow
* @param ejb el objeto con los valores del registro
* @throws org.javabeanstack.exceptions.SessionError
* @return dataResult (resultado del merge)
*/
@Override
public IDataResult merge(T ejb) throws SessionError{
ejb.setAction(IDataRow.UPDATE);
return update(ejb);
}
/**
* Actualizar registros en la tabla
*
* @param tipo de dato generalmente hereda de DataRow
* @param ejbs lista con los objetos con los valores de los registros
* @return dataResult (resultado del merge)
* @throws org.javabeanstack.exceptions.SessionError
*/
@Override
public IDataResult merge(List ejbs) throws SessionError{
ejbs.forEach((ejb) -> {
ejb.setAction(IDataRow.UPDATE);
});
return update(ejbs);
}
/**
* Borrar un registro de la tabla
*
* @param tipo de dato generalemente hereda de DataRow
* @param ejb el objeto con los valores del registro
* @throws org.javabeanstack.exceptions.SessionError
* @return dataResult (resultado del remove)
*/
@Override
public IDataResult remove(T ejb) throws SessionError{
ejb.setAction(IDataRow.DELETE);
return update(ejb);
}
/**
* Borrar registros de la tabla
*
* @param tipo de dato generalmente hereda de DataRow
* @param ejbs lista con los objetos con los valores de los registros
* @return dataResult (resultado del remove)
* @throws org.javabeanstack.exceptions.SessionError
*/
@Override
public IDataResult remove(List ejbs) throws SessionError{
ejbs.forEach((ejb) -> {
ejb.setAction(IDataRow.DELETE);
});
return update(ejbs);
}
/**
* Agrega, actualiza o borra registros de la base de datos
*
* @param tipo de dato generalemente hereda de DataRow
* @param ejb el objeto con los valores del registro
* @throws org.javabeanstack.exceptions.SessionError
* @return dataResult (resultado del update)
*/
@Override
public IDataResult update(T ejb) throws SessionError {
// Verificar si la sesión es válida
checkUserSession();
IDataResult dataResult = getDao().update(getSessionId(), ejb);
if (dataResult.isSuccessFul() && (dataResult.isRemoveDeleted() || ejb.getAction() == IDataRow.DELETE)){
dataResult.setRowsUpdated(ejb);
}
return dataResult;
}
/**
* Agregar, actualiza o borra registros de la base de datos
*
* @param tipo de dato generalmente hereda de DataRow
* @param ejbs lista con los objetos con los valores de los registros
* @return dataResult (resultado del update)
* @throws org.javabeanstack.exceptions.SessionError
*/
@Override
public IDataResult update(List ejbs) throws SessionError {
// Verificar si la sesión es válida
checkUserSession();
//Procesar solo los registros modificados
List ejbs2 = this.getRowsChanged(ejbs);
IDataResult dataResult = getDao().update(getSessionId(), ejbs2);
if (dataResult.isSuccessFul()){
dataResult.setRowsUpdated(ejbs);
// Eliminar registros borrados de la lista
removeDeleted(ejbs);
dataResult.setRemoveDeleted(Boolean.TRUE);
}
return dataResult;
}
/**
* Agregar, actualiza o borra registros de la base de datos
*
* @param dataSet cada elemento del dataSet contiene una lista con los objetos
* mapeados a los registros de cada tabla
* @return dataResult (resultado del update)
* @throws org.javabeanstack.exceptions.SessionError
*/
@Override
public IDataResult update(IDataSet dataSet) throws SessionError {
// Verificar si la sesión es válida
checkUserSession();
// Procesar solo registros modificados.
IDataSet dataSetChanged = dataSet.getChanged();
IDataResult dataResult = getDao().update(getSessionId(), dataSetChanged);
if (dataResult.isSuccessFul()){
dataResult.setRowsUpdated(dataSet);
// Eliminar registros borrados de la lista
for (Map.Entry> entry: dataSet.getMapListSet().entrySet()){
List extends IDataRow> ejbs = entry.getValue();
removeDeleted(ejbs);
}
if (dataSet.getMapDataObject() != null && !dataSet.getMapDataObject().isEmpty()){
dataResult.setRemoveDeleted(Boolean.TRUE);
}
}
return dataResult;
}
/**
* Devuelve un registro de datos.
*
* @param tipo de dato generalmente hereda de DataRow
* @param entityClass tipo de dato o clase solicitada
* @param id identificador del registro (clave primaria).
* @return Objeto con los datos del registro.
* @throws Exception
* @throws org.javabeanstack.exceptions.SessionError
*/
@Override
public T find(Class entityClass, Object id) throws Exception, SessionError {
// Verificar si la sesión es válida
checkUserSession();
if (id == null){
return null;
}
return getDao().findById(entityClass, getSessionId(), id);
}
/**
* Devuelve un registro de datos.
*
* @param tipo de dato generalmente hereda de DataRow
* @param entityClass tipo de dato o clase solicitada
* @param id identificador del registro (clave primaria).
* @return Objeto con los datos del registro.
* @throws Exception
* @throws org.javabeanstack.exceptions.SessionError
*/
@Override
public T findById(Class entityClass, Object id) throws Exception, SessionError {
// Verificar si la sesión es válida
checkUserSession();
if (id == null){
return null;
}
return getDao().findById(entityClass, getSessionId(), id);
}
/**
* Devuelve un registro de datos.
*
* @param tipo de dato generalmente hereda de DataRow
* @param ejb objeto conteniendo datos necesarios para llegar a recuperar el
* registro a travéz de los campos de la clave unica
* @return Objeto con los datos del registro
* @throws Exception
* @throws org.javabeanstack.exceptions.SessionError
*/
@Override
public T findByUk(T ejb) throws Exception, SessionError {
// Verificar si la sesión es válida
checkUserSession();
if (ejb == null){
return null;
}
return getDao().findByUk(getSessionId(), ejb);
}
/**
* Devuelve un registro
*
* @param tipo de dato generalmente hereda de DataRow
* @param queryString sentencia JPQL que se ejecutará para recuperar los
* datos
* @param parameters parametros de la sentencia.
* @return Devuelve un registro
* @throws Exception
* @throws org.javabeanstack.exceptions.SessionError
*/
@Override
public T findByQuery(String queryString,
Map parameters)
throws Exception, SessionError {
// Verificar si la sesión es válida
checkUserSession();
parameters = addParams(queryString, parameters);
return getDao().findByQuery(getSessionId(), queryString, parameters);
}
/**
* Devuelve una lista de registros resultado de la selección de datos en una
* base de datos
*
* @param tipo de dato generalmente hereda de DataRow
* @param queryString sentencia JPQL que se ejecutará para recuperar los
* datos
* @param parameters parametros de la sentencia.
* @return una lista de registros
* @throws Exception
* @throws org.javabeanstack.exceptions.SessionError
*/
@Override
public List findListByQuery(String queryString, Map parameters)
throws Exception, SessionError {
// Verificar si la sesión es válida
checkUserSession();
parameters = addParams(queryString, parameters);
return getDao().findListByQuery(getSessionId(), queryString, parameters);
}
/**
*
* Devuelve una lista de registros resultado de la selección de datos en una
* base de datos
*
* @param tipo de dato generalmente hereda de DataRow
* @param queryString sentencia JPQL que se ejecutará para recuperar los
* datos
* @param parameters parametros de la sentencia.
* @param first a partir de un registro determinado del conjunto
* @param max máxima cantidad de registros.
* @return una lista de registros
* @throws Exception
* @throws org.javabeanstack.exceptions.SessionError
*/
@Override
public List findListByQuery(String queryString, Map parameters, int first, int max)
throws Exception, SessionError {
// Verificar si la sesión es válida
checkUserSession();
parameters = addParams(queryString, parameters);
return getDao().findListByQuery(getSessionId(), queryString, parameters, first, max);
}
/**
* Devuelve un registro resultado de la selección de datos en una base de
* datos
*
* @param tipo de dato generalmente hereda de DataRow
* @param namedQuery nombre del query definido en el EJB
* @param parameters parametros de la sentencia.
* @return una lista de registros
* @throws Exception
* @throws org.javabeanstack.exceptions.SessionError
*/
@Override
public T findByNamedQuery(String namedQuery, Map parameters) throws Exception, SessionError {
// Verificar si la sesión es válida
checkUserSession();
return getDao().findByNamedQuery(getSessionId(), namedQuery, parameters);
}
/**
* Devuelve una lista de registros resultado de la selección de datos en una
* base de datos
*
* @param tipo de dato generalmente hereda de DataRow
* @param namedQuery nombre del query definido en el EJB
* @param parameters parametros de la sentencia.
* @return una lista de registros
* @throws Exception
* @throws org.javabeanstack.exceptions.SessionError
*/
@Override
public List findListByNamedQuery(String namedQuery, Map parameters) throws Exception, SessionError {
// Verificar si la sesión es válida
checkUserSession();
return getDao().findListByNamedQuery(getSessionId(), namedQuery, parameters);
}
/**
* Devuelve una lista de registros resultado de la selección de datos en una
* base de datos
*
* @param tipo de dato generalmente hereda de DataRow
* @param namedQuery nombre del query definido en el EJB
* @param parameters parametros de la sentencia.
* @param first puntero que define el nro de registro a partir del cual va a
* recuperar los datos
* @param max máxima cantidad de registros.
* @return una lista de registros
* @throws Exception
* @throws org.javabeanstack.exceptions.SessionError
*/
@Override
public List findListByNamedQuery(String namedQuery, Map parameters, int first, int max) throws Exception, SessionError {
// Verificar si la sesión es válida
checkUserSession();
return getDao().findListByNamedQuery(getSessionId(), namedQuery, parameters, first, max);
}
/**
* Devuelve una lista de registros resultado de la selección de datos en una
* base de datos, utilizando una sentencia nativa.
*
* @param queryString sentencia select
* @param parameters parametros de la sentencia
* @return una lista de registros
* @throws Exception
* @throws org.javabeanstack.exceptions.SessionError
*/
@Override
public List
© 2015 - 2025 Weber Informatics LLC | Privacy Policy