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
+
+
+
+
+
+
+