diff --git a/src/main/java/org/comunidadmadrid/fp/dam2/ClasePrincipal.java b/src/main/java/org/comunidadmadrid/fp/dam2/ClasePrincipal.java index aea78ea..ed834de 100644 --- a/src/main/java/org/comunidadmadrid/fp/dam2/ClasePrincipal.java +++ b/src/main/java/org/comunidadmadrid/fp/dam2/ClasePrincipal.java @@ -6,20 +6,16 @@ package org.comunidadmadrid.fp.dam2; import java.util.List; import org.comunidadmadrid.fp.dam2.dao.ICicloFormativoDAO; -import org.comunidadmadrid.fp.dam2.dao.IFormacionDAO; import org.comunidadmadrid.fp.dam2.dao.IInstitutoDAO; import org.comunidadmadrid.fp.dam2.dao.hibernate.CicloFormativoDaoHibernate; -import org.comunidadmadrid.fp.dam2.dao.hibernate.FormacionDaoHibernate; import org.comunidadmadrid.fp.dam2.dao.jdbc.CicloFormativoDaoJDBC; import org.comunidadmadrid.fp.dam2.dao.jpa.InstitutoDaoJPA; import org.comunidadmadrid.fp.dam2.dao.mongodb.InstitutoDaoMongoDB; import org.comunidadmadrid.fp.dam2.excepcion.FormacionException; -import org.comunidadmadrid.fp.dam2.gestores.GestorFicheroConfiguracion; import org.comunidadmadrid.fp.dam2.gestores.GestorSesionHibernate; import org.comunidadmadrid.fp.dam2.procesamiento.ProcesadorDatos; import org.comunidadmadrid.fp.dam2.utilidades.GestorURLs; import org.comunidadmadrid.fp.dam2.vo.CicloFormativo; -import org.comunidadmadrid.fp.dam2.vo.Formacion; import org.comunidadmadrid.fp.dam2.vo.Instituto; /** @@ -110,22 +106,9 @@ public class ClasePrincipal { * @throws FormacionException */ private void tratarFormaciones() throws FormacionException { - - // Se obtiene la lista de Formaciones a partir de una URL - String urlFormaciones = GestorFicheroConfiguracion.obtenerValor("url.formaciones"); ProcesadorDatos procesador = new ProcesadorDatos(); - List listaFormaciones = procesador.obtenerFormacionesDeURL(urlFormaciones); - - if (listaFormaciones != null && listaFormaciones.size() > 0) { - // Se prepara el AADD de Formación para que se realice mediante Hibernate - IFormacionDAO iFormacionDAO = new FormacionDaoHibernate(); - - for (Formacion formacion : listaFormaciones) { - - System.out.println(formacion); - iFormacionDAO.insertarFormacion(formacion); - } - } + procesador.procesarFormacionesDeURL(); + } /** @@ -167,7 +150,7 @@ public class ClasePrincipal { private void tratarInstitutoFormacion() throws FormacionException { ProcesadorDatos procesador = new ProcesadorDatos(); - procesador.crearFormacionesInstitutoCSV(); + procesador.procesarFormacionesInstitutoCSV(); } } diff --git a/src/main/java/org/comunidadmadrid/fp/dam2/dao/IFormacionDAO.java b/src/main/java/org/comunidadmadrid/fp/dam2/dao/IFormacionDAO.java index 0f496cb..54610f4 100644 --- a/src/main/java/org/comunidadmadrid/fp/dam2/dao/IFormacionDAO.java +++ b/src/main/java/org/comunidadmadrid/fp/dam2/dao/IFormacionDAO.java @@ -5,7 +5,6 @@ package org.comunidadmadrid.fp.dam2.dao; import org.comunidadmadrid.fp.dam2.excepcion.FormacionException; import org.comunidadmadrid.fp.dam2.vo.Formacion; -import org.comunidadmadrid.fp.dam2.vo.Instituto; /* Organización: Virgen de la Paloma @@ -26,4 +25,11 @@ public interface IFormacionDAO { * @throws FormacionException */ void insertarFormacion(Formacion formacion) throws FormacionException; + + /** + * + * @param formacion + * @throws FormacionException + */ + void actualizarFormacion(Formacion formacion) throws FormacionException; } diff --git a/src/main/java/org/comunidadmadrid/fp/dam2/dao/hibernate/FormacionDaoHibernate.java b/src/main/java/org/comunidadmadrid/fp/dam2/dao/hibernate/FormacionDaoHibernate.java index beb9e65..ab67561 100644 --- a/src/main/java/org/comunidadmadrid/fp/dam2/dao/hibernate/FormacionDaoHibernate.java +++ b/src/main/java/org/comunidadmadrid/fp/dam2/dao/hibernate/FormacionDaoHibernate.java @@ -55,4 +55,30 @@ public class FormacionDaoHibernate implements IFormacionDAO{ } return formacion; } + + + @Override + public void actualizarFormacion(Formacion formacion) throws FormacionException { + Transaction transaccion = null; + Session sesion = null; + + try { + sesion = GestorSesionHibernate.getSession(); + transaccion = sesion.beginTransaction(); + + if (!sesion.contains(formacion)) + sesion.merge(formacion); + + transaccion.commit(); + } catch (Exception e) { + if (transaccion != null && transaccion.isActive()) { + transaccion.rollback(); + } + e.printStackTrace(); + } finally { + if (sesion != null) { + sesion.close(); + } + } + } } diff --git a/src/main/java/org/comunidadmadrid/fp/dam2/procesamiento/ProcesadorDatos.java b/src/main/java/org/comunidadmadrid/fp/dam2/procesamiento/ProcesadorDatos.java index 17d0f8e..4a938cd 100644 --- a/src/main/java/org/comunidadmadrid/fp/dam2/procesamiento/ProcesadorDatos.java +++ b/src/main/java/org/comunidadmadrid/fp/dam2/procesamiento/ProcesadorDatos.java @@ -6,8 +6,6 @@ package org.comunidadmadrid.fp.dam2.procesamiento; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; -import java.util.ArrayList; -import java.util.List; import org.comunidadmadrid.fp.dam2.dao.IFormacionDAO; import org.comunidadmadrid.fp.dam2.dao.IInstitutoDAO; @@ -26,6 +24,7 @@ import org.comunidadmadrid.fp.dam2.vo.InstitutoFormacion.InstitutoFormacionID; import tools.jackson.databind.JsonNode; import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ArrayNode; import tools.jackson.dataformat.xml.XmlMapper; /* @@ -34,9 +33,9 @@ Programador: Isidoro Nevares Martín Fecha: 1 mar 2025 */ public class ProcesadorDatos { - public List obtenerFormacionesDeURL(String urlFormaciones) { - List listaFormaciones = null; - + public void procesarFormacionesDeURL() { + String urlFormaciones = GestorFicheroConfiguracion.obtenerValor("url.formaciones"); + String informacionFormacionesXML = GestorURLs.getTextoFromURL(urlFormaciones); ObjectMapper mapeadorXML = new XmlMapper(); @@ -45,28 +44,27 @@ public class ProcesadorDatos { JsonNode nodoRaiz = mapeadorXML.readTree(informacionFormacionesXML); if (nodoRaiz != null) { - listaFormaciones = new ArrayList(); - JsonNode elementos = nodoRaiz.has("formacion") ? nodoRaiz.get("formacion") : nodoRaiz; + JsonNode nodosFormacion = nodoRaiz.has("formacion") ? nodoRaiz.get("formacion") : nodoRaiz; - if (elementos.isArray()) { - for (JsonNode nodo : elementos) { - Formacion formacion = obtenerFormacionDeJsonNode(nodo); - if (formacion != null) - listaFormaciones.add(formacion); + IFormacionDAO iFormacionDAO = new FormacionDaoHibernate(); + JsonNode arrayNodosFormacion = convertirJsonNodeEnArrayNode(nodosFormacion); + for (JsonNode nodoFormacion : arrayNodosFormacion) { + Formacion formacion = obtenerFormacionDeJsonNode(nodoFormacion); + if (formacion != null) { + Formacion formacionBBDD = iFormacionDAO.obtenerFormacionPorID(formacion.getIdentificador()); + if (formacionBBDD == null) { + iFormacionDAO.insertarFormacion(formacion); + } else { + iFormacionDAO.actualizarFormacion(formacion); + } } - } else if (!elementos.isMissingNode() && !elementos.isNull()) { - Formacion formacion = obtenerFormacionDeJsonNode(elementos); - if (formacion != null) - listaFormaciones.add(formacion); } } } catch (Exception e) { System.err.println("Error procesando XML con JsonNode: " + e.getMessage()); e.printStackTrace(); } - - return listaFormaciones; } /** @@ -75,7 +73,7 @@ public class ProcesadorDatos { * */ - public void crearFormacionesInstitutoCSV() throws FormacionException { + public void procesarFormacionesInstitutoCSV() throws FormacionException { String rutaFicheroCSV = GestorFicheroConfiguracion.obtenerValor("ruta.csv"); try (BufferedReader br = new BufferedReader(new FileReader(rutaFicheroCSV))) { @@ -162,4 +160,16 @@ public class ProcesadorDatos { return formacion; } + 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; + } + } }