From c77d0a8d6b4bdf0a5a0c89bc956aea346256e2d9 Mon Sep 17 00:00:00 2001 From: Isidoro Nevares Date: Wed, 28 Jan 2026 18:12:30 +0100 Subject: [PATCH] Procesamiento URL JSON --- .classpath | 1 + .../gui/proyectos/AppProyectosIESSwing.java | 361 ++++++++++++++++-- 2 files changed, 335 insertions(+), 27 deletions(-) diff --git a/.classpath b/.classpath index 51a6fca..a8fe4a8 100644 --- a/.classpath +++ b/.classpath @@ -37,5 +37,6 @@ + diff --git a/src/main/java/org/lapaloma/gui/proyectos/AppProyectosIESSwing.java b/src/main/java/org/lapaloma/gui/proyectos/AppProyectosIESSwing.java index b97712e..c2e460d 100644 --- a/src/main/java/org/lapaloma/gui/proyectos/AppProyectosIESSwing.java +++ b/src/main/java/org/lapaloma/gui/proyectos/AppProyectosIESSwing.java @@ -8,6 +8,13 @@ import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.io.IOException; +import java.io.InputStream; +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.time.LocalDate; import java.util.ArrayList; import javax.swing.JButton; @@ -18,6 +25,29 @@ import javax.swing.JPanel; import org.lapaloma.gui.proyectos.gestor.GestorFicheroConfiguracion; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import es.palomafp.aadd.inm.dao.IConceptoDAO; +import es.palomafp.aadd.inm.dao.ICursoProyectoDAO; +import es.palomafp.aadd.inm.dao.IOperacionesDAOEntidad; +import es.palomafp.aadd.inm.dao.IPatrocinadorDAO; +import es.palomafp.aadd.inm.dao.IProyectoDAO; +import es.palomafp.aadd.inm.dao.jpa.ConceptoDaoJPA; +import es.palomafp.aadd.inm.dao.jpa.CursoAcademicoDaoJPA; +import es.palomafp.aadd.inm.dao.jpa.CursoProyectoDaoJPA; +import es.palomafp.aadd.inm.dao.jpa.GastoDaoJPA; +import es.palomafp.aadd.inm.dao.jpa.IngresoDaoJPA; +import es.palomafp.aadd.inm.dao.jpa.PatrocinadorDaoJPA; +import es.palomafp.aadd.inm.dao.jpa.ProyectoDaoJPA; +import es.palomafp.aadd.inm.excepcion.ProyectosIESException; +import es.palomafp.aadd.inm.vo.Concepto; +import es.palomafp.aadd.inm.vo.CursoAcademico; +import es.palomafp.aadd.inm.vo.CursoProyecto; +import es.palomafp.aadd.inm.vo.Gasto; +import es.palomafp.aadd.inm.vo.Ingreso; +import es.palomafp.aadd.inm.vo.Patrocinador; +import es.palomafp.aadd.inm.vo.Proyecto; public class AppProyectosIESSwing { @@ -118,13 +148,20 @@ public class AppProyectosIESSwing { String codigoProyecto = ((ClaseClaveValor) comboProyectos.getSelectedItem()).getCodigo(); String codigoCursoSeleccionado = ((ClaseClaveValor) comboCursos.getSelectedItem()).getCodigo(); - - // Cargar los ingresos del proyecto IES a ObjectDB - cargarIngresosProyectoIESObjectDB(codigoProyecto, codigoCursoSeleccionado); + try { - // Cargar los gastos del proyecto IES a ObjectDB - cargarGastosProyectoIESObjectDB(codigoProyecto, codigoCursoSeleccionado); -} + // Cargar los ingresos del proyecto IES a ObjectDB + cargarIngresosProyectoIESObjectDB(codigoProyecto, codigoCursoSeleccionado); + + // Cargar los gastos del proyecto IES a ObjectDB + cargarGastosProyectoIESObjectDB(codigoProyecto, codigoCursoSeleccionado); + + } catch (ProyectosIESException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + + } }); // Añadir el botón al panel @@ -138,44 +175,314 @@ public class AppProyectosIESSwing { frame.setVisible(true); } - private static void cargarIngresosProyectoIESObjectDB(String codigoProyecto, String codigoCurso) { - System.out.println("Inicio proceso de carga de INGRESOS en ObjectDB para proyecto: " + codigoProyecto + " y curso: " + codigoCurso); + private static void cargarIngresosProyectoIESObjectDB(String codigoProyecto, String codigoCurso) + throws ProyectosIESException { + System.out.println("Inicio proceso de carga de INGRESOS en ObjectDB para proyecto: " + codigoProyecto + + " y curso: " + codigoCurso); // Obtener el endpoint URL desde el fichero de configuración String urlPeticionIngresos = GestorFicheroConfiguracion.getValorfromClave("url.proyectosies.ingresos"); + urlPeticionIngresos = urlPeticionIngresos.replace("$id_proyecto", codigoProyecto).replace("$cod_curso", + codigoCurso); + System.out.println(urlPeticionIngresos); // Procesar la petición HTTP y cargar los datos de INGRESOS en ObjectDB - - - - - - - + + try { + JsonNode nodoIngresos = obtenerJNodeDeURL(urlPeticionIngresos); + for (JsonNode nodoIngreso : nodoIngresos) { + // Datos del ingreso + int idIngreso = nodoIngreso.get("identificador").asInt(); + String sFecha = nodoIngreso.get("fecha").asText(); + int cantidad = nodoIngreso.get("cantidad").asInt(); + String observacion = nodoIngreso.get("observacion").asText(); + // String sFechaCreacion = nodoIngreso.get("fechaCreacion").asText(); + // String sFechaModificacion = nodoIngreso.get("fechaModificacion").asText(); + Ingreso ingreso = new Ingreso(); + ingreso.setIdentificador(idIngreso); + ingreso.setCantidad(cantidad); + ingreso.setObservacion(observacion); + // La fecha viene en formato dd-MM-yyyy + LocalDate ldFecha = LocalDate.parse(sFecha); + ingreso.setFecha(ldFecha); + + // Datos del patrocinador que realiza el ingreso + JsonNode nodoPatrocinador = nodoIngreso.get("patrocinador"); + int idPatrocinador = nodoPatrocinador.get("identificador").asInt(); + String nombre = nodoPatrocinador.get("nombre").asText(); + byte[] bytesImagen = nodoPatrocinador.get("imagen").binaryValue(); + Patrocinador patrocinador = new Patrocinador(); + patrocinador.setIdentificador(idPatrocinador); + patrocinador.setNombre(nombre); + patrocinador.setImagenLogo(bytesImagen); + ingreso.setPatrocinador(patrocinador); + + // Datos del Proyecto y curso en para el que se realiza el ingreso + JsonNode nodoProyectoCurso = nodoIngreso.get("proyectoCurso"); + int idProyectoCurso = nodoProyectoCurso.get("identificador").asInt(); + + JsonNode nodoCurso = nodoProyectoCurso.get("curso"); + String codigoCursoJson = nodoCurso.get("codigo").asText(); + String sFechaInicioCurso = nodoCurso.get("fechaInicio").asText(); + // La fecha viene en formato dd-MM-yyyy + LocalDate ldFechaInicioCurso = LocalDate.parse(sFechaInicioCurso); + String sFechaFinCurso = nodoCurso.get("fechaFin").asText(); + // La fecha viene en formato dd-MM-yyyy + LocalDate ldFechaFinCurso = LocalDate.parse(sFechaFinCurso); + String nombreCurso = nodoCurso.get("nombre").asText(); + + CursoAcademico cursoAcademico = new CursoAcademico(); + cursoAcademico.setCodigo(codigoCursoJson); + cursoAcademico.setNombre(nombreCurso); + cursoAcademico.setFechaInicio(ldFechaInicioCurso); + cursoAcademico.setFechaFin(ldFechaFinCurso); + + JsonNode nodoProyecto = nodoProyectoCurso.get("proyecto"); + int idProyecto = nodoProyecto.get("identificador").asInt(); + String nombreProyecto = nodoProyecto.get("nombre").asText(); + String descripcionProyecto = nodoProyecto.get("descripcion").asText(); + String urlImagenProyecto = null; + if (nodoPatrocinador.get("urlLogo") != null) + urlImagenProyecto = nodoPatrocinador.get("urlLogo").asText(); + Proyecto proyecto = new Proyecto(); + proyecto.setIdentificador(idProyecto); + proyecto.setNombre(nombreProyecto); + proyecto.setDescripcion(descripcionProyecto); + proyecto.setUrlLogo(urlImagenProyecto); + + CursoProyecto cursoProyecto = new CursoProyecto(); + cursoProyecto.setIdentificador(idProyectoCurso); + cursoProyecto.setCursoAcademico(cursoAcademico); + cursoProyecto.setProyecto(proyecto); + + ingreso.setCursoProyecto(cursoProyecto); + System.out.println(ingreso); + + // Almacenar los ingresos en ObjectDB + almacenarIngresoEnObjectDB(ingreso); + } + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + System.out.println("Fin proceso de carga de INGRESOS en ObjectDB.\n"); } - - private static void cargarGastosProyectoIESObjectDB(String codigoProyecto, String codigoCurso) { + + private static void cargarGastosProyectoIESObjectDB(String codigoProyecto, String codigoCurso) throws ProyectosIESException { // Procesar la petición HTTP y cargar los datos de GASTOS en ObjectDB - System.out.println("Inicio proceso de carga de GASTOS en ObjectDB para proyecto: " + codigoProyecto + " y curso: " + codigoCurso); + System.out.println("Inicio proceso de carga de GASTOS en ObjectDB para proyecto: " + codigoProyecto + + " y curso: " + codigoCurso); // Obtener el endpoint URL desde el fichero de configuración String urlPeticionGastos = GestorFicheroConfiguracion.getValorfromClave("url.proyectosies.gastos"); - System.out.println(urlPeticionGastos); - - // Procesar la petición HTTP y cargar los datos de INGRESOS en ObjectDB + urlPeticionGastos = urlPeticionGastos.replace("$id_proyecto", codigoProyecto).replace("$cod_curso", + codigoCurso); + + System.out.println(urlPeticionGastos); + + // Procesar la petición HTTP y cargar los datos de GASTOS en ObjectDB + try { + JsonNode nodoGastos = obtenerJNodeDeURL(urlPeticionGastos); + for (JsonNode nodoGasto : nodoGastos) { + // Datos del gasto + int idGasto = nodoGasto.get("identificador").asInt(); + String sFechaGasto = nodoGasto.get("fecha").asText(); + // La fecha viene en formato dd-MM-yyyy + LocalDate ldFechaGasto = LocalDate.parse(sFechaGasto); + + int numeroUnidades = nodoGasto.get("numeroUnidades").asInt(); + double precioUnitario = nodoGasto.get("precioUnitario").asDouble(); + + + Gasto gasto = new Gasto(); + gasto.setIdentificador(idGasto); + gasto.setNumeroUnidades(numeroUnidades); + gasto.setPrecioUnidad(precioUnitario); + gasto.setFecha(ldFechaGasto); + + // Datos del patrocinador que realiza el ingreso + JsonNode nodoConcepto = nodoGasto.get("concepto"); + int idPatrocinador = nodoConcepto.get("identificador").asInt(); + String nombre = nodoConcepto.get("nombre").asText(); + String descripcionConcepto = nodoConcepto.get("descripcion").asText(); + Concepto concepto = new Concepto(); + concepto.setIdentificador(idPatrocinador); + concepto.setNombre(nombre); + concepto.setDescripcion(descripcionConcepto); + + gasto.setConcepto(concepto); + + // Datos del Proyecto y curso en para el que se realiza el ingreso + JsonNode nodoProyectoCurso = nodoGasto.get("proyectoCurso"); + int idProyectoCurso = nodoProyectoCurso.get("identificador").asInt(); + + JsonNode nodoCurso = nodoProyectoCurso.get("curso"); + String codigoCursoJson = nodoCurso.get("codigo").asText(); + String sFechaInicioCurso = nodoCurso.get("fechaInicio").asText(); + // La fecha viene en formato dd-MM-yyyy + LocalDate ldFechaInicioCurso = LocalDate.parse(sFechaInicioCurso); + String sFechaFinCurso = nodoCurso.get("fechaFin").asText(); + // La fecha viene en formato dd-MM-yyyy + LocalDate ldFechaFinCurso = LocalDate.parse(sFechaFinCurso); + String nombreCurso = nodoCurso.get("nombre").asText(); + + CursoAcademico cursoAcademico = new CursoAcademico(); + cursoAcademico.setCodigo(codigoCursoJson); + cursoAcademico.setNombre(nombreCurso); + cursoAcademico.setFechaInicio(ldFechaInicioCurso); + cursoAcademico.setFechaFin(ldFechaFinCurso); + + JsonNode nodoProyecto = nodoProyectoCurso.get("proyecto"); + int idProyecto = nodoProyecto.get("identificador").asInt(); + String nombreProyecto = nodoProyecto.get("nombre").asText(); + String descripcionProyecto = nodoProyecto.get("descripcion").asText(); + String urlImagenProyecto = null; + + Proyecto proyecto = new Proyecto(); + proyecto.setIdentificador(idProyecto); + proyecto.setNombre(nombreProyecto); + proyecto.setDescripcion(descripcionProyecto); + proyecto.setUrlLogo(urlImagenProyecto); + + CursoProyecto cursoProyecto = new CursoProyecto(); + cursoProyecto.setIdentificador(idProyectoCurso); + cursoProyecto.setCursoAcademico(cursoAcademico); + cursoProyecto.setProyecto(proyecto); + + gasto.setCursoProyecto(cursoProyecto); + System.out.println(gasto); + + // Almacenar los gastos en ObjectDB + almacenarGastoEnObjectDB(gasto); + + } + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } - - - - - - System.out.println("Fin proceso de carga de GASTOS en ObjectDB.\n"); } + private static JsonNode obtenerJNodeDeURL(String urlPeticion) throws IOException { + JsonNode nodoRespuestaURL = null; + HttpClient client = HttpClient.newHttpClient(); + HttpRequest request = HttpRequest.newBuilder().uri(URI.create(urlPeticion)).GET().build(); + + HttpResponse response = null; + try { + response = client.send(request, HttpResponse.BodyHandlers.ofInputStream()); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + ObjectMapper mapper = new ObjectMapper(); + + nodoRespuestaURL = mapper.readTree(response.body()); + + return nodoRespuestaURL; + } + + private static void almacenarIngresoEnObjectDB(Ingreso ingreso) throws ProyectosIESException { + almacenarCursoAcademicoEnObjectDB(ingreso.getCursoProyecto().getCursoAcademico()); + almacenarProyectoEnObjectDB(ingreso.getCursoProyecto().getProyecto()); + almacenarCursoAcademicoProyectoEnObjectDB(ingreso.getCursoProyecto()); + almacenarPatrocinadorEnObjectDB(ingreso.getPatrocinador()); + + IOperacionesDAOEntidad ingresoDAO = new IngresoDaoJPA(); + ingresoDAO.crearEntidad(ingreso); + + } + + private static void almacenarGastoEnObjectDB(Gasto gasto) throws ProyectosIESException { + almacenarCursoAcademicoEnObjectDB(gasto.getCursoProyecto().getCursoAcademico()); + almacenarProyectoEnObjectDB(gasto.getCursoProyecto().getProyecto()); + almacenarCursoAcademicoProyectoEnObjectDB(gasto.getCursoProyecto()); + almacenarConceptoEnObjectDB(gasto.getConcepto()); + + IOperacionesDAOEntidad gastoDAO = new GastoDaoJPA(); + gastoDAO.crearEntidad(gasto); + + } + + private static void almacenarConceptoEnObjectDB(Concepto concepto) throws ProyectosIESException { + if(concepto!=null) { + IConceptoDAO conceptoDAO = new ConceptoDaoJPA(); + Concepto conceptoBBDD = conceptoDAO.obtenerConceptoPorNombre(concepto.getNombre()); + + // Inserción el concepto o actualizarlo en función de si existe o no en la base de datos. + if(conceptoBBDD==null) { + conceptoDAO.crearEntidad(concepto); + }else { + conceptoDAO.actualizarEntidad(concepto); + } + } + } + + private static void almacenarPatrocinadorEnObjectDB(Patrocinador patrocinador) throws ProyectosIESException { + if(patrocinador!=null) { + IPatrocinadorDAO patrocinadorDAO = new PatrocinadorDaoJPA(); + Patrocinador patrocinadorBBDD = patrocinadorDAO.obtenerPatrocinadorPorNombre(patrocinador.getNombre()); + + // Inserción el patrocinador o actualizarlo en función de si existe o no en la base de datos. + if(patrocinadorBBDD==null) { + patrocinadorDAO.crearEntidad(patrocinador); + }else { + patrocinadorDAO.actualizarEntidad(patrocinador); + } + } + } + + private static void almacenarCursoAcademicoEnObjectDB(CursoAcademico curso) throws ProyectosIESException { + if(curso!=null) { + IOperacionesDAOEntidad cursoAcademicoDAO = new CursoAcademicoDaoJPA(); + CursoAcademico cursoBBDD = cursoAcademicoDAO.obtenerEntidadPorID(curso.getCodigo()); + + // Inserción el curso o actualizarlo en función de si existe o no en la base de datos. + if(cursoBBDD==null) { + cursoAcademicoDAO.crearEntidad(curso); + }else { + cursoAcademicoDAO.actualizarEntidad(curso); + } + } + } + + private static void almacenarProyectoEnObjectDB(Proyecto proyecto) throws ProyectosIESException { + if(proyecto!=null) { + IProyectoDAO proyectoDAO = new ProyectoDaoJPA(); + Proyecto proyectoBBDD = proyectoDAO.obtenerProyectoPorNombre(proyecto.getNombre()); + + // Inserción el proyecto o actualizarlo en función de si existe o no en la base de datos. + if(proyectoBBDD==null) { + proyectoDAO.crearEntidad(proyecto); + }else { + proyectoDAO.actualizarEntidad(proyecto); + } + } + + } + + private static void almacenarCursoAcademicoProyectoEnObjectDB(CursoProyecto cursoProyecto) throws ProyectosIESException { + if(cursoProyecto!=null) { + ICursoProyectoDAO cursoProyectoDAO = new CursoProyectoDaoJPA(); + CursoProyecto cursoProyectoBBDD = cursoProyectoDAO.obtenerCursoProyectoPorCursoYProyecto(cursoProyecto.getCursoAcademico().getCodigo(), cursoProyecto.getProyecto().getIdentificador()); + + // Inserción el cursoProyecto o actualizarlo en función de si existe o no en la base de datos. + if(cursoProyectoBBDD==null) { + cursoProyectoDAO.crearEntidad(cursoProyecto); + }else { + cursoProyectoDAO.actualizarEntidad(cursoProyecto); + } + } + } + }