Restructarción código
This commit is contained in:
parent
ae3441237a
commit
a4372718dc
@ -26,8 +26,9 @@
|
||||
<attribute name="optional" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jdk-25">
|
||||
<attributes>
|
||||
<attribute name="module" value="true"/>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
@ -38,19 +39,19 @@
|
||||
</classpathentry>
|
||||
<classpathentry kind="src" path="target/generated-sources/annotations">
|
||||
<attributes>
|
||||
<attribute name="ignore_optional_problems" value="true"/>
|
||||
<attribute name="optional" value="true"/>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
<attribute name="ignore_optional_problems" value="true"/>
|
||||
<attribute name="m2e-apt" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="src" output="target/test-classes" path="target/generated-test-sources/test-annotations">
|
||||
<attributes>
|
||||
<attribute name="ignore_optional_problems" value="true"/>
|
||||
<attribute name="test" value="true"/>
|
||||
<attribute name="optional" value="true"/>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
<attribute name="ignore_optional_problems" value="true"/>
|
||||
<attribute name="m2e-apt" value="true"/>
|
||||
<attribute name="test" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="output" path="target/classes"/>
|
||||
|
||||
2
.project
2
.project
@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>aadd_act5_6</name>
|
||||
<name>aadd_act5_6_v1</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
|
||||
2
.settings/org.eclipse.core.resources.prefs
Normal file
2
.settings/org.eclipse.core.resources.prefs
Normal file
@ -0,0 +1,2 @@
|
||||
eclipse.preferences.version=1
|
||||
encoding/<project>=UTF-8
|
||||
@ -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
|
||||
|
||||
5
ficheros/info-generadores.csv
Normal file
5
ficheros/info-generadores.csv
Normal file
@ -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
|
||||
|
7
pom.xml
7
pom.xml
@ -40,5 +40,12 @@
|
||||
<artifactId>jackson-dataformat-xml</artifactId>
|
||||
<version>3.0.1</version>
|
||||
</dependency>
|
||||
|
||||
<!-- Source: https://mvnrepository.com/artifact/org.projectlombok/lombok -->
|
||||
<dependency>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
<version>1.18.42</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
@ -1,14 +1,29 @@
|
||||
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) {
|
||||
@ -16,11 +31,13 @@ public class AppAgenciaEsa {
|
||||
|
||||
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<Base> 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<Generador> 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<Experimento> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -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<Base> listaBases) throws AgenciaESAException;
|
||||
void insertarBase(Base base) throws AgenciaESAException;
|
||||
|
||||
List<Base> obtenerListaBases() throws AgenciaESAException;
|
||||
|
||||
Base obtenerBasePorCodigo(String codigo) throws AgenciaESAException;
|
||||
Base obtenerBasePorNombre(String nombreBase) throws AgenciaESAException;
|
||||
}
|
||||
|
||||
@ -5,9 +5,9 @@ import eu.agenciaesa.inm.excepciones.AgenciaESAException;
|
||||
import eu.agenciaesa.inm.vo.CuerpoCeleste;
|
||||
|
||||
public interface ICuerpoCelesteDao {
|
||||
void insertarListaCuerposCelestes(List<CuerpoCeleste> listaCuerpos) throws AgenciaESAException;
|
||||
void insertarCuerpoCeleste(CuerpoCeleste cuerpo) throws AgenciaESAException;
|
||||
|
||||
List<CuerpoCeleste> obtenerListaCuerposCelestes() throws AgenciaESAException;
|
||||
|
||||
CuerpoCeleste obtenerCuerpoPorNombre(String nombre) throws AgenciaESAException;
|
||||
CuerpoCeleste obtenerCuerpoCelestePorNombre(String nombre) throws AgenciaESAException;
|
||||
}
|
||||
|
||||
@ -6,7 +6,7 @@ import eu.agenciaesa.inm.excepciones.AgenciaESAException;
|
||||
import eu.agenciaesa.inm.vo.Experimento;
|
||||
|
||||
public interface IExperimentoDao {
|
||||
void insertarListaExperimentos(List<Experimento> listaExperimentos) throws AgenciaESAException;
|
||||
void insertarExperimento(Experimento experimento) throws AgenciaESAException;
|
||||
|
||||
List<Experimento> obtenerListaExperimentos() throws AgenciaESAException;
|
||||
}
|
||||
|
||||
@ -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<Generador> listaGeneradores) throws AgenciaESAException;
|
||||
void insertarGenerador(Generador generador) throws AgenciaESAException;
|
||||
|
||||
List<Generador> obtenerListaGeneradores() throws AgenciaESAException;
|
||||
Generador obtenerGeneradorPorNombre(String nombreGenerador) throws AgenciaESAException;
|
||||
}
|
||||
|
||||
@ -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<Modulo> listaModulos) throws AgenciaESAException;
|
||||
void insertarModulo(Modulo modulo) throws AgenciaESAException;
|
||||
|
||||
List<Modulo> obtenerListaModulos() throws AgenciaESAException;
|
||||
Modulo obtenerModuloPorCodigo(String codigoModulo) throws AgenciaESAException;
|
||||
}
|
||||
|
||||
@ -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;
|
||||
@ -13,13 +12,13 @@ import eu.agenciaesa.inm.vo.Base;
|
||||
public class BaseDaoHibernate implements IBaseDao {
|
||||
|
||||
@Override
|
||||
public void insertarListaBases(List<Base> listaBases) throws AgenciaESAException {
|
||||
public void insertarBase(Base base) 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)
|
||||
@ -28,22 +27,21 @@ public class BaseDaoHibernate implements IBaseDao {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Base> obtenerListaBases() throws AgenciaESAException {
|
||||
try (Session session = GestorSesionHibernate.getSession()) {
|
||||
Query<Base> query = session.createQuery("FROM Base", Base.class);
|
||||
return query.list();
|
||||
} catch (Exception e) {
|
||||
throw new AgenciaESAException(e, AgenciaESAException.ERROR_CONSULTA, BaseDaoHibernate.class);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Base obtenerBasePorCodigo(String codigo) throws AgenciaESAException {
|
||||
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()) {
|
||||
return session.find(Base.class, codigo);
|
||||
SelectionQuery<Base> 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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -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;
|
||||
@ -13,13 +12,13 @@ import eu.agenciaesa.inm.vo.Modulo;
|
||||
public class ModuloDaoHibernate implements IModuloDao {
|
||||
|
||||
@Override
|
||||
public void insertarListaModulos(List<Modulo> listaModulos) throws AgenciaESAException {
|
||||
public void insertarModulo(Modulo modulo) 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)
|
||||
@ -29,12 +28,17 @@ public class ModuloDaoHibernate implements IModuloDao {
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Modulo> obtenerListaModulos() throws AgenciaESAException {
|
||||
try (Session session = GestorSesionHibernate.getSession()) {
|
||||
Query<Modulo> query = session.createQuery("FROM Modulo", Modulo.class);
|
||||
return query.list();
|
||||
} catch (Exception e) {
|
||||
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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -11,25 +11,25 @@ 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<CuerpoCeleste> listaCuerpos) throws AgenciaESAException {
|
||||
String sql = "INSERT INTO T_CUERPO_CELESTE (nombre, gravedad_superficie_ms2, tipo) VALUES (?, ?, ?)";
|
||||
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(sql)) {
|
||||
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();
|
||||
|
||||
ps.executeUpdate();
|
||||
|
||||
} catch (SQLException e) {
|
||||
throw new AgenciaESAException(e, AgenciaESAException.ERROR_INSERCION, CuerpoCelesteDaoJDBC.class);
|
||||
}
|
||||
@ -44,14 +44,7 @@ public class CuerpoCelesteDaoJDBC implements ICuerpoCelesteDao {
|
||||
ResultSet rs = ps.executeQuery()) {
|
||||
|
||||
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));
|
||||
}
|
||||
CuerpoCeleste cuerpo = obtenerCuerpoCelesteDeResultSet(rs);
|
||||
lista.add(cuerpo);
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
@ -61,23 +54,15 @@ public class CuerpoCelesteDaoJDBC implements ICuerpoCelesteDao {
|
||||
}
|
||||
|
||||
@Override
|
||||
public CuerpoCeleste obtenerCuerpoPorNombre(String nombre) throws AgenciaESAException {
|
||||
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)) {
|
||||
try (Connection con = GestorConexionJDBC.getConexionSGDB(); PreparedStatement ps = con.prepareStatement(sql)) {
|
||||
|
||||
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));
|
||||
}
|
||||
cuerpo = obtenerCuerpoCelesteDeResultSet(rs);
|
||||
}
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
@ -85,4 +70,18 @@ public class CuerpoCelesteDaoJDBC implements ICuerpoCelesteDao {
|
||||
}
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -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<Generador> 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)) {
|
||||
public void insertarGenerador(Generador generador) throws AgenciaESAException {
|
||||
|
||||
String sentenciaSQL = """
|
||||
INSERT INTO T_GENERADOR (nombre, potencia_mw, tipo, cod_base)
|
||||
VALUES (?, ?, ?, ?)
|
||||
""";
|
||||
try (Connection con = GestorConexionJDBC.getConexionSGDB();
|
||||
PreparedStatement ps = con.prepareStatement(sentenciaSQL)) {
|
||||
|
||||
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);
|
||||
|
||||
ps.executeUpdate();
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Generador> obtenerListaGeneradores() throws AgenciaESAException {
|
||||
List<Generador> lista = new ArrayList<>();
|
||||
String sql = "SELECT * FROM T_GENERADOR";
|
||||
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);
|
||||
ResultSet rs = ps.executeQuery()) {
|
||||
|
||||
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);
|
||||
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 lista;
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -13,25 +13,21 @@ import eu.agenciaesa.inm.vo.Experimento;
|
||||
public class ExperimentoDaoJPA implements IExperimentoDao {
|
||||
|
||||
@Override
|
||||
public void insertarListaExperimentos(List<Experimento> listaExperimentos) throws AgenciaESAException {
|
||||
EntityManager em = GestorEntityManagerJPA.getEntityManager();
|
||||
EntityTransaction tx = em.getTransaction();
|
||||
public void insertarExperimento(Experimento experimento) throws AgenciaESAException {
|
||||
EntityManager entityManager = GestorEntityManagerJPA.getEntityManager();
|
||||
EntityTransaction transaccion = entityManager.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();
|
||||
transaccion.begin();
|
||||
|
||||
entityManager.persist(experimento);
|
||||
|
||||
transaccion.commit();
|
||||
} catch (Exception e) {
|
||||
if (tx.isActive())
|
||||
tx.rollback();
|
||||
if (transaccion.isActive())
|
||||
transaccion.rollback();
|
||||
throw new AgenciaESAException(e, AgenciaESAException.ERROR_INSERCION, ExperimentoDaoJPA.class);
|
||||
} finally {
|
||||
em.close();
|
||||
entityManager.close();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -13,18 +13,19 @@ 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<Experimento> listaExperimentos) throws AgenciaESAException {
|
||||
public void insertarExperimento(Experimento experimento) throws AgenciaESAException {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
@ -37,33 +38,40 @@ public class ExperimientoDaoMongoDB implements IExperimentoDao{
|
||||
try {
|
||||
coleccionMongoDB = GestorConexionMongoDB.getMongoDatabase().getCollection(COLECCION);
|
||||
|
||||
|
||||
FindIterable<Document> 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) {
|
||||
switch (tipoExperimento) {
|
||||
case 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) {
|
||||
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);
|
||||
@ -77,7 +85,7 @@ public class ExperimientoDaoMongoDB implements IExperimentoDao{
|
||||
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;
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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<Base> obtenerBasesDeURL(String urlBases) {
|
||||
List<Base> 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 <bases><base id="...">...</base>...</bases>
|
||||
// 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
|
||||
// <cuerpo>
|
||||
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<Modulo> obtenerModulosDeBase(JsonNode nodoBase, Base base) {
|
||||
List<Modulo> 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<Experimento> obtenerExperimentosDeURL(String urlExperimentos) {
|
||||
List<Experimento> 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<JsonNode> 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:
|
||||
* <ul>
|
||||
* <li><b>Geológico</b>: "Muestra de {material} obtenida a {profundidad} m de
|
||||
* profundidad."</li>
|
||||
* <li><b>Biológico</b>: "Análisis de {organismo} realizado bajo nivel {nivel}
|
||||
* de bioseguridad.</li>
|
||||
* <li><b>Climatológico</b>: "Estudio de {variable} durante {dias} días con
|
||||
* frecuencia {frecuencia}."</li>
|
||||
* </ul>
|
||||
*/
|
||||
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<Generador> obtenerGeneradoresDeFicheroCSV(String rutaCSV) {
|
||||
List<Generador> 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -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<Generador> obtenerGeneradoresDeFicheroCSV() throws AgenciaESAException {
|
||||
String rutaCSV = GestorFicheroConfiguracion.obtenerValor("ruta.csv.generadores");
|
||||
|
||||
List<Generador> 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;
|
||||
}
|
||||
|
||||
}
|
||||
@ -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<Base> obtenerListaBasesDeURL() {
|
||||
String urlBases = GestorFicheroConfiguracion.obtenerValor("url.bases-modulos");
|
||||
List<Base> 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<Modulo> 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<Modulo> obtenerModulosDeBase(JsonNode nodoBase, Base base) {
|
||||
|
||||
List<Modulo> 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -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;
|
||||
|
||||
public String getCodigo() {
|
||||
return codigo;
|
||||
}
|
||||
@OneToMany(mappedBy = "base", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER)
|
||||
private List<Modulo> listaModulos;
|
||||
|
||||
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 + "]";
|
||||
}
|
||||
}
|
||||
|
||||
@ -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 + "]";
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package eu.agenciaesa.inm.vo;
|
||||
|
||||
public enum FuncionPrincipalBase {
|
||||
public enum EFuncionPrincipalBase {
|
||||
Investigación, Logística, Control;
|
||||
|
||||
}
|
||||
@ -1,6 +1,6 @@
|
||||
package eu.agenciaesa.inm.vo;
|
||||
|
||||
public enum TipoCuerpoCeleste {
|
||||
public enum ETipoCuerpoCeleste {
|
||||
Planeta, Satélite, Asteroide, Planetoide;
|
||||
|
||||
}
|
||||
@ -1,6 +1,6 @@
|
||||
package eu.agenciaesa.inm.vo;
|
||||
|
||||
public enum TipoExperimento {
|
||||
public enum ETipoExperimento {
|
||||
Biológico, Climatológico, Geológico;
|
||||
|
||||
}
|
||||
@ -1,6 +1,6 @@
|
||||
package eu.agenciaesa.inm.vo;
|
||||
|
||||
public enum TipoGenerador {
|
||||
public enum ETipoGenerador {
|
||||
Nuclear, Solar, Geotérmica;
|
||||
|
||||
}
|
||||
@ -1,6 +1,6 @@
|
||||
package eu.agenciaesa.inm.vo;
|
||||
|
||||
public enum TipoNave {
|
||||
public enum ETipoNave {
|
||||
Transporte, Reconocimiento, Científica, Mantenimiento;
|
||||
|
||||
}
|
||||
@ -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 + "]";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -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 + "]";
|
||||
}
|
||||
}
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -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 + "]";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -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 + "]";
|
||||
}
|
||||
}
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
|
||||
@ -5,19 +5,31 @@
|
||||
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
|
||||
<!-- Unidad Persistencia Hibernate -->
|
||||
<persistence-unit name="UP_AGENCIAESA_POSTGRESQL" transaction-type="RESOURCE_LOCAL">
|
||||
<!-- Proveedor de persistencia JPA -->
|
||||
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
|
||||
|
||||
<!-- Clases a "mapear" -->
|
||||
<class>eu.agenciaesa.inm.vo.Nave</class>
|
||||
<class>eu.agenciaesa.inm.vo.CuerpoCeleste</class>
|
||||
<class>eu.agenciaesa.inm.vo.Base</class>
|
||||
<class>eu.agenciaesa.inm.vo.Generador</class>
|
||||
<class>eu.agenciaesa.inm.vo.Modulo</class>
|
||||
<class>eu.agenciaesa.inm.vo.Experimento</class>
|
||||
<class>eu.agenciaesa.inm.vo.MisionID</class>
|
||||
<class>eu.agenciaesa.inm.vo.Mision</class>
|
||||
|
||||
<!-- Configuración para la conexión a la Base de Datos -->
|
||||
|
||||
<!-- Configuración de propiedades del SGDB (PostgreSQL) -->
|
||||
<properties>
|
||||
<property name="jakarta.persistence.jdbc.driver" value="org.postgresql.Driver" />
|
||||
<property name="jakarta.persistence.jdbc.url" value="jdbc:postgresql://192.168.1.36:5432/agencia_esa_inm" />
|
||||
<property name="jakarta.persistence.jdbc.user" value="postgres" />
|
||||
<property name="jakarta.persistence.jdbc.password" value="postgres_123" />
|
||||
<property name="jakarta.persistence.jdbc.url" value="jdbc:postgresql://192.168.1.36:5432/agencia_esa_inm"/>
|
||||
<property name="jakarta.persistence.jdbc.user" value="vdlp"/>
|
||||
<property name="jakarta.persistence.jdbc.password" value="postgresql_123"/>
|
||||
<property name="jakarta.persistence.jdbc.driver" value="org.postgresql.Driver"/>
|
||||
|
||||
<property name="hibernate.show_sql" value="true" />
|
||||
<property name="hibernate.hbm2ddl.auto" value="update" />
|
||||
<!-- Configuración Hibernate -->
|
||||
<property name="hibernate.hbm2ddl.auto" value="update"/>
|
||||
<property name="hibernate.show_sql" value="true"/>
|
||||
<property name="format_sql" value="true" />
|
||||
</properties>
|
||||
</persistence-unit>
|
||||
|
||||
|
||||
15
src/main/resources/agenciaesa.conf
Normal file
15
src/main/resources/agenciaesa.conf
Normal file
@ -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
|
||||
@ -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
|
||||
@ -9,8 +9,8 @@
|
||||
|
||||
<property name="dialect">org.hibernate.dialect.PostgreSQLDialect</property>
|
||||
|
||||
<property name="connection.username">postgres</property>
|
||||
<property name="connection.password">postgres_123</property>
|
||||
<property name="connection.username">vdlp</property>
|
||||
<property name="connection.password">postgresql_123</property>
|
||||
|
||||
<!-- Configuración de Hibernate -->
|
||||
<property name="hibernate.hbm2ddl.auto">update</property> <!-- 'update' para mantener el esquema en sincronía con las entidades -->
|
||||
@ -18,8 +18,15 @@
|
||||
<property name="hibernate.format_sql">true</property> <!-- Da formato a las consultas SQL -->
|
||||
<property name="hibernate.use_sql_comments">false</property> <!-- Añade comentarios en las consultas SQL -->
|
||||
|
||||
<!-- Clases a "mapear" -->
|
||||
<mapping class="eu.agenciaesa.inm.vo.Nave"></mapping>
|
||||
<mapping class="eu.agenciaesa.inm.vo.CuerpoCeleste"></mapping>
|
||||
<mapping class="eu.agenciaesa.inm.vo.Base"></mapping>
|
||||
<mapping class="eu.agenciaesa.inm.vo.Generador"></mapping>
|
||||
<mapping class="eu.agenciaesa.inm.vo.Modulo"></mapping>
|
||||
<mapping class="eu.agenciaesa.inm.vo.Experimento"></mapping>
|
||||
<mapping class="eu.agenciaesa.inm.vo.MisionID"></mapping>
|
||||
<mapping class="eu.agenciaesa.inm.vo.Mision"></mapping>
|
||||
|
||||
|
||||
</session-factory>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user