From 1a0f8809a43b2c975dc85cdc04cd6dfdfc619753 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Isidoro=20Nevares=20Mart=C3=ADn?= Date: Tue, 20 Jan 2026 15:07:13 +0100 Subject: [PATCH] Procesado de ficheros --- pom.xml | 8 + .../es/palomafp/aadd/inm/AppProyectosIES.java | 59 +++++-- .../palomafp/aadd/inm/dao/IConceptoDAO.java | 18 +++ .../palomafp/aadd/inm/dao/IContinenteDAO.java | 23 --- .../aadd/inm/dao/ICursoProyectoDAO.java | 18 +++ .../aadd/inm/dao/IOperacionesDAOEntidad.java | 18 +++ .../es/palomafp/aadd/inm/dao/IPaisDAO.java | 25 --- .../palomafp/aadd/inm/dao/IProyectoDAO.java | 18 +++ .../inm/dao/hbm/ConceptoDaoHibernate.java | 68 ++++++++ .../inm/dao/hbm/ContinenteDaoHibernate.java | 52 ------ .../dao/hbm/CursoAcademicoDaoHibernate.java | 53 ++++++ .../dao/hbm/CursoProyectoDaoHibernate.java | 71 ++++++++ .../aadd/inm/dao/hbm/PaisDaoHibernate.java | 102 ------------ .../inm/dao/hbm/PatrocinadorDaoHibernate.java | 51 ++++++ .../inm/dao/hbm/ProyectoDaoHibernate.java | 68 ++++++++ .../aadd/inm/dao/jpa/ConceptoDaoJPA.java | 71 ++++++++ .../aadd/inm/dao/jpa/ContinenteDaoJPA.java | 90 ----------- .../inm/dao/jpa/CursoAcademicoDaoJPA.java | 56 +++++++ .../aadd/inm/dao/jpa/CursoProyectoDaoJPA.java | 73 +++++++++ .../palomafp/aadd/inm/dao/jpa/PaisDaoJPA.java | 100 ------------ .../aadd/inm/dao/jpa/PatrocinadorDaoJPA.java | 48 ++++++ .../aadd/inm/dao/jpa/ProyectoDaoJPA.java | 71 ++++++++ .../inm/excepcion/ProyectosIESException.java | 57 +++++++ .../inm/procesador/ProcesadorFicheroCSV.java | 38 +++++ .../inm/procesador/ProcesadorFicheroJSON.java | 105 ++++++++++++ .../inm/procesador/ProcesadorFicheroXML.java | 153 ++++++++++++++++++ .../inm/procesador/ProcesadorFicheros.java | 59 ------- .../es/palomafp/aadd/inm/vo/Concepto.java | 2 + .../palomafp/aadd/inm/vo/CursoAcademico.java | 2 + .../palomafp/aadd/inm/vo/CursoProyecto.java | 2 + .../java/es/palomafp/aadd/inm/vo/Gasto.java | 2 + .../java/es/palomafp/aadd/inm/vo/Ingreso.java | 2 + .../es/palomafp/aadd/inm/vo/Patrocinador.java | 2 + .../es/palomafp/aadd/inm/vo/Proyecto.java | 2 + src/main/resources/hibernate.cfg.xml | 2 +- 35 files changed, 1125 insertions(+), 464 deletions(-) create mode 100644 src/main/java/es/palomafp/aadd/inm/dao/IConceptoDAO.java delete mode 100644 src/main/java/es/palomafp/aadd/inm/dao/IContinenteDAO.java create mode 100644 src/main/java/es/palomafp/aadd/inm/dao/ICursoProyectoDAO.java create mode 100644 src/main/java/es/palomafp/aadd/inm/dao/IOperacionesDAOEntidad.java delete mode 100644 src/main/java/es/palomafp/aadd/inm/dao/IPaisDAO.java create mode 100644 src/main/java/es/palomafp/aadd/inm/dao/IProyectoDAO.java create mode 100644 src/main/java/es/palomafp/aadd/inm/dao/hbm/ConceptoDaoHibernate.java delete mode 100644 src/main/java/es/palomafp/aadd/inm/dao/hbm/ContinenteDaoHibernate.java create mode 100644 src/main/java/es/palomafp/aadd/inm/dao/hbm/CursoAcademicoDaoHibernate.java create mode 100644 src/main/java/es/palomafp/aadd/inm/dao/hbm/CursoProyectoDaoHibernate.java delete mode 100644 src/main/java/es/palomafp/aadd/inm/dao/hbm/PaisDaoHibernate.java create mode 100644 src/main/java/es/palomafp/aadd/inm/dao/hbm/PatrocinadorDaoHibernate.java create mode 100644 src/main/java/es/palomafp/aadd/inm/dao/hbm/ProyectoDaoHibernate.java create mode 100644 src/main/java/es/palomafp/aadd/inm/dao/jpa/ConceptoDaoJPA.java delete mode 100644 src/main/java/es/palomafp/aadd/inm/dao/jpa/ContinenteDaoJPA.java create mode 100644 src/main/java/es/palomafp/aadd/inm/dao/jpa/CursoAcademicoDaoJPA.java create mode 100644 src/main/java/es/palomafp/aadd/inm/dao/jpa/CursoProyectoDaoJPA.java delete mode 100644 src/main/java/es/palomafp/aadd/inm/dao/jpa/PaisDaoJPA.java create mode 100644 src/main/java/es/palomafp/aadd/inm/dao/jpa/PatrocinadorDaoJPA.java create mode 100644 src/main/java/es/palomafp/aadd/inm/dao/jpa/ProyectoDaoJPA.java create mode 100644 src/main/java/es/palomafp/aadd/inm/excepcion/ProyectosIESException.java create mode 100644 src/main/java/es/palomafp/aadd/inm/procesador/ProcesadorFicheroCSV.java create mode 100644 src/main/java/es/palomafp/aadd/inm/procesador/ProcesadorFicheroJSON.java create mode 100644 src/main/java/es/palomafp/aadd/inm/procesador/ProcesadorFicheroXML.java delete mode 100644 src/main/java/es/palomafp/aadd/inm/procesador/ProcesadorFicheros.java diff --git a/pom.xml b/pom.xml index 621d6aa..cdb6cbf 100644 --- a/pom.xml +++ b/pom.xml @@ -50,6 +50,14 @@ 42.7.9 + + + org.projectlombok + lombok + 1.18.42 + compile + + \ No newline at end of file diff --git a/src/main/java/es/palomafp/aadd/inm/AppProyectosIES.java b/src/main/java/es/palomafp/aadd/inm/AppProyectosIES.java index 623c5ae..387db6a 100644 --- a/src/main/java/es/palomafp/aadd/inm/AppProyectosIES.java +++ b/src/main/java/es/palomafp/aadd/inm/AppProyectosIES.java @@ -1,6 +1,10 @@ package es.palomafp.aadd.inm; -import es.palomafp.aadd.inm.procesador.ProcesadorFicheros; +import es.palomafp.aadd.inm.excepcion.ProyectosIESException; +import es.palomafp.aadd.inm.gestor.GestorSesionesHibernate; +import es.palomafp.aadd.inm.procesador.ProcesadorFicheroCSV; +import es.palomafp.aadd.inm.procesador.ProcesadorFicheroJSON; +import es.palomafp.aadd.inm.procesador.ProcesadorFicheroXML; /** * @@ -16,18 +20,49 @@ public class AppProyectosIES { AppProyectosIES app = new AppProyectosIES(); // Generar la estructura de la base de datos en PostgreSQL - //GestorSesionesHibernate.getSession(); - - app.procesarFicheros(); + // GestorSesionesHibernate.getSession(); + + try { + app.procesarFicheros(); + } catch (ProyectosIESException e) { + String mensajeError = "Error en la clase %s al realizar una operación de %s"; + String operacion = "Operación desconocida"; + int codigoError = e.getCodigoError(); + switch (codigoError) { + case ProyectosIESException.ERROR_GESTION_CONEXION: + operacion = "Gestión de Conexión"; + break; + case ProyectosIESException.ERROR_CONSULTA: + operacion = "Consulta"; + break; + case ProyectosIESException.ERROR_INSERCION: + operacion = "Inserción"; + break; + case ProyectosIESException.ERROR_BORRADO: + operacion = "Borrado"; + break; + case ProyectosIESException.ERROR_ACTUALIZACION: + operacion = "Actualización"; + break; + } + mensajeError = String.format(mensajeError, e.getClaseOrigen().getName(), operacion); + System.out.println(mensajeError); + e.printStackTrace(); + } + } - private void procesarFicheros() { - ProcesadorFicheros procesador = new ProcesadorFicheros(); - - procesador.procesarFicheroXMLCatalogos(); - - procesador.procesarFicheroJSONGastos(); - - procesador.procesarFicheroCSVIngresos(); + private void procesarFicheros() throws ProyectosIESException { + // Procesar datos de catálogos + ProcesadorFicheroXML procesadorFicheroXML = new ProcesadorFicheroXML(); + procesadorFicheroXML.procesarFicheroXMLCatalogos(); + + // Procesar datos de Gastos + ProcesadorFicheroJSON procesadorFicheroJSON = new ProcesadorFicheroJSON(); + procesadorFicheroJSON.procesarFicheroJSONGastos(); + + // Procesar datos de Ingresos + ProcesadorFicheroCSV procesadorFicheroCSV = new ProcesadorFicheroCSV(); + procesadorFicheroCSV.procesarFicheroCSVIngresos(); } } \ No newline at end of file diff --git a/src/main/java/es/palomafp/aadd/inm/dao/IConceptoDAO.java b/src/main/java/es/palomafp/aadd/inm/dao/IConceptoDAO.java new file mode 100644 index 0000000..f158298 --- /dev/null +++ b/src/main/java/es/palomafp/aadd/inm/dao/IConceptoDAO.java @@ -0,0 +1,18 @@ +package es.palomafp.aadd.inm.dao; + +import es.palomafp.aadd.inm.excepcion.ProyectosIESException; +import es.palomafp.aadd.inm.vo.Concepto; + +/** + * + * IProyectoDAO: Clase que realiza .... + * @author Isidoro Nevares Martín - IES Virgen de la Paloma + * @date 20 ene 2026 + * + * + */ + +public interface IConceptoDAO extends IOperacionesDAOEntidad { + Concepto obtenerConceptoPorNombre(String nombreConcepto) throws ProyectosIESException; +} + diff --git a/src/main/java/es/palomafp/aadd/inm/dao/IContinenteDAO.java b/src/main/java/es/palomafp/aadd/inm/dao/IContinenteDAO.java deleted file mode 100644 index fa1e565..0000000 --- a/src/main/java/es/palomafp/aadd/inm/dao/IContinenteDAO.java +++ /dev/null @@ -1,23 +0,0 @@ -package es.palomafp.aadd.inm.dao; - -import java.util.List; - -import es.palomafp.aadd.inm.vo.Patrocinador; - -/** - * - * IContinenteDAO: Interfaz que define las operaciones de acceso a datos para - * Continente. - * - * @author Isidoro Nevares Martín - IES Virgen de la Paloma - * @date 31 oct 2025 - */ -public interface IContinenteDAO { - Patrocinador obtenerContinentePorID(String codigo); - - List obtenerListaContientes(); - - void crearContinente(Patrocinador continente); - - void actualizarContinente(Patrocinador continente); -} diff --git a/src/main/java/es/palomafp/aadd/inm/dao/ICursoProyectoDAO.java b/src/main/java/es/palomafp/aadd/inm/dao/ICursoProyectoDAO.java new file mode 100644 index 0000000..27ba7d0 --- /dev/null +++ b/src/main/java/es/palomafp/aadd/inm/dao/ICursoProyectoDAO.java @@ -0,0 +1,18 @@ +package es.palomafp.aadd.inm.dao; + +import es.palomafp.aadd.inm.excepcion.ProyectosIESException; +import es.palomafp.aadd.inm.vo.CursoProyecto; + +/** + * + * IProyectoDAO: Clase que realiza .... + * @author Isidoro Nevares Martín - IES Virgen de la Paloma + * @date 20 ene 2026 + * + * + */ + +public interface ICursoProyectoDAO extends IOperacionesDAOEntidad { + CursoProyecto obtenerCursoProyectoPorCursoYProyecto(String codigoCursoAcademico, Integer idProyecto) throws ProyectosIESException; +} + diff --git a/src/main/java/es/palomafp/aadd/inm/dao/IOperacionesDAOEntidad.java b/src/main/java/es/palomafp/aadd/inm/dao/IOperacionesDAOEntidad.java new file mode 100644 index 0000000..e69fee9 --- /dev/null +++ b/src/main/java/es/palomafp/aadd/inm/dao/IOperacionesDAOEntidad.java @@ -0,0 +1,18 @@ +package es.palomafp.aadd.inm.dao; + +import es.palomafp.aadd.inm.excepcion.ProyectosIESException; + +/** + * + * IOperacionesBasicas: Clase que realiza .... + * @author Isidoro Nevares Martín - IES Virgen de la Paloma + * @date 14 dic 2025 + * + * + */ + +public interface IOperacionesDAOEntidad { + T obtenerEntidadPorID(ID clave) throws ProyectosIESException; + void crearEntidad(T entidad) throws ProyectosIESException; +} + diff --git a/src/main/java/es/palomafp/aadd/inm/dao/IPaisDAO.java b/src/main/java/es/palomafp/aadd/inm/dao/IPaisDAO.java deleted file mode 100644 index 5ed765a..0000000 --- a/src/main/java/es/palomafp/aadd/inm/dao/IPaisDAO.java +++ /dev/null @@ -1,25 +0,0 @@ -package es.palomafp.aadd.inm.dao; - -import java.util.List; - -import es.palomafp.aadd.inm.vo.Gasto; - -/** - * - * IPaisDAO: Interfaz que define las operaciones de acceso a datos para País. - * - * @author Isidoro Nevares Martín - IES Virgen de la Paloma - * @date 31 oct 2025 - */ -public interface IPaisDAO { - Gasto obtenerPaisPorID(int identificador); - - List obtenerListaPaises(); - - void crearPais(Gasto pais); - - void actualizarPais(Gasto pais); - - Gasto obtenerPaisPorNombre(String nombre); - -} diff --git a/src/main/java/es/palomafp/aadd/inm/dao/IProyectoDAO.java b/src/main/java/es/palomafp/aadd/inm/dao/IProyectoDAO.java new file mode 100644 index 0000000..14b8f09 --- /dev/null +++ b/src/main/java/es/palomafp/aadd/inm/dao/IProyectoDAO.java @@ -0,0 +1,18 @@ +package es.palomafp.aadd.inm.dao; + +import es.palomafp.aadd.inm.excepcion.ProyectosIESException; +import es.palomafp.aadd.inm.vo.Proyecto; + +/** + * + * IProyectoDAO: Clase que realiza .... + * @author Isidoro Nevares Martín - IES Virgen de la Paloma + * @date 20 ene 2026 + * + * + */ + +public interface IProyectoDAO extends IOperacionesDAOEntidad { + Proyecto obtenerProyectoPorNombre(String nombreProyecto) throws ProyectosIESException; +} + diff --git a/src/main/java/es/palomafp/aadd/inm/dao/hbm/ConceptoDaoHibernate.java b/src/main/java/es/palomafp/aadd/inm/dao/hbm/ConceptoDaoHibernate.java new file mode 100644 index 0000000..ee0ac89 --- /dev/null +++ b/src/main/java/es/palomafp/aadd/inm/dao/hbm/ConceptoDaoHibernate.java @@ -0,0 +1,68 @@ +package es.palomafp.aadd.inm.dao.hbm; + +import org.hibernate.Session; +import org.hibernate.Transaction; +import org.hibernate.query.SelectionQuery; + +import es.palomafp.aadd.inm.dao.IConceptoDAO; +import es.palomafp.aadd.inm.excepcion.ProyectosIESException; +import es.palomafp.aadd.inm.gestor.GestorSesionesHibernate; +import es.palomafp.aadd.inm.vo.Concepto; + +/** + * + * ConceptoDaoHibernate: Clase que implementa el interfaz IOperacionesDAOEntidad + * + * @author Isidoro Nevares Martín - IES Virgen de la Paloma + * @date 31 oct 2025 + */ +public class ConceptoDaoHibernate implements IConceptoDAO{ + + @Override + public void crearEntidad(Concepto entidad) throws ProyectosIESException { + Transaction transaccion = null; + Session sesion = null; + + try { + sesion = GestorSesionesHibernate.getSession(); + transaccion = sesion.beginTransaction(); + + sesion.persist(entidad); + + transaccion.commit(); + } catch (Exception e) { + if (transaccion != null && transaccion.isActive()) { + transaccion.rollback(); + } + throw new ProyectosIESException(e, this.getClass(), ProyectosIESException.ERROR_INSERCION); + } finally { + if (sesion != null) { + sesion.close(); + } + } + + } + + @Override + public Concepto obtenerEntidadPorID(Integer clave) throws ProyectosIESException { + // TODO Auto-generated method stub + return null; + } + + @Override + public Concepto obtenerConceptoPorNombre(String nombreConcepto) throws ProyectosIESException { + Concepto concepto = null; + String sentenciaHQL = "SELECT c FROM Concepto c WHERE c.nombre = :nombre"; + + // try con recursos "cerrables": Session + try (Session sesion = GestorSesionesHibernate.getSession();) { + SelectionQuery sentenciaConsulta = sesion.createSelectionQuery(sentenciaHQL, Concepto.class); + sentenciaConsulta.setParameter("nombre", nombreConcepto); + + concepto = sentenciaConsulta.getSingleResultOrNull(); + } catch (Exception e) { + throw new ProyectosIESException(e, this.getClass(), ProyectosIESException.ERROR_CONSULTA); + } + return concepto; + } +} diff --git a/src/main/java/es/palomafp/aadd/inm/dao/hbm/ContinenteDaoHibernate.java b/src/main/java/es/palomafp/aadd/inm/dao/hbm/ContinenteDaoHibernate.java deleted file mode 100644 index 95717f1..0000000 --- a/src/main/java/es/palomafp/aadd/inm/dao/hbm/ContinenteDaoHibernate.java +++ /dev/null @@ -1,52 +0,0 @@ -package es.palomafp.aadd.inm.dao.hbm; - -import java.util.List; - -import org.hibernate.Session; -import org.hibernate.query.SelectionQuery; - -import es.palomafp.aadd.inm.dao.IContinenteDAO; -import es.palomafp.aadd.inm.gestor.GestorSesionesHibernate; -import es.palomafp.aadd.inm.vo.Patrocinador; - -/** - * - * ContinenteDaoJDBC: Clase que implementa el interfaz IContinenteDAO - * - * @author Isidoro Nevares Martín - IES Virgen de la Paloma - * @date 31 oct 2025 - */ -public class ContinenteDaoHibernate implements IContinenteDAO { - - @Override - public List obtenerListaContientes() { - List listaContinentes = null; - String sentenciaHQL = """ - SELECT c - FROM Continente c - """; - // try con recursos "cerrables": Session - try (Session sesion = GestorSesionesHibernate.getSession();) { - SelectionQuery sentenciaConsulta = sesion.createSelectionQuery(sentenciaHQL, Patrocinador.class); - listaContinentes = sentenciaConsulta.getResultList(); - - } catch (Exception e) { - e.printStackTrace(); - } - return listaContinentes; - - } - - @Override - public void crearContinente(Patrocinador continente) { - } - - @Override - public Patrocinador obtenerContinentePorID(String codigo) { - return null; - } - - @Override - public void actualizarContinente(Patrocinador continente) { - } -} diff --git a/src/main/java/es/palomafp/aadd/inm/dao/hbm/CursoAcademicoDaoHibernate.java b/src/main/java/es/palomafp/aadd/inm/dao/hbm/CursoAcademicoDaoHibernate.java new file mode 100644 index 0000000..a1d40c5 --- /dev/null +++ b/src/main/java/es/palomafp/aadd/inm/dao/hbm/CursoAcademicoDaoHibernate.java @@ -0,0 +1,53 @@ +package es.palomafp.aadd.inm.dao.hbm; + +import org.hibernate.Session; +import org.hibernate.Transaction; + +import es.palomafp.aadd.inm.dao.IOperacionesDAOEntidad; +import es.palomafp.aadd.inm.excepcion.ProyectosIESException; +import es.palomafp.aadd.inm.gestor.GestorSesionesHibernate; +import es.palomafp.aadd.inm.vo.CursoAcademico; + +/** + * + * CursoAcademicoDaoHibernate: Clase que implementa el interfaz + * IOperacionesDAOEntidad + * + * @author Isidoro Nevares Martín - IES Virgen de la Paloma + * @date 31 oct 2025 + */ +public class CursoAcademicoDaoHibernate implements IOperacionesDAOEntidad{ + + @Override + public void crearEntidad(CursoAcademico entidad) throws ProyectosIESException { + Transaction transaccion = null; + Session sesion = null; + + try { + sesion = GestorSesionesHibernate.getSession(); + transaccion = sesion.beginTransaction(); + + sesion.persist(entidad); + + transaccion.commit(); + } catch (Exception e) { + if (transaccion != null && transaccion.isActive()) { + transaccion.rollback(); + } + throw new ProyectosIESException(e, this.getClass(), ProyectosIESException.ERROR_INSERCION); + } finally { + if (sesion != null) { + sesion.close(); + } + } + + } + + @Override + public CursoAcademico obtenerEntidadPorID(String clave) throws ProyectosIESException { + // TODO Auto-generated method stub + return null; + } + + +} diff --git a/src/main/java/es/palomafp/aadd/inm/dao/hbm/CursoProyectoDaoHibernate.java b/src/main/java/es/palomafp/aadd/inm/dao/hbm/CursoProyectoDaoHibernate.java new file mode 100644 index 0000000..5b70290 --- /dev/null +++ b/src/main/java/es/palomafp/aadd/inm/dao/hbm/CursoProyectoDaoHibernate.java @@ -0,0 +1,71 @@ +package es.palomafp.aadd.inm.dao.hbm; + +import org.hibernate.Session; +import org.hibernate.Transaction; +import org.hibernate.query.SelectionQuery; + +import es.palomafp.aadd.inm.dao.ICursoProyectoDAO; +import es.palomafp.aadd.inm.excepcion.ProyectosIESException; +import es.palomafp.aadd.inm.gestor.GestorSesionesHibernate; +import es.palomafp.aadd.inm.vo.CursoProyecto; + +/** + * + * CursoProyectoDaoHibernate: Clase que implementa el interfaz + * IOperacionesDAOEntidad + * + * @author Isidoro Nevares Martín - IES Virgen de la Paloma + * @date 31 oct 2025 + */ +public class CursoProyectoDaoHibernate implements ICursoProyectoDAO { + + @Override + public void crearEntidad(CursoProyecto entidad) throws ProyectosIESException { + Transaction transaccion = null; + Session sesion = null; + + try { + sesion = GestorSesionesHibernate.getSession(); + transaccion = sesion.beginTransaction(); + + sesion.persist(entidad); + + transaccion.commit(); + } catch (Exception e) { + if (transaccion != null && transaccion.isActive()) { + transaccion.rollback(); + } + throw new ProyectosIESException(e, this.getClass(), ProyectosIESException.ERROR_INSERCION); + } finally { + if (sesion != null) { + sesion.close(); + } + } + + } + + @Override + public CursoProyecto obtenerEntidadPorID(Integer clave) throws ProyectosIESException { + // TODO Auto-generated method stub + return null; + } + + @Override + public CursoProyecto obtenerCursoProyectoPorCursoYProyecto(String codigoCursoAcademico, Integer idProyecto) throws ProyectosIESException { + CursoProyecto cursoProyecto = null; + String sentenciaHQL = "SELECT cp FROM CursoProyecto cp WHERE cp.cursoAcademico.codigo= :codigo and cp.proyecto.identificador= :idProyecto"; + + // try con recursos "cerrables": Session + try (Session sesion = GestorSesionesHibernate.getSession();) { + SelectionQuery sentenciaConsulta = sesion.createSelectionQuery(sentenciaHQL, CursoProyecto.class); + sentenciaConsulta.setParameter("codigo", codigoCursoAcademico); + sentenciaConsulta.setParameter("idProyecto", idProyecto); + + cursoProyecto = sentenciaConsulta.getSingleResultOrNull(); + } catch (Exception e) { + throw new ProyectosIESException(e, this.getClass(), ProyectosIESException.ERROR_CONSULTA); + } + return cursoProyecto; + } + +} diff --git a/src/main/java/es/palomafp/aadd/inm/dao/hbm/PaisDaoHibernate.java b/src/main/java/es/palomafp/aadd/inm/dao/hbm/PaisDaoHibernate.java deleted file mode 100644 index 60104f9..0000000 --- a/src/main/java/es/palomafp/aadd/inm/dao/hbm/PaisDaoHibernate.java +++ /dev/null @@ -1,102 +0,0 @@ -package es.palomafp.aadd.inm.dao.hbm; - -import java.util.List; - -import org.hibernate.Session; -import org.hibernate.Transaction; -import org.hibernate.query.SelectionQuery; - -import es.palomafp.aadd.inm.dao.IPaisDAO; -import es.palomafp.aadd.inm.gestor.GestorSesionesHibernate; -import es.palomafp.aadd.inm.vo.Gasto; - -/** - * - * PaisDaoJDBC: Clase que implementa el interfaz IPaisDAO - * - * @author Isidoro Nevares Martín - IES Virgen de la Paloma - * @date 31 oct 2025 - */ -public class PaisDaoHibernate implements IPaisDAO { - - @Override - public List obtenerListaPaises() { - List listaPaises = null; - String sentenciaHQL = """ - SELECT p - FROM Pais p - """; - - // try con recursos "cerrables": Session - try (Session sesion = GestorSesionesHibernate.getSession();) { - - SelectionQuery sentenciaConsulta = sesion.createSelectionQuery(sentenciaHQL, Gasto.class); - listaPaises = sentenciaConsulta.getResultList(); - - } catch (Exception e) { - e.printStackTrace(); - } - return listaPaises; - } - - @Override - public void actualizarPais(Gasto pais) { - Transaction transaccion = null; - Session sesion = null; - - try { - sesion = GestorSesionesHibernate.getSession(); - transaccion = sesion.beginTransaction(); - - if (!sesion.contains(pais)) - sesion.merge(pais); - - transaccion.commit(); - } catch (Exception e) { - if (transaccion != null && transaccion.isActive()) { - transaccion.rollback(); - } - e.printStackTrace(); - } finally { - if (sesion != null) { - sesion.close(); - } - } - } - - @Override - public Gasto obtenerPaisPorID(int identificador) { - Gasto pais = null; - - return pais; - } - - @Override - public void crearPais(Gasto pais) { - // TODO Auto-generated method stub - - } - - @Override - public Gasto obtenerPaisPorNombre(String nombre) { - Gasto pais = null; - String sentenciaHQL = """ - SELECT p - FROM Pais p - where p.nombrePais = :nombre - """; - - // try con recursos "cerrables": Session - try (Session sesion = GestorSesionesHibernate.getSession();) { - - SelectionQuery sentenciaConsulta = sesion.createSelectionQuery(sentenciaHQL, Gasto.class); - sentenciaConsulta.setParameter("nombre", nombre); - pais = sentenciaConsulta.getSingleResult(); - - } catch (Exception e) { - e.printStackTrace(); - } - return pais; - } - -} diff --git a/src/main/java/es/palomafp/aadd/inm/dao/hbm/PatrocinadorDaoHibernate.java b/src/main/java/es/palomafp/aadd/inm/dao/hbm/PatrocinadorDaoHibernate.java new file mode 100644 index 0000000..5a2b79f --- /dev/null +++ b/src/main/java/es/palomafp/aadd/inm/dao/hbm/PatrocinadorDaoHibernate.java @@ -0,0 +1,51 @@ +package es.palomafp.aadd.inm.dao.hbm; + +import org.hibernate.Session; +import org.hibernate.Transaction; + +import es.palomafp.aadd.inm.dao.IOperacionesDAOEntidad; +import es.palomafp.aadd.inm.excepcion.ProyectosIESException; +import es.palomafp.aadd.inm.gestor.GestorSesionesHibernate; +import es.palomafp.aadd.inm.vo.Patrocinador; + +/** + * + * ConceptoDaoHibernate: Clase que implementa el interfaz IOperacionesDAOEntidad + * + * @author Isidoro Nevares Martín - IES Virgen de la Paloma + * @date 31 oct 2025 + */ +public class PatrocinadorDaoHibernate implements IOperacionesDAOEntidad{ + + @Override + public void crearEntidad(Patrocinador entidad) throws ProyectosIESException { + Transaction transaccion = null; + Session sesion = null; + + try { + sesion = GestorSesionesHibernate.getSession(); + transaccion = sesion.beginTransaction(); + + sesion.persist(entidad); + + transaccion.commit(); + } catch (Exception e) { + if (transaccion != null && transaccion.isActive()) { + transaccion.rollback(); + } + throw new ProyectosIESException(e, this.getClass(), ProyectosIESException.ERROR_INSERCION); + } finally { + if (sesion != null) { + sesion.close(); + } + } + + } + + @Override + public Patrocinador obtenerEntidadPorID(Integer clave) throws ProyectosIESException { + // TODO Auto-generated method stub + return null; + } + +} diff --git a/src/main/java/es/palomafp/aadd/inm/dao/hbm/ProyectoDaoHibernate.java b/src/main/java/es/palomafp/aadd/inm/dao/hbm/ProyectoDaoHibernate.java new file mode 100644 index 0000000..86de54e --- /dev/null +++ b/src/main/java/es/palomafp/aadd/inm/dao/hbm/ProyectoDaoHibernate.java @@ -0,0 +1,68 @@ +package es.palomafp.aadd.inm.dao.hbm; + +import org.hibernate.Session; +import org.hibernate.Transaction; +import org.hibernate.query.SelectionQuery; + +import es.palomafp.aadd.inm.dao.IProyectoDAO; +import es.palomafp.aadd.inm.excepcion.ProyectosIESException; +import es.palomafp.aadd.inm.gestor.GestorSesionesHibernate; +import es.palomafp.aadd.inm.vo.Proyecto; + +/** + * + * ConceptoDaoHibernate: Clase que implementa el interfaz IOperacionesDAOEntidad + * + * @author Isidoro Nevares Martín - IES Virgen de la Paloma + * @date 31 oct 2025 + */ +public class ProyectoDaoHibernate implements IProyectoDAO { + + @Override + public void crearEntidad(Proyecto entidad) throws ProyectosIESException { + Transaction transaccion = null; + Session sesion = null; + + try { + sesion = GestorSesionesHibernate.getSession(); + transaccion = sesion.beginTransaction(); + + sesion.persist(entidad); + + transaccion.commit(); + } catch (Exception e) { + if (transaccion != null && transaccion.isActive()) { + transaccion.rollback(); + } + throw new ProyectosIESException(e, this.getClass(), ProyectosIESException.ERROR_INSERCION); + } finally { + if (sesion != null) { + sesion.close(); + } + } + + } + + @Override + public Proyecto obtenerProyectoPorNombre(String nombreProyecto) throws ProyectosIESException { + Proyecto proyecto = null; + String sentenciaHQL = "SELECT p FROM Proyecto p WHERE p.nombre = :nombre"; + + // try con recursos "cerrables": Session + try (Session sesion = GestorSesionesHibernate.getSession();) { + SelectionQuery sentenciaConsulta = sesion.createSelectionQuery(sentenciaHQL, Proyecto.class); + sentenciaConsulta.setParameter("nombre", nombreProyecto); + + proyecto = sentenciaConsulta.getSingleResultOrNull(); + } catch (Exception e) { + throw new ProyectosIESException(e, this.getClass(), ProyectosIESException.ERROR_CONSULTA); + } + return proyecto; + } + + @Override + public Proyecto obtenerEntidadPorID(Integer clave) throws ProyectosIESException { + // TODO Auto-generated method stub + return null; + } +} diff --git a/src/main/java/es/palomafp/aadd/inm/dao/jpa/ConceptoDaoJPA.java b/src/main/java/es/palomafp/aadd/inm/dao/jpa/ConceptoDaoJPA.java new file mode 100644 index 0000000..7e71cf8 --- /dev/null +++ b/src/main/java/es/palomafp/aadd/inm/dao/jpa/ConceptoDaoJPA.java @@ -0,0 +1,71 @@ +package es.palomafp.aadd.inm.dao.jpa; + +import es.palomafp.aadd.inm.dao.IConceptoDAO; +import es.palomafp.aadd.inm.excepcion.ProyectosIESException; +import es.palomafp.aadd.inm.gestor.GestorEntityManagerJPA; +import es.palomafp.aadd.inm.vo.Concepto; +import jakarta.persistence.EntityManager; +import jakarta.persistence.EntityTransaction; +import jakarta.persistence.TypedQuery; + +/** + * + * ConceptoDaoJPA: Clase que implementa el interfaz IOperacionesDAOEntidad + * + * @author Isidoro Nevares Martín - IES Virgen de la Paloma + * @date 31 oct 2025 + */ +public class ConceptoDaoJPA implements IConceptoDAO { + @Override + public void crearEntidad(Concepto entidad) throws ProyectosIESException{ + EntityManager gestorEntidades= null; + EntityTransaction transaccion = null; + + try { + gestorEntidades = GestorEntityManagerJPA.getEntityManager(); + transaccion = gestorEntidades.getTransaction(); + transaccion .begin(); + + gestorEntidades.persist(entidad); + + transaccion.commit(); + } catch (Exception e) { + if (transaccion != null && transaccion.isActive()) { + transaccion.rollback(); + } + throw new ProyectosIESException(e, this.getClass(), ProyectosIESException.ERROR_INSERCION); + } finally { + if (gestorEntidades != null) { + gestorEntidades.close(); + } + } + } + + @Override + public Concepto obtenerEntidadPorID(Integer clave) throws ProyectosIESException { + // TODO Auto-generated method stub + return null; + } + + @Override + public Concepto obtenerConceptoPorNombre(String nombreConcepto) throws ProyectosIESException { + Concepto concepto = null; + + String sentenciaJPQL = """ + SELECT p FROM Concepto c + WHERE c.nombre= :nombre + """; + + // try con recursos "cerrables": Session + try (EntityManager entityManager = GestorEntityManagerJPA.getEntityManager();) { + TypedQuery query = entityManager.createQuery(sentenciaJPQL, Concepto.class); + query.setParameter("nombre", nombreConcepto); + + concepto = query.getSingleResult(); + } catch (Exception e) { + throw new ProyectosIESException(e, this.getClass(), ProyectosIESException.ERROR_CONSULTA); + } + + return concepto; + } +} diff --git a/src/main/java/es/palomafp/aadd/inm/dao/jpa/ContinenteDaoJPA.java b/src/main/java/es/palomafp/aadd/inm/dao/jpa/ContinenteDaoJPA.java deleted file mode 100644 index 26b99d4..0000000 --- a/src/main/java/es/palomafp/aadd/inm/dao/jpa/ContinenteDaoJPA.java +++ /dev/null @@ -1,90 +0,0 @@ -package es.palomafp.aadd.inm.dao.jpa; - -import java.util.List; - -import es.palomafp.aadd.inm.dao.IContinenteDAO; -import es.palomafp.aadd.inm.gestor.GestorEntityManagerJPA; -import es.palomafp.aadd.inm.vo.Patrocinador; -import jakarta.persistence.EntityManager; -import jakarta.persistence.EntityTransaction; - -/** - * - * ContinenteDaoJDBC: Clase que implementa el interfaz IContinenteDAO - * - * @author Isidoro Nevares Martín - IES Virgen de la Paloma - * @date 31 oct 2025 - */ -public class ContinenteDaoJPA implements IContinenteDAO { - - @Override - public Patrocinador obtenerContinentePorID(String codigo) { - Patrocinador continente = null; - - // try con recursos "cerrables": Session - try (EntityManager gestorEntidades = GestorEntityManagerJPA.getEntityManager()) { - continente = gestorEntidades.find(Patrocinador.class, codigo); - } catch (Exception e) { - e.printStackTrace(); - } - return continente; - } - - @Override - public void crearContinente(Patrocinador continente) { - EntityManager gestorEntidades= null; - EntityTransaction transaccion = null; - - try { - gestorEntidades = GestorEntityManagerJPA.getEntityManager(); - transaccion = gestorEntidades.getTransaction(); - transaccion .begin(); - - gestorEntidades.persist(continente); - - transaccion.commit(); - } catch (Exception e) { - if (transaccion != null && transaccion.isActive()) { - transaccion.rollback(); - } - e.printStackTrace(); - } finally { - if (gestorEntidades != null) { - gestorEntidades.close(); - } - } - } - - @Override - public void actualizarContinente(Patrocinador continente) { - EntityManager gestorEntidades= null; - EntityTransaction transaccion = null; - - try { - gestorEntidades = GestorEntityManagerJPA.getEntityManager(); - transaccion = gestorEntidades.getTransaction(); - transaccion .begin(); - - if (!gestorEntidades.contains(continente)) - gestorEntidades.merge(continente); - - transaccion.commit(); - } catch (Exception e) { - if (transaccion != null && transaccion.isActive()) { - transaccion.rollback(); - } - e.printStackTrace(); - } finally { - if (gestorEntidades != null) { - gestorEntidades.close(); - } - } - } - - @Override - public List obtenerListaContientes() { - // TODO Auto-generated method stub - return null; - } - -} diff --git a/src/main/java/es/palomafp/aadd/inm/dao/jpa/CursoAcademicoDaoJPA.java b/src/main/java/es/palomafp/aadd/inm/dao/jpa/CursoAcademicoDaoJPA.java new file mode 100644 index 0000000..7dd0541 --- /dev/null +++ b/src/main/java/es/palomafp/aadd/inm/dao/jpa/CursoAcademicoDaoJPA.java @@ -0,0 +1,56 @@ +package es.palomafp.aadd.inm.dao.jpa; + +import es.palomafp.aadd.inm.dao.IOperacionesDAOEntidad; +import es.palomafp.aadd.inm.excepcion.ProyectosIESException; +import es.palomafp.aadd.inm.gestor.GestorEntityManagerJPA; +import es.palomafp.aadd.inm.vo.CursoAcademico; +import jakarta.persistence.EntityManager; +import jakarta.persistence.EntityTransaction; + +/** + * + * CursoAcademicoDaoJPA: Clase que implementa el interfaz IOperacionesDAOEntidad + * + * @author Isidoro Nevares Martín - IES Virgen de la Paloma + * @date 31 oct 2025 + */ +public class CursoAcademicoDaoJPA implements IOperacionesDAOEntidad{ + @Override + public void crearEntidad(CursoAcademico entidad) throws ProyectosIESException { + EntityManager gestorEntidades = null; + EntityTransaction transaccion = null; + + try { + gestorEntidades = GestorEntityManagerJPA.getEntityManager(); + transaccion = gestorEntidades.getTransaction(); + transaccion.begin(); + + gestorEntidades.persist(entidad); + + transaccion.commit(); + } catch (Exception e) { + if (transaccion != null && transaccion.isActive()) { + transaccion.rollback(); + } + throw new ProyectosIESException(e, this.getClass(), ProyectosIESException.ERROR_INSERCION); + } finally { + if (gestorEntidades != null) { + gestorEntidades.close(); + } + } + } + + + @Override + public CursoAcademico obtenerEntidadPorID(String clave) throws ProyectosIESException { + CursoAcademico cursoAcademico = null; + + // try con recursos "cerrables": Session + try (EntityManager entityManager = GestorEntityManagerJPA.getEntityManager();) { + cursoAcademico = entityManager.find(CursoAcademico.class, clave); + } catch (Exception e) { + throw new ProyectosIESException(e, this.getClass(), ProyectosIESException.ERROR_CONSULTA); + } + return cursoAcademico; + } +} diff --git a/src/main/java/es/palomafp/aadd/inm/dao/jpa/CursoProyectoDaoJPA.java b/src/main/java/es/palomafp/aadd/inm/dao/jpa/CursoProyectoDaoJPA.java new file mode 100644 index 0000000..cebddba --- /dev/null +++ b/src/main/java/es/palomafp/aadd/inm/dao/jpa/CursoProyectoDaoJPA.java @@ -0,0 +1,73 @@ +package es.palomafp.aadd.inm.dao.jpa; + +import es.palomafp.aadd.inm.dao.ICursoProyectoDAO; +import es.palomafp.aadd.inm.excepcion.ProyectosIESException; +import es.palomafp.aadd.inm.gestor.GestorEntityManagerJPA; +import es.palomafp.aadd.inm.vo.CursoProyecto; +import jakarta.persistence.EntityManager; +import jakarta.persistence.EntityTransaction; +import jakarta.persistence.TypedQuery; + +/** + * + * CursoProyectoDaoJPA: Clase que implementa el interfaz IOperacionesDAOEntidad + * + * @author Isidoro Nevares Martín - IES Virgen de la Paloma + * @date 31 oct 2025 + */ +public class CursoProyectoDaoJPA implements ICursoProyectoDAO { + @Override + public void crearEntidad(CursoProyecto entidad) throws ProyectosIESException { + EntityManager gestorEntidades = null; + EntityTransaction transaccion = null; + + try { + gestorEntidades = GestorEntityManagerJPA.getEntityManager(); + transaccion = gestorEntidades.getTransaction(); + transaccion.begin(); + + gestorEntidades.persist(entidad); + + transaccion.commit(); + } catch (Exception e) { + if (transaccion != null && transaccion.isActive()) { + transaccion.rollback(); + } + throw new ProyectosIESException(e, this.getClass(), ProyectosIESException.ERROR_INSERCION); + } finally { + if (gestorEntidades != null) { + gestorEntidades.close(); + } + } + } + + @Override + public CursoProyecto obtenerEntidadPorID(Integer clave) throws ProyectosIESException { + return null; + } + + @Override + public CursoProyecto obtenerCursoProyectoPorCursoYProyecto(String codigoCursoAcademico, Integer idProyecto) + throws ProyectosIESException { + CursoProyecto cursoProyecto = null; + + String sentenciaJPQL = """ + SELECT cp FROM CursoProyecto cp + WHERE cp.proyecto.identificador = :idProyecto + AND cp.cursoAcademico.codigo = :codigoCurso + """; + + // try con recursos "cerrables": Session + try (EntityManager entityManager = GestorEntityManagerJPA.getEntityManager();) { + TypedQuery query = entityManager.createQuery(sentenciaJPQL, CursoProyecto.class); + + query.setParameter("idProyecto", idProyecto); + query.setParameter("codigoCurso", codigoCursoAcademico); + + cursoProyecto = query.getSingleResult(); + } catch (Exception e) { + throw new ProyectosIESException(e, this.getClass(), ProyectosIESException.ERROR_CONSULTA); + } + return cursoProyecto; + } +} diff --git a/src/main/java/es/palomafp/aadd/inm/dao/jpa/PaisDaoJPA.java b/src/main/java/es/palomafp/aadd/inm/dao/jpa/PaisDaoJPA.java deleted file mode 100644 index 25108f6..0000000 --- a/src/main/java/es/palomafp/aadd/inm/dao/jpa/PaisDaoJPA.java +++ /dev/null @@ -1,100 +0,0 @@ -package es.palomafp.aadd.inm.dao.jpa; - -import java.util.List; - -import es.palomafp.aadd.inm.dao.IPaisDAO; -import es.palomafp.aadd.inm.gestor.GestorEntityManagerJPA; -import es.palomafp.aadd.inm.vo.Gasto; -import jakarta.persistence.EntityManager; -import jakarta.persistence.EntityTransaction; - -/** - * - * PaisDaoJPA: Clase que implementa el interfaz IPaisDAO - * - * @author Isidoro Nevares Martín - IES Virgen de la Paloma - * @date 31 oct 2025 - */ -public class PaisDaoJPA implements IPaisDAO { - - @Override - public Gasto obtenerPaisPorID(int identificador) { - Gasto pais = null; - - // try con recursos "cerrables": Session - try (EntityManager gestorEntidades = GestorEntityManagerJPA.getEntityManager()) { - pais = gestorEntidades.find(Gasto.class, identificador); - } catch (Exception e) { - e.printStackTrace(); - } - return pais; - - } - - - @Override - public void crearPais(Gasto pais) { - EntityManager gestorEntidades = null; - EntityTransaction transaccion = null; - - try { - gestorEntidades = GestorEntityManagerJPA.getEntityManager(); - transaccion = gestorEntidades.getTransaction(); - transaccion.begin(); - - gestorEntidades.persist(pais); - - transaccion.commit(); - } catch (Exception e) { - if (transaccion != null && transaccion.isActive()) { - transaccion.rollback(); - } - e.printStackTrace(); - } finally { - if (gestorEntidades != null) { - gestorEntidades.close(); - } - } - - } - - @Override - public void actualizarPais(Gasto pais) { - EntityManager gestorEntidades = null; - EntityTransaction transaccion = null; - - try { - gestorEntidades = GestorEntityManagerJPA.getEntityManager(); - transaccion = gestorEntidades.getTransaction(); - transaccion.begin(); - - if (!gestorEntidades.contains(pais)) - gestorEntidades.merge(pais); - - transaccion.commit(); - } catch (Exception e) { - if (transaccion != null && transaccion.isActive()) { - transaccion.rollback(); - } - e.printStackTrace(); - } finally { - if (gestorEntidades != null) { - gestorEntidades.close(); - } - } - } - - @Override - public List obtenerListaPaises() { - // TODO Auto-generated method stub - return null; - } - - - @Override - public Gasto obtenerPaisPorNombre(String nombre) { - // TODO Auto-generated method stub - return null; - } - -} diff --git a/src/main/java/es/palomafp/aadd/inm/dao/jpa/PatrocinadorDaoJPA.java b/src/main/java/es/palomafp/aadd/inm/dao/jpa/PatrocinadorDaoJPA.java new file mode 100644 index 0000000..bda2a17 --- /dev/null +++ b/src/main/java/es/palomafp/aadd/inm/dao/jpa/PatrocinadorDaoJPA.java @@ -0,0 +1,48 @@ +package es.palomafp.aadd.inm.dao.jpa; + +import es.palomafp.aadd.inm.dao.IOperacionesDAOEntidad; +import es.palomafp.aadd.inm.excepcion.ProyectosIESException; +import es.palomafp.aadd.inm.gestor.GestorEntityManagerJPA; +import es.palomafp.aadd.inm.vo.Patrocinador; +import jakarta.persistence.EntityManager; +import jakarta.persistence.EntityTransaction; + +/** + * + * PatrocinadorDaoJPA: Clase que implementa el interfaz IOperacionesDAOEntidad + * + * @author Isidoro Nevares Martín - IES Virgen de la Paloma + * @date 31 oct 2025 + */ +public class PatrocinadorDaoJPA implements IOperacionesDAOEntidad { + @Override + public void crearEntidad(Patrocinador entidad) throws ProyectosIESException{ + EntityManager gestorEntidades= null; + EntityTransaction transaccion = null; + + try { + gestorEntidades = GestorEntityManagerJPA.getEntityManager(); + transaccion = gestorEntidades.getTransaction(); + transaccion .begin(); + + gestorEntidades.persist(entidad); + + transaccion.commit(); + } catch (Exception e) { + if (transaccion != null && transaccion.isActive()) { + transaccion.rollback(); + } + throw new ProyectosIESException(e, this.getClass(), ProyectosIESException.ERROR_INSERCION); + } finally { + if (gestorEntidades != null) { + gestorEntidades.close(); + } + } + } + + @Override + public Patrocinador obtenerEntidadPorID(Integer clave) throws ProyectosIESException { + // TODO Auto-generated method stub + return null; + } +} diff --git a/src/main/java/es/palomafp/aadd/inm/dao/jpa/ProyectoDaoJPA.java b/src/main/java/es/palomafp/aadd/inm/dao/jpa/ProyectoDaoJPA.java new file mode 100644 index 0000000..d85ec07 --- /dev/null +++ b/src/main/java/es/palomafp/aadd/inm/dao/jpa/ProyectoDaoJPA.java @@ -0,0 +1,71 @@ +package es.palomafp.aadd.inm.dao.jpa; + +import es.palomafp.aadd.inm.dao.IProyectoDAO; +import es.palomafp.aadd.inm.excepcion.ProyectosIESException; +import es.palomafp.aadd.inm.gestor.GestorEntityManagerJPA; +import es.palomafp.aadd.inm.vo.Proyecto; +import jakarta.persistence.EntityManager; +import jakarta.persistence.EntityTransaction; +import jakarta.persistence.TypedQuery; + +/** + * + * ConceptoDaoJPA: Clase que implementa el interfaz IOperacionesDAOEntidad + * + * @author Isidoro Nevares Martín - IES Virgen de la Paloma + * @date 31 oct 2025 + */ +public class ProyectoDaoJPA implements IProyectoDAO { + @Override + public void crearEntidad(Proyecto entidad) throws ProyectosIESException{ + EntityManager gestorEntidades= null; + EntityTransaction transaccion = null; + + try { + gestorEntidades = GestorEntityManagerJPA.getEntityManager(); + transaccion = gestorEntidades.getTransaction(); + transaccion .begin(); + + gestorEntidades.persist(entidad); + + transaccion.commit(); + } catch (Exception e) { + if (transaccion != null && transaccion.isActive()) { + transaccion.rollback(); + } + throw new ProyectosIESException(e, this.getClass(), ProyectosIESException.ERROR_INSERCION); + } finally { + if (gestorEntidades != null) { + gestorEntidades.close(); + } + } + } + + @Override + public Proyecto obtenerProyectoPorNombre(String nombreProyecto) throws ProyectosIESException { + Proyecto proyecto = null; + + String sentenciaJPQL = """ + SELECT p FROM Proyecto p + WHERE p.nombre= :nombre + """; + + // try con recursos "cerrables": Session + try (EntityManager entityManager = GestorEntityManagerJPA.getEntityManager();) { + TypedQuery query = entityManager.createQuery(sentenciaJPQL, Proyecto.class); + query.setParameter("nombre", nombreProyecto); + + proyecto = query.getSingleResult(); + } catch (Exception e) { + throw new ProyectosIESException(e, this.getClass(), ProyectosIESException.ERROR_CONSULTA); + } + + return proyecto; + } + + @Override + public Proyecto obtenerEntidadPorID(Integer clave) throws ProyectosIESException { + // TODO Auto-generated method stub + return null; + } +} diff --git a/src/main/java/es/palomafp/aadd/inm/excepcion/ProyectosIESException.java b/src/main/java/es/palomafp/aadd/inm/excepcion/ProyectosIESException.java new file mode 100644 index 0000000..ade98be --- /dev/null +++ b/src/main/java/es/palomafp/aadd/inm/excepcion/ProyectosIESException.java @@ -0,0 +1,57 @@ +package es.palomafp.aadd.inm.excepcion; + +/** + * + * ProyectosIESException: Clase que realiza .... + * @author Isidoro Nevares Martín - IES Virgen de la Paloma + * @date 20 ene 2026 + * + * + */ + +public class ProyectosIESException extends Exception { + /** + * + */ + private static final long serialVersionUID = -7090518753638026268L; + + private int codigoError; + private Class claseOrigen; + + public static final int ERROR_GENERAL=0; + public static final int ERROR_GESTION_CONEXION=1; + public static final int ERROR_CONSULTA=2; + public static final int ERROR_INSERCION=3; + public static final int ERROR_ACTUALIZACION=4; + public static final int ERROR_BORRADO=5; + /** + * + */ + public ProyectosIESException() { + super(); + } + /** + * + */ + public ProyectosIESException(Exception e, Class clase, int codError) { + super(e); + claseOrigen=clase; + codigoError=codError; + } + + + public Class getClaseOrigen() { + return claseOrigen; + } + public void setClaseOrigen(Class claseOrigen) { + this.claseOrigen = claseOrigen; + } + public int getCodigoError() { + return codigoError; + } + public void setCodigoError(int codigoError) { + this.codigoError = codigoError; + } + +} + diff --git a/src/main/java/es/palomafp/aadd/inm/procesador/ProcesadorFicheroCSV.java b/src/main/java/es/palomafp/aadd/inm/procesador/ProcesadorFicheroCSV.java new file mode 100644 index 0000000..f8023e9 --- /dev/null +++ b/src/main/java/es/palomafp/aadd/inm/procesador/ProcesadorFicheroCSV.java @@ -0,0 +1,38 @@ +package es.palomafp.aadd.inm.procesador; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; +import java.io.IOException; + +import es.palomafp.aadd.inm.gestor.GestorFicheroConfiguracion; + +public class ProcesadorFicheroCSV { + + public void procesarFicheroCSVIngresos() { + + String rutaFichero = GestorFicheroConfiguracion.getValorfromClave("ingresos.fichero.csv.ruta"); + File fichero = new File(rutaFichero); + + try (BufferedReader lector = new BufferedReader(new FileReader(fichero));) { + String linea; + + lector.readLine(); // Saltar la cabecera + + while ((linea = lector.readLine()) != null) { + System.out.println("linea:" + linea); + // Procesar la línea leída + String[] campos = linea.split(","); + // Suponiendo que el CSV tiene dos columnas: id, ingreso + String id = campos[0]; + String ingreso = campos[1]; + // Aquí iría la lógica para procesar cada línea + } + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + +} diff --git a/src/main/java/es/palomafp/aadd/inm/procesador/ProcesadorFicheroJSON.java b/src/main/java/es/palomafp/aadd/inm/procesador/ProcesadorFicheroJSON.java new file mode 100644 index 0000000..1fe7695 --- /dev/null +++ b/src/main/java/es/palomafp/aadd/inm/procesador/ProcesadorFicheroJSON.java @@ -0,0 +1,105 @@ +package es.palomafp.aadd.inm.procesador; + +import java.io.File; +import java.time.LocalDate; + +import es.palomafp.aadd.inm.dao.IConceptoDAO; +import es.palomafp.aadd.inm.dao.ICursoProyectoDAO; +import es.palomafp.aadd.inm.dao.IOperacionesDAOEntidad; +import es.palomafp.aadd.inm.dao.IProyectoDAO; +import es.palomafp.aadd.inm.dao.hbm.ConceptoDaoHibernate; +import es.palomafp.aadd.inm.dao.hbm.CursoProyectoDaoHibernate; +import es.palomafp.aadd.inm.dao.hbm.ProyectoDaoHibernate; +import es.palomafp.aadd.inm.dao.jpa.CursoProyectoDaoJPA; +import es.palomafp.aadd.inm.excepcion.ProyectosIESException; +import es.palomafp.aadd.inm.gestor.GestorFicheroConfiguracion; +import es.palomafp.aadd.inm.vo.Concepto; +import es.palomafp.aadd.inm.vo.CursoAcademico; +import es.palomafp.aadd.inm.vo.CursoProyecto; +import es.palomafp.aadd.inm.vo.Gasto; +import es.palomafp.aadd.inm.vo.Proyecto; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ArrayNode; + +public class ProcesadorFicheroJSON { + + + public void procesarFicheroJSONGastos() throws ProyectosIESException { + String rutaFichero = GestorFicheroConfiguracion.getValorfromClave("gastos.fichero.json.ruta"); + File fichero = new File(rutaFichero); + + // Se asume que la información de Paises es correcta y ya existe en la BD + ObjectMapper mapper = new ObjectMapper(); + JsonNode root = mapper.readTree(fichero); + + String codigoCurso= root.get("curso").asString(); + String nombreProyecto = root.get("proyecto").asString(); + + CursoAcademico cursoAcademico = new CursoAcademico(); + cursoAcademico.setCodigo(codigoCurso); + IProyectoDAO proyectoDAO = new ProyectoDaoHibernate(); + Proyecto proyecto = proyectoDAO.obtenerProyectoPorNombre(nombreProyecto); + + CursoProyecto cursoProyecto = new CursoProyecto(); + cursoProyecto.setCursoAcademico(cursoAcademico); + cursoProyecto.setProyecto(proyecto); + + // Inserción en PostgreSQL con Hibernate + ICursoProyectoDAO operacionesDAOCursoProyecto = new CursoProyectoDaoHibernate(); + operacionesDAOCursoProyecto.crearEntidad(cursoProyecto); + // Inserción en ObjectDB con JPA + operacionesDAOCursoProyecto = new CursoProyectoDaoJPA(); + operacionesDAOCursoProyecto.crearEntidad(cursoProyecto); + + // Se obtiene el CursoProyecto ya persistido + cursoProyecto = operacionesDAOCursoProyecto.obtenerCursoProyectoPorCursoYProyecto(codigoCurso, proyecto.getIdentificador()); + + JsonNode nodoGastos= root.get("gastos"); + // Se obtienen los nodos Gasto + ArrayNode nodosGasto= convertirJsonNodeEnArrayNode(nodoGastos.get("gasto")); + + for (JsonNode gastoNode : nodosGasto) { + String nombreConcepto=gastoNode.get("concepto").asString(); + double precioUnitario = gastoNode.get("precio_unitario").asDouble(); + int unidades = gastoNode.get("unidades").asInt(); + String sFecha = gastoNode.get("fecha").asString(); + LocalDate fecha = LocalDate.parse(sFecha); + + Gasto gasto = new Gasto(); + gasto.setFecha(fecha); + gasto.setNumeroUnidades(unidades); + gasto.setPrecioUnidad(precioUnitario); + + IConceptoDAO conceptoDAO = new ConceptoDaoHibernate(); + Concepto concepto=conceptoDAO.obtenerConceptoPorNombre(nombreConcepto) + gasto.setConcepto(concepto); + + + // Inserción en PostgreSQL con Hibernate + IOperacionesDAOEntidad operacionesDAOGasto = new GastoDaoHibernate(); + operacionesDAOGasto.crearEntidad(gasto); + // Inserción en ObjectDB con JPA + operacionesDAOGasto = new GastoDaoJPA(); + operacionesDAOGasto.crearEntidad(gasto); + } + + + System.out.println("nodoGastos:" + nodoGastos); + + } + + private ArrayNode convertirJsonNodeEnArrayNode(JsonNode node) { + ObjectMapper mapper = new ObjectMapper(); + if (node.isArray()) { + return (ArrayNode) node; + } else { + ArrayNode arrayNode = mapper.createArrayNode(); + if (!node.isMissingNode()) { + arrayNode.add(node); + } + return arrayNode; + } + } + +} diff --git a/src/main/java/es/palomafp/aadd/inm/procesador/ProcesadorFicheroXML.java b/src/main/java/es/palomafp/aadd/inm/procesador/ProcesadorFicheroXML.java new file mode 100644 index 0000000..be01d7f --- /dev/null +++ b/src/main/java/es/palomafp/aadd/inm/procesador/ProcesadorFicheroXML.java @@ -0,0 +1,153 @@ +package es.palomafp.aadd.inm.procesador; + +import java.io.File; +import java.time.LocalDate; + +import es.palomafp.aadd.inm.dao.IOperacionesDAOEntidad; +import es.palomafp.aadd.inm.dao.hbm.ConceptoDaoHibernate; +import es.palomafp.aadd.inm.dao.hbm.CursoAcademicoDaoHibernate; +import es.palomafp.aadd.inm.dao.hbm.PatrocinadorDaoHibernate; +import es.palomafp.aadd.inm.dao.hbm.ProyectoDaoHibernate; +import es.palomafp.aadd.inm.dao.jpa.ConceptoDaoJPA; +import es.palomafp.aadd.inm.dao.jpa.CursoAcademicoDaoJPA; +import es.palomafp.aadd.inm.dao.jpa.PatrocinadorDaoJPA; +import es.palomafp.aadd.inm.dao.jpa.ProyectoDaoJPA; +import es.palomafp.aadd.inm.excepcion.ProyectosIESException; +import es.palomafp.aadd.inm.gestor.GestorFicheroConfiguracion; +import es.palomafp.aadd.inm.vo.Concepto; +import es.palomafp.aadd.inm.vo.CursoAcademico; +import es.palomafp.aadd.inm.vo.Patrocinador; +import es.palomafp.aadd.inm.vo.Proyecto; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.dataformat.xml.XmlMapper; + +public class ProcesadorFicheroXML { + + public void procesarFicheroXMLCatalogos() throws ProyectosIESException { + String rutaFichero = GestorFicheroConfiguracion.getValorfromClave("catalogos.fichero.xml.ruta"); + File fichero = new File(rutaFichero); + + // Procesar con Jackson XML + ObjectMapper mapper = new XmlMapper(); + JsonNode root = mapper.readTree(fichero); + + // procesar nodos Curso + JsonNode nodoCursos = root.get("Cursos"); + procesarCursos(nodoCursos); + + // procesar nodos Proyectos + JsonNode nodoProyectos = root.get("Proyectos"); + procesarProyectos(nodoProyectos); + + // procesar nodos Conceptos + JsonNode nodoConceptos = root.get("Conceptos"); + procesarConceptos(nodoConceptos); + + // procesar nodos Patrocinadores + JsonNode nodoPatrocinadores = root.get("Patrocinadores"); + procesarPatrocinadores(nodoPatrocinadores); + + } + + private void procesarCursos(JsonNode nodoCursos) throws ProyectosIESException { + // Se obtienen los nodos Curso + ArrayNode nodosCurso = convertirJsonNodeEnArrayNode(nodoCursos.get("Curso")); + for (JsonNode nodoCurso : nodosCurso) { + String codigo = nodoCurso.get("Codigo").asString(); + String nombre = nodoCurso.get("Nombre").asString(); + String sFechaInicio = nodoCurso.get("Fechas").get("FechaInicio").asString(); + LocalDate fechaInicio = LocalDate.parse(sFechaInicio); + String sFechaFin = nodoCurso.get("Fechas").get("FechaFin").asString(); + LocalDate fechaFin = LocalDate.parse(sFechaFin); + + CursoAcademico curso = new CursoAcademico(); + curso.setCodigo(codigo); + curso.setNombre(nombre); + curso.setFechaInicio(fechaInicio); + curso.setFechaFin(fechaFin); + + // Inserción en PostgreSQL con Hibernate + IOperacionesDAOEntidad operacionesDAOCursoAcademico = new CursoAcademicoDaoHibernate(); + operacionesDAOCursoAcademico.crearEntidad(curso); + // Inserción en ObjectDB con JPA + operacionesDAOCursoAcademico = new CursoAcademicoDaoJPA(); + operacionesDAOCursoAcademico.crearEntidad(curso); + } + } + + private void procesarProyectos(JsonNode nodoProyectos) throws ProyectosIESException { + // Se obtienen los nodos Proyecto + ArrayNode nodosProyecto = convertirJsonNodeEnArrayNode(nodoProyectos.get("Proyecto")); + for (JsonNode proyectoNode : nodosProyecto) { + JsonNode nodoInfoProyecto = proyectoNode.get("Informacion_descriptiva"); + String nombre = nodoInfoProyecto.get("Nombre").asString(); + String descripcion = nodoInfoProyecto.get("Descripcion").asString(); + String urlImagenLogo = nodoInfoProyecto.get("url_imagen_logo").asString(); + + Proyecto proyecto = new Proyecto(); + proyecto.setNombre(nombre); + proyecto.setDescripcion(descripcion); + proyecto.setUrlLogo(urlImagenLogo); + + // Inserción en PostgreSQL con Hibernate + IOperacionesDAOEntidad operacionesDAOProyecto = new ProyectoDaoHibernate(); + operacionesDAOProyecto.crearEntidad(proyecto); + // Inserción en ObjectDB con JPA + operacionesDAOProyecto = new ProyectoDaoJPA(); + operacionesDAOProyecto.crearEntidad(proyecto); + } + } + + private void procesarConceptos(JsonNode nodoConceptos) throws ProyectosIESException { + // Se obtienen los nodos Concepto + ArrayNode nodosConcepto = convertirJsonNodeEnArrayNode(nodoConceptos.get("Concepto")); + for (JsonNode conceptoNode : nodosConcepto) { + String nombre = conceptoNode.get("Nombre").asString(); + String descripcion = conceptoNode.get("Descripcion").asString(); + + Concepto concepto = new Concepto(); + concepto.setNombre(nombre); + concepto.setDescripcion(descripcion); + + // Inserción en PostgreSQL con Hibernate + IOperacionesDAOEntidad operacionesDAOConcepto = new ConceptoDaoHibernate(); + operacionesDAOConcepto.crearEntidad(concepto); + // Inserción en ObjectDB con JPA + operacionesDAOConcepto = new ConceptoDaoJPA(); + operacionesDAOConcepto.crearEntidad(concepto); + } + } + + private void procesarPatrocinadores(JsonNode nodoPatrocinadores) throws ProyectosIESException { + // Se obtienen los nodos Patrocinador + ArrayNode nodosPatrocinador = convertirJsonNodeEnArrayNode(nodoPatrocinadores.get("Patrocinador")); + for (JsonNode patrocinadorNode : nodosPatrocinador) { + String nombre = patrocinadorNode.get("Nombre").asString(); + + Patrocinador patrocinador = new Patrocinador(); + patrocinador.setNombre(nombre); + + // Inserción en PostgreSQL con Hibernate + IOperacionesDAOEntidad operacionesDAOPatrocinador = new PatrocinadorDaoHibernate(); + operacionesDAOPatrocinador.crearEntidad(patrocinador); + // Inserción en ObjectDB con JPA + operacionesDAOPatrocinador = new PatrocinadorDaoJPA(); + operacionesDAOPatrocinador.crearEntidad(patrocinador); + } + } + + private ArrayNode convertirJsonNodeEnArrayNode(JsonNode node) { + ObjectMapper mapper = new ObjectMapper(); + if (node.isArray()) { + return (ArrayNode) node; + } else { + ArrayNode arrayNode = mapper.createArrayNode(); + if (!node.isMissingNode()) { + arrayNode.add(node); + } + return arrayNode; + } + } +} diff --git a/src/main/java/es/palomafp/aadd/inm/procesador/ProcesadorFicheros.java b/src/main/java/es/palomafp/aadd/inm/procesador/ProcesadorFicheros.java deleted file mode 100644 index 1b72c58..0000000 --- a/src/main/java/es/palomafp/aadd/inm/procesador/ProcesadorFicheros.java +++ /dev/null @@ -1,59 +0,0 @@ -package es.palomafp.aadd.inm.procesador; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.io.IOException; - -import es.palomafp.aadd.inm.gestor.GestorFicheroConfiguracion; -import tools.jackson.databind.JsonNode; -import tools.jackson.databind.ObjectMapper; - -public class ProcesadorFicheros { - - public void procesarFicheroXMLCatalogos() { - String rutaFichero = GestorFicheroConfiguracion.getValorfromClave("catalogos.fichero.xml.ruta"); - File fichero = new File(rutaFichero); - - // Se asume que la información de Paises es correcta y ya existe en la BD - ObjectMapper mapper = new ObjectMapper(); - JsonNode root = mapper.readTree(fichero); - JsonNode nodoPeliculas = root.get("peliculas"); - - } - - public void procesarFicheroJSONGastos() { - String rutaFichero = GestorFicheroConfiguracion.getValorfromClave("gastos.fichero.json.ruta"); - File fichero = new File(rutaFichero); - - // Se asume que la información de Paises es correcta y ya existe en la BD - ObjectMapper mapper = new ObjectMapper(); - JsonNode root = mapper.readTree(fichero); - JsonNode nodoPeliculas = root.get("peliculas"); - - } - - public void procesarFicheroCSVIngresos() { - - String rutaFichero = GestorFicheroConfiguracion.getValorfromClave("ingresos.fichero.csv.ruta"); - File fichero = new File(rutaFichero); - - try (BufferedReader lector = new BufferedReader(new FileReader(fichero));) { - String linea; - while ((linea = lector.readLine()) != null) { - // Procesar la línea leída - String[] campos = linea.split(","); - // Suponiendo que el CSV tiene dos columnas: id, ingreso - String id = campos[0]; - String ingreso = campos[1]; - // Aquí iría la lógica para procesar cada línea - } - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - } - -} diff --git a/src/main/java/es/palomafp/aadd/inm/vo/Concepto.java b/src/main/java/es/palomafp/aadd/inm/vo/Concepto.java index 077bd88..0f93825 100644 --- a/src/main/java/es/palomafp/aadd/inm/vo/Concepto.java +++ b/src/main/java/es/palomafp/aadd/inm/vo/Concepto.java @@ -6,6 +6,7 @@ import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; import jakarta.persistence.Table; +import lombok.Data; /** * @@ -17,6 +18,7 @@ import jakarta.persistence.Table; * */ +@Data @Entity @Table(name = "T_CONCEPTO") public class Concepto { diff --git a/src/main/java/es/palomafp/aadd/inm/vo/CursoAcademico.java b/src/main/java/es/palomafp/aadd/inm/vo/CursoAcademico.java index dd2aff5..59f121f 100644 --- a/src/main/java/es/palomafp/aadd/inm/vo/CursoAcademico.java +++ b/src/main/java/es/palomafp/aadd/inm/vo/CursoAcademico.java @@ -6,6 +6,7 @@ import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.Id; import jakarta.persistence.Table; +import lombok.Data; /** * @@ -16,6 +17,7 @@ import jakarta.persistence.Table; * */ +@Data @Entity @Table(name="T_CURSO_ACADEMICO") public class CursoAcademico { diff --git a/src/main/java/es/palomafp/aadd/inm/vo/CursoProyecto.java b/src/main/java/es/palomafp/aadd/inm/vo/CursoProyecto.java index f1f8ae9..7b6c94c 100644 --- a/src/main/java/es/palomafp/aadd/inm/vo/CursoProyecto.java +++ b/src/main/java/es/palomafp/aadd/inm/vo/CursoProyecto.java @@ -7,6 +7,7 @@ import jakarta.persistence.Id; import jakarta.persistence.JoinColumn; import jakarta.persistence.ManyToOne; import jakarta.persistence.Table; +import lombok.Data; /** * @@ -18,6 +19,7 @@ import jakarta.persistence.Table; * */ +@Data @Entity @Table(name = "T_CURSO_PROYECTO") public class CursoProyecto { diff --git a/src/main/java/es/palomafp/aadd/inm/vo/Gasto.java b/src/main/java/es/palomafp/aadd/inm/vo/Gasto.java index 8e33c24..b859e33 100644 --- a/src/main/java/es/palomafp/aadd/inm/vo/Gasto.java +++ b/src/main/java/es/palomafp/aadd/inm/vo/Gasto.java @@ -11,6 +11,7 @@ import jakarta.persistence.Id; import jakarta.persistence.JoinColumn; import jakarta.persistence.ManyToOne; import jakarta.persistence.Table; +import lombok.Data; /** * @@ -21,6 +22,7 @@ import jakarta.persistence.Table; * */ +@Data @Entity @Table(name="T_GASTO") public class Gasto { diff --git a/src/main/java/es/palomafp/aadd/inm/vo/Ingreso.java b/src/main/java/es/palomafp/aadd/inm/vo/Ingreso.java index cff508d..d4e773c 100644 --- a/src/main/java/es/palomafp/aadd/inm/vo/Ingreso.java +++ b/src/main/java/es/palomafp/aadd/inm/vo/Ingreso.java @@ -11,6 +11,7 @@ import jakarta.persistence.Id; import jakarta.persistence.JoinColumn; import jakarta.persistence.ManyToOne; import jakarta.persistence.Table; +import lombok.Data; /** * @@ -21,6 +22,7 @@ import jakarta.persistence.Table; * */ +@Data @Entity @Table(name="T_INGRESO") public class Ingreso { diff --git a/src/main/java/es/palomafp/aadd/inm/vo/Patrocinador.java b/src/main/java/es/palomafp/aadd/inm/vo/Patrocinador.java index 4870cf9..25cecbc 100644 --- a/src/main/java/es/palomafp/aadd/inm/vo/Patrocinador.java +++ b/src/main/java/es/palomafp/aadd/inm/vo/Patrocinador.java @@ -7,6 +7,7 @@ import jakarta.persistence.GenerationType; import jakarta.persistence.Id; import jakarta.persistence.Lob; import jakarta.persistence.Table; +import lombok.Data; /** * @@ -17,6 +18,7 @@ import jakarta.persistence.Table; * */ +@Data @Entity @Table(name="T_PATROCINADOR") public class Patrocinador { diff --git a/src/main/java/es/palomafp/aadd/inm/vo/Proyecto.java b/src/main/java/es/palomafp/aadd/inm/vo/Proyecto.java index af98298..1f52cce 100644 --- a/src/main/java/es/palomafp/aadd/inm/vo/Proyecto.java +++ b/src/main/java/es/palomafp/aadd/inm/vo/Proyecto.java @@ -6,6 +6,7 @@ import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; import jakarta.persistence.Table; +import lombok.Data; /** * @@ -16,6 +17,7 @@ import jakarta.persistence.Table; * */ +@Data @Entity @Table(name="T_PROYECTO") public class Proyecto { diff --git a/src/main/resources/hibernate.cfg.xml b/src/main/resources/hibernate.cfg.xml index 2d946fa..9c4e4fc 100644 --- a/src/main/resources/hibernate.cfg.xml +++ b/src/main/resources/hibernate.cfg.xml @@ -13,7 +13,7 @@ postgresql_123 - create-drop + none true true