From 506cd585432c351b9ff029ebc855a743a3baba38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Isidoro=20Nevares=20Mart=C3=ADn?= Date: Fri, 31 Oct 2025 12:53:43 +0100 Subject: [PATCH] =?UTF-8?q?Adaptaci=C3=B3n=20al=20uso=20de=20Jackson=20con?= =?UTF-8?q?=20ToXmlGenerator?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .classpath | 21 + .gitignore | 2 + .project | 23 + .settings/org.eclipse.jdt.core.prefs | 14 + .settings/org.eclipse.m2e.core.prefs | 4 + informacion-IES_v2.json | 499 ++++++++++++++++++ informacion-IES_v2.xml | 315 +++++++++++ persona.xml | 1 + pom.xml | 26 + .../palomafp/aadd/inm/GestorInstitutoXML.java | 316 +++++++++++ target/classes/META-INF/MANIFEST.MF | 4 + .../aadd_act1_12/aadd_act1_12/pom.properties | 7 + .../maven/aadd_act1_12/aadd_act1_12/pom.xml | 26 + 13 files changed, 1258 insertions(+) create mode 100644 .classpath create mode 100644 .gitignore create mode 100644 .project create mode 100644 .settings/org.eclipse.jdt.core.prefs create mode 100644 .settings/org.eclipse.m2e.core.prefs create mode 100644 informacion-IES_v2.json create mode 100644 informacion-IES_v2.xml create mode 100644 persona.xml create mode 100644 pom.xml create mode 100644 src/es/palomafp/aadd/inm/GestorInstitutoXML.java create mode 100644 target/classes/META-INF/MANIFEST.MF create mode 100644 target/classes/META-INF/maven/aadd_act1_12/aadd_act1_12/pom.properties create mode 100644 target/classes/META-INF/maven/aadd_act1_12/aadd_act1_12/pom.xml diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..542b101 --- /dev/null +++ b/.classpath @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e618407 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/bin/ +*.class \ No newline at end of file diff --git a/.project b/.project new file mode 100644 index 0000000..ddc7c11 --- /dev/null +++ b/.project @@ -0,0 +1,23 @@ + + + aadd_act1_13 + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.m2e.core.maven2Nature + org.eclipse.jdt.core.javanature + + diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..832915d --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,14 @@ +eclipse.preferences.version=1 +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.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=24 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/informacion-IES_v2.json b/informacion-IES_v2.json new file mode 100644 index 0000000..8546f59 --- /dev/null +++ b/informacion-IES_v2.json @@ -0,0 +1,499 @@ +{ + "tipo": "FP", + "nombre": "IES Virgen de la Paloma", + "modulo": [ + { + "id": "M001", + "ubicacion": "Aula 101", + "tipo": "Laboratorio", + "descripcion": "Laboratorio de informática", + "capacidad": "30" + }, + { + "id": "M002", + "ubicacion": "Aula 102", + "tipo": "Taller", + "descripcion": "Taller de Fundamentos de Hardware", + "capacidad": "25" + }, + { + "id": "M003", + "ubicacion": "Aula 102", + "tipo": "Taller", + "descripcion": "Taller de Automoción", + "capacidad": "25" + } + ], + "ciclo": [ + { + "codigo": "IFC05", + "nivel": "CFGS", + "familia": "IFC", + "numero_horas": "2000", + "nombre": { + "nombre_corto": "DAM", + "nombre_largo": "Técnico Superior en Desarrollo de Aplicaciones Multiplataforma" + }, + "curso": [ + { + "numero": "1", + "modulo": [ + { + "id": "11", + "ref": "0186", + "titulo": "Bases de datos", + "numerohoras": "205" + }, + { + "id": "12", + "ref": "0188", + "numerohoras": "90", + "titulo": "Entornos de desarrollo" + }, + { + "id": "13", + "ref": "0194", + "numerohoras": "90", + "titulo": "Formación y orientación laboral" + }, + { + "id": "14", + "ref": "0190", + "numerohoras": "140", + "titulo": "Lenguaje de marcas y sistemas de gestión de información" + }, + { + "id": "14", + "ref": "0189", + "numerohoras": "270", + "titulo": "Programación" + }, + { + "id": "15", + "ref": "0191", + "numerohoras": "205", + "titulo": "Sistemas informáticos" + } + ] + }, + { + "numero": "2", + "modulo": [ + { + "id": "21", + "ref": "0286", + "titulo": "Acceso a Datos", + "numerohoras": "120" + }, + { + "id": "22", + "ref": "0288", + "numerohoras": "120", + "titulo": "Diseño de interfaces" + }, + { + "id": "23", + "ref": "0294", + "numerohoras": "65", + "titulo": "Empresa e iniciativa emprendedora" + }, + { + "id": "24", + "ref": "0290", + "numerohoras": "80", + "titulo": "Programación de servicios y procesos" + }, + { + "id": "25", + "ref": "0289", + "numerohoras": "80", + "titulo": "Programación multimedia y dispositivos móviles" + }, + { + "id": "26", + "ref": "0291", + "numerohoras": "40", + "titulo": "Inglés técnico para grado superior" + } + ] + } + ] + }, + { + "codigo": "IFC06", + "nivel": "CFGS", + "familia": "IFC", + "numero_horas": "2000", + "nombre": { + "nombre_corto": "DAW", + "nombre_largo": "Técnico Superior en Desarrollo de Aplicaciones Web" + }, + "curso": [ + { + "numero": "1", + "modulo": [ + { + "id": "31", + "ref": "0186", + "titulo": "Bases de datos", + "numerohoras": "205" + }, + { + "id": "32", + "ref": "0188", + "numerohoras": "90", + "titulo": "Entornos de desarrollo" + }, + { + "id": "33", + "ref": "0194", + "numerohoras": "90", + "titulo": "Formación y orientación laboral" + }, + { + "id": "34", + "ref": "0190", + "numerohoras": "140", + "titulo": "Lenguaje de marcas y sistemas de gestión de información" + }, + { + "id": "34", + "ref": "0189", + "numerohoras": "270", + "titulo": "Programación" + }, + { + "id": "35", + "ref": "0191", + "numerohoras": "205", + "titulo": "Sistemas informáticos" + } + ] + }, + { + "numero": "2", + "modulo": [ + { + "id": "41", + "ref": "0286", + "titulo": "Desarrollo web en entorno cliente", + "numerohoras": "115" + }, + { + "id": "42", + "ref": "0288", + "numerohoras": "180", + "titulo": "Desarrollo web en entorno servidor" + }, + { + "id": "43", + "ref": "0294", + "numerohoras": "85", + "titulo": "Despliegue de aplicaciones web" + }, + { + "id": "44", + "ref": "0290", + "numerohoras": "115", + "titulo": "Diseño de interfaces web" + }, + { + "id": "45", + "ref": "0289", + "numerohoras": "30", + "titulo": "Proyecto de desarrollo de aplicaciones web" + }, + { + "id": "46", + "ref": "0291", + "numerohoras": "40", + "titulo": "Inglés técnico para grado superior" + }, + { + "id": "23", + "ref": "0294", + "numerohoras": "65", + "titulo": "Empresa e iniciativa emprendedora" + } + ] + } + ] + }, + { + "codigo": "IFC03", + "nivel": "CFGS", + "familia": "IFC", + "numero_horas": "2000", + "nombre": { + "nombre_corto": "ASIR", + "nombre_largo": "Técnico Superior en Administración de Sistemas Informáticos en Red" + }, + "curso": [ + { + "numero": "1", + "modulo": [ + { + "id": "ASIR01", + "ref": "0223", + "titulo": "Implantación de sistemas operativos", + "numerohoras": "231" + }, + { + "id": "ASIR02", + "ref": "0226", + "titulo": "Planificación y administración de redes", + "numerohoras": "231" + }, + { + "id": "ASIR03", + "ref": "0227", + "titulo": "Fundamentos de hardware", + "numerohoras": "165" + }, + { + "id": "ASIR04", + "ref": "0228", + "titulo": "Gestión de bases de datos", + "numerohoras": "198" + }, + { + "id": "ASIR05", + "ref": "0231", + "titulo": "Lenguajes de marcas y sistemas de gestión de información", + "numerohoras": "132" + }, + { + "id": "ASIR06", + "ref": "0233", + "titulo": "Formación y orientación laboral", + "numerohoras": "99" + } + ] + }, + { + "numero": "2", + "modulo": [ + { + "id": "ASIR07", + "ref": "0229", + "titulo": "Administración de sistemas operativos", + "numerohoras": "105" + }, + { + "id": "ASIR08", + "ref": "0230", + "titulo": "Servicios de red e Internet", + "numerohoras": "126" + }, + { + "id": "ASIR09", + "ref": "0232", + "titulo": "Implantación de aplicaciones web", + "numerohoras": "84" + }, + { + "id": "ASIR10", + "ref": "0234", + "titulo": "Administración de sistemas gestores de bases de datos", + "numerohoras": "84" + }, + { + "id": "ASIR11", + "ref": "0235", + "titulo": "Seguridad y alta disponibilidad", + "numerohoras": "126" + }, + { + "id": "ASIR12", + "ref": "0236", + "titulo": "Empresa e iniciativa emprendedora", + "numerohoras": "66" + }, + { + "id": "ASIR13", + "ref": "FCT", + "titulo": "Formación en centros de trabajo", + "numerohoras": "370" + }, + { + "id": "ASIR14", + "ref": "PRJ", + "titulo": "Proyecto de Administración de Sistemas Informáticos en Red", + "numerohoras": "40" + } + ] + } + ] + }, + { + "codigo": "IFC02", + "nivel": "CFGM", + "familia": "IFC", + "numero_horas": "2000", + "nombre": { + "nombre_corto": "SMR", + "nombre_largo": "Técnico en Sistemas Microinformáticos y Redes" + }, + "curso": [ + { + "numero": "1", + "modulo": [ + { + "id": "SMR01", + "ref": "0223", + "titulo": "Montaje y mantenimiento de equipos", + "numerohoras": "198" + }, + { + "id": "SMR02", + "ref": "0224", + "titulo": "Sistemas operativos monopuesto", + "numerohoras": "198" + }, + { + "id": "SMR03", + "ref": "0225", + "titulo": "Aplicaciones ofimáticas", + "numerohoras": "231" + }, + { + "id": "SMR04", + "ref": "0226", + "titulo": "Redes locales", + "numerohoras": "198" + }, + { + "id": "SMR05", + "ref": "0233", + "titulo": "Formación y orientación laboral", + "numerohoras": "99" + } + ] + }, + { + "numero": "2", + "modulo": [ + { + "id": "SMR06", + "ref": "0227", + "titulo": "Sistemas operativos en red", + "numerohoras": "168" + }, + { + "id": "SMR07", + "ref": "0228", + "titulo": "Seguridad informática", + "numerohoras": "105" + }, + { + "id": "SMR08", + "ref": "0229", + "titulo": "Servicios en red", + "numerohoras": "168" + }, + { + "id": "SMR09", + "ref": "0230", + "titulo": "Aplicaciones web", + "numerohoras": "105" + }, + { + "id": "SMR10", + "ref": "0234", + "titulo": "Empresa e iniciativa emprendedora", + "numerohoras": "66" + }, + { + "id": "SMR11", + "ref": "FCT", + "titulo": "Formación en centros de trabajo", + "numerohoras": "370" + } + ] + } + ] + }, + { + "codigo": "FB01", + "nivel": "CFGB", + "familia": "IFC", + "numero_horas": "2000", + "nombre": { + "nombre_corto": "INFOBAS", + "nombre_largo": "Título Profesional Básico en Informática de Oficina" + }, + "curso": [ + { + "numero": "1", + "modulo": [ + { + "id": "INF01", + "ref": "MB101", + "titulo": "Aplicaciones básicas de ofimática", + "numerohoras": "160" + }, + { + "id": "INF02", + "ref": "MB102", + "titulo": "Montaje y mantenimiento de sistemas y componentes informáticos", + "numerohoras": "160" + }, + { + "id": "INF03", + "ref": "MB103", + "titulo": "Ciencias aplicadas I", + "numerohoras": "160" + }, + { + "id": "INF04", + "ref": "MB104", + "titulo": "Comunicación y sociedad I", + "numerohoras": "160" + }, + { + "id": "INF05", + "ref": "MB105", + "titulo": "Tutorización y orientación", + "numerohoras": "80" + } + ] + }, + { + "numero": "2", + "modulo": [ + { + "id": "INF06", + "ref": "MB106", + "titulo": "Tratamiento de textos y presentación de información", + "numerohoras": "160" + }, + { + "id": "INF07", + "ref": "MB107", + "titulo": "Operaciones auxiliares de mantenimiento de sistemas informáticos", + "numerohoras": "160" + }, + { + "id": "INF08", + "ref": "MB108", + "titulo": "Ciencias aplicadas II", + "numerohoras": "160" + }, + { + "id": "INF09", + "ref": "MB109", + "titulo": "Comunicación y sociedad II", + "numerohoras": "160" + }, + { + "id": "INF10", + "ref": "FCT", + "titulo": "Formación en centros de trabajo", + "numerohoras": "260" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/informacion-IES_v2.xml b/informacion-IES_v2.xml new file mode 100644 index 0000000..6a73851 --- /dev/null +++ b/informacion-IES_v2.xml @@ -0,0 +1,315 @@ + + + IES Virgen de la Paloma + + + Laboratorio de informática + 30 + + + Taller de Fundamentos de Hardware + 25 + + + Taller de Automoción + 25 + + + + + DAM + Técnico Superior en Desarrollo de Aplicaciones Multiplataforma + + + + Bases de datos + 205 + + + 90 + Entornos de desarrollo + + + 90 + Formación y orientación laboral + + + 140 + Lenguaje de marcas y sistemas de gestión de información + + + 270 + Programación + + + 205 + Sistemas informáticos + + + + + Acceso a Datos + 120 + + + 120 + Diseño de interfaces + + + 65 + Empresa e iniciativa emprendedora + + + 80 + Programación de servicios y procesos + + + 80 + Programación multimedia y dispositivos móviles + + + 40 + Inglés técnico para grado superior + + + + + + DAW + Técnico Superior en Desarrollo de Aplicaciones Web + + + + Bases de datos + 205 + + + 90 + Entornos de desarrollo + + + 90 + Formación y orientación laboral + + + 140 + Lenguaje de marcas y sistemas de gestión de información + + + 270 + Programación + + + 205 + Sistemas informáticos + + + + + Desarrollo web en entorno cliente + 115 + + + 180 + Desarrollo web en entorno servidor + + + 85 + Despliegue de aplicaciones web + + + 115 + Diseño de interfaces web + + + 30 + Proyecto de desarrollo de aplicaciones web + + + 40 + Inglés técnico para grado superior + + + 65 + Empresa e iniciativa emprendedora + + + + + ASIR + Técnico Superior en Administración de Sistemas Informáticos en Red + + + + + Implantación de sistemas operativos + 231 + + + Planificación y administración de redes + 231 + + + Fundamentos de hardware + 165 + + + Gestión de bases de datos + 198 + + + Lenguajes de marcas y sistemas de gestión de información + 132 + + + Formación y orientación laboral + 99 + + + + + Administración de sistemas operativos + 105 + + + Servicios de red e Internet + 126 + + + Implantación de aplicaciones web + 84 + + + Administración de sistemas gestores de bases de datos + 84 + + + Seguridad y alta disponibilidad + 126 + + + Empresa e iniciativa emprendedora + 66 + + + Formación en centros de trabajo + 370 + + + Proyecto de Administración de Sistemas Informáticos en Red + 40 + + + + + + + SMR + Técnico en Sistemas Microinformáticos y Redes + + + + + Montaje y mantenimiento de equipos + 198 + + + Sistemas operativos monopuesto + 198 + + + Aplicaciones ofimáticas + 231 + + + Redes locales + 198 + + + Formación y orientación laboral + 99 + + + + + + Sistemas operativos en red + 168 + + + Seguridad informática + 105 + + + Servicios en red + 168 + + + Aplicaciones web + 105 + + + Empresa e iniciativa emprendedora + 66 + + + Formación en centros de trabajo + 370 + + + + + + + + INFOBAS + Título Profesional Básico en Informática de Oficina + + + + + Aplicaciones básicas de ofimática + 160 + + + Montaje y mantenimiento de sistemas y componentes informáticos + 160 + + + Ciencias aplicadas I + 160 + + + Comunicación y sociedad I + 160 + + + Tutorización y orientación + 80 + + + + + + Tratamiento de textos y presentación de información + 160 + + + Operaciones auxiliares de mantenimiento de sistemas informáticos + 160 + + + Ciencias aplicadas II + 160 + + + Comunicación y sociedad II + 160 + + + Formación en centros de trabajo + 260 + + + + \ No newline at end of file diff --git a/persona.xml b/persona.xml new file mode 100644 index 0000000..3a55784 --- /dev/null +++ b/persona.xml @@ -0,0 +1 @@ +Juan30<@tipo>principalGran ViaMadrid<@tipo>movil<#text>600123123<@tipo>fijo<#text>915551212 \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..02bd7f4 --- /dev/null +++ b/pom.xml @@ -0,0 +1,26 @@ + + 4.0.0 + aadd_act1_12 + aadd_act1_12 + 0.0.1-SNAPSHOT + + + + tools.jackson.dataformat + jackson-dataformat-xml + 3.0.1 + + + + src + + + maven-compiler-plugin + 3.13.0 + + 24 + + + + + \ No newline at end of file diff --git a/src/es/palomafp/aadd/inm/GestorInstitutoXML.java b/src/es/palomafp/aadd/inm/GestorInstitutoXML.java new file mode 100644 index 0000000..5ce1770 --- /dev/null +++ b/src/es/palomafp/aadd/inm/GestorInstitutoXML.java @@ -0,0 +1,316 @@ +package es.palomafp.aadd.inm; + +import java.io.File; +import java.io.IOException; +import java.io.StringWriter; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.StandardOpenOption; +import java.util.Scanner; + +import javax.xml.namespace.QName; +import javax.xml.stream.XMLStreamException; + +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.dataformat.xml.XmlMapper; +import tools.jackson.dataformat.xml.ser.ToXmlGenerator; + +/** + * + * GestorInstitutoXML: Clase que procesa un fichero XML de un instituto + * utilizando Jackson + * + * @author Isidoro Nevares Martín - IES Virgen de la Paloma + * @date 26 sept 2025 + */ + +public class GestorInstitutoXML { + private static final String RUTA_FICHERO_XML = "informacion-IES_v2.xml"; + private static final String RUTA_FICHERO_JSON = "informacion-IES_v2.json"; + private static final String RUTA_FICHERO_SALIDA_XML = "informacion-ciclos_IES.xml"; + + public static void main(String[] args) { + GestorInstitutoXML gestor = new GestorInstitutoXML(); + + Scanner scanner = new Scanner(System.in); // Crear el scanner + + System.out.print("Introduce una opción de procesamiento XML: \n"); + String opcion = scanner.nextLine(); // Leer una opción introducida. + + switch (opcion) { + case "1": + System.out.println("Imprimir instituto"); + gestor.imprimirInstituto(); + break; + case "2": + System.out.println("Imprimir ciclos"); + gestor.imprimirCiclos(); + break; + case "3": + System.out.println("Imprimir módulos que empiezan por 'Programa'"); + gestor.imprimirModulosPrograma(); + break; + case "4": + System.out.println( + "Imprimir módulos cuyo título empieza por “Programa” y el número de horas es mayor de 100 o bien el título incluyen la palabra “desarrollo” (da igual mayúscula o minúscula) que, además, ocurran en ciclos de nivel grado superior (CFGS) del curso 1"); + gestor.imprimirModulosFiltro2(); + break; + case "5": + System.out.println("Almacenar instituto en fichero usando Jackson-JsonNode"); + gestor.guardarInstitutoFicheroJackson(); + break; + } + + scanner.close(); + } + + private void imprimirInstituto() { + JsonNode nodoRaiz = obtenerJsonNodeDeFicheroXML(); // El nodo raíz es el nodo "instituto" (y únicamente hay + // uno). + // Obtener los atributos del nodo "instituto" + String nombreInstituto = nodoRaiz.path("nombre").asString(); + String tipoInstituto = nodoRaiz.path("tipo").asString(); + + System.out.println("Nombre del Instituto: " + nombreInstituto + " - Tipo del Instituto: " + tipoInstituto); + } + + private void imprimirCiclos() { + JsonNode nodoRaiz = obtenerJsonNodeDeFicheroXML(); + // Obtener los nodos "ciclo" + ArrayNode ciclos = convertirJsonNodeEnArrayNode(nodoRaiz.path("ciclo")); + + for (JsonNode ciclo : ciclos) { + String codigo = ciclo.path("codigo").asString();// Accedemos al atributo 'codigo' + JsonNode nodoNombreCiclo = ciclo.path("nombre"); + String nombreCorto = nodoNombreCiclo.path("nombre_corto").asString();// Accedemos al atributo 'nombre corto' + + System.out.println("Ciclo - Código: " + codigo + ", Nombre Corto: " + nombreCorto); + + } + } + + private void imprimirModulosPrograma() { + JsonNode nodoRaiz = obtenerJsonNodeDeFicheroXML(); + + // Obtener los nodos "ciclo" + ArrayNode ciclos = convertirJsonNodeEnArrayNode(nodoRaiz.path("ciclo")); + for (JsonNode ciclo : ciclos) { + // Obtener los nodos "curso" + ArrayNode cursos = convertirJsonNodeEnArrayNode(ciclo.path("curso")); + for (JsonNode curso : cursos) { + // Obtener los nodos "modulo" + ArrayNode modulos = convertirJsonNodeEnArrayNode(curso.path("modulo")); + + for (JsonNode modulo : modulos) { + String titulo = modulo.path("titulo").asString(); + if (!titulo.isEmpty() && titulo.startsWith("Programa")) { + String id = modulo.path("id").asString(); + String referencia = modulo.path("ref").asString(); + String numeroHoras = modulo.path("numerohoras").asString(); + + System.out.println("Modelo: - Id: " + id + ", Referencia: " + referencia + ", Título: " + titulo + + ", Número de horas: " + numeroHoras); + } + } + + } + + } + + } + + private void imprimirModulosFiltro2() { + JsonNode nodoRaiz = obtenerJsonNodeDeFicheroXML(); + + // Obtener los nodos "ciclo" + ArrayNode ciclos = convertirJsonNodeEnArrayNode(nodoRaiz.path("ciclo")); + for (JsonNode ciclo : ciclos) { + String nivel = ciclo.path("nivel").asString(); + if (nivel.equals("CFGS")) { + // Obtener los nodos "curso" + ArrayNode cursos = convertirJsonNodeEnArrayNode(ciclo.path("curso")); + for (JsonNode curso : cursos) { + String numeroCurso = curso.path("numero").asString(); + if (numeroCurso.equals("1")) { + // Obtener los nodos "modulo" + ArrayNode modulos = convertirJsonNodeEnArrayNode(curso.path("modulo")); + + for (JsonNode modulo : modulos) { + String titulo = modulo.path("titulo").asString(); + int numeroHoras = Integer.parseInt(modulo.path("numerohoras").asString()); + if ((!titulo.isEmpty() && titulo.startsWith("Programa") && numeroHoras > 100) + || titulo.toLowerCase().contains("desarrollo")) { + String id = modulo.path("id").asString(); + String referencia = modulo.path("ref").asString(); + + System.out.println("Modelo: - Id: " + id + ", Referencia: " + referencia + ", Título: " + + titulo + ", Número de horas: " + numeroHoras); + } + } + } + } + } + } + } + + private void guardarInstitutoFicheroJackson() { + JsonNode nodoInstituto = obtenerJsonNodeDeFicheroXML(); + + StringWriter sw = new StringWriter(); + XmlMapper xmlMapper = new XmlMapper(); + + // Creamos el ToXmlGenerator (es un JsonGenerator especializado para XML) + ToXmlGenerator generador = (ToXmlGenerator) xmlMapper.writerWithDefaultPrettyPrinter().createGenerator(sw); + + try { // Escribimos la declaración XML () + generador.getStaxWriter().writeStartDocument("UTF-8", "1.0"); + generador.getStaxWriter().writeCharacters("\n"); + } catch (XMLStreamException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + // Iniciamos la escritura del objeto XML + generador.initGenerator(); + + // Trabajamos con el nodo instituto + guardarInstitutoFicheroJackson(nodoInstituto, generador); + + generador.close(); + + Path out = Paths.get(RUTA_FICHERO_SALIDA_XML); + try { + Files.writeString(out, sw.toString(), StandardCharsets.UTF_8, + StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + private void guardarInstitutoFicheroJackson(JsonNode nodoInstituto, ToXmlGenerator generador) { + generador.setNextName(new QName(null, "instituto")); // empezamos el elemento + generador.writeStartObject(); + + generador.setNextIsAttribute(true); + generador.writeStringProperty("tipo", nodoInstituto.path("tipo").asString()); // escribe atributo tipo="CFGS" + generador.setNextIsAttribute(false); + generador.writeStringProperty("nombre", nodoInstituto.path("nombre").asString()); // nombre="IES Virgen de la Paloma" + + // Obtener los nodos "ciclo" para almacenarlos + ArrayNode ciclos = convertirJsonNodeEnArrayNode(nodoInstituto.path("ciclo")); + for (JsonNode ciclo : ciclos) { + guardarCiclosFicheroJackson(ciclo, generador); + } + + generador.writeEndObject(); // termina + + } + private void guardarCiclosFicheroJackson(JsonNode nodoCiclo, ToXmlGenerator generador) { + + // Crear el elemento ciclo + generador.writeName("ciclo"); + generador.writeStartObject(); + + // Escribir los atributos del ciclo + String nivel = nodoCiclo.path("nivel").asString(); + String codigo = nodoCiclo.path("codigo").asString(); + generador.setNextIsAttribute(true); + generador.writeStringProperty("codigo", codigo); + generador.writeStringProperty("nivel", nivel); + generador.setNextIsAttribute(false); + + // Escribir los elementos del ciclo + String nombreCorto = nodoCiclo.path("nombre").path("nombre_corto").asString(); + String nombreLargo = nodoCiclo.path("nombre").path("nombre_largo").asString(); + generador.writeStringProperty("nombre_corto", nombreCorto); + generador.writeStringProperty("nombre_largo", nombreLargo); + + // Obtener los nodos "curso" + ArrayNode cursos = convertirJsonNodeEnArrayNode(nodoCiclo.path("curso")); + for (JsonNode curso : cursos) { + guardarCursoFicheroJackson(curso, generador); + } + + // Cerrar el elemento ciclo + generador.writeEndObject(); + + } + + private void guardarCursoFicheroJackson(JsonNode nodoCurso, ToXmlGenerator generador) { + + // Crear el elemento curso + generador.writeName("curso"); + generador.writeStartObject(); + + // Escribir los atributos del curso + String numero = nodoCurso.path("numero").asString(); + generador.setNextIsAttribute(true); + generador.writeStringProperty("num", numero); + generador.setNextIsAttribute(false); + + // Obtener los nodos "modulo" + ArrayNode modulos = convertirJsonNodeEnArrayNode(nodoCurso.path("modulo")); + for (JsonNode modulo : modulos) { + guardarModuloFicheroJackson(modulo, generador); + } + // Cerrar el elemento curso + generador.writeEndObject(); + + } + + private void guardarModuloFicheroJackson(JsonNode nodoModulo, ToXmlGenerator generador) { + + // Crear el elemento modulo + generador.writeName("modulo"); + generador.writeStartObject(); + + // Escribir los atributos del modulo + String id = nodoModulo.path("id").asString(); + String ref = nodoModulo.path("ref").asString(); + String numeroHoras = nodoModulo.path("numerohoras").asString(); + generador.setNextIsAttribute(true); + generador.writeStringProperty("id", id); + generador.writeStringProperty("ref", ref); + generador.writeStringProperty("numero_horas", numeroHoras); + generador.setNextIsAttribute(false); + String titulo = nodoModulo.path("titulo").asString(); + generador.writeStringProperty("titulo", titulo); + + // Cerrar el elemento curso + generador.writeEndObject(); + + } + + private JsonNode obtenerJsonNodeDeFicheroXML() { + // Cargar el XML + XmlMapper xmlMapper = new XmlMapper(); + JsonNode root = xmlMapper.readTree(new File(RUTA_FICHERO_XML)); + + return root; + } + + private JsonNode obtenerJsonNodeDeFicheroJSON() { + // Cargar el XML + ObjectMapper xmlMapper = new ObjectMapper(); + JsonNode root = xmlMapper.readTree(new File(RUTA_FICHERO_JSON)); + + return root; + } + + 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; + } + } +} diff --git a/target/classes/META-INF/MANIFEST.MF b/target/classes/META-INF/MANIFEST.MF new file mode 100644 index 0000000..a297ac5 --- /dev/null +++ b/target/classes/META-INF/MANIFEST.MF @@ -0,0 +1,4 @@ +Manifest-Version: 1.0 +Build-Jdk-Spec: 25 +Created-By: Maven Integration for Eclipse + diff --git a/target/classes/META-INF/maven/aadd_act1_12/aadd_act1_12/pom.properties b/target/classes/META-INF/maven/aadd_act1_12/aadd_act1_12/pom.properties new file mode 100644 index 0000000..b2ca35d --- /dev/null +++ b/target/classes/META-INF/maven/aadd_act1_12/aadd_act1_12/pom.properties @@ -0,0 +1,7 @@ +#Generated by Maven Integration for Eclipse +#Fri Oct 31 12:46:03 CET 2025 +artifactId=aadd_act1_12 +groupId=aadd_act1_12 +m2e.projectLocation=C\:\\Users\\ineva\\INM\\Personal\\Trabajo\\00-Educaci\u00F3n - CM\\10-Curso 2025-2026\\02-Acceso de datos -DAM2\\workspace\\aadd_act1_13 +m2e.projectName=aadd_act1_13 +version=0.0.1-SNAPSHOT diff --git a/target/classes/META-INF/maven/aadd_act1_12/aadd_act1_12/pom.xml b/target/classes/META-INF/maven/aadd_act1_12/aadd_act1_12/pom.xml new file mode 100644 index 0000000..02bd7f4 --- /dev/null +++ b/target/classes/META-INF/maven/aadd_act1_12/aadd_act1_12/pom.xml @@ -0,0 +1,26 @@ + + 4.0.0 + aadd_act1_12 + aadd_act1_12 + 0.0.1-SNAPSHOT + + + + tools.jackson.dataformat + jackson-dataformat-xml + 3.0.1 + + + + src + + + maven-compiler-plugin + 3.13.0 + + 24 + + + + + \ No newline at end of file