commit 21e005e3a22475658d11946e34151589f1296cd0 Author: Isidoro Nevares Date: Thu Feb 5 21:25:22 2026 +0100 Commit inicial diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..51a6fca --- /dev/null +++ b/.classpath @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..93e00af --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/bin/ +*.class +/target/ diff --git a/.project b/.project new file mode 100644 index 0000000..3950a9a --- /dev/null +++ b/.project @@ -0,0 +1,23 @@ + + + aadd_act5_3 + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + + 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 new file mode 100644 index 0000000..2f5cc74 --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,8 @@ +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.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000..f897a7f --- /dev/null +++ b/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..6ae4364 --- /dev/null +++ b/pom.xml @@ -0,0 +1,30 @@ + + 4.0.0 + org.lapaloma.aadd + aadd_act3_3 + 0.0.1-SNAPSHOT + + + + org.postgresql + postgresql + 42.7.8 + compile + + + + + org.hibernate.orm + hibernate-core + 7.1.11.Final + + + + + org.mongodb + mongodb-driver-sync + 5.6.2 + compile + + + \ No newline at end of file diff --git a/src/main/java/org/lapaloma/aadd/redmetro/AppRedMetro.java b/src/main/java/org/lapaloma/aadd/redmetro/AppRedMetro.java new file mode 100644 index 0000000..582a030 --- /dev/null +++ b/src/main/java/org/lapaloma/aadd/redmetro/AppRedMetro.java @@ -0,0 +1,43 @@ +package org.lapaloma.aadd.redmetro; + +import java.util.List; + +import org.lapaloma.aadd.redmetro.dao.ILineaDAO; +import org.lapaloma.aadd.redmetro.dao.jpa.LineaDaoJPA; +import org.lapaloma.aadd.redmetro.dao.mgdb.LineaDaoMongoDB; +import org.lapaloma.aadd.redmetro.vo.Linea; + +/** + * Clase principal que inicia la sesión de Hibernate. Al iniciar la sesión, + * Hibernate ejecutará hbm2ddl.auto=create y recreará la base de datos según las + * entidades definidas. + */ +public class AppRedMetro { + public static void main(String[] args) { + AppRedMetro app = new AppRedMetro(); + // Obtiene la Session de forma estática + // GestorEntityManagerJPA.getEntityManager(); + + app.migrarMongoDBAPostgreSQL(); + } + + private void migrarMongoDBAPostgreSQL() { + ILineaDAO lineaDAO = new LineaDaoMongoDB(); + List listaLineas = lineaDAO.obtenerListaLineas(); + if (listaLineas != null) { + lineaDAO = new LineaDaoJPA(); + for (Linea linea : listaLineas) { + + // Se comprueba si existe la línea en PostgreSQL + Linea lineaBBDD = lineaDAO.obtenerLineaPorID(linea.getCodigo()); + + // Si no existe la línea en PostgreSQL se inserta, caso contrario se actualiza. + if (lineaBBDD == null) { + lineaDAO.crearLinea(linea); + } else { + lineaDAO.actualizarLinea(linea); + } + } + } + } +} diff --git a/src/main/java/org/lapaloma/aadd/redmetro/dao/IColorDAO.java b/src/main/java/org/lapaloma/aadd/redmetro/dao/IColorDAO.java new file mode 100644 index 0000000..38ab357 --- /dev/null +++ b/src/main/java/org/lapaloma/aadd/redmetro/dao/IColorDAO.java @@ -0,0 +1,11 @@ +package org.lapaloma.aadd.redmetro.dao; + +import org.lapaloma.aadd.redmetro.vo.Color; + +public interface IColorDAO { + Color obtenerColorPorID(int identificador); + + void crearColor(Color color); + + void actualizarColor(Color color); +} diff --git a/src/main/java/org/lapaloma/aadd/redmetro/dao/ILineaDAO.java b/src/main/java/org/lapaloma/aadd/redmetro/dao/ILineaDAO.java new file mode 100644 index 0000000..5683bd4 --- /dev/null +++ b/src/main/java/org/lapaloma/aadd/redmetro/dao/ILineaDAO.java @@ -0,0 +1,16 @@ +package org.lapaloma.aadd.redmetro.dao; + +import java.util.List; + +import org.lapaloma.aadd.redmetro.vo.Linea; + +public interface ILineaDAO { + Linea obtenerLineaPorID(int identificador); + + List obtenerListaLineas(); + + void crearLinea(Linea linea); + + void actualizarLinea(Linea linea); + +} diff --git a/src/main/java/org/lapaloma/aadd/redmetro/dao/jpa/ColorDaoJPA.java b/src/main/java/org/lapaloma/aadd/redmetro/dao/jpa/ColorDaoJPA.java new file mode 100644 index 0000000..ef67328 --- /dev/null +++ b/src/main/java/org/lapaloma/aadd/redmetro/dao/jpa/ColorDaoJPA.java @@ -0,0 +1,75 @@ +package org.lapaloma.aadd.redmetro.dao.jpa; + +import org.lapaloma.aadd.redmetro.dao.IColorDAO; +import org.lapaloma.aadd.redmetro.gestores.GestorEntityManagerJPA; +import org.lapaloma.aadd.redmetro.vo.Color; + +import jakarta.persistence.EntityManager; +import jakarta.persistence.EntityTransaction; + +public class ColorDaoJPA implements IColorDAO { + @Override + public Color obtenerColorPorID(int codigo) { + Color color = null; + + // try con recursos "cerrables": Session + try (EntityManager gestorEntidades = GestorEntityManagerJPA.getEntityManager()) { + color = gestorEntidades.find(Color.class, codigo); + } catch (Exception e) { + e.printStackTrace(); + } + return color; + } + + @Override + public void crearColor(Color color) { + EntityManager gestorEntidades = null; + EntityTransaction transaccion = null; + + try { + gestorEntidades = GestorEntityManagerJPA.getEntityManager(); + transaccion = gestorEntidades.getTransaction(); + transaccion.begin(); + + gestorEntidades.persist(color); + + transaccion.commit(); + } catch (Exception e) { + if (transaccion != null && transaccion.isActive()) { + transaccion.rollback(); + } + e.printStackTrace(); + } finally { + if (gestorEntidades != null) { + gestorEntidades.close(); + } + } + } + + @Override + public void actualizarColor(Color color) { + EntityManager gestorEntidades = null; + EntityTransaction transaccion = null; + + try { + gestorEntidades = GestorEntityManagerJPA.getEntityManager(); + transaccion = gestorEntidades.getTransaction(); + transaccion.begin(); + + if (!gestorEntidades.contains(color)) + gestorEntidades.merge(color); + + transaccion.commit(); + } catch (Exception e) { + if (transaccion != null && transaccion.isActive()) { + transaccion.rollback(); + } + e.printStackTrace(); + } finally { + if (gestorEntidades != null) { + gestorEntidades.close(); + } + } + } + +} diff --git a/src/main/java/org/lapaloma/aadd/redmetro/dao/jpa/LineaDaoJPA.java b/src/main/java/org/lapaloma/aadd/redmetro/dao/jpa/LineaDaoJPA.java new file mode 100644 index 0000000..d30ffa8 --- /dev/null +++ b/src/main/java/org/lapaloma/aadd/redmetro/dao/jpa/LineaDaoJPA.java @@ -0,0 +1,83 @@ +package org.lapaloma.aadd.redmetro.dao.jpa; + +import java.util.List; + +import org.lapaloma.aadd.redmetro.dao.ILineaDAO; +import org.lapaloma.aadd.redmetro.gestores.GestorEntityManagerJPA; +import org.lapaloma.aadd.redmetro.vo.Linea; + +import jakarta.persistence.EntityManager; +import jakarta.persistence.EntityTransaction; + +public class LineaDaoJPA implements ILineaDAO { + @Override + public Linea obtenerLineaPorID(int codigo) { + Linea linea = null; + + // try con recursos "cerrables": Session + try (EntityManager gestorEntidades = GestorEntityManagerJPA.getEntityManager()) { + linea = gestorEntidades.find(Linea.class, codigo); + } catch (Exception e) { + e.printStackTrace(); + } + return linea; + } + + @Override + public void crearLinea(Linea linea) { + EntityManager gestorEntidades = null; + EntityTransaction transaccion = null; + + try { + gestorEntidades = GestorEntityManagerJPA.getEntityManager(); + transaccion = gestorEntidades.getTransaction(); + transaccion.begin(); + + gestorEntidades.persist(linea); + + transaccion.commit(); + } catch (Exception e) { + if (transaccion != null && transaccion.isActive()) { + transaccion.rollback(); + } + e.printStackTrace(); + } finally { + if (gestorEntidades != null) { + gestorEntidades.close(); + } + } + } + + @Override + public void actualizarLinea(Linea linea) { + EntityManager gestorEntidades = null; + EntityTransaction transaccion = null; + + try { + gestorEntidades = GestorEntityManagerJPA.getEntityManager(); + transaccion = gestorEntidades.getTransaction(); + transaccion.begin(); + + if (!gestorEntidades.contains(linea)) + gestorEntidades.merge(linea); + + transaccion.commit(); + } catch (Exception e) { + if (transaccion != null && transaccion.isActive()) { + transaccion.rollback(); + } + e.printStackTrace(); + } finally { + if (gestorEntidades != null) { + gestorEntidades.close(); + } + } + } + + @Override + public List obtenerListaLineas() { + // TODO Auto-generated method stub + return null; + } + +} diff --git a/src/main/java/org/lapaloma/aadd/redmetro/dao/mgdb/LineaDaoMongoDB.java b/src/main/java/org/lapaloma/aadd/redmetro/dao/mgdb/LineaDaoMongoDB.java new file mode 100644 index 0000000..889649c --- /dev/null +++ b/src/main/java/org/lapaloma/aadd/redmetro/dao/mgdb/LineaDaoMongoDB.java @@ -0,0 +1,86 @@ +package org.lapaloma.aadd.redmetro.dao.mgdb; + +import java.util.ArrayList; +import java.util.List; + +import org.bson.Document; +import org.lapaloma.aadd.redmetro.dao.ILineaDAO; +import org.lapaloma.aadd.redmetro.gestores.GestorConexionMongoDB; +import org.lapaloma.aadd.redmetro.vo.Color; +import org.lapaloma.aadd.redmetro.vo.Linea; + +import com.mongodb.client.FindIterable; +import com.mongodb.client.MongoCollection; + +import es.palomafp.aadd.inm.vo.Pais; + +/** + * + * ContinenteDaoMongoDB: Implentación MongoDB de las operaciones de + * IContinenteDAO. + * + * @author Isidoro Nevares Martín - IES Virgen de la Paloma + * @date 30 enero 2026 + */ +public class LineaDaoMongoDB implements ILineaDAO { + private final static String COLECCION_PAIS = "C_LINEA"; + + @Override + public Linea obtenerLineaPorID(int identificador) { + Linea linea = null; + + return linea; + } + + @Override + public List obtenerListaLineas() { + List listaLineas = null; + // Obtener colección MongoDB + MongoCollection coleccionMDb = GestorConexionMongoDB.getMongoDatabase().getCollection(COLECCION_PAIS); + + FindIterable documentosEncontrados = null; + documentosEncontrados = documentosEncontrados = coleccionMDb.find(); + if (documentosEncontrados != null) { + listaLineas = new ArrayList(); + for (Document documentoEncontrado : documentosEncontrados) { + Linea linea = getLineaFromDocumentoLinea(documentoEncontrado); + + listaLineas.add(linea); + } + } + return listaLineas; + } + + @Override + public void crearLinea(Linea linea) { + + } + + @Override + public void actualizarLinea(Linea linea) { + } + + private Linea getLineaFromDocumentoLinea(Document documentoLinea) { + Linea linea = null; + + /* + * int idMongoDB = documentoPais.getInteger("_id"); int identificador = + * documentoPais.getInteger("identificador"); String nombrePais = + * documentoPais.getString("nombre"); String capital = + * documentoPais.getString("capital"); + * + * Document documentoColor= (Document) documentoPais.get("continente"); String + * codigoContinente = documentoContinente.getString("codigo"); String + * nombreContinente = documentoContinente.getString("nombre"); + * + * Color color = new Color(); color.setCodigo(codigoContinente); + * color.setNombreContinente(nombreContinente); + * + * linea = new Linea(); linea.setIdentificador(identificador); + * linea.setNombrePais(nombrePais); linea.setCapital(capital); + * linea.setColor(color); + */ + + return linea; + } +} diff --git a/src/main/java/org/lapaloma/aadd/redmetro/gestores/GestorConexionMongoDB.java b/src/main/java/org/lapaloma/aadd/redmetro/gestores/GestorConexionMongoDB.java new file mode 100644 index 0000000..59a6296 --- /dev/null +++ b/src/main/java/org/lapaloma/aadd/redmetro/gestores/GestorConexionMongoDB.java @@ -0,0 +1,39 @@ +package org.lapaloma.aadd.redmetro.gestores; + +import com.mongodb.client.MongoClient; +import com.mongodb.client.MongoClients; +import com.mongodb.client.MongoDatabase; + +/** + * + * GestorConexionMongoDB: Clase que realiza la gestión de Conexiones a MongoDB. + * + * @author Isidoro Nevares Martín - IES Virgen de la Paloma + * @date 30 enero 2026 + * + * + */ + +public class GestorConexionMongoDB { + private static MongoDatabase mongoDBDatabase= null; + + private GestorConexionMongoDB() { // Constructor privado para evitar instanciación + } + + // 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"); + // 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"); + mongoDBDatabase = clienteMongo.getDatabase(bbddMongoDB); + } + + public static MongoDatabase getMongoDatabase() { + return mongoDBDatabase; + } + +} diff --git a/src/main/java/org/lapaloma/aadd/redmetro/gestores/GestorEntityManagerJPA.java b/src/main/java/org/lapaloma/aadd/redmetro/gestores/GestorEntityManagerJPA.java new file mode 100644 index 0000000..41bde21 --- /dev/null +++ b/src/main/java/org/lapaloma/aadd/redmetro/gestores/GestorEntityManagerJPA.java @@ -0,0 +1,41 @@ +package org.lapaloma.aadd.redmetro.gestores; + +import jakarta.persistence.EntityManager; +import jakarta.persistence.EntityManagerFactory; +import jakarta.persistence.Persistence; + +/** + * + * GestorEntityManagerJPA: Clase que realiza la gestión de EntityManagers de JPA. + * + * @author Isidoro Nevares Martín - IES Virgen de la Paloma + * @date 4 dic 2025 + * + * + */ + +public class GestorEntityManagerJPA { + private static EntityManagerFactory entityManagerFactory = null; + + private GestorEntityManagerJPA() { // Constructor privado para evitar instanciación + } + + // Carga la configuración desde META-INF/persistence.xml + static { + try { + entityManagerFactory = Persistence.createEntityManagerFactory("UP_PROYECTOSIES_ODB"); + } catch (Throwable ex) { + System.err.println("Error en EntityManagerFactory: " + ex); + throw new ExceptionInInitializerError(ex); + } + } + + public static EntityManager getEntityManager() { + return entityManagerFactory.createEntityManager(); + } + + + public static void closeEntityManagerFactory() { + entityManagerFactory.close(); + } +} diff --git a/src/main/java/org/lapaloma/aadd/redmetro/gestores/GestorFicheroConfiguracion.java b/src/main/java/org/lapaloma/aadd/redmetro/gestores/GestorFicheroConfiguracion.java new file mode 100644 index 0000000..896232a --- /dev/null +++ b/src/main/java/org/lapaloma/aadd/redmetro/gestores/GestorFicheroConfiguracion.java @@ -0,0 +1,39 @@ +/** + * GestorFicheroConfiguracion: clase utilitaria para leer propiedades del archivo application.properties. + * Provee un método estático que devuelve el valor asociado a una clave. + * + * @author Isidoro Nevares Martín - IES Virgen de la Paloma + * @date 25 nov 2025 + */ +package org.lapaloma.aadd.redmetro.gestores; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Properties; + +public class GestorFicheroConfiguracion { + private static final Properties PROPIEDADES = new Properties(); + + static { + try (InputStream is = GestorFicheroConfiguracion.class.getClassLoader() + .getResourceAsStream("conf.properties")) { + if (is != null) { + PROPIEDADES.load(is); + } else { + throw new IllegalStateException("No se encontró application.properties en el classpath"); + } + } catch (IOException e) { + throw new IllegalStateException("Error al cargar application.properties", e); + } + } + + /** + * 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/org/lapaloma/aadd/redmetro/vo/Acceso.java b/src/main/java/org/lapaloma/aadd/redmetro/vo/Acceso.java new file mode 100644 index 0000000..13646eb --- /dev/null +++ b/src/main/java/org/lapaloma/aadd/redmetro/vo/Acceso.java @@ -0,0 +1,63 @@ +package org.lapaloma.aadd.redmetro.vo; + +import jakarta.persistence.*; + +/** + * Entidad que representa la tabla T_ACCESO. + */ +@Entity +@Table(name = "T_ACCESO") +public class Acceso { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "cod_acceso") + private int codigo; + + @Column(name = "nombre", nullable = false, length = 100) + private String nombre; + + @Column(name = "acceso_discapacidad", columnDefinition = "int", nullable = false) + private boolean accesoDiscapacidad; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "cod_estacion", nullable = false) + private Estacion estacion; + + public int getCodigo() { + return codigo; + } + + public void setCodigo(int codigo) { + this.codigo = codigo; + } + + public String getNombre() { + return nombre; + } + + public void setNombre(String nombre) { + this.nombre = nombre; + } + + public boolean isAccesoDiscapacidad() { + return accesoDiscapacidad; + } + + public void setAccesoDiscapacidad(boolean accesoDiscapacidad) { + this.accesoDiscapacidad = accesoDiscapacidad; + } + + public Estacion getEstacion() { + return estacion; + } + + public void setEstacion(Estacion estacion) { + this.estacion = estacion; + } + + @Override + public String toString() { + return "Acceso [codigo=" + codigo + ", nombre=" + nombre + ", accesoDiscapacidad=" + accesoDiscapacidad + + ", estacion=" + estacion + "]\n"; + } +} diff --git a/src/main/java/org/lapaloma/aadd/redmetro/vo/Cochera.java b/src/main/java/org/lapaloma/aadd/redmetro/vo/Cochera.java new file mode 100644 index 0000000..977bad9 --- /dev/null +++ b/src/main/java/org/lapaloma/aadd/redmetro/vo/Cochera.java @@ -0,0 +1,65 @@ +package org.lapaloma.aadd.redmetro.vo; + +import jakarta.persistence.*; + +/** + * Entidad que representa la tabla T_COCHERA. + */ +@Entity +@Table(name = "T_COCHERA") +public class Cochera { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "cod_cochera") + private int codigo; + + @Column(name = "nombre", nullable = false, length = 255) + private String nombre; + + @Column(name = "direccion", nullable = false, length = 255) + private String direccion; + + @Column(name = "deposito", columnDefinition = "int") + private boolean deposito; // 1 o 0 + + + public int getCodigo() { + return codigo; + } + + public void setCodigo(int codigo) { + this.codigo = codigo; + } + + public String getNombre() { + return nombre; + } + + public void setNombre(String nombre) { + this.nombre = nombre; + } + + public String getDireccion() { + return direccion; + } + + public void setDireccion(String direccion) { + this.direccion = direccion; + } + + public boolean isDeposito() { + return deposito; + } + + public void setDeposito(boolean deposito) { + this.deposito = deposito; + } + + + @Override + public String toString() { + return "Cochera [codigo=" + codigo + ", nombre=" + nombre + ", direccion=" + direccion + ", deposito=" + + deposito + "]\n"; + } + +} diff --git a/src/main/java/org/lapaloma/aadd/redmetro/vo/Color.java b/src/main/java/org/lapaloma/aadd/redmetro/vo/Color.java new file mode 100644 index 0000000..1330099 --- /dev/null +++ b/src/main/java/org/lapaloma/aadd/redmetro/vo/Color.java @@ -0,0 +1,51 @@ +package org.lapaloma.aadd.redmetro.vo; + +import jakarta.persistence.*; + +/** + * Entidad que representa la tabla T_COLOR. + */ +@Entity +@Table(name = "T_COLOR") +public class Color { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "cod_color") + private int codigo; + + @Column(name = "nombre", nullable = false, length = 100) + private String nombre; + + @Column(name = "cod_hexadecimal", nullable = false, length = 7) + private String codHexadecimal; + + public int getCodigo() { + return codigo; + } + + public void setCodigo(int codigo) { + this.codigo = codigo; + } + + public String getNombre() { + return nombre; + } + + public void setNombre(String nombre) { + this.nombre = nombre; + } + + public String getCodHexadecimal() { + return codHexadecimal; + } + + public void setCodHexadecimal(String codHexadecimal) { + this.codHexadecimal = codHexadecimal; + } + + @Override + public String toString() { + return "Color [codigo=" + codigo + ", nombre=" + nombre + ", codHexadecimal=" + codHexadecimal + "]\n"; + } + +} diff --git a/src/main/java/org/lapaloma/aadd/redmetro/vo/Estacion.java b/src/main/java/org/lapaloma/aadd/redmetro/vo/Estacion.java new file mode 100644 index 0000000..98c08f7 --- /dev/null +++ b/src/main/java/org/lapaloma/aadd/redmetro/vo/Estacion.java @@ -0,0 +1,51 @@ +package org.lapaloma.aadd.redmetro.vo; + +import jakarta.persistence.*; + +/** + * Entidad que representa la tabla T_ESTACION. + */ +@Entity +@Table(name = "T_ESTACION") +public class Estacion { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "cod_estacion") + private int codigo; + + @Column(name = "nombre", nullable = false, length = 100) + private String nombre; + + @Column(name = "direccion", nullable = false, length = 255) + private String direccion; + + public int getCodigo() { + return codigo; + } + + public void setCodigo(int codigo) { + this.codigo = codigo; + } + + public String getNombre() { + return nombre; + } + + public void setNombre(String nombre) { + this.nombre = nombre; + } + + public String getDireccion() { + return direccion; + } + + public void setDireccion(String direccion) { + this.direccion = direccion; + } + + @Override + public String toString() { + return "Estacion [codigo=" + codigo + ", nombre=" + nombre + ", direccion=" + direccion + "]\n"; + } + +} diff --git a/src/main/java/org/lapaloma/aadd/redmetro/vo/Linea.java b/src/main/java/org/lapaloma/aadd/redmetro/vo/Linea.java new file mode 100644 index 0000000..0bc3cc2 --- /dev/null +++ b/src/main/java/org/lapaloma/aadd/redmetro/vo/Linea.java @@ -0,0 +1,89 @@ +package org.lapaloma.aadd.redmetro.vo; + +import java.math.BigDecimal; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.OneToOne; +import jakarta.persistence.Table; + +/** + * Entidad que representa la tabla T_LINEA. + * Relación OneToOne con T_COLOR (código único). + */ +@Entity +@Table(name = "T_LINEA") +public class Linea { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "cod_linea") + private int codigo; + + @Column(name = "nombre_corto", nullable = false, length = 50) + private String nombreCorto; + + @Column(name = "nombre_largo", nullable = false, length = 100) + private String nombreLargo; + + // Relación OneToOne con T_COLOR (clave única) + @OneToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "cod_color", nullable = false, unique = true) + private Color color; + + @Column(name = "kilometros", nullable = false, precision = 5, scale = 2) + private BigDecimal kilometros; + + + public int getCodigo() { + return codigo; + } + + public void setCodigo(int codigo) { + this.codigo = codigo; + } + + public String getNombreCorto() { + return nombreCorto; + } + + public void setNombreCorto(String nombreCorto) { + this.nombreCorto = nombreCorto; + } + + public String getNombreLargo() { + return nombreLargo; + } + + public void setNombreLargo(String nombreLargo) { + this.nombreLargo = nombreLargo; + } + + public Color getColor() { + return color; + } + + public void setColor(Color color) { + this.color = color; + } + + public BigDecimal getKilometros() { + return kilometros; + } + + public void setKilometros(BigDecimal kilometros) { + this.kilometros = kilometros; + } + + @Override + public String toString() { + return "Linea [codigo=" + codigo + ", nombreCorto=" + nombreCorto + ", nombreLargo=" + nombreLargo + ", color=" + + color + ", kilometros=" + kilometros + "]\n"; + } + + +} diff --git a/src/main/java/org/lapaloma/aadd/redmetro/vo/LineaEstacion.java b/src/main/java/org/lapaloma/aadd/redmetro/vo/LineaEstacion.java new file mode 100644 index 0000000..3315922 --- /dev/null +++ b/src/main/java/org/lapaloma/aadd/redmetro/vo/LineaEstacion.java @@ -0,0 +1,76 @@ +package org.lapaloma.aadd.redmetro.vo; + +import jakarta.persistence.*; + +/** + * Entidad que representa la tabla T_LINEA_ESTACION. Usa una clave primaria + * compuesta mediante @EmbeddedId. + */ +@Entity +@Table(name = "T_LINEA_ESTACION") +public class LineaEstacion { + @EmbeddedId + private LineaEstacionId id; + + @Column(name = "orden", nullable = false) + private int orden; + + // Relaciones a T_LINEA y T_ESTACION mediante los campos de la clave compuesta + @MapsId("codigoLinea") + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "cod_linea", nullable = false) + private Linea linea; + + @MapsId("codigoEstacion") + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "cod_estacion", nullable = false) + private Estacion estacion; + + public LineaEstacion() { + } + + public LineaEstacion(Linea linea, Estacion estacion, Integer orden) { + this.linea = linea; + this.estacion = estacion; + this.orden = orden; + this.id = new LineaEstacionId(linea.getCodigo(), estacion.getCodigo()); + } + + public LineaEstacionId getId() { + return id; + } + + public void setId(LineaEstacionId id) { + this.id = id; + } + + public int getOrden() { + return orden; + } + + public void setOrden(int orden) { + this.orden = orden; + } + + public Linea getLinea() { + return linea; + } + + public void setLinea(Linea linea) { + this.linea = linea; + } + + public Estacion getEstacion() { + return estacion; + } + + public void setEstacion(Estacion estacion) { + this.estacion = estacion; + } + + @Override + public String toString() { + return "LineaEstacion [id=" + id + ", orden=" + orden + ", linea=" + linea + ", estacion=" + estacion + "]\n"; + } + +} diff --git a/src/main/java/org/lapaloma/aadd/redmetro/vo/LineaEstacionId.java b/src/main/java/org/lapaloma/aadd/redmetro/vo/LineaEstacionId.java new file mode 100644 index 0000000..8b82803 --- /dev/null +++ b/src/main/java/org/lapaloma/aadd/redmetro/vo/LineaEstacionId.java @@ -0,0 +1,41 @@ +package org.lapaloma.aadd.redmetro.vo; + +import jakarta.persistence.*; +import java.io.Serializable; +import java.util.Objects; + +/** + * Clase embebible que representa la clave primaria compuesta de + * T_LINEA_ESTACION. + */ +@Embeddable +public class LineaEstacionId implements Serializable { + private static final long serialVersionUID = 1L; + + @Column(name = "cod_linea") + private Integer codigoLinea; + + @Column(name = "cod_estacion") + private Integer codigoEstacion; + + public LineaEstacionId() { + } + + public LineaEstacionId(Integer codLinea, Integer codEstacion) { + this.codigoLinea = codLinea; + this.codigoEstacion = codEstacion; + } + + + @Override + public boolean equals(Object o) { + + LineaEstacionId claveObjetoNuevo = (LineaEstacionId) o; + return Objects.equals(codigoLinea, claveObjetoNuevo.codigoLinea) && Objects.equals(codigoEstacion, claveObjetoNuevo.codigoEstacion); + } + + @Override + public int hashCode() { + return Objects.hash(codigoLinea, codigoEstacion); + } +} diff --git a/src/main/java/org/lapaloma/aadd/redmetro/vo/Tren.java b/src/main/java/org/lapaloma/aadd/redmetro/vo/Tren.java new file mode 100644 index 0000000..4e426b0 --- /dev/null +++ b/src/main/java/org/lapaloma/aadd/redmetro/vo/Tren.java @@ -0,0 +1,97 @@ +package org.lapaloma.aadd.redmetro.vo; + +import java.time.LocalDate; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.Table; + +/** + * Entidad que representa la tabla T_TREN. + */ +@Entity +@Table(name = "T_TREN") +public class Tren { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "cod_tren") + private int codigo; + + @Column(name = "modelo", nullable = false, length = 100) + private String modelo; + + @Column(name = "empresa_constructora", nullable = false, length = 255) + private String empresaConstructora; + + @Column(name = "fecha_incorporacion") + private LocalDate fechaIncorporacion; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "cod_cochera", nullable = false) + private Cochera cochera; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "cod_linea", nullable = false) + private Linea linea; + + public int getCodigo() { + return codigo; + } + + public void setCodigo(int codigo) { + this.codigo = codigo; + } + + public String getModelo() { + return modelo; + } + + public void setModelo(String modelo) { + this.modelo = modelo; + } + + public String getEmpresaConstructora() { + return empresaConstructora; + } + + public void setEmpresaConstructora(String empresaConstructora) { + this.empresaConstructora = empresaConstructora; + } + + public LocalDate getFechaIncorporacion() { + return fechaIncorporacion; + } + + public void setFechaIncorporacion(LocalDate fechaIncorporacion) { + this.fechaIncorporacion = fechaIncorporacion; + } + + public Cochera getCochera() { + return cochera; + } + + public void setCochera(Cochera cochera) { + this.cochera = cochera; + } + + public Linea getLinea() { + return linea; + } + + public void setLinea(Linea linea) { + this.linea = linea; + } + + @Override + public String toString() { + return "Tren [codigo=" + codigo + ", modelo=" + modelo + ", empresaConstructora=" + empresaConstructora + + ", fechaIncorporacion=" + fechaIncorporacion + ", cochera=" + cochera + ", linea=" + linea + "]\n"; + } + +} diff --git a/src/main/resources/META-INF/persistence.xml b/src/main/resources/META-INF/persistence.xml new file mode 100644 index 0000000..6374dc9 --- /dev/null +++ b/src/main/resources/META-INF/persistence.xml @@ -0,0 +1,33 @@ + + + + + + org.hibernate.jpa.HibernatePersistenceProvider + + + org.lapaloma.aadd.redmetro.vo.Cochera + org.lapaloma.aadd.redmetro.vo.Color + org.lapaloma.aadd.redmetro.vo.Linea + org.lapaloma.aadd.redmetro.vo.Tren + org.lapaloma.aadd.redmetro.vo.Estacion + org.lapaloma.aadd.redmetro.vo.LineaEstacion + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/conf.properties b/src/main/resources/conf.properties new file mode 100644 index 0000000..0a4ab37 --- /dev/null +++ b/src/main/resources/conf.properties @@ -0,0 +1,2 @@ +url.conexion.mongodb=mongodb://admin:mongodb_123@172.16.0.181:27017 +bbdd.mongodb=MapaMundi \ No newline at end of file