diff --git a/src/main/java/es/palomafp/aadd/inm/AppProyectosIES.java b/src/main/java/es/palomafp/aadd/inm/AppProyectosIES.java index 387db6a..af2f0f5 100644 --- a/src/main/java/es/palomafp/aadd/inm/AppProyectosIES.java +++ b/src/main/java/es/palomafp/aadd/inm/AppProyectosIES.java @@ -19,8 +19,18 @@ public class AppProyectosIES { public static void main(String[] args) { AppProyectosIES app = new AppProyectosIES(); + /* + delete from t_gasto ; + delete from t_ingreso; + delete from t_curso_proyecto; + delete from t_concepto ; + delete from t_patrocinador; + delete from t_proyecto ; + delete from t_proyecto + */ + // Generar la estructura de la base de datos en PostgreSQL - // GestorSesionesHibernate.getSession(); + GestorSesionesHibernate.getSession(); try { app.procesarFicheros(); diff --git a/src/main/java/es/palomafp/aadd/inm/dao/IConceptoDAO.java b/src/main/java/es/palomafp/aadd/inm/dao/IConceptoDAO.java index f158298..29fe6b3 100644 --- a/src/main/java/es/palomafp/aadd/inm/dao/IConceptoDAO.java +++ b/src/main/java/es/palomafp/aadd/inm/dao/IConceptoDAO.java @@ -5,7 +5,7 @@ import es.palomafp.aadd.inm.vo.Concepto; /** * - * IProyectoDAO: Clase que realiza .... + * IConceptoDAO: Interfaz que representa las operaciones a realizar con la entidad Concepto * @author Isidoro Nevares Martín - IES Virgen de la Paloma * @date 20 ene 2026 * diff --git a/src/main/java/es/palomafp/aadd/inm/dao/ICursoProyectoDAO.java b/src/main/java/es/palomafp/aadd/inm/dao/ICursoProyectoDAO.java index 27ba7d0..e677d52 100644 --- a/src/main/java/es/palomafp/aadd/inm/dao/ICursoProyectoDAO.java +++ b/src/main/java/es/palomafp/aadd/inm/dao/ICursoProyectoDAO.java @@ -5,7 +5,7 @@ import es.palomafp.aadd.inm.vo.CursoProyecto; /** * - * IProyectoDAO: Clase que realiza .... + * ICursoProyectoDAO: Interfaz que representa las operaciones a realizar con la entidad CursoProyecto * @author Isidoro Nevares Martín - IES Virgen de la Paloma * @date 20 ene 2026 * diff --git a/src/main/java/es/palomafp/aadd/inm/dao/IGastoDAO.java b/src/main/java/es/palomafp/aadd/inm/dao/IGastoDAO.java new file mode 100644 index 0000000..7370718 --- /dev/null +++ b/src/main/java/es/palomafp/aadd/inm/dao/IGastoDAO.java @@ -0,0 +1,18 @@ +package es.palomafp.aadd.inm.dao; + +import es.palomafp.aadd.inm.excepcion.ProyectosIESException; +import es.palomafp.aadd.inm.vo.Gasto; + +/** + * + * IGastoDAO: Interfaz que representa las operaciones a realizar con la entidad Gasto + * @author Isidoro Nevares Martín - IES Virgen de la Paloma + * @date 20 ene 2026 + * + * + */ + +public interface IGastoDAO extends IOperacionesDAOEntidad { + Gasto obtenerGastoPorNombre(String nombreGasto) 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 index e69fee9..5f3c202 100644 --- a/src/main/java/es/palomafp/aadd/inm/dao/IOperacionesDAOEntidad.java +++ b/src/main/java/es/palomafp/aadd/inm/dao/IOperacionesDAOEntidad.java @@ -4,7 +4,7 @@ import es.palomafp.aadd.inm.excepcion.ProyectosIESException; /** * - * IOperacionesBasicas: Clase que realiza .... + * IOperacionesBasicas: Interfaz que representa las operaciones comunes a todas las entidades de persistencia. * @author Isidoro Nevares Martín - IES Virgen de la Paloma * @date 14 dic 2025 * diff --git a/src/main/java/es/palomafp/aadd/inm/dao/IPatrocinadorDAO.java b/src/main/java/es/palomafp/aadd/inm/dao/IPatrocinadorDAO.java new file mode 100644 index 0000000..efcaa59 --- /dev/null +++ b/src/main/java/es/palomafp/aadd/inm/dao/IPatrocinadorDAO.java @@ -0,0 +1,18 @@ +package es.palomafp.aadd.inm.dao; + +import es.palomafp.aadd.inm.excepcion.ProyectosIESException; +import es.palomafp.aadd.inm.vo.Patrocinador; + +/** + * + * IPatrocinadorDAO: Interfaz que representa las operaciones a realizar con la entidad Patrocinador + * @author Isidoro Nevares Martín - IES Virgen de la Paloma + * @date 20 ene 2026 + * + * + */ + +public interface IPatrocinadorDAO extends IOperacionesDAOEntidad { + Patrocinador obtenerPatrocinadorPorNombre(String nombrePatrocinador) throws ProyectosIESException; +} + diff --git a/src/main/java/es/palomafp/aadd/inm/dao/IProyectoDAO.java b/src/main/java/es/palomafp/aadd/inm/dao/IProyectoDAO.java index 14b8f09..20f6eb8 100644 --- a/src/main/java/es/palomafp/aadd/inm/dao/IProyectoDAO.java +++ b/src/main/java/es/palomafp/aadd/inm/dao/IProyectoDAO.java @@ -5,7 +5,7 @@ import es.palomafp.aadd.inm.vo.Proyecto; /** * - * IProyectoDAO: Clase que realiza .... + * IProyectoDAO: Interfaz que representa las operaciones a realizar con la entidad Proyecto * @author Isidoro Nevares Martín - IES Virgen de la Paloma * @date 20 ene 2026 * diff --git a/src/main/java/es/palomafp/aadd/inm/dao/hbm/GastoDaoHibernate.java b/src/main/java/es/palomafp/aadd/inm/dao/hbm/GastoDaoHibernate.java new file mode 100644 index 0000000..3c9057c --- /dev/null +++ b/src/main/java/es/palomafp/aadd/inm/dao/hbm/GastoDaoHibernate.java @@ -0,0 +1,69 @@ +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.IGastoDAO; +import es.palomafp.aadd.inm.excepcion.ProyectosIESException; +import es.palomafp.aadd.inm.gestor.GestorSesionesHibernate; +import es.palomafp.aadd.inm.vo.Gasto; + +/** + * + * ConceptoDaoHibernate: Clase que implementa el interfaz IOperacionesDAOEntidad + * + * @author Isidoro Nevares Martín - IES Virgen de la Paloma + * @date 31 oct 2025 + */ +public class GastoDaoHibernate implements IGastoDAO { + + @Override + public void crearEntidad(Gasto 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 Gasto obtenerGastoPorNombre(String nombreGasto) throws ProyectosIESException { + Gasto gasto = null; + String sentenciaHQL = "SELECT g FROM Gasto g WHERE g.nombre = :nombre"; + + // try con recursos "cerrables": Session + try (Session sesion = GestorSesionesHibernate.getSession();) { + SelectionQuery sentenciaConsulta = sesion.createSelectionQuery(sentenciaHQL, Gasto.class); + sentenciaConsulta.setParameter("nombre", nombreGasto); + + gasto = sentenciaConsulta.getSingleResultOrNull(); + } catch (Exception e) { + throw new ProyectosIESException(e, this.getClass(), ProyectosIESException.ERROR_CONSULTA); + } + return gasto; + } + + @Override + public Gasto obtenerEntidadPorID(Integer clave) throws ProyectosIESException { + // TODO Auto-generated method stub + return null; + } + +} diff --git a/src/main/java/es/palomafp/aadd/inm/dao/jpa/GastoDaoJPA.java b/src/main/java/es/palomafp/aadd/inm/dao/jpa/GastoDaoJPA.java new file mode 100644 index 0000000..f5fd23f --- /dev/null +++ b/src/main/java/es/palomafp/aadd/inm/dao/jpa/GastoDaoJPA.java @@ -0,0 +1,73 @@ +package es.palomafp.aadd.inm.dao.jpa; + +import es.palomafp.aadd.inm.dao.IGastoDAO; +import es.palomafp.aadd.inm.excepcion.ProyectosIESException; +import es.palomafp.aadd.inm.gestor.GestorEntityManagerJPA; +import es.palomafp.aadd.inm.vo.Gasto; +import jakarta.persistence.EntityManager; +import jakarta.persistence.EntityTransaction; +import jakarta.persistence.TypedQuery; + +/** + * + * ConceptoDaoJPA: Clase que implementa el interfaz IGastoDAO + * + * @author Isidoro Nevares Martín - IES Virgen de la Paloma + * @date 31 oct 2025 + */ +public class GastoDaoJPA implements IGastoDAO { + + @Override + public void crearEntidad(Gasto 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 Gasto obtenerGastoPorNombre(String nombreGasto) throws ProyectosIESException { + Gasto gasto = null; + + String sentenciaJPQL = """ + SELECT g FROM Gasto g + WHERE g.nombre= :nombre + """; + + // try con recursos "cerrables": Session + try (EntityManager entityManager = GestorEntityManagerJPA.getEntityManager();) { + TypedQuery query = entityManager.createQuery(sentenciaJPQL, Gasto.class); + query.setParameter("nombre", nombreGasto); + + gasto = query.getSingleResult(); + } catch (Exception e) { + throw new ProyectosIESException(e, this.getClass(), ProyectosIESException.ERROR_CONSULTA); + } + + return gasto; + } + + @Override + public Gasto 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 index d85ec07..1b36bbe 100644 --- a/src/main/java/es/palomafp/aadd/inm/dao/jpa/ProyectoDaoJPA.java +++ b/src/main/java/es/palomafp/aadd/inm/dao/jpa/ProyectoDaoJPA.java @@ -10,7 +10,7 @@ import jakarta.persistence.TypedQuery; /** * - * ConceptoDaoJPA: Clase que implementa el interfaz IOperacionesDAOEntidad + * ProyectoDaoJPA: Clase que implementa el interfaz IProyectoDAO * * @author Isidoro Nevares Martín - IES Virgen de la Paloma * @date 31 oct 2025 @@ -68,4 +68,5 @@ public class ProyectoDaoJPA implements IProyectoDAO { // TODO Auto-generated method stub return null; } + } diff --git a/src/main/java/es/palomafp/aadd/inm/procesador/ProcesadorFicheroJSON.java b/src/main/java/es/palomafp/aadd/inm/procesador/ProcesadorFicheroJSON.java index 1fe7695..b4f9397 100644 --- a/src/main/java/es/palomafp/aadd/inm/procesador/ProcesadorFicheroJSON.java +++ b/src/main/java/es/palomafp/aadd/inm/procesador/ProcesadorFicheroJSON.java @@ -5,12 +5,14 @@ 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.IGastoDAO; 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.GastoDaoHibernate; import es.palomafp.aadd.inm.dao.hbm.ProyectoDaoHibernate; import es.palomafp.aadd.inm.dao.jpa.CursoProyectoDaoJPA; +import es.palomafp.aadd.inm.dao.jpa.GastoDaoJPA; import es.palomafp.aadd.inm.excepcion.ProyectosIESException; import es.palomafp.aadd.inm.gestor.GestorFicheroConfiguracion; import es.palomafp.aadd.inm.vo.Concepto; @@ -71,13 +73,14 @@ public class ProcesadorFicheroJSON { gasto.setNumeroUnidades(unidades); gasto.setPrecioUnidad(precioUnitario); + // Obtener el concepto para asociárselo al gasto IConceptoDAO conceptoDAO = new ConceptoDaoHibernate(); - Concepto concepto=conceptoDAO.obtenerConceptoPorNombre(nombreConcepto) + Concepto concepto=conceptoDAO.obtenerConceptoPorNombre(nombreConcepto); gasto.setConcepto(concepto); // Inserción en PostgreSQL con Hibernate - IOperacionesDAOEntidad operacionesDAOGasto = new GastoDaoHibernate(); + IGastoDAO operacionesDAOGasto = new GastoDaoHibernate(); operacionesDAOGasto.crearEntidad(gasto); // Inserción en ObjectDB con JPA operacionesDAOGasto = new GastoDaoJPA(); diff --git a/src/main/java/es/palomafp/aadd/inm/procesador/ProcesadorFicheroXML.java b/src/main/java/es/palomafp/aadd/inm/procesador/ProcesadorFicheroXML.java index be01d7f..f2614ef 100644 --- a/src/main/java/es/palomafp/aadd/inm/procesador/ProcesadorFicheroXML.java +++ b/src/main/java/es/palomafp/aadd/inm/procesador/ProcesadorFicheroXML.java @@ -4,6 +4,7 @@ import java.io.File; import java.time.LocalDate; 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.CursoAcademicoDaoHibernate; import es.palomafp.aadd.inm.dao.hbm.PatrocinadorDaoHibernate; @@ -92,7 +93,7 @@ public class ProcesadorFicheroXML { proyecto.setUrlLogo(urlImagenLogo); // Inserción en PostgreSQL con Hibernate - IOperacionesDAOEntidad operacionesDAOProyecto = new ProyectoDaoHibernate(); + IProyectoDAO operacionesDAOProyecto = new ProyectoDaoHibernate(); operacionesDAOProyecto.crearEntidad(proyecto); // Inserción en ObjectDB con JPA operacionesDAOProyecto = new ProyectoDaoJPA(); diff --git a/src/main/resources/META-INF/persistence.xml b/src/main/resources/META-INF/persistence.xml index 80e6f17..45f19fc 100644 --- a/src/main/resources/META-INF/persistence.xml +++ b/src/main/resources/META-INF/persistence.xml @@ -21,7 +21,7 @@ - + diff --git a/src/main/resources/hibernate.cfg.xml b/src/main/resources/hibernate.cfg.xml index 9c4e4fc..f25735b 100644 --- a/src/main/resources/hibernate.cfg.xml +++ b/src/main/resources/hibernate.cfg.xml @@ -4,7 +4,7 @@ "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> - jdbc:postgresql://192.168.1.36:5432/proyectos_ies + jdbc:postgresql://10.19.0.221:5432/proyectos_ies org.postgresql.Driver org.hibernate.dialect.PostgreSQLDialect