From a4372718dc1d44d8dce516a6bc62e594cd709a41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Isidoro=20Nevares=20Mart=C3=ADn?= Date: Wed, 25 Feb 2026 12:14:13 +0100 Subject: [PATCH] =?UTF-8?q?Restructarci=C3=B3n=20c=C3=B3digo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .classpath | 9 +- .project | 2 +- .settings/org.eclipse.core.resources.prefs | 2 + .settings/org.eclipse.jdt.core.prefs | 13 +- ficheros/info-generadores.csv | 5 + pom.xml | 7 + .../java/eu/agenciaesa/inm/AppAgenciaEsa.java | 105 ++++- .../java/eu/agenciaesa/inm/dao/IBaseDao.java | 7 +- .../agenciaesa/inm/dao/ICuerpoCelesteDao.java | 4 +- .../agenciaesa/inm/dao/IExperimentoDao.java | 2 +- .../eu/agenciaesa/inm/dao/IGeneradorDao.java | 5 +- .../eu/agenciaesa/inm/dao/IModuloDao.java | 5 +- .../inm/dao/hibernate/BaseDaoHibernate.java | 66 ++- .../inm/dao/hibernate/ModuloDaoHibernate.java | 56 +-- .../inm/dao/jdbc/CuerpoCelesteDaoJDBC.java | 131 +++--- .../inm/dao/jdbc/GeneradorDaoJDBC.java | 112 ++--- .../inm/dao/jpa/ExperimentoDaoJPA.java | 64 ++- .../inm/dao/mngdb/ExperimientoDaoMongoDB.java | 64 +-- .../inm/gestores/GestorConexionMongoDB.java | 4 +- .../gestores/GestorFicheroConfiguracion.java | 6 +- .../inm/procesamiento/ProcesadorDatos.java | 392 ------------------ .../ProcesadorGeneradoresFicheroCSV.java | 85 ++++ .../procesamiento/ProcesadorModulosURL.java | 161 +++++++ src/main/java/eu/agenciaesa/inm/vo/Base.java | 72 ++-- .../eu/agenciaesa/inm/vo/CuerpoCeleste.java | 50 +-- ...alBase.java => EFuncionPrincipalBase.java} | 2 +- ...poCeleste.java => ETipoCuerpoCeleste.java} | 2 +- ...Experimento.java => ETipoExperimento.java} | 2 +- ...TipoGenerador.java => ETipoGenerador.java} | 2 +- .../inm/vo/{TipoNave.java => ETipoNave.java} | 2 +- .../eu/agenciaesa/inm/vo/Experimento.java | 50 +-- .../java/eu/agenciaesa/inm/vo/Generador.java | 49 +-- .../java/eu/agenciaesa/inm/vo/Mision.java | 2 + .../java/eu/agenciaesa/inm/vo/MisionID.java | 32 +- .../java/eu/agenciaesa/inm/vo/Modulo.java | 46 +- src/main/java/eu/agenciaesa/inm/vo/Nave.java | 9 +- src/main/resources/META-INF/persistence.xml | 36 +- src/main/resources/agenciaesa.conf | 15 + src/main/resources/conf.properties | 5 - src/main/resources/hibernate.cfg.xml | 11 +- 40 files changed, 747 insertions(+), 947 deletions(-) create mode 100644 .settings/org.eclipse.core.resources.prefs create mode 100644 ficheros/info-generadores.csv delete mode 100644 src/main/java/eu/agenciaesa/inm/procesamiento/ProcesadorDatos.java create mode 100644 src/main/java/eu/agenciaesa/inm/procesamiento/ProcesadorGeneradoresFicheroCSV.java create mode 100644 src/main/java/eu/agenciaesa/inm/procesamiento/ProcesadorModulosURL.java rename src/main/java/eu/agenciaesa/inm/vo/{FuncionPrincipalBase.java => EFuncionPrincipalBase.java} (66%) rename src/main/java/eu/agenciaesa/inm/vo/{TipoCuerpoCeleste.java => ETipoCuerpoCeleste.java} (70%) rename src/main/java/eu/agenciaesa/inm/vo/{TipoExperimento.java => ETipoExperimento.java} (70%) rename src/main/java/eu/agenciaesa/inm/vo/{TipoGenerador.java => ETipoGenerador.java} (68%) rename src/main/java/eu/agenciaesa/inm/vo/{TipoNave.java => ETipoNave.java} (79%) create mode 100644 src/main/resources/agenciaesa.conf delete mode 100644 src/main/resources/conf.properties diff --git a/.classpath b/.classpath index 1dfc1ca..a8f768e 100644 --- a/.classpath +++ b/.classpath @@ -26,8 +26,9 @@ - + + @@ -38,19 +39,19 @@ + - + + - - diff --git a/.project b/.project index eac5c29..076eb2f 100644 --- a/.project +++ b/.project @@ -1,6 +1,6 @@ - aadd_act5_6 + aadd_act5_6_v1 diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..99f26c0 --- /dev/null +++ b/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/=UTF-8 diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs index 1b6e1ef..dc671b5 100644 --- a/.settings/org.eclipse.jdt.core.prefs +++ b/.settings/org.eclipse.jdt.core.prefs @@ -1,9 +1,14 @@ eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=24 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=24 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning -org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.processAnnotations=disabled org.eclipse.jdt.core.compiler.release=disabled -org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.source=24 diff --git a/ficheros/info-generadores.csv b/ficheros/info-generadores.csv new file mode 100644 index 0000000..39e4944 --- /dev/null +++ b/ficheros/info-generadores.csv @@ -0,0 +1,5 @@ +nombre|tipo|potencia_mw|numero_serie|base +Central Nuclear Laguna|Nuclear|1200.50|123456789012345|Arsia Prime +Planta Solar Solida|Solar|50.75|987654321098765|Spanish base Quijote +Planta Geotérmica Térmica|Geotérmica|300.00|456789123456789|Europa Research Hub +Central Nuclear Atlántica|Nuclear|950.25|102938475610293|Base Beyond diff --git a/pom.xml b/pom.xml index 2565d53..2d9d455 100644 --- a/pom.xml +++ b/pom.xml @@ -40,5 +40,12 @@ jackson-dataformat-xml 3.0.1 + + + + org.projectlombok + lombok + 1.18.42 + \ No newline at end of file diff --git a/src/main/java/eu/agenciaesa/inm/AppAgenciaEsa.java b/src/main/java/eu/agenciaesa/inm/AppAgenciaEsa.java index 0b90aec..1bfd60f 100644 --- a/src/main/java/eu/agenciaesa/inm/AppAgenciaEsa.java +++ b/src/main/java/eu/agenciaesa/inm/AppAgenciaEsa.java @@ -1,26 +1,43 @@ package eu.agenciaesa.inm; +import java.util.List; + +import eu.agenciaesa.inm.dao.IBaseDao; import eu.agenciaesa.inm.dao.IExperimentoDao; +import eu.agenciaesa.inm.dao.IGeneradorDao; +import eu.agenciaesa.inm.dao.IModuloDao; +import eu.agenciaesa.inm.dao.hibernate.BaseDaoHibernate; +import eu.agenciaesa.inm.dao.hibernate.ModuloDaoHibernate; +import eu.agenciaesa.inm.dao.jdbc.GeneradorDaoJDBC; +import eu.agenciaesa.inm.dao.jpa.ExperimentoDaoJPA; +import eu.agenciaesa.inm.dao.mngdb.ExperimientoDaoMongoDB; import eu.agenciaesa.inm.excepciones.AgenciaESAException; import eu.agenciaesa.inm.gestores.GestorEntityManagerJPA; -import eu.agenciaesa.inm.vo.TipoExperimento; +import eu.agenciaesa.inm.gestores.GestorSesionHibernate; +import eu.agenciaesa.inm.procesamiento.ProcesadorGeneradoresFicheroCSV; +import eu.agenciaesa.inm.procesamiento.ProcesadorModulosURL; +import eu.agenciaesa.inm.vo.Base; +import eu.agenciaesa.inm.vo.Experimento; +import eu.agenciaesa.inm.vo.Generador; +import eu.agenciaesa.inm.vo.Modulo; /** - * Clase principal que inicia la sesión de Hibernate - JPA. Al obtener un EntityManager, - * Hibernate ejecutará hbm2ddl.auto=create y recreará la base de datos según las - * entidades definidas. + * Clase principal realiza el procesamiento de información de datos de la + * agencia ESA con orígenes y destinos diversos. */ public class AppAgenciaEsa { public static void main(String[] args) { System.out.println("Inicio del programa."); - + AppAgenciaEsa app = new AppAgenciaEsa(); - // Generación de la base de datos (JPA - hibernate - PostgreSQL) - GestorEntityManagerJPA.getEntityManager(); - try { - app.procesarInformacionAgenciaESA(); + app.tratarInformacionBasesYModulos(); + + app.tratarInformacionGeneradores(); + + app.tratarInformacionExperimentos(); + } catch (AgenciaESAException e) { String mensajeError = "Error en la clase %s al realizar una operación de %s"; String operacion = "Operación desconocida"; @@ -46,14 +63,74 @@ public class AppAgenciaEsa { System.err.println(mensajeError); e.printStackTrace(); } + + // Cerrar recursos al finalizar el programa + GestorSesionHibernate.cerrarFactoria(); + GestorEntityManagerJPA.closeEntityManagerFactory(); + System.out.println("Fin del programa."); } - private void procesarInformacionAgenciaESA() throws AgenciaESAException { - System.out.println(TipoExperimento.Climatológico.toString()); - IExperimentoDao experimentoDao = null; - experimentoDao.obtenerListaExperimentos(); - + + private void tratarInformacionBasesYModulos() throws AgenciaESAException { + ProcesadorModulosURL procesador = new ProcesadorModulosURL(); + /* + * Obtención de la lista de bases con sus módulos anidados a partir de la URL. + * Se jeuga con la cardinalidad que hay en la relacion entre Base y Modulo, que es de 1 a N, + * Una Base contiene una lista de Modulos, y cada Modulo tiene una referencia a su Base "padre". + * Para ello se "jugará" con la configuración de Base (En Base se usa CascadeType.ALL para que al almacenar las bases almacene los módulos). + */ + List listaBases = procesador.obtenerListaBasesDeURL(); + if (listaBases != null) { + IBaseDao baseDao = new BaseDaoHibernate(); + for (Base base : listaBases) { + Base baseBBDD= baseDao.obtenerBasePorNombre(base.getNombre()); + // Se comprueba si la base ya existe en la BBDD para evitar insertar duplicados, + // ya que no se contempla la actualización de una base existente. + if(baseBBDD==null) { + baseDao.insertarBase(base); + } + } + } + } + + private void tratarInformacionGeneradores() throws AgenciaESAException { + ProcesadorGeneradoresFicheroCSV procesador = new ProcesadorGeneradoresFicheroCSV(); + List listaGeneradores = procesador.obtenerGeneradoresDeFicheroCSV(); + if (listaGeneradores != null) { + // Inserción mediante JDBC + IGeneradorDao generadorDao = new GeneradorDaoJDBC(); + for (Generador generador : listaGeneradores) { + System.out.println(generador); + Generador generadorBBDD = generadorDao.obtenerGeneradorPorNombre(generador.getNombre()); + // Se comprueba si el generador ya existe en la BBDD para evitar insertar duplicados, + if (generadorBBDD ==null) { + generadorDao.insertarGenerador(generador); + } + } + } + } + + private void tratarInformacionExperimentos() throws AgenciaESAException { + + // Consulta de Experimentos en MongoDB + IExperimentoDao experimentoDao = new ExperimientoDaoMongoDB(); + List listaExperimentos = experimentoDao.obtenerListaExperimentos(); + if (listaExperimentos != null) { + + // Inserción mediante JPA + experimentoDao = new ExperimentoDaoJPA(); + for (Experimento experimento : listaExperimentos) { + System.out.println(experimento); + IModuloDao moduloDao = new ModuloDaoHibernate(); + Modulo moduloBBDD = moduloDao.obtenerModuloPorCodigo(experimento.getModulo().getCodigo()); + // + if(moduloBBDD!=null) { + experimento.setModulo(moduloBBDD); + experimentoDao.insertarExperimento(experimento); + } + } + } } } diff --git a/src/main/java/eu/agenciaesa/inm/dao/IBaseDao.java b/src/main/java/eu/agenciaesa/inm/dao/IBaseDao.java index 0c84362..728b5bd 100644 --- a/src/main/java/eu/agenciaesa/inm/dao/IBaseDao.java +++ b/src/main/java/eu/agenciaesa/inm/dao/IBaseDao.java @@ -1,13 +1,10 @@ package eu.agenciaesa.inm.dao; -import java.util.List; import eu.agenciaesa.inm.excepciones.AgenciaESAException; import eu.agenciaesa.inm.vo.Base; public interface IBaseDao { - void insertarListaBases(List listaBases) throws AgenciaESAException; + void insertarBase(Base base) throws AgenciaESAException; - List obtenerListaBases() throws AgenciaESAException; - - Base obtenerBasePorCodigo(String codigo) throws AgenciaESAException; + Base obtenerBasePorNombre(String nombreBase) throws AgenciaESAException; } diff --git a/src/main/java/eu/agenciaesa/inm/dao/ICuerpoCelesteDao.java b/src/main/java/eu/agenciaesa/inm/dao/ICuerpoCelesteDao.java index 37dc9d4..29f1d03 100644 --- a/src/main/java/eu/agenciaesa/inm/dao/ICuerpoCelesteDao.java +++ b/src/main/java/eu/agenciaesa/inm/dao/ICuerpoCelesteDao.java @@ -5,9 +5,9 @@ import eu.agenciaesa.inm.excepciones.AgenciaESAException; import eu.agenciaesa.inm.vo.CuerpoCeleste; public interface ICuerpoCelesteDao { - void insertarListaCuerposCelestes(List listaCuerpos) throws AgenciaESAException; + void insertarCuerpoCeleste(CuerpoCeleste cuerpo) throws AgenciaESAException; List obtenerListaCuerposCelestes() throws AgenciaESAException; - CuerpoCeleste obtenerCuerpoPorNombre(String nombre) throws AgenciaESAException; + CuerpoCeleste obtenerCuerpoCelestePorNombre(String nombre) throws AgenciaESAException; } diff --git a/src/main/java/eu/agenciaesa/inm/dao/IExperimentoDao.java b/src/main/java/eu/agenciaesa/inm/dao/IExperimentoDao.java index 2e3bd4b..8ea8f90 100644 --- a/src/main/java/eu/agenciaesa/inm/dao/IExperimentoDao.java +++ b/src/main/java/eu/agenciaesa/inm/dao/IExperimentoDao.java @@ -6,7 +6,7 @@ import eu.agenciaesa.inm.excepciones.AgenciaESAException; import eu.agenciaesa.inm.vo.Experimento; public interface IExperimentoDao { - void insertarListaExperimentos(List listaExperimentos) throws AgenciaESAException; + void insertarExperimento(Experimento experimento) throws AgenciaESAException; List obtenerListaExperimentos() throws AgenciaESAException; } diff --git a/src/main/java/eu/agenciaesa/inm/dao/IGeneradorDao.java b/src/main/java/eu/agenciaesa/inm/dao/IGeneradorDao.java index 55698f6..f61aa2c 100644 --- a/src/main/java/eu/agenciaesa/inm/dao/IGeneradorDao.java +++ b/src/main/java/eu/agenciaesa/inm/dao/IGeneradorDao.java @@ -1,11 +1,10 @@ package eu.agenciaesa.inm.dao; -import java.util.List; import eu.agenciaesa.inm.excepciones.AgenciaESAException; import eu.agenciaesa.inm.vo.Generador; public interface IGeneradorDao { - void insertarListaGeneradores(List listaGeneradores) throws AgenciaESAException; + void insertarGenerador(Generador generador) throws AgenciaESAException; - List obtenerListaGeneradores() throws AgenciaESAException; + Generador obtenerGeneradorPorNombre(String nombreGenerador) throws AgenciaESAException; } diff --git a/src/main/java/eu/agenciaesa/inm/dao/IModuloDao.java b/src/main/java/eu/agenciaesa/inm/dao/IModuloDao.java index cf1b8bd..b21f2e6 100644 --- a/src/main/java/eu/agenciaesa/inm/dao/IModuloDao.java +++ b/src/main/java/eu/agenciaesa/inm/dao/IModuloDao.java @@ -1,11 +1,10 @@ package eu.agenciaesa.inm.dao; -import java.util.List; import eu.agenciaesa.inm.excepciones.AgenciaESAException; import eu.agenciaesa.inm.vo.Modulo; public interface IModuloDao { - void insertarListaModulos(List listaModulos) throws AgenciaESAException; + void insertarModulo(Modulo modulo) throws AgenciaESAException; - List obtenerListaModulos() throws AgenciaESAException; + Modulo obtenerModuloPorCodigo(String codigoModulo) throws AgenciaESAException; } diff --git a/src/main/java/eu/agenciaesa/inm/dao/hibernate/BaseDaoHibernate.java b/src/main/java/eu/agenciaesa/inm/dao/hibernate/BaseDaoHibernate.java index a5cbfcc..378004f 100644 --- a/src/main/java/eu/agenciaesa/inm/dao/hibernate/BaseDaoHibernate.java +++ b/src/main/java/eu/agenciaesa/inm/dao/hibernate/BaseDaoHibernate.java @@ -1,9 +1,8 @@ package eu.agenciaesa.inm.dao.hibernate; -import java.util.List; import org.hibernate.Session; import org.hibernate.Transaction; -import org.hibernate.query.Query; +import org.hibernate.query.SelectionQuery; import eu.agenciaesa.inm.dao.IBaseDao; import eu.agenciaesa.inm.excepciones.AgenciaESAException; @@ -12,38 +11,37 @@ import eu.agenciaesa.inm.vo.Base; public class BaseDaoHibernate implements IBaseDao { - @Override - public void insertarListaBases(List listaBases) throws AgenciaESAException { - Transaction tx = null; - try (Session session = GestorSesionHibernate.getSession()) { - tx = session.beginTransaction(); - for (Base base : listaBases) { - session.persist(base); - } - tx.commit(); - } catch (Exception e) { - if (tx != null) - tx.rollback(); - throw new AgenciaESAException(e, AgenciaESAException.ERROR_INSERCION, BaseDaoHibernate.class); - } - } + @Override + public void insertarBase(Base base) throws AgenciaESAException { + Transaction tx = null; + try (Session session = GestorSesionHibernate.getSession()) { + tx = session.beginTransaction(); - @Override - public List obtenerListaBases() throws AgenciaESAException { - try (Session session = GestorSesionHibernate.getSession()) { - Query query = session.createQuery("FROM Base", Base.class); - return query.list(); - } catch (Exception e) { - throw new AgenciaESAException(e, AgenciaESAException.ERROR_CONSULTA, BaseDaoHibernate.class); - } - } + session.persist(base); - @Override - public Base obtenerBasePorCodigo(String codigo) throws AgenciaESAException { - try (Session session = GestorSesionHibernate.getSession()) { - return session.find(Base.class, codigo); - } catch (Exception e) { - throw new AgenciaESAException(e, AgenciaESAException.ERROR_CONSULTA, BaseDaoHibernate.class); - } - } + tx.commit(); + } catch (Exception e) { + if (tx != null) + tx.rollback(); + throw new AgenciaESAException(e, AgenciaESAException.ERROR_INSERCION, BaseDaoHibernate.class); + } + } + + + @Override + public Base obtenerBasePorNombre(String nombre) throws AgenciaESAException { + Base base=null; + + String sentenciaHQL = "SELECT b FROM Base b WHERE b.nombre = :nombre"; + + try (Session session = GestorSesionHibernate.getSession()) { + SelectionQuery sentenciaConsulta = session.createSelectionQuery(sentenciaHQL, Base.class); + sentenciaConsulta.setParameter("nombre", nombre); + base = sentenciaConsulta.getSingleResultOrNull(); + } catch (Exception e) { + throw new AgenciaESAException(e, AgenciaESAException.ERROR_CONSULTA, BaseDaoHibernate.class); + } + + return base; + } } diff --git a/src/main/java/eu/agenciaesa/inm/dao/hibernate/ModuloDaoHibernate.java b/src/main/java/eu/agenciaesa/inm/dao/hibernate/ModuloDaoHibernate.java index 83f8166..038bca4 100644 --- a/src/main/java/eu/agenciaesa/inm/dao/hibernate/ModuloDaoHibernate.java +++ b/src/main/java/eu/agenciaesa/inm/dao/hibernate/ModuloDaoHibernate.java @@ -1,9 +1,8 @@ package eu.agenciaesa.inm.dao.hibernate; -import java.util.List; +import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.Transaction; -import org.hibernate.query.Query; import eu.agenciaesa.inm.dao.IModuloDao; import eu.agenciaesa.inm.excepciones.AgenciaESAException; @@ -12,29 +11,34 @@ import eu.agenciaesa.inm.vo.Modulo; public class ModuloDaoHibernate implements IModuloDao { - @Override - public void insertarListaModulos(List listaModulos) throws AgenciaESAException { - Transaction tx = null; - try (Session session = GestorSesionHibernate.getSession()) { - tx = session.beginTransaction(); - for (Modulo modulo : listaModulos) { - session.persist(modulo); - } - tx.commit(); - } catch (Exception e) { - if (tx != null) - tx.rollback(); - throw new AgenciaESAException(e, AgenciaESAException.ERROR_INSERCION, ModuloDaoHibernate.class); - } - } + @Override + public void insertarModulo(Modulo modulo) throws AgenciaESAException { + Transaction tx = null; + try (Session session = GestorSesionHibernate.getSession()) { + tx = session.beginTransaction(); + + session.persist(modulo); + + tx.commit(); + } catch (Exception e) { + if (tx != null) + tx.rollback(); + throw new AgenciaESAException(e, AgenciaESAException.ERROR_INSERCION, ModuloDaoHibernate.class); + } + } + + @Override + public Modulo obtenerModuloPorCodigo(String codigoModulo) throws AgenciaESAException { + Modulo modulo = null; + + // try con recursos "cerrables": Session + try (Session sesion = GestorSesionHibernate.getSession();) { + modulo = sesion.find(Modulo.class, codigoModulo); + } catch (HibernateException e) { + throw new AgenciaESAException(e, AgenciaESAException.ERROR_CONSULTA, ModuloDaoHibernate.class); + } + + return modulo; + } - @Override - public List obtenerListaModulos() throws AgenciaESAException { - try (Session session = GestorSesionHibernate.getSession()) { - Query query = session.createQuery("FROM Modulo", Modulo.class); - return query.list(); - } catch (Exception e) { - throw new AgenciaESAException(e, AgenciaESAException.ERROR_CONSULTA, ModuloDaoHibernate.class); - } - } } diff --git a/src/main/java/eu/agenciaesa/inm/dao/jdbc/CuerpoCelesteDaoJDBC.java b/src/main/java/eu/agenciaesa/inm/dao/jdbc/CuerpoCelesteDaoJDBC.java index 1797b85..2e51ae2 100644 --- a/src/main/java/eu/agenciaesa/inm/dao/jdbc/CuerpoCelesteDaoJDBC.java +++ b/src/main/java/eu/agenciaesa/inm/dao/jdbc/CuerpoCelesteDaoJDBC.java @@ -11,78 +11,77 @@ import eu.agenciaesa.inm.dao.ICuerpoCelesteDao; import eu.agenciaesa.inm.excepciones.AgenciaESAException; import eu.agenciaesa.inm.gestores.GestorConexionJDBC; import eu.agenciaesa.inm.vo.CuerpoCeleste; -import eu.agenciaesa.inm.vo.TipoCuerpoCeleste; +import eu.agenciaesa.inm.vo.ETipoCuerpoCeleste; public class CuerpoCelesteDaoJDBC implements ICuerpoCelesteDao { - @Override - public void insertarListaCuerposCelestes(List listaCuerpos) throws AgenciaESAException { - String sql = "INSERT INTO T_CUERPO_CELESTE (nombre, gravedad_superficie_ms2, tipo) VALUES (?, ?, ?)"; - try (Connection con = GestorConexionJDBC.getConexionSGDB(); - PreparedStatement ps = con.prepareStatement(sql)) { + @Override + public void insertarCuerpoCeleste(CuerpoCeleste cuerpo) throws AgenciaESAException { + String sentenciaSQL = """ + INSERT INTO T_CUERPO_CELESTE (nombre, gravedad_superficie_ms2, tipo) + VALUES (?, ?, ?) + """; + try (Connection con = GestorConexionJDBC.getConexionSGDB(); + PreparedStatement ps = con.prepareStatement(sentenciaSQL)) { - con.setAutoCommit(false); - for (CuerpoCeleste cuerpo : listaCuerpos) { - ps.setString(1, cuerpo.getNombre()); - ps.setDouble(2, cuerpo.getGravedadSuperficioMs2()); - ps.setString(3, cuerpo.getTipo() != null ? cuerpo.getTipo().name() : null); - ps.addBatch(); - } - ps.executeBatch(); - con.commit(); - } catch (SQLException e) { - throw new AgenciaESAException(e, AgenciaESAException.ERROR_INSERCION, CuerpoCelesteDaoJDBC.class); - } - } + ps.setString(1, cuerpo.getNombre()); + ps.setDouble(2, cuerpo.getGravedadSuperficioMs2()); + ps.setString(3, cuerpo.getTipo() != null ? cuerpo.getTipo().name() : null); - @Override - public List obtenerListaCuerposCelestes() throws AgenciaESAException { - List lista = new ArrayList<>(); - String sql = "SELECT * FROM T_CUERPO_CELESTE"; - try (Connection con = GestorConexionJDBC.getConexionSGDB(); - PreparedStatement ps = con.prepareStatement(sql); - ResultSet rs = ps.executeQuery()) { + ps.executeUpdate(); + + } catch (SQLException e) { + throw new AgenciaESAException(e, AgenciaESAException.ERROR_INSERCION, CuerpoCelesteDaoJDBC.class); + } + } - while (rs.next()) { - CuerpoCeleste cuerpo = new CuerpoCeleste(); - cuerpo.setIdentificador(rs.getLong("identificador")); - cuerpo.setNombre(rs.getString("nombre")); - cuerpo.setGravedadSuperficioMs2(rs.getDouble("gravedad_superficie_ms2")); - String tipoStr = rs.getString("tipo"); - if (tipoStr != null) { - cuerpo.setTipo(TipoCuerpoCeleste.valueOf(tipoStr)); - } - lista.add(cuerpo); - } - } catch (SQLException e) { - throw new AgenciaESAException(e, AgenciaESAException.ERROR_CONSULTA, CuerpoCelesteDaoJDBC.class); - } - return lista; - } + @Override + public List obtenerListaCuerposCelestes() throws AgenciaESAException { + List lista = new ArrayList<>(); + String sql = "SELECT * FROM T_CUERPO_CELESTE"; + try (Connection con = GestorConexionJDBC.getConexionSGDB(); + PreparedStatement ps = con.prepareStatement(sql); + ResultSet rs = ps.executeQuery()) { - @Override - public CuerpoCeleste obtenerCuerpoPorNombre(String nombre) throws AgenciaESAException { - CuerpoCeleste cuerpo = null; - String sql = "SELECT * FROM T_CUERPO_CELESTE WHERE nombre = ?"; - try (Connection con = GestorConexionJDBC.getConexionSGDB(); - PreparedStatement ps = con.prepareStatement(sql)) { + while (rs.next()) { + CuerpoCeleste cuerpo = obtenerCuerpoCelesteDeResultSet(rs); + lista.add(cuerpo); + } + } catch (SQLException e) { + throw new AgenciaESAException(e, AgenciaESAException.ERROR_CONSULTA, CuerpoCelesteDaoJDBC.class); + } + return lista; + } - ps.setString(1, nombre); - try (ResultSet rs = ps.executeQuery()) { - if (rs.next()) { - cuerpo = new CuerpoCeleste(); - cuerpo.setIdentificador(rs.getLong("identificador")); - cuerpo.setNombre(rs.getString("nombre")); - cuerpo.setGravedadSuperficioMs2(rs.getDouble("gravedad_superficie_ms2")); - String tipoStr = rs.getString("tipo"); - if (tipoStr != null) { - cuerpo.setTipo(TipoCuerpoCeleste.valueOf(tipoStr)); - } - } - } - } catch (SQLException e) { - throw new AgenciaESAException(e, AgenciaESAException.ERROR_CONSULTA, CuerpoCelesteDaoJDBC.class); - } - return cuerpo; - } + @Override + public CuerpoCeleste obtenerCuerpoCelestePorNombre(String nombre) throws AgenciaESAException { + CuerpoCeleste cuerpo = null; + String sql = "SELECT * FROM T_CUERPO_CELESTE WHERE nombre = ?"; + try (Connection con = GestorConexionJDBC.getConexionSGDB(); PreparedStatement ps = con.prepareStatement(sql)) { + + ps.setString(1, nombre); + try (ResultSet rs = ps.executeQuery()) { + if (rs.next()) { + cuerpo = obtenerCuerpoCelesteDeResultSet(rs); + } + } + } catch (SQLException e) { + throw new AgenciaESAException(e, AgenciaESAException.ERROR_CONSULTA, CuerpoCelesteDaoJDBC.class); + } + return cuerpo; + } + + private CuerpoCeleste obtenerCuerpoCelesteDeResultSet(ResultSet resultado) throws SQLException { + CuerpoCeleste cuerpo = new CuerpoCeleste(); + + cuerpo.setIdentificador(resultado.getLong("identificador")); + cuerpo.setNombre(resultado.getString("nombre")); + cuerpo.setGravedadSuperficioMs2(resultado.getDouble("gravedad_superficie_ms2")); + String tipoStr = resultado.getString("tipo"); + if (tipoStr != null) { + cuerpo.setTipo(ETipoCuerpoCeleste.valueOf(tipoStr)); + } + + return cuerpo; + } } diff --git a/src/main/java/eu/agenciaesa/inm/dao/jdbc/GeneradorDaoJDBC.java b/src/main/java/eu/agenciaesa/inm/dao/jdbc/GeneradorDaoJDBC.java index 3d2ba35..8586396 100644 --- a/src/main/java/eu/agenciaesa/inm/dao/jdbc/GeneradorDaoJDBC.java +++ b/src/main/java/eu/agenciaesa/inm/dao/jdbc/GeneradorDaoJDBC.java @@ -4,67 +4,77 @@ import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; -import java.util.ArrayList; -import java.util.List; import eu.agenciaesa.inm.dao.IGeneradorDao; import eu.agenciaesa.inm.excepciones.AgenciaESAException; import eu.agenciaesa.inm.gestores.GestorConexionJDBC; import eu.agenciaesa.inm.vo.Base; +import eu.agenciaesa.inm.vo.ETipoGenerador; import eu.agenciaesa.inm.vo.Generador; -import eu.agenciaesa.inm.vo.TipoGenerador; public class GeneradorDaoJDBC implements IGeneradorDao { - @Override - public void insertarListaGeneradores(List listaGeneradores) throws AgenciaESAException { - String sql = "INSERT INTO T_GENERADOR (nombre, potencia_mw, tipo, cod_base) VALUES (?, ?, ?, ?)"; - try (Connection con = GestorConexionJDBC.getConexionSGDB(); - PreparedStatement ps = con.prepareStatement(sql)) { + @Override + public void insertarGenerador(Generador generador) throws AgenciaESAException { - con.setAutoCommit(false); - for (Generador gen : listaGeneradores) { - ps.setString(1, gen.getNombre()); - ps.setDouble(2, gen.getPotenciaMW()); - ps.setString(3, gen.getTipo() != null ? gen.getTipo().name() : null); - ps.setString(4, gen.getBase() != null ? gen.getBase().getCodigo() : null); - ps.addBatch(); - } - ps.executeBatch(); - con.commit(); - } catch (SQLException e) { - throw new AgenciaESAException(e, AgenciaESAException.ERROR_INSERCION, GeneradorDaoJDBC.class); - } - } + String sentenciaSQL = """ + INSERT INTO T_GENERADOR (nombre, potencia_mw, tipo, cod_base) + VALUES (?, ?, ?, ?) + """; + try (Connection con = GestorConexionJDBC.getConexionSGDB(); + PreparedStatement ps = con.prepareStatement(sentenciaSQL)) { - @Override - public List obtenerListaGeneradores() throws AgenciaESAException { - List lista = new ArrayList<>(); - String sql = "SELECT * FROM T_GENERADOR"; - try (Connection con = GestorConexionJDBC.getConexionSGDB(); - PreparedStatement ps = con.prepareStatement(sql); - ResultSet rs = ps.executeQuery()) { + ps.setString(1, generador.getNombre()); + ps.setDouble(2, generador.getPotenciaMW()); + ps.setString(3, generador.getTipo() != null ? generador.getTipo().name() : null); + ps.setString(4, generador.getBase() != null ? generador.getBase().getCodigo() : null); - while (rs.next()) { - Generador gen = new Generador(); - gen.setIdentificador(rs.getLong("identificador")); - gen.setNombre(rs.getString("nombre")); - gen.setPotenciaMW(rs.getDouble("potencia_mw")); - String tipoStr = rs.getString("tipo"); - if (tipoStr != null) { - gen.setTipo(TipoGenerador.valueOf(tipoStr)); - } - String codBase = rs.getString("cod_base"); - if (codBase != null) { - Base base = new Base(); - base.setCodigo(codBase); - gen.setBase(base); - } - lista.add(gen); - } - } catch (SQLException e) { - throw new AgenciaESAException(e, AgenciaESAException.ERROR_CONSULTA, GeneradorDaoJDBC.class); - } - return lista; - } + ps.executeUpdate(); + + } catch (SQLException e) { + throw new AgenciaESAException(e, AgenciaESAException.ERROR_INSERCION, GeneradorDaoJDBC.class); + } + } + + @Override + public Generador obtenerGeneradorPorNombre(String nombreGenerador) throws AgenciaESAException { + Generador generador = null; + String sql = """ + SELECT * FROM T_GENERADOR g join T_BASE b + on cod_base = codigo + WHERE g.nombre = ? + """; + try (Connection con = GestorConexionJDBC.getConexionSGDB(); + PreparedStatement ps = con.prepareStatement(sql);) { + ps.setString(1, nombreGenerador); + ResultSet rs = ps.executeQuery(); + // Se asume que el nombre del generador es único, por lo que se detiene al encontrar el primero + if(rs.next()) { + generador = obtenerGeneradorDeResultSet(rs); + } + } catch (SQLException e) { + throw new AgenciaESAException(e, AgenciaESAException.ERROR_CONSULTA, GeneradorDaoJDBC.class); + } + return generador; + } + + private Generador obtenerGeneradorDeResultSet(ResultSet resultado) throws SQLException { + Generador generador = new Generador(); + generador.setIdentificador(resultado.getLong("identificador")); + generador.setNombre(resultado.getString("g.nombre")); + generador.setPotenciaMW(resultado.getDouble("potencia_mw")); + String tipoStr = resultado.getString("tipo"); + if (tipoStr != null) { + generador.setTipo(ETipoGenerador.valueOf(tipoStr)); + } + String codBase = resultado.getString("b.codigo"); + if (codBase != null) { + Base base = new Base(); + base.setCodigo(codBase); + base.setNombre(resultado.getString("b.nombre")); + generador.setBase(base); + } + + return generador; + } } diff --git a/src/main/java/eu/agenciaesa/inm/dao/jpa/ExperimentoDaoJPA.java b/src/main/java/eu/agenciaesa/inm/dao/jpa/ExperimentoDaoJPA.java index b219d48..b5f4f4d 100644 --- a/src/main/java/eu/agenciaesa/inm/dao/jpa/ExperimentoDaoJPA.java +++ b/src/main/java/eu/agenciaesa/inm/dao/jpa/ExperimentoDaoJPA.java @@ -12,39 +12,35 @@ import eu.agenciaesa.inm.vo.Experimento; public class ExperimentoDaoJPA implements IExperimentoDao { - @Override - public void insertarListaExperimentos(List listaExperimentos) throws AgenciaESAException { - EntityManager em = GestorEntityManagerJPA.getEntityManager(); - EntityTransaction tx = em.getTransaction(); - try { - tx.begin(); - for (Experimento exp : listaExperimentos) { - // El campo "resultado" ya viene calculado por el ProcesadorDatos - // siguiendo las reglas de negocio, o se puede recalcular aquí. - // Según el requisito: "el campo resultado seguirá estás condiciones..." - // Me aseguro de persistir el objeto. - em.persist(exp); - } - tx.commit(); - } catch (Exception e) { - if (tx.isActive()) - tx.rollback(); - throw new AgenciaESAException(e, AgenciaESAException.ERROR_INSERCION, ExperimentoDaoJPA.class); - } finally { - em.close(); - } - } + @Override + public void insertarExperimento(Experimento experimento) throws AgenciaESAException { + EntityManager entityManager = GestorEntityManagerJPA.getEntityManager(); + EntityTransaction transaccion = entityManager.getTransaction(); + try { + transaccion.begin(); + + entityManager.persist(experimento); - @Override - public List obtenerListaExperimentos() throws AgenciaESAException { - EntityManager em = GestorEntityManagerJPA.getEntityManager(); - try { - TypedQuery query = em.createQuery("SELECT e FROM Experimento e", Experimento.class); - return query.getResultList(); - } catch (Exception e) { - throw new AgenciaESAException(e, AgenciaESAException.ERROR_CONSULTA, ExperimentoDaoJPA.class); - } finally { - em.close(); - } - } + transaccion.commit(); + } catch (Exception e) { + if (transaccion.isActive()) + transaccion.rollback(); + throw new AgenciaESAException(e, AgenciaESAException.ERROR_INSERCION, ExperimentoDaoJPA.class); + } finally { + entityManager.close(); + } + } + + @Override + public List obtenerListaExperimentos() throws AgenciaESAException { + EntityManager em = GestorEntityManagerJPA.getEntityManager(); + try { + TypedQuery query = em.createQuery("SELECT e FROM Experimento e", Experimento.class); + return query.getResultList(); + } catch (Exception e) { + throw new AgenciaESAException(e, AgenciaESAException.ERROR_CONSULTA, ExperimentoDaoJPA.class); + } finally { + em.close(); + } + } } diff --git a/src/main/java/eu/agenciaesa/inm/dao/mngdb/ExperimientoDaoMongoDB.java b/src/main/java/eu/agenciaesa/inm/dao/mngdb/ExperimientoDaoMongoDB.java index 0ad9c1b..6aea57b 100644 --- a/src/main/java/eu/agenciaesa/inm/dao/mngdb/ExperimientoDaoMongoDB.java +++ b/src/main/java/eu/agenciaesa/inm/dao/mngdb/ExperimientoDaoMongoDB.java @@ -13,57 +13,65 @@ import eu.agenciaesa.inm.excepciones.AgenciaESAException; import eu.agenciaesa.inm.gestores.GestorConexionMongoDB; import eu.agenciaesa.inm.vo.Experimento; import eu.agenciaesa.inm.vo.Modulo; -import eu.agenciaesa.inm.vo.TipoExperimento; +import eu.agenciaesa.inm.vo.ETipoExperimento; /** -* ExperimientoDaoMongoDB: Clase que se encarga de ... -* -* @autor: Isidoro Nevares Martín (IES Virgen de la Paloma) -* @date: 24 feb 2026 -*/ -public class ExperimientoDaoMongoDB implements IExperimentoDao{ + * ExperimientoDaoMongoDB: Clase que se encarga de implementar el acceso a datos de los experimentos utilizando MongoDB como base de datos + * + * @autor: Isidoro Nevares Martín (IES Virgen de la Paloma) + * @date: 24 feb 2026 + */ +public class ExperimientoDaoMongoDB implements IExperimentoDao { private final static String COLECCION = "C_EXPERIMENTO"; + @Override - public void insertarListaExperimentos(List listaExperimentos) throws AgenciaESAException { + public void insertarExperimento(Experimento experimento) throws AgenciaESAException { // TODO Auto-generated method stub - + } @Override public List obtenerListaExperimentos() throws AgenciaESAException { List listaExperimentos = new ArrayList<>(); - + MongoCollection coleccionMongoDB = null; try { coleccionMongoDB = GestorConexionMongoDB.getMongoDatabase().getCollection(COLECCION); - - + FindIterable documentos = coleccionMongoDB.find(); for (Document documento : documentos) { String nombreExperimento = documento.getString("nombre"); String sTipoExperimiento = documento.getString("tipo"); - TipoExperimento tipoExperimento=TipoExperimento.valueOf(sTipoExperimiento); + ETipoExperimento tipoExperimento = ETipoExperimento.valueOf(sTipoExperimiento); String resultadoExperimento = null; - + Document documentoDatos = documento.get("datos", Document.class); - if(tipoExperimento == TipoExperimento.Geológico) { - String tipoRoca = documentoDatos.getString("tipo_roca"); - Integer profundidad = documentoDatos.getInteger("profundidad_muestra_m"); - - resultadoExperimento = "Muestra de " + tipoRoca + " obtenida a " + profundidad + "m de profundidad."; - } else if(tipoExperimento == TipoExperimento.Biológico) { + switch (tipoExperimento) { + case Geológico: + String tipoRoca = documentoDatos.getString("tipo_roca"); + Integer profundidad = documentoDatos.getInteger("profundidad_muestra_m"); + + resultadoExperimento = "Muestra de %s obtenida a %s m de profundidad."; + resultadoExperimento = String.format(resultadoExperimento, tipoRoca, profundidad); + break; + case Biológico: String tipoMuestra = documentoDatos.getString("tipo_muestra"); Integer nivel = documentoDatos.getInteger("nivel_bioseguridad"); - - resultadoExperimento = "Análisis de " + tipoMuestra + " realizado bajo nivel " + nivel + " de bioseguridad."; - } else { + + resultadoExperimento = "Análisis de %s realizado bajo nivel %d de bioseguridad."; + resultadoExperimento = String.format(resultadoExperimento, tipoMuestra, nivel); + break; + case Climatológico: Integer duracion = documentoDatos.getInteger("duracion_dias"); String frecuencia = documentoDatos.getString("frecuencia"); String parametro = documentoDatos.getString("parametro_estudio"); - - resultadoExperimento = "Estudio de " + parametro + " durante " + duracion + " días con frecuencia " + frecuencia; + + resultadoExperimento = "Estudio de %s durante %d días con frecuencia %s."; + resultadoExperimento = String.format(resultadoExperimento, parametro, duracion, frecuencia); + break; } + // Aquí no llamo a otro DAO para obtener el módulo, sino que lo creo directamente con el código que tengo en el documento de MongoDB String codigoModulo = documento.getString("modulo_id"); Modulo modulo = new Modulo(); modulo.setCodigo(codigoModulo); @@ -73,13 +81,13 @@ public class ExperimientoDaoMongoDB implements IExperimentoDao{ experimento.setTipo(tipoExperimento); experimento.setResultado(resultadoExperimento); experimento.setModulo(modulo); - + listaExperimentos.add(experimento); } } catch (Exception e) { - throw new AgenciaESAException(e, AgenciaESAException.ERROR_CONSULTA , getClass()); + throw new AgenciaESAException(e, AgenciaESAException.ERROR_CONSULTA, ExperimientoDaoMongoDB.class); } - + return listaExperimentos; } diff --git a/src/main/java/eu/agenciaesa/inm/gestores/GestorConexionMongoDB.java b/src/main/java/eu/agenciaesa/inm/gestores/GestorConexionMongoDB.java index 79767a5..5d3844e 100644 --- a/src/main/java/eu/agenciaesa/inm/gestores/GestorConexionMongoDB.java +++ b/src/main/java/eu/agenciaesa/inm/gestores/GestorConexionMongoDB.java @@ -23,12 +23,12 @@ public class GestorConexionMongoDB { // Carga la configuración desde META-INF/persistence.xml static { // Cadena de conexion con la base de datos MongoDB - String uri = GestorFicheroConfiguracion.obtenerValor("url.conexion.mongodb"); + String uri = GestorFicheroConfiguracion.obtenerValor("mongodb.url"); // Se abre la conexión con MongoDB MongoClient clienteMongo = MongoClients.create(uri); // Obtener una base de datos MongoDB desde Java - String bbddMongoDB= GestorFicheroConfiguracion.obtenerValor("bbdd.mongodb"); + String bbddMongoDB= GestorFicheroConfiguracion.obtenerValor("mongodb.bbdd"); mongoDBDatabase = clienteMongo.getDatabase(bbddMongoDB); } diff --git a/src/main/java/eu/agenciaesa/inm/gestores/GestorFicheroConfiguracion.java b/src/main/java/eu/agenciaesa/inm/gestores/GestorFicheroConfiguracion.java index 4257168..5e46751 100644 --- a/src/main/java/eu/agenciaesa/inm/gestores/GestorFicheroConfiguracion.java +++ b/src/main/java/eu/agenciaesa/inm/gestores/GestorFicheroConfiguracion.java @@ -16,7 +16,7 @@ public class GestorFicheroConfiguracion { static { try (InputStream is = GestorFicheroConfiguracion.class.getClassLoader() - .getResourceAsStream("conf.properties")) { + .getResourceAsStream("agenciaesa.conf")) { if (is != null) { PROPIEDADES.load(is); } else { @@ -29,9 +29,7 @@ public class GestorFicheroConfiguracion { /** * Obtiene el valor asociado a la clave especificada. - * - * @param clave la clave a buscar - * @return el valor o {@code null} si no existe + */ public static String obtenerValor(String clave) { return PROPIEDADES.getProperty(clave); diff --git a/src/main/java/eu/agenciaesa/inm/procesamiento/ProcesadorDatos.java b/src/main/java/eu/agenciaesa/inm/procesamiento/ProcesadorDatos.java deleted file mode 100644 index fc805ae..0000000 --- a/src/main/java/eu/agenciaesa/inm/procesamiento/ProcesadorDatos.java +++ /dev/null @@ -1,392 +0,0 @@ -package eu.agenciaesa.inm.procesamiento; - -import java.io.BufferedReader; -import java.io.FileReader; -import java.io.IOException; -import java.time.LocalDate; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -import eu.agenciaesa.inm.utilidades.GestorURLs; -import eu.agenciaesa.inm.vo.Base; -import eu.agenciaesa.inm.vo.CuerpoCeleste; -import eu.agenciaesa.inm.vo.Experimento; -import eu.agenciaesa.inm.vo.FuncionPrincipalBase; -import eu.agenciaesa.inm.vo.Generador; -import eu.agenciaesa.inm.vo.Modulo; -import eu.agenciaesa.inm.vo.TipoExperimento; -import eu.agenciaesa.inm.vo.TipoGenerador; -import tools.jackson.databind.JsonNode; -import tools.jackson.databind.ObjectMapper; -import tools.jackson.databind.node.ArrayNode; -import tools.jackson.dataformat.xml.XmlMapper; - -/** - * ProcesadorDatos: clase que procesa los distintos orígenes de información - * de la Agencia ESA (XML, JSON, CSV), usando JsonNode de Jackson sin - * anotaciones - * de mapeo. - * - * Estructura espejada de ProcesadorDatos en examen_aadd_2trim_FP. - * - * @author Isidoro Nevares Martín - IES Virgen de la Paloma - */ -public class ProcesadorDatos { - - // ----------------------------------------------------------------------- - // BASES Y MÓDULOS desde XML - // ----------------------------------------------------------------------- - - /** - * Obtiene la lista de Bases (con sus Módulos) desde la URL XML configurada. - * - * @return Lista de objetos Base o null si hay error. - */ - public List obtenerBasesDeURL(String urlBases) { - List listaBases = null; - - String xmlContenido = GestorURLs.getTextoFromURL(urlBases); - if (xmlContenido == null || xmlContenido.isEmpty()) { - System.err.println("No se pudo obtener el XML de bases desde la URL: " + urlBases); - return null; - } - - ObjectMapper mapeadorXML = new XmlMapper(); - try { - JsonNode nodoRaiz = mapeadorXML.readTree(xmlContenido); - if (nodoRaiz != null) { - listaBases = new ArrayList<>(); - - // El XML tiene ...... - // Jackson XML convierte el nodo raíz en el elemento "bases" - // y los hijos "base" en campos o arrays. - JsonNode nodoBases = nodoRaiz.has("base") ? nodoRaiz.get("base") : nodoRaiz; - - if (nodoBases.isArray()) { - for (JsonNode nodoBase : nodoBases) { - Base base = obtenerBaseDeJsonNode(nodoBase); - if (base != null) - listaBases.add(base); - } - } else if (!nodoBases.isMissingNode() && !nodoBases.isNull()) { - Base base = obtenerBaseDeJsonNode(nodoBases); - if (base != null) - listaBases.add(base); - } - } - } catch (Exception e) { - System.err.println("Error procesando XML de bases con JsonNode: " + e.getMessage()); - e.printStackTrace(); - } - - return listaBases; - } - - /** - * Convierte un JsonNode que representa un elemento <base> del XML. - */ - private Base obtenerBaseDeJsonNode(JsonNode nodoBase) { - if (nodoBase == null || nodoBase.isNull()) - return null; - - Base base = new Base(); - - if (nodoBase.has("id")) { - base.setCodigo(nodoBase.get("id").asText("")); - } - if (nodoBase.has("nombre")) { - base.setNombre(nodoBase.get("nombre").asText("")); - } - if (nodoBase.has("fecha_establecimiento")) { - String fechaStr = nodoBase.get("fecha_establecimiento").asText(""); - if (!fechaStr.isEmpty()) { - try { - base.setFechaEstablecimiento(LocalDate.parse(fechaStr)); - } catch (Exception e) { - System.err.println("Fecha de establecimiento no válida: " + fechaStr); - } - } - } - if (nodoBase.has("funcion_ppal")) { - String funcion = nodoBase.get("funcion_ppal").asText(""); - try { - base.setFuncionPrincipal(FuncionPrincipalBase.valueOf(funcion)); - } catch (IllegalArgumentException e) { - System.err.println("Función principal desconocida: " + funcion); - } - } - // Cuerpo celeste referenciado por nombre en el atributo nombre del elemento - // - if (nodoBase.has("cuerpo")) { - JsonNode nodoCuerpo = nodoBase.get("cuerpo"); - String nombreCuerpo = nodoCuerpo.has("nombre") ? nodoCuerpo.get("nombre").asText("") : ""; - if (!nombreCuerpo.isEmpty()) { - CuerpoCeleste cuerpo = new CuerpoCeleste(); - cuerpo.setNombre(nombreCuerpo); - base.setCuerpo(cuerpo); - } - } - - return base; - } - - /** - * Obtiene la lista de Módulos para una base a partir del JsonNode de la base. - * Se llama por el procesador de bases para extraer módulos anidados. - */ - public List obtenerModulosDeBase(JsonNode nodoBase, Base base) { - List listaModulos = new ArrayList<>(); - if (nodoBase == null || !nodoBase.has("modulos")) - return listaModulos; - - JsonNode nodoModulos = nodoBase.get("modulos"); - JsonNode nodoModulo = nodoModulos.has("modulo") ? nodoModulos.get("modulo") : nodoModulos; - - if (nodoModulo.isArray()) { - for (JsonNode m : nodoModulo) { - Modulo modulo = obtenerModuloDeJsonNode(m, base); - if (modulo != null) - listaModulos.add(modulo); - } - } else if (!nodoModulo.isMissingNode() && !nodoModulo.isNull()) { - Modulo modulo = obtenerModuloDeJsonNode(nodoModulo, base); - if (modulo != null) - listaModulos.add(modulo); - } - return listaModulos; - } - - private Modulo obtenerModuloDeJsonNode(JsonNode nodoModulo, Base base) { - if (nodoModulo == null || nodoModulo.isNull()) - return null; - Modulo modulo = new Modulo(); - if (nodoModulo.has("id")) { - modulo.setCodigo(nodoModulo.get("id").asText("")); - } - if (nodoModulo.has("nombre")) { - modulo.setNombre(nodoModulo.get("nombre").asText("")); - } - if (nodoModulo.has("consumo_energia")) { - modulo.setConsumoEnergiaMW(nodoModulo.get("consumo_energia").asDouble(0.0)); - } - modulo.setBase(base); - return modulo; - } - - // ----------------------------------------------------------------------- - // EXPERIMENTOS desde JSON - // ----------------------------------------------------------------------- - - /** - * Obtiene la lista de Experimentos desde la URL JSON configurada. - * Aplica la lógica de construcción del campo "resultado" según el tipo. - * - * @return Lista de objetos Experimento o null si hay error. - */ - public List obtenerExperimentosDeURL(String urlExperimentos) { - List listaExperimentos = null; - - String jsonContenido = GestorURLs.getTextoFromURL(urlExperimentos); - if (jsonContenido == null || jsonContenido.isEmpty()) { - System.err.println("No se pudo obtener el JSON de experimentos desde la URL: " + urlExperimentos); - return null; - } - - ObjectMapper mapeadorJSON = new ObjectMapper(); - try { - JsonNode nodoRaiz = mapeadorJSON.readTree(jsonContenido); - if (nodoRaiz != null) { - listaExperimentos = new ArrayList<>(); - - // El JSON puede ser un array de experimentos directamente o - // un objeto con un campo "experimentos" o similar. - JsonNode elementos = nodoRaiz.isArray() ? nodoRaiz - : (nodoRaiz.has("experimentos") ? nodoRaiz.get("experimentos") : nodoRaiz); - - if (elementos.isArray()) { - for (JsonNode nodo : elementos) { - Experimento exp = obtenerExperimentoDeJsonNode(nodo); - if (exp != null) - listaExperimentos.add(exp); - } - } else if (!elementos.isMissingNode() && !elementos.isNull()) { - // Iterar los campos del objeto por si cada campo es un experimento - Iterator campos = elementos.elements(); - while (campos.hasNext()) { - Experimento exp = obtenerExperimentoDeJsonNode(campos.next()); - if (exp != null) - listaExperimentos.add(exp); - } - } - } - } catch (Exception e) { - System.err.println("Error procesando JSON de experimentos con JsonNode: " + e.getMessage()); - e.printStackTrace(); - } - - return listaExperimentos; - } - - /** - * Convierte un JsonNode que representa un experimento en el objeto Experimento, - * incluyendo la construcción del campo resultado según el tipo. - */ - private Experimento obtenerExperimentoDeJsonNode(JsonNode nodoExp) { - if (nodoExp == null || nodoExp.isNull()) - return null; - - Experimento experimento = new Experimento(); - - if (nodoExp.has("nombre")) { - experimento.setNombre(nodoExp.get("nombre").asText("")); - } - - // Tipo de experimento - TipoExperimento tipo = null; - if (nodoExp.has("tipo")) { - try { - tipo = TipoExperimento.valueOf(nodoExp.get("tipo").asText("")); - experimento.setTipo(tipo); - } catch (IllegalArgumentException e) { - System.err.println("Tipo de experimento desconocido: " + nodoExp.get("tipo").asText("")); - } - } - - // Módulo asociado (solo se asocia código para que el DAO resuelva la relación) - if (nodoExp.has("cod_modulo")) { - Modulo modulo = new Modulo(); - modulo.setCodigo(nodoExp.get("cod_modulo").asText("")); - experimento.setModulo(modulo); - } - - // Construcción del campo "resultado" según la lógica de negocio del - // ContextoProyecto - String resultado = construirResultado(tipo, nodoExp); - experimento.setResultado(resultado); - - return experimento; - } - - /** - * Aplica las reglas de negocio del ContextoProyecto para el campo resultado: - *
    - *
  • Geológico: "Muestra de {material} obtenida a {profundidad} m de - * profundidad."
  • - *
  • Biológico: "Análisis de {organismo} realizado bajo nivel {nivel} - * de bioseguridad.
  • - *
  • Climatológico: "Estudio de {variable} durante {dias} días con - * frecuencia {frecuencia}."
  • - *
- */ - private String construirResultado(TipoExperimento tipo, JsonNode nodo) { - if (tipo == null) - return "Resultado no determinado."; - switch (tipo) { - case Geológico: - String material = nodo.has("material") ? nodo.get("material").asText("Basalto") : "Basalto"; - String profundidad = nodo.has("profundidad") ? nodo.get("profundidad").asText("120") : "120"; - return String.format("Muestra de %s obtenida a %s m de profundidad.", material, profundidad); - - case Biológico: - String organismo = nodo.has("organismo") ? nodo.get("organismo").asText("Microorganismo") - : "Microorganismo"; - String nivel = nodo.has("nivel") ? nodo.get("nivel").asText("3") : "3"; - return String.format("Análisis de %s realizado bajo nivel %s de bioseguridad.", organismo, nivel); - - case Climatológico: - String variable = nodo.has("variable") ? nodo.get("variable").asText("Temperatura") : "Temperatura"; - String dias = nodo.has("dias") ? nodo.get("dias").asText("30") : "30"; - String frecuencia = nodo.has("frecuencia") ? nodo.get("frecuencia").asText("Diaria") : "Diaria"; - return String.format("Estudio de %s durante %s días con frecuencia %s.", variable, dias, frecuencia); - - default: - return "Resultado no determinado."; - } - } - - // ----------------------------------------------------------------------- - // GENERADORES desde CSV - // ----------------------------------------------------------------------- - - /** - * Obtiene la lista de Generadores desde un fichero CSV. - * Cabecera esperada: identificador,nombre,potencia_mw,tipo,cod_base - * - * @param rutaCSV ruta al fichero CSV - * @return Lista de Generador o null si hay error. - */ - public List obtenerGeneradoresDeFicheroCSV(String rutaCSV) { - List listaGeneradores = null; - - try (BufferedReader reader = new BufferedReader(new FileReader(rutaCSV))) { - listaGeneradores = new ArrayList<>(); - String linea; - boolean primeraLinea = true; - - while ((linea = reader.readLine()) != null) { - if (primeraLinea) { - // Saltar cabecera - primeraLinea = false; - continue; - } - if (linea.trim().isEmpty()) - continue; - - Generador generador = obtenerGeneradorDeLineaCSV(linea); - if (generador != null) - listaGeneradores.add(generador); - } - } catch (IOException e) { - System.err.println("Error leyendo CSV de generadores: " + e.getMessage()); - e.printStackTrace(); - } - - return listaGeneradores; - } - - /** - * Parsea una línea del CSV y devuelve un Generador. - * Formato: nombre,potencia_mw,tipo,cod_base - */ - private Generador obtenerGeneradorDeLineaCSV(String linea) { - String[] partes = linea.split(","); - if (partes.length < 4) { - System.err.println("Línea CSV de generador con formato incorrecto: " + linea); - return null; - } - - Generador generador = new Generador(); - generador.setNombre(partes[0].trim()); - try { - generador.setPotenciaMW(Double.parseDouble(partes[1].trim())); - } catch (NumberFormatException e) { - System.err.println("Potencia MW no válida: " + partes[1].trim()); - } - try { - generador.setTipo(TipoGenerador.valueOf(partes[2].trim())); - } catch (IllegalArgumentException e) { - System.err.println("Tipo de generador desconocido: " + partes[2].trim()); - } - if (partes.length >= 4 && !partes[3].trim().isEmpty()) { - Base base = new Base(); - base.setCodigo(partes[3].trim()); - generador.setBase(base); - } - - return generador; - } - - 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/eu/agenciaesa/inm/procesamiento/ProcesadorGeneradoresFicheroCSV.java b/src/main/java/eu/agenciaesa/inm/procesamiento/ProcesadorGeneradoresFicheroCSV.java new file mode 100644 index 0000000..c461e71 --- /dev/null +++ b/src/main/java/eu/agenciaesa/inm/procesamiento/ProcesadorGeneradoresFicheroCSV.java @@ -0,0 +1,85 @@ +package eu.agenciaesa.inm.procesamiento; + +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import eu.agenciaesa.inm.dao.IBaseDao; +import eu.agenciaesa.inm.dao.hibernate.BaseDaoHibernate; +import eu.agenciaesa.inm.excepciones.AgenciaESAException; +import eu.agenciaesa.inm.gestores.GestorFicheroConfiguracion; +import eu.agenciaesa.inm.vo.Base; +import eu.agenciaesa.inm.vo.ETipoGenerador; +import eu.agenciaesa.inm.vo.Generador; + +/** + * ProcesadorFicheroCSV: clase que procesa los generadores provenientes de un + * fichero CSV + * + * @author Isidoro Nevares Martín - IES Virgen de la Paloma + */ +public class ProcesadorGeneradoresFicheroCSV { + + public List obtenerGeneradoresDeFicheroCSV() throws AgenciaESAException { + String rutaCSV = GestorFicheroConfiguracion.obtenerValor("ruta.csv.generadores"); + + List listaGeneradores = null; + + try (BufferedReader reader = new BufferedReader(new FileReader(rutaCSV))) { + listaGeneradores = new ArrayList<>(); + String linea; + + // Saltar cabecera + reader.readLine(); + + while ((linea = reader.readLine()) != null) { + + Generador generador = obtenerGeneradorDeLineaCSV(linea); + + if (generador != null) + listaGeneradores.add(generador); + } + } catch (IOException e) { + System.err.println("Error leyendo CSV de generadores: " + e.getMessage()); + e.printStackTrace(); + } + + return listaGeneradores; + } + + + + private Generador obtenerGeneradorDeLineaCSV(String linea) throws AgenciaESAException { + Generador generador = null; + + String[] partes = linea.split("\\|"); + String nombreGenerador= partes[0].trim(); + String tipoGenerador= partes[1].trim(); + String potenciaMW= partes[2].trim(); + String nombreBase= partes[4].trim(); + + if(nombreBase!=null && !nombreBase.isEmpty()) { + IBaseDao baseDao = new BaseDaoHibernate(); + Base baseBBDD = baseDao.obtenerBasePorNombre(nombreBase); + // Solo se crea el generador si existe la base asociada en la BBDD, si no se ignora el registro del CSV + if (baseBBDD != null) { + generador = new Generador(); + generador.setNombre(nombreGenerador); + generador.setPotenciaMW(Double.parseDouble(potenciaMW)); + generador.setTipo(ETipoGenerador.valueOf(tipoGenerador)); + + generador.setBase(baseBBDD); + + } + } + + if (partes.length >= 4 && !partes[3].trim().isEmpty()) { + + } + + return generador; + } + +} diff --git a/src/main/java/eu/agenciaesa/inm/procesamiento/ProcesadorModulosURL.java b/src/main/java/eu/agenciaesa/inm/procesamiento/ProcesadorModulosURL.java new file mode 100644 index 0000000..b4fa385 --- /dev/null +++ b/src/main/java/eu/agenciaesa/inm/procesamiento/ProcesadorModulosURL.java @@ -0,0 +1,161 @@ +package eu.agenciaesa.inm.procesamiento; + +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; + +import eu.agenciaesa.inm.dao.ICuerpoCelesteDao; +import eu.agenciaesa.inm.dao.jdbc.CuerpoCelesteDaoJDBC; +import eu.agenciaesa.inm.excepciones.AgenciaESAException; +import eu.agenciaesa.inm.gestores.GestorFicheroConfiguracion; +import eu.agenciaesa.inm.utilidades.GestorURLs; +import eu.agenciaesa.inm.vo.Base; +import eu.agenciaesa.inm.vo.CuerpoCeleste; +import eu.agenciaesa.inm.vo.EFuncionPrincipalBase; +import eu.agenciaesa.inm.vo.Modulo; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.dataformat.xml.XmlMapper; + +/** + * ProcesadorBaseYModulosURL: clase que procesa las base y módulos que vienen de + * una URL + * + * @author Isidoro Nevares Martín - IES Virgen de la Paloma + */ +public class ProcesadorModulosURL { + + // Se ofrece este método público se devuelve una lista de Base (que contendrá la lista de módulos) a partir de la URL de configuración. + // El método se puede llamar desde el main o desde un procesador de bases para obtener la lista completa de bases con sus módulos anidados. + public List obtenerListaBasesDeURL() { + String urlBases = GestorFicheroConfiguracion.obtenerValor("url.bases-modulos"); + List listaBases = null; + + String xmlContenido = GestorURLs.getTextoFromURL(urlBases); + if (xmlContenido == null || xmlContenido.isEmpty()) { + System.err.println("No se pudo obtener el XML de bases desde la URL: " + urlBases); + return null; + } + + ObjectMapper mapeadorXML = new XmlMapper(); + try { + JsonNode nodoRaiz = mapeadorXML.readTree(xmlContenido); + if (nodoRaiz != null) { + listaBases = new ArrayList<>(); + + JsonNode nodoBases = nodoRaiz.has("base") ? nodoRaiz.get("base") : nodoRaiz; + + nodoBases = convertirJsonNodeEnArrayNode(nodoBases); + + for (JsonNode nodoBase : nodoBases) { + Base base = obtenerBaseDeJsonNode(nodoBase); + if (base != null) { + listaBases.add(base); + List listaModulos = obtenerModulosDeBase(nodoBase, base); + base.setListaModulos(listaModulos); + } + } + } + } catch (Exception e) { + System.err.println("Error procesando XML de bases con JsonNode: " + e.getMessage()); + e.printStackTrace(); + } + + return listaBases; + } + + private Base obtenerBaseDeJsonNode(JsonNode nodoBase) throws AgenciaESAException { + if (nodoBase == null || nodoBase.isNull()) + return null; + + String codigo = nodoBase.get("id").asString(); + String nombreBase = nodoBase.get("nombre").asString(); + String fechaStr = nodoBase.get("fecha_establecimiento").asString(); + + Base base = new Base(); + base.setCodigo(codigo); + base.setNombre(nombreBase); + + if (!fechaStr.isEmpty()) { + try { + base.setFechaEstablecimiento(LocalDate.parse(fechaStr)); + } catch (Exception e) { + System.err.println("Fecha de establecimiento no válida: " + fechaStr); + } + } + + String funcion = nodoBase.get("funcion_ppal").asString(); + try { + base.setFuncionPrincipal(EFuncionPrincipalBase.valueOf(funcion)); + } catch (IllegalArgumentException e) { + System.err.println("Función principal desconocida: " + funcion); + } + + JsonNode nodoCuerpo = nodoBase.get("cuerpo"); + String nombreCuerpo = nodoCuerpo.get("nombre").asString(); + // Se carga el cuerpo celeste asociado a la base. Si el cuerpo no existe en la BBDD, se inserta uno nuevo con el nombre obtenido del XML. + if (!nombreCuerpo.isEmpty()) { + ICuerpoCelesteDao cuerpoDao = new CuerpoCelesteDaoJDBC(); + CuerpoCeleste cuerpo = null; + CuerpoCeleste cuerpoBBDD = cuerpoDao.obtenerCuerpoCelestePorNombre(nombreCuerpo); + if(cuerpoBBDD == null) { + cuerpo = new CuerpoCeleste(); + cuerpo.setNombre(nombreCuerpo); + cuerpoDao.insertarCuerpoCeleste(cuerpo); + } + cuerpo= cuerpoDao.obtenerCuerpoCelestePorNombre(nombreCuerpo); + base.setCuerpo(cuerpo); + } + + return base; + } + + + private List obtenerModulosDeBase(JsonNode nodoBase, Base base) { + + List listaModulos = new ArrayList<>(); + if (nodoBase == null) + return listaModulos; + + JsonNode nodoListaModulos = nodoBase.get("modulos").get("modulo"); + + nodoListaModulos = convertirJsonNodeEnArrayNode(nodoListaModulos); + for (JsonNode nodoModulo : nodoListaModulos) { + Modulo modulo = obtenerModuloDeJsonNode(nodoModulo, base); + if (modulo != null) + listaModulos.add(modulo); + } + + return listaModulos; + } + + private Modulo obtenerModuloDeJsonNode(JsonNode nodoModulo, Base base) { + if (nodoModulo == null || nodoModulo.isNull()) + return null; + String codigo = nodoModulo.get("id").asString(); + String nombreModulo = nodoModulo.get("nombre").asString(); + Double consumoEnergia = nodoModulo.get("consumo_energia").asDouble(0.0); + + Modulo modulo = new Modulo(); + modulo.setCodigo(codigo); + modulo.setNombre(nombreModulo); + modulo.setConsumoEnergiaMW(consumoEnergia); + + modulo.setBase(base); + return modulo; + } + + 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/eu/agenciaesa/inm/vo/Base.java b/src/main/java/eu/agenciaesa/inm/vo/Base.java index 7958419..9945a06 100644 --- a/src/main/java/eu/agenciaesa/inm/vo/Base.java +++ b/src/main/java/eu/agenciaesa/inm/vo/Base.java @@ -1,12 +1,32 @@ package eu.agenciaesa.inm.vo; import java.time.LocalDate; +import java.util.List; -import jakarta.persistence.*; +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; +import jakarta.persistence.FetchType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.OneToMany; +import jakarta.persistence.Table; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; /** * Entidad que representa la tabla T_BASE. */ +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor + @Entity @Table(name = "T_BASE") public class Base { @@ -22,55 +42,13 @@ public class Base { @Enumerated(EnumType.STRING) // Se almacena el valor de un enumerado @Column(name = "funcion_principal", nullable = false) - private FuncionPrincipalBase funcionPrincipal; + private EFuncionPrincipalBase funcionPrincipal; @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "id_cuerpo", referencedColumnName = "identificador") private CuerpoCeleste cuerpo; + + @OneToMany(mappedBy = "base", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER) + private List listaModulos; - public String getCodigo() { - return codigo; - } - - public void setCodigo(String codigo) { - this.codigo = codigo; - } - - public String getNombre() { - return nombre; - } - - public void setNombre(String nombre) { - this.nombre = nombre; - } - - public LocalDate getFechaEstablecimiento() { - return fechaEstablecimiento; - } - - public void setFechaEstablecimiento(LocalDate fechaEstablecimiento) { - this.fechaEstablecimiento = fechaEstablecimiento; - } - - public FuncionPrincipalBase getFuncionPrincipal() { - return funcionPrincipal; - } - - public void setFuncionPrincipal(FuncionPrincipalBase funcionPrincipal) { - this.funcionPrincipal = funcionPrincipal; - } - - public CuerpoCeleste getCuerpo() { - return cuerpo; - } - - public void setCuerpo(CuerpoCeleste cuerpo) { - this.cuerpo = cuerpo; - } - - @Override - public String toString() { - return "Base [codigo=" + codigo + ", nombre=" + nombre + ", fechaEstablecimiento=" + fechaEstablecimiento - + ", funcionPrincipal=" + funcionPrincipal + ", cuerpo=" + cuerpo + "]"; - } } diff --git a/src/main/java/eu/agenciaesa/inm/vo/CuerpoCeleste.java b/src/main/java/eu/agenciaesa/inm/vo/CuerpoCeleste.java index e1cf9be..e7c6562 100644 --- a/src/main/java/eu/agenciaesa/inm/vo/CuerpoCeleste.java +++ b/src/main/java/eu/agenciaesa/inm/vo/CuerpoCeleste.java @@ -1,10 +1,19 @@ package eu.agenciaesa.inm.vo; -import jakarta.persistence.*; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import lombok.Data; /** * Entidad que representa la tabla T_CUERPO_CELESTE. */ +@Data @Entity @Table(name = "T_CUERPO_CELESTE") public class CuerpoCeleste { @@ -19,43 +28,6 @@ public class CuerpoCeleste { private double gravedadSuperficioMs2; @Enumerated(EnumType.STRING) // Se almacena el valor de un enumerado - private TipoCuerpoCeleste tipo; + private ETipoCuerpoCeleste tipo; - public Long getIdentificador() { - return identificador; - } - - public void setIdentificador(Long identificador) { - this.identificador = identificador; - } - - public String getNombre() { - return nombre; - } - - public void setNombre(String nombre) { - this.nombre = nombre; - } - - public double getGravedadSuperficioMs2() { - return gravedadSuperficioMs2; - } - - public void setGravedadSuperficioMs2(double gravedadSuperficioMs2) { - this.gravedadSuperficioMs2 = gravedadSuperficioMs2; - } - - public TipoCuerpoCeleste getTipo() { - return tipo; - } - - public void setTipo(TipoCuerpoCeleste tipo) { - this.tipo = tipo; - } - - @Override - public String toString() { - return "CuerpoCeleste [identificador=" + identificador + ", nombre=" + nombre + ", gravedadSuperficioMs2=" - + gravedadSuperficioMs2 + ", tipo=" + tipo + "]"; - } } diff --git a/src/main/java/eu/agenciaesa/inm/vo/FuncionPrincipalBase.java b/src/main/java/eu/agenciaesa/inm/vo/EFuncionPrincipalBase.java similarity index 66% rename from src/main/java/eu/agenciaesa/inm/vo/FuncionPrincipalBase.java rename to src/main/java/eu/agenciaesa/inm/vo/EFuncionPrincipalBase.java index 7906789..66f5957 100644 --- a/src/main/java/eu/agenciaesa/inm/vo/FuncionPrincipalBase.java +++ b/src/main/java/eu/agenciaesa/inm/vo/EFuncionPrincipalBase.java @@ -1,6 +1,6 @@ package eu.agenciaesa.inm.vo; -public enum FuncionPrincipalBase { +public enum EFuncionPrincipalBase { Investigación, Logística, Control; } diff --git a/src/main/java/eu/agenciaesa/inm/vo/TipoCuerpoCeleste.java b/src/main/java/eu/agenciaesa/inm/vo/ETipoCuerpoCeleste.java similarity index 70% rename from src/main/java/eu/agenciaesa/inm/vo/TipoCuerpoCeleste.java rename to src/main/java/eu/agenciaesa/inm/vo/ETipoCuerpoCeleste.java index fb604f8..931d9a8 100644 --- a/src/main/java/eu/agenciaesa/inm/vo/TipoCuerpoCeleste.java +++ b/src/main/java/eu/agenciaesa/inm/vo/ETipoCuerpoCeleste.java @@ -1,6 +1,6 @@ package eu.agenciaesa.inm.vo; -public enum TipoCuerpoCeleste { +public enum ETipoCuerpoCeleste { Planeta, Satélite, Asteroide, Planetoide; } diff --git a/src/main/java/eu/agenciaesa/inm/vo/TipoExperimento.java b/src/main/java/eu/agenciaesa/inm/vo/ETipoExperimento.java similarity index 70% rename from src/main/java/eu/agenciaesa/inm/vo/TipoExperimento.java rename to src/main/java/eu/agenciaesa/inm/vo/ETipoExperimento.java index a5416b5..60971a1 100644 --- a/src/main/java/eu/agenciaesa/inm/vo/TipoExperimento.java +++ b/src/main/java/eu/agenciaesa/inm/vo/ETipoExperimento.java @@ -1,6 +1,6 @@ package eu.agenciaesa.inm.vo; -public enum TipoExperimento { +public enum ETipoExperimento { Biológico, Climatológico, Geológico; } diff --git a/src/main/java/eu/agenciaesa/inm/vo/TipoGenerador.java b/src/main/java/eu/agenciaesa/inm/vo/ETipoGenerador.java similarity index 68% rename from src/main/java/eu/agenciaesa/inm/vo/TipoGenerador.java rename to src/main/java/eu/agenciaesa/inm/vo/ETipoGenerador.java index 35c318e..f1305b8 100644 --- a/src/main/java/eu/agenciaesa/inm/vo/TipoGenerador.java +++ b/src/main/java/eu/agenciaesa/inm/vo/ETipoGenerador.java @@ -1,6 +1,6 @@ package eu.agenciaesa.inm.vo; -public enum TipoGenerador { +public enum ETipoGenerador { Nuclear, Solar, Geotérmica; } diff --git a/src/main/java/eu/agenciaesa/inm/vo/TipoNave.java b/src/main/java/eu/agenciaesa/inm/vo/ETipoNave.java similarity index 79% rename from src/main/java/eu/agenciaesa/inm/vo/TipoNave.java rename to src/main/java/eu/agenciaesa/inm/vo/ETipoNave.java index 597301a..aa9a17f 100644 --- a/src/main/java/eu/agenciaesa/inm/vo/TipoNave.java +++ b/src/main/java/eu/agenciaesa/inm/vo/ETipoNave.java @@ -1,6 +1,6 @@ package eu.agenciaesa.inm.vo; -public enum TipoNave { +public enum ETipoNave { Transporte, Reconocimiento, Científica, Mantenimiento; } diff --git a/src/main/java/eu/agenciaesa/inm/vo/Experimento.java b/src/main/java/eu/agenciaesa/inm/vo/Experimento.java index 83b02ed..7002a6d 100644 --- a/src/main/java/eu/agenciaesa/inm/vo/Experimento.java +++ b/src/main/java/eu/agenciaesa/inm/vo/Experimento.java @@ -11,10 +11,12 @@ import jakarta.persistence.Id; import jakarta.persistence.JoinColumn; import jakarta.persistence.ManyToOne; import jakarta.persistence.Table; +import lombok.Data; /** * Entidad que representa la tabla T_EXPERIMENTO. */ +@Data @Entity @Table(name = "T_EXPERIMENTO") public class Experimento { @@ -29,56 +31,10 @@ public class Experimento { private String resultado; @Enumerated(EnumType.STRING) // Se almacena el valor de un enumerado - private TipoExperimento tipo; + private ETipoExperimento tipo; @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "cod_modulo", referencedColumnName ="codigo" ) private Modulo modulo; - public Long getIdentificador() { - return identificador; - } - - public void setIdentificador(Long identificador) { - this.identificador = identificador; - } - - public String getNombre() { - return nombre; - } - - public void setNombre(String nombre) { - this.nombre = nombre; - } - - public String getResultado() { - return resultado; - } - - public void setResultado(String resultado) { - this.resultado = resultado; - } - - public TipoExperimento getTipo() { - return tipo; - } - - public void setTipo(TipoExperimento tipo) { - this.tipo = tipo; - } - - public Modulo getModulo() { - return modulo; - } - - public void setModulo(Modulo modulo) { - this.modulo = modulo; - } - - @Override - public String toString() { - return "Experimento [identificador=" + identificador + ", nombre=" + nombre + ", resultado=" + resultado - + ", tipo=" + tipo + ", modulo=" + modulo + "]"; - } - } diff --git a/src/main/java/eu/agenciaesa/inm/vo/Generador.java b/src/main/java/eu/agenciaesa/inm/vo/Generador.java index bad7035..a07d048 100644 --- a/src/main/java/eu/agenciaesa/inm/vo/Generador.java +++ b/src/main/java/eu/agenciaesa/inm/vo/Generador.java @@ -11,10 +11,12 @@ import jakarta.persistence.Id; import jakarta.persistence.JoinColumn; import jakarta.persistence.OneToOne; import jakarta.persistence.Table; +import lombok.Data; /** * Entidad que representa la tabla T_GENERADOR. */ +@Data @Entity @Table(name = "T_GENERADOR") public class Generador { @@ -30,55 +32,10 @@ public class Generador { private double potenciaMW; @Enumerated(EnumType.STRING) // Se almacena el valor de un enumerado - private TipoGenerador tipo; + private ETipoGenerador tipo; @OneToOne(fetch = FetchType.EAGER) @JoinColumn(name = "cod_base", referencedColumnName = "codigo") private Base base; - public Long getIdentificador() { - return identificador; - } - - public void setIdentificador(Long identificador) { - this.identificador = identificador; - } - - public String getNombre() { - return nombre; - } - - public void setNombre(String nombre) { - this.nombre = nombre; - } - - public double getPotenciaMW() { - return potenciaMW; - } - - public void setPotenciaMW(double potenciaMW) { - this.potenciaMW = potenciaMW; - } - - public TipoGenerador getTipo() { - return tipo; - } - - public void setTipo(TipoGenerador tipo) { - this.tipo = tipo; - } - - public Base getBase() { - return base; - } - - public void setBase(Base base) { - this.base = base; - } - - @Override - public String toString() { - return "Generador [identificador=" + identificador + ", nombre=" + nombre + ", potenciaMW=" + potenciaMW - + ", tipo=" + tipo + ", base=" + base + "]"; - } } diff --git a/src/main/java/eu/agenciaesa/inm/vo/Mision.java b/src/main/java/eu/agenciaesa/inm/vo/Mision.java index 1aec1b2..94283cf 100644 --- a/src/main/java/eu/agenciaesa/inm/vo/Mision.java +++ b/src/main/java/eu/agenciaesa/inm/vo/Mision.java @@ -10,10 +10,12 @@ import jakarta.persistence.JoinColumn; import jakarta.persistence.ManyToOne; import jakarta.persistence.MapsId; import jakarta.persistence.Table; +import lombok.Data; /** * Entidad que representa la tabla T_MISION. */ +@Data @Entity @Table(name = "T_MISION") public class Mision { diff --git a/src/main/java/eu/agenciaesa/inm/vo/MisionID.java b/src/main/java/eu/agenciaesa/inm/vo/MisionID.java index 3a4d969..2c9f0b4 100644 --- a/src/main/java/eu/agenciaesa/inm/vo/MisionID.java +++ b/src/main/java/eu/agenciaesa/inm/vo/MisionID.java @@ -6,7 +6,9 @@ import java.util.Objects; import jakarta.persistence.Column; import jakarta.persistence.Embeddable; +import lombok.Data; +@Data @Embeddable public class MisionID implements Serializable { @@ -47,34 +49,4 @@ public class MisionID implements Serializable { return Objects.hash(codigoNave, idCuerpoCeleste, fechaInicio); } - public String getCodigoNave() { - return codigoNave; - } - - public void setCodigoNave(String codigoNave) { - this.codigoNave = codigoNave; - } - - public Long getIdCuerpoCeleste() { - return idCuerpoCeleste; - } - - public void setIdCuerpoCeleste(Long idCuerpoCeleste) { - this.idCuerpoCeleste = idCuerpoCeleste; - } - - public LocalDate getFechaInicio() { - return fechaInicio; - } - - public void setFechaInicio(LocalDate fechaInicio) { - this.fechaInicio = fechaInicio; - } - - @Override - public String toString() { - return "MisionID [codigoNave=" + codigoNave + ", idCuerpoCeleste=" + idCuerpoCeleste + ", fechaInicio=" - + fechaInicio + "]"; - } - } diff --git a/src/main/java/eu/agenciaesa/inm/vo/Modulo.java b/src/main/java/eu/agenciaesa/inm/vo/Modulo.java index 25f9012..db7a7c2 100644 --- a/src/main/java/eu/agenciaesa/inm/vo/Modulo.java +++ b/src/main/java/eu/agenciaesa/inm/vo/Modulo.java @@ -7,10 +7,19 @@ import jakarta.persistence.Id; import jakarta.persistence.JoinColumn; import jakarta.persistence.ManyToOne; import jakarta.persistence.Table; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; /** * Entidad que representa la tabla T_MODULO. */ +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor + @Entity @Table(name = "T_MODULO") public class Modulo { @@ -28,41 +37,4 @@ public class Modulo { @JoinColumn(name = "cod_base", referencedColumnName = "codigo") private Base base; - public String getCodigo() { - return codigo; - } - - public void setCodigo(String codigo) { - this.codigo = codigo; - } - - public String getNombre() { - return nombre; - } - - public void setNombre(String nombre) { - this.nombre = nombre; - } - - public double getConsumoEnergiaMW() { - return consumoEnergiaMW; - } - - public void setConsumoEnergiaMW(double consumoEnergiaMW) { - this.consumoEnergiaMW = consumoEnergiaMW; - } - - public Base getBase() { - return base; - } - - public void setBase(Base base) { - this.base = base; - } - - @Override - public String toString() { - return "Modulo [codigo=" + codigo + ", nombre=" + nombre + ", consumoEnergiaMW=" + consumoEnergiaMW + ", base=" - + base + "]"; - } } diff --git a/src/main/java/eu/agenciaesa/inm/vo/Nave.java b/src/main/java/eu/agenciaesa/inm/vo/Nave.java index 8c1c0a8..615b444 100644 --- a/src/main/java/eu/agenciaesa/inm/vo/Nave.java +++ b/src/main/java/eu/agenciaesa/inm/vo/Nave.java @@ -6,10 +6,13 @@ import jakarta.persistence.EnumType; import jakarta.persistence.Enumerated; import jakarta.persistence.Id; import jakarta.persistence.Table; +import lombok.Data; /** * Entidad que representa la tabla T_NAVE. */ + +@Data @Entity @Table(name = "T_NAVE") public class Nave { @@ -27,13 +30,13 @@ public class Nave { private int autonomiaDias; @Enumerated(EnumType.STRING) // Se almacena el valor de un enumerado - private TipoNave tipo; + private ETipoNave tipo; - public TipoNave getTipo() { + public ETipoNave getTipo() { return tipo; } - public void setTipo(TipoNave tipo) { + public void setTipo(ETipoNave tipo) { this.tipo = tipo; } diff --git a/src/main/resources/META-INF/persistence.xml b/src/main/resources/META-INF/persistence.xml index 82febc4..1c7c260 100644 --- a/src/main/resources/META-INF/persistence.xml +++ b/src/main/resources/META-INF/persistence.xml @@ -5,20 +5,32 @@ http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> + org.hibernate.jpa.HibernatePersistenceProvider - - eu.agenciaesa.inm.vo.Experimento - - - - - - - - - + + eu.agenciaesa.inm.vo.Nave + eu.agenciaesa.inm.vo.CuerpoCeleste + eu.agenciaesa.inm.vo.Base + eu.agenciaesa.inm.vo.Generador + eu.agenciaesa.inm.vo.Modulo + eu.agenciaesa.inm.vo.Experimento + eu.agenciaesa.inm.vo.MisionID + eu.agenciaesa.inm.vo.Mision + + + + + + + + + + + + + - + diff --git a/src/main/resources/agenciaesa.conf b/src/main/resources/agenciaesa.conf new file mode 100644 index 0000000..a7616dd --- /dev/null +++ b/src/main/resources/agenciaesa.conf @@ -0,0 +1,15 @@ +# Información sobre la Base de datos MySQL +jdbc.driver=org.postgresql.Driver +jdbc.url=jdbc:postgresql://192.168.1.36:5432/agencia_esa_inm +jdbc.usuario=vdlp +jdbc.password=postgresql_123 + +# Información sobre la Base de datos MongoDB +mongodb.url=mongodb://admin:mongodb_123@192.168.1.36:27017 +mongodb.bbdd=agencia_esa_inm + +#ruta fichero xml para bases y módulos +url.bases-modulos=https://dam2.decieloytierra.es/agenciaesa/bases-modulos.xml + +#ruta fichero csv con información de los generadores +ruta.csv.generadores=ficheros/info-generadores.csv diff --git a/src/main/resources/conf.properties b/src/main/resources/conf.properties deleted file mode 100644 index 506c310..0000000 --- a/src/main/resources/conf.properties +++ /dev/null @@ -1,5 +0,0 @@ -url.conexion.mongodb=mongodb://admin:mongodb_123@192.168.1.36:27017 -bbdd.mongodb=agencia_esa_inm -url.bases=https://dam2.decieloytierra.es/agenciaesa/bases-modulos.xml -url.experimentos=https://aulavirtual35.educa.madrid.org/ies.lapaloma.madrid/pluginfile.php/232510/mod_assign/intro/experimentos_modulos.json?time=1771520391646 -ruta.csv=info-generadores.csv \ No newline at end of file diff --git a/src/main/resources/hibernate.cfg.xml b/src/main/resources/hibernate.cfg.xml index d7f6e93..4e2f1f7 100644 --- a/src/main/resources/hibernate.cfg.xml +++ b/src/main/resources/hibernate.cfg.xml @@ -9,8 +9,8 @@ org.hibernate.dialect.PostgreSQLDialect - postgres - postgres_123 + vdlp + postgresql_123 update @@ -18,8 +18,15 @@ true false + + + + + + +