Tratamiento en PostgreSQL

This commit is contained in:
Isidoro Nevares Martín 2026-02-06 12:10:17 +01:00
parent 21e005e3a2
commit e0f8aa1698
8 changed files with 120 additions and 41 deletions

View File

@ -5,6 +5,7 @@ import java.util.List;
import org.lapaloma.aadd.redmetro.dao.ILineaDAO; import org.lapaloma.aadd.redmetro.dao.ILineaDAO;
import org.lapaloma.aadd.redmetro.dao.jpa.LineaDaoJPA; import org.lapaloma.aadd.redmetro.dao.jpa.LineaDaoJPA;
import org.lapaloma.aadd.redmetro.dao.mgdb.LineaDaoMongoDB; import org.lapaloma.aadd.redmetro.dao.mgdb.LineaDaoMongoDB;
import org.lapaloma.aadd.redmetro.gestores.GestorEntityManagerJPA;
import org.lapaloma.aadd.redmetro.vo.Linea; import org.lapaloma.aadd.redmetro.vo.Linea;
/** /**
@ -16,7 +17,7 @@ public class AppRedMetro {
public static void main(String[] args) { public static void main(String[] args) {
AppRedMetro app = new AppRedMetro(); AppRedMetro app = new AppRedMetro();
// Obtiene la Session de forma estática // Obtiene la Session de forma estática
// GestorEntityManagerJPA.getEntityManager(); GestorEntityManagerJPA.getEntityManager();
app.migrarMongoDBAPostgreSQL(); app.migrarMongoDBAPostgreSQL();
} }
@ -27,7 +28,6 @@ public class AppRedMetro {
if (listaLineas != null) { if (listaLineas != null) {
lineaDAO = new LineaDaoJPA(); lineaDAO = new LineaDaoJPA();
for (Linea linea : listaLineas) { for (Linea linea : listaLineas) {
// Se comprueba si existe la línea en PostgreSQL // Se comprueba si existe la línea en PostgreSQL
Linea lineaBBDD = lineaDAO.obtenerLineaPorID(linea.getCodigo()); Linea lineaBBDD = lineaDAO.obtenerLineaPorID(linea.getCodigo());

View File

@ -1,19 +1,19 @@
package org.lapaloma.aadd.redmetro.dao.mgdb; package org.lapaloma.aadd.redmetro.dao.mgdb;
import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import org.bson.Document; import org.bson.Document;
import org.lapaloma.aadd.redmetro.dao.ILineaDAO; import org.lapaloma.aadd.redmetro.dao.ILineaDAO;
import org.lapaloma.aadd.redmetro.gestores.GestorConexionMongoDB; import org.lapaloma.aadd.redmetro.gestores.GestorConexionMongoDB;
import org.lapaloma.aadd.redmetro.util.UtilidadesRedMetro;
import org.lapaloma.aadd.redmetro.vo.Color; import org.lapaloma.aadd.redmetro.vo.Color;
import org.lapaloma.aadd.redmetro.vo.Linea; import org.lapaloma.aadd.redmetro.vo.Linea;
import com.mongodb.client.FindIterable; import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoCollection;
import es.palomafp.aadd.inm.vo.Pais;
/** /**
* *
* ContinenteDaoMongoDB: Implentación MongoDB de las operaciones de * ContinenteDaoMongoDB: Implentación MongoDB de las operaciones de
@ -23,7 +23,7 @@ import es.palomafp.aadd.inm.vo.Pais;
* @date 30 enero 2026 * @date 30 enero 2026
*/ */
public class LineaDaoMongoDB implements ILineaDAO { public class LineaDaoMongoDB implements ILineaDAO {
private final static String COLECCION_PAIS = "C_LINEA"; private final static String COLECCION_PAIS = "c_linea";
@Override @Override
public Linea obtenerLineaPorID(int identificador) { public Linea obtenerLineaPorID(int identificador) {
@ -63,23 +63,38 @@ public class LineaDaoMongoDB implements ILineaDAO {
private Linea getLineaFromDocumentoLinea(Document documentoLinea) { private Linea getLineaFromDocumentoLinea(Document documentoLinea) {
Linea linea = null; Linea linea = null;
/* int codLinea = Integer.valueOf(documentoLinea.getString("cod_linea"));
* int idMongoDB = documentoPais.getInteger("_id"); int identificador = String urlImgLinea = documentoLinea.getString("url_img_tmp");
* documentoPais.getInteger("identificador"); String nombrePais = byte[] imagenLinea= UtilidadesRedMetro.getBytesFromURL(urlImgLinea);
* documentoPais.getString("nombre"); String capital = Object kilometros = documentoLinea.get("kilometros");
* documentoPais.getString("capital"); if (kilometros instanceof Double) {
* kilometros = BigDecimal.valueOf((Double) kilometros);
* Document documentoColor= (Document) documentoPais.get("continente"); String } else if (kilometros instanceof Integer) {
* codigoContinente = documentoContinente.getString("codigo"); String kilometros = BigDecimal.valueOf((Integer) kilometros);
* nombreContinente = documentoContinente.getString("nombre"); }
* // System.out.println("kilometros: " + kilometros);
* Color color = new Color(); color.setCodigo(codigoContinente);
* color.setNombreContinente(nombreContinente); Document documentoNombre = (Document) documentoLinea.get("nombre");
* String nombreCorto = documentoNombre.getString("nombre_corto");
* linea = new Linea(); linea.setIdentificador(identificador); String nombreLargo = documentoNombre.getString("nombre_largo");
* linea.setNombrePais(nombrePais); linea.setCapital(capital);
* linea.setColor(color); Document documentoColor = (Document) documentoLinea.get("color");
*/ int codigoColor = documentoColor.getInteger("cod_color");
String nombreColor = documentoColor.getString("nombre");
String codHexadecimal = documentoColor.getString("cod_hexadecimal");
Color color = new Color();
color.setCodigo(codigoColor);
color.setNombre(nombreColor);
color.setCodHexadecimal(codHexadecimal);
linea = new Linea();
linea.setCodigo(codLinea);
linea.setNombreCorto(nombreCorto);
linea.setNombreLargo(nombreLargo);
linea.setKilometros((BigDecimal)kilometros);
linea.setImagenLinea(imagenLinea);
linea.setColor(color);
return linea; return linea;
} }

View File

@ -23,7 +23,7 @@ public class GestorEntityManagerJPA {
// Carga la configuración desde META-INF/persistence.xml // Carga la configuración desde META-INF/persistence.xml
static { static {
try { try {
entityManagerFactory = Persistence.createEntityManagerFactory("UP_PROYECTOSIES_ODB"); entityManagerFactory = Persistence.createEntityManagerFactory("UP_REDMETRO_POSTGRESQL");
} catch (Throwable ex) { } catch (Throwable ex) {
System.err.println("Error en EntityManagerFactory: " + ex); System.err.println("Error en EntityManagerFactory: " + ex);
throw new ExceptionInInitializerError(ex); throw new ExceptionInInitializerError(ex);

View File

@ -0,0 +1,51 @@
package org.lapaloma.aadd.redmetro.util;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URI;
import java.net.URISyntaxException;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
/**
*
* UtilidadesCine: Clase que realiza ....
*
* @author Isidoro Nevares Martín - IES Virgen de la Paloma
* @date 23 ene 2026
*
*
*/
public class UtilidadesRedMetro {
public static byte[] getBytesFromURL(String textoURL) {
byte[] bytesImagen = null;
URI url = null;
try {
url = new URI(textoURL);
HttpURLConnection urlConnection = (HttpURLConnection) url.toURL().openConnection();
urlConnection.addRequestProperty("User-Agent", "Mozilla");
InputStream inputStream = urlConnection.getInputStream();
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
while ((len = inputStream.read(buffer)) != -1) {
outStream.write(buffer, 0, len);
}
inputStream.close();
bytesImagen = outStream.toByteArray();
} catch (IOException | URISyntaxException e) {
e.printStackTrace();
}
return bytesImagen;
}
public static LocalDate parsearFecha(String fechaStr, String formato) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(formato);
LocalDate fecha = LocalDate.parse(fechaStr, formatter);
return fecha;
}
}

View File

@ -1,6 +1,9 @@
package org.lapaloma.aadd.redmetro.vo; package org.lapaloma.aadd.redmetro.vo;
import jakarta.persistence.*; import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
/** /**
* Entidad que representa la tabla T_COLOR. * Entidad que representa la tabla T_COLOR.
@ -9,7 +12,7 @@ import jakarta.persistence.*;
@Table(name = "T_COLOR") @Table(name = "T_COLOR")
public class Color { public class Color {
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY) // @GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "cod_color") @Column(name = "cod_color")
private int codigo; private int codigo;

View File

@ -1,26 +1,27 @@
package org.lapaloma.aadd.redmetro.vo; package org.lapaloma.aadd.redmetro.vo;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Arrays;
import jakarta.persistence.CascadeType;
import jakarta.persistence.Column; import jakarta.persistence.Column;
import jakarta.persistence.Entity; import jakarta.persistence.Entity;
import jakarta.persistence.FetchType; import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id; import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn; import jakarta.persistence.JoinColumn;
import jakarta.persistence.OneToOne; import jakarta.persistence.OneToOne;
import jakarta.persistence.Table; import jakarta.persistence.Table;
import jakarta.persistence.UniqueConstraint;
/** /**
* Entidad que representa la tabla T_LINEA. * Entidad que representa la tabla T_LINEA.
* Relación OneToOne con T_COLOR (código único). * Relación OneToOne con T_COLOR (código único).
*/ */
@Entity @Entity
@Table(name = "T_LINEA") @Table(name = "T_LINEA", uniqueConstraints = @UniqueConstraint(columnNames = "cod_color"))
public class Linea { public class Linea {
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY) //@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "cod_linea") @Column(name = "cod_linea")
private int codigo; private int codigo;
@ -30,15 +31,17 @@ public class Linea {
@Column(name = "nombre_largo", nullable = false, length = 100) @Column(name = "nombre_largo", nullable = false, length = 100)
private String nombreLargo; 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) @Column(name = "kilometros", nullable = false, precision = 5, scale = 2)
private BigDecimal kilometros; private BigDecimal kilometros;
// Relación OneToOne con T_COLOR (clave única)
@OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.PERSIST)
@JoinColumn(name = "cod_color", nullable = false)
private Color color;
@Column(name = "imagen_linea", columnDefinition = "BYTEA")
private byte[] imagenLinea;
public int getCodigo() { public int getCodigo() {
return codigo; return codigo;
} }
@ -79,11 +82,18 @@ public class Linea {
this.kilometros = kilometros; this.kilometros = kilometros;
} }
public byte[] getImagenLinea() {
return imagenLinea;
}
public void setImagenLinea(byte[] imagenLinea) {
this.imagenLinea = imagenLinea;
}
@Override @Override
public String toString() { public String toString() {
return "Linea [codigo=" + codigo + ", nombreCorto=" + nombreCorto + ", nombreLargo=" + nombreLargo + ", color=" return "Linea [codigo=" + codigo + ", nombreCorto=" + nombreCorto + ", nombreLargo=" + nombreLargo + ", color="
+ color + ", kilometros=" + kilometros + "]\n"; + color + ", kilometros=" + kilometros + ", imagenLinea=" + Arrays.toString(imagenLinea) + "]\n";
} }
} }

View File

@ -20,7 +20,7 @@
<!-- Configuración de propiedades del SGDB (PostgreSQL) --> <!-- Configuración de propiedades del SGDB (PostgreSQL) -->
<properties> <properties>
<property name="jakarta.persistence.jdbc.url" value="jdbc:postgresql://192.168.1.36:5432/Mapamundi"/> <property name="jakarta.persistence.jdbc.url" value="jdbc:postgresql://192.168.1.36:5432/red_metro_aadd"/>
<property name="jakarta.persistence.jdbc.user" value="vdlp"/> <property name="jakarta.persistence.jdbc.user" value="vdlp"/>
<property name="jakarta.persistence.jdbc.password" value="postgresql_123"/> <property name="jakarta.persistence.jdbc.password" value="postgresql_123"/>
<property name="jakarta.persistence.jdbc.driver" value="org.postgresql.Driver"/> <property name="jakarta.persistence.jdbc.driver" value="org.postgresql.Driver"/>

View File

@ -1,2 +1,2 @@
url.conexion.mongodb=mongodb://admin:mongodb_123@172.16.0.181:27017 url.conexion.mongodb=mongodb://admin:mongodb_123@192.168.1.36:27017
bbdd.mongodb=MapaMundi bbdd.mongodb=red_metro_aadd