1 00:00:00,240 --> 00:00:03,160 Vale, pues entonces 2 00:00:03,160 --> 00:00:04,160 Yo directamente 3 00:00:04,160 --> 00:00:07,440 Copié y pegué esta aplicación 4 00:00:07,440 --> 00:00:09,060 La copié y la pegué 5 00:00:09,060 --> 00:00:10,199 Hice un copy y pega 6 00:00:10,199 --> 00:00:12,500 A partir de ella, es lo más cómodo, ¿no? 7 00:00:12,500 --> 00:00:14,500 Porque es una arquitectura similar a la que vamos a usar 8 00:00:14,500 --> 00:00:16,739 Pues hice un copy y pega de la aplicación 9 00:00:16,739 --> 00:00:17,620 La cambié de nombre 10 00:00:17,620 --> 00:00:19,879 Y llegué a esta aplicación 11 00:00:19,879 --> 00:00:21,120 ¿Vale? 12 00:00:22,280 --> 00:00:26,289 Entonces, lo que tenía que hacer 13 00:00:26,289 --> 00:00:27,550 Esta aplicación es 14 00:00:27,550 --> 00:00:30,309 Dado un fichero xml 15 00:00:30,309 --> 00:00:33,289 que le vamos a dar a la aplicación 16 00:00:33,289 --> 00:00:34,909 que el fichero 17 00:00:34,909 --> 00:00:36,109 pues 18 00:00:36,109 --> 00:00:38,509 era 19 00:00:38,509 --> 00:00:40,090 este de aquí 20 00:00:40,090 --> 00:00:42,929 este de la 21 00:00:42,929 --> 00:00:43,609 fórmula 1 22 00:00:43,609 --> 00:00:46,929 este fichero JSON 23 00:00:46,929 --> 00:00:48,750 vamos a hacer un listado 24 00:00:48,750 --> 00:00:51,049 PDF con datos que vamos a extraer 25 00:00:51,049 --> 00:00:52,770 de aquí, entonces como es JSON 26 00:00:52,770 --> 00:00:54,429 pues automáticamente lo vamos a tener que leer 27 00:00:54,429 --> 00:00:56,850 con alguna librería que lo sepa parsear 28 00:00:56,850 --> 00:00:58,750 en nuestro caso Jackson 29 00:00:58,750 --> 00:01:00,710 no es la que hemos mencionado, porque es la 30 00:01:00,710 --> 00:01:02,210 más completa y la más usada 31 00:01:02,210 --> 00:01:04,170 y de aquí vamos a sacar 32 00:01:04,170 --> 00:01:06,829 pues una serie de cosas, entonces primero 33 00:01:06,829 --> 00:01:08,310 tengo que tener el chip de, ah vale 34 00:01:08,310 --> 00:01:10,430 vas a usar Jackson 35 00:01:10,430 --> 00:01:13,109 muy bien, para leer esto, entonces uno lo recuerda 36 00:01:13,109 --> 00:01:14,709 ya lo tiene situado en la cabeza 37 00:01:14,709 --> 00:01:16,790 para poder pillar de él, en el momento 38 00:01:16,790 --> 00:01:18,810 en el que ya lo necesite, bueno pues entonces 39 00:01:18,810 --> 00:01:20,849 esta aplicación, según el copia 40 00:01:20,849 --> 00:01:22,489 y pega, tenía su 41 00:01:22,489 --> 00:01:27,219 su, uy 42 00:01:27,219 --> 00:01:32,319 bueno, ahí coño 43 00:01:32,319 --> 00:01:32,900 se me va 44 00:01:32,900 --> 00:01:34,700 Que mal veo, vale 45 00:01:34,700 --> 00:01:37,219 Lo primero que hacía esta aplicación 46 00:01:37,219 --> 00:01:38,680 Era arrancarte el index 47 00:01:38,680 --> 00:01:41,519 Eso no lo tenemos que tocar 48 00:01:41,519 --> 00:01:42,640 Nosotros subimos nuestro 49 00:01:42,640 --> 00:01:45,000 Fichero desde nuestro index 50 00:01:45,000 --> 00:01:46,659 Sube aquí tu archivo JSON y ya está 51 00:01:46,659 --> 00:01:47,859 El index lo tocamos 52 00:01:47,859 --> 00:01:49,540 Vale, entonces 53 00:01:49,540 --> 00:01:52,799 Eso es lo que 54 00:01:52,799 --> 00:01:55,900 Recogía el controlador 55 00:01:55,900 --> 00:01:58,799 Que lo tengo aquí 56 00:01:58,799 --> 00:02:01,739 El controlador en la ruta inicial 57 00:02:01,739 --> 00:02:03,060 te descargaba el index 58 00:02:03,060 --> 00:02:04,900 pues el controlador 59 00:02:04,900 --> 00:02:07,560 esto no lo tengo ni que tocar 60 00:02:07,560 --> 00:02:09,919 te muestra mi index y es que mi index 61 00:02:09,919 --> 00:02:12,039 me vale, tal cual, subir el archivo 62 00:02:12,039 --> 00:02:13,900 pues hasta aquí la aplicación es que sigue 63 00:02:13,900 --> 00:02:14,479 siendo la misma 64 00:02:14,479 --> 00:02:18,099 vale, que es lo que ocurre 65 00:02:18,099 --> 00:02:19,819 luego después cuando yo le doy a subir 66 00:02:19,819 --> 00:02:22,280 pues cuando yo le doy a subir el archivo 67 00:02:22,280 --> 00:02:24,080 el upload, el controlador ya va 68 00:02:24,080 --> 00:02:27,229 aquí, upload 69 00:02:27,229 --> 00:02:29,610 este método, entonces la primera 70 00:02:29,610 --> 00:02:31,550 parte tampoco cambia, la primera 71 00:02:31,550 --> 00:02:40,409 parte es la que del parámetro este file que guardo en un parámetro multipart file, pues este parámetro 72 00:02:40,409 --> 00:02:46,590 saco los bytes y me creo un archivo local en la ruta que yo quiera de mi equipo, pues en este caso 73 00:02:46,590 --> 00:02:52,650 yo he puesto en esta, esta es la ruta local del servidor donde guarda los archivos con los que 74 00:02:52,650 --> 00:02:54,729 trabaja, pues me creo 75 00:02:54,729 --> 00:02:56,349 este archivo local 76 00:02:56,349 --> 00:02:57,530 con el nombre 77 00:02:57,530 --> 00:03:00,530 del parámetro subido 78 00:03:00,530 --> 00:03:02,370 y ahora ya tengo el archivo 79 00:03:02,370 --> 00:03:03,789 ahí, lo tengo aquí 80 00:03:03,789 --> 00:03:06,629 ahí subido 81 00:03:06,629 --> 00:03:08,009 aquí 82 00:03:08,009 --> 00:03:09,530 en esta variable 83 00:03:09,530 --> 00:03:12,629 y ahora, esto es lo único que cambia 84 00:03:12,629 --> 00:03:14,629 lo único que cambia es 85 00:03:14,629 --> 00:03:16,449 que en lugar de llamar a 86 00:03:16,449 --> 00:03:17,930 conviérteme de JSON 87 00:03:17,930 --> 00:03:19,689 perdón, de XML a JSON 88 00:03:19,689 --> 00:03:21,509 generame el informe 89 00:03:21,509 --> 00:03:43,919 Entonces, esta línea que en nuestra otra aplicación era esta, era esta, pues en lugar de llamar a este método, me tengo que hacer ahora ya sí el que me interesa, me tengo que hacer el que me interesa, ¿vale? 90 00:03:43,919 --> 00:04:11,120 Bueno, pues entonces, para eso me he creado este método estático dentro de la clase lógica, que ahora la abrimos, y este método estático yo le paso el fichero que ya está guardado localmente, porque lo acabo de subir, que está aquí, lo paso en file, y este método, lo que yo quiero que haga, siempre antes de empezar a programar algo, uno tiene que hacer un análisis previo, lógicamente, 91 00:04:11,120 --> 00:04:27,079 Entonces, una aplicación inicialmente tiene que ser un conjunto de firmas, con firmas me refiero a cabeceras de métodos, entonces eso casi es lo más difícil de una aplicación, el hacer todas las cabeceras de métodos, todas las firmas que van a reproducir lo que tú quieres que pase. 92 00:04:27,079 --> 00:04:29,339 luego ya ir rellenando cada método por dentro 93 00:04:29,339 --> 00:04:30,420 ya son detalles 94 00:04:30,420 --> 00:04:33,519 bueno, pues yo aquí, ¿qué necesito? 95 00:04:33,579 --> 00:04:35,139 yo aquí necesito un pdf 96 00:04:35,139 --> 00:04:37,720 ¿vale? pues voy a necesitar un método 97 00:04:37,720 --> 00:04:39,240 al que le paso mi fichero local 98 00:04:39,240 --> 00:04:41,060 que acabo de guardar 99 00:04:41,060 --> 00:04:43,620 y le voy a dar 100 00:04:43,620 --> 00:04:45,180 el nombre del pdf 101 00:04:45,180 --> 00:04:47,639 donde lo va a guardar, pues enlistado 102 00:04:47,639 --> 00:04:49,560 pdf, por ejemplo, este mismo 103 00:04:49,560 --> 00:04:50,720 lo primero que puse 104 00:04:50,720 --> 00:04:52,100 en la misma ruta 105 00:04:52,100 --> 00:04:54,000 donde estoy trabajando 106 00:04:54,000 --> 00:04:57,199 entonces el resultado final 107 00:04:57,199 --> 00:04:59,199 de este método tiene que ser que mi archivo 108 00:04:59,199 --> 00:05:01,240 file genere un pdf 109 00:05:01,240 --> 00:05:02,079 que guarde ahí 110 00:05:02,079 --> 00:05:04,720 ¿vale? y luego ya 111 00:05:04,720 --> 00:05:07,160 el resto de este método del controlador no cambia 112 00:05:07,160 --> 00:05:09,100 me va a devolver una página 113 00:05:09,100 --> 00:05:11,180 de descarga, una página de descarga 114 00:05:11,180 --> 00:05:13,019 con un parámetro oculto 115 00:05:13,019 --> 00:05:15,160 que voy a llamar así 116 00:05:15,160 --> 00:05:17,120 lógicamente porque es el mismo nombre que he puesto aquí 117 00:05:17,120 --> 00:05:18,279 un parámetro oculto 118 00:05:18,279 --> 00:05:19,620 y ahora ya 119 00:05:19,620 --> 00:05:23,199 la página de descarga 120 00:05:23,199 --> 00:05:25,439 va a invocar a download 121 00:05:25,439 --> 00:05:26,779 y esto no cambia 122 00:05:26,779 --> 00:05:29,319 esto es exactamente el mismo que tenía 123 00:05:29,319 --> 00:05:30,680 en la otra aplicación, no ha cambiado 124 00:05:30,680 --> 00:05:33,199 lo que voy a descargar aquí es 125 00:05:33,199 --> 00:05:35,439 pues el fichero que se llame 126 00:05:35,439 --> 00:05:36,920 como el parámetro oculto que he pasado aquí 127 00:05:36,920 --> 00:05:39,600 o sea, lo único que cambia ahora mismo, con la copia que yo he hecho 128 00:05:39,600 --> 00:05:41,399 el copia y pega de las dos aplicaciones 129 00:05:41,399 --> 00:05:43,839 lo único que ha cambiado 130 00:05:43,839 --> 00:05:45,079 de todo el controlador 131 00:05:45,079 --> 00:05:47,740 es esta línea, es lo único que ha cambiado 132 00:05:47,740 --> 00:05:49,019 de todo el controlador, ¿vale? 133 00:05:50,519 --> 00:05:51,579 el contenido web 134 00:05:51,579 --> 00:05:53,399 es el mismo, el index es el mismo 135 00:05:53,399 --> 00:05:55,480 la página de descarga será 136 00:05:55,480 --> 00:05:57,819 la misma, todo es lo mismo 137 00:05:57,819 --> 00:05:59,579 ahora me tengo que centrar 138 00:05:59,579 --> 00:06:00,259 en esta parte 139 00:06:00,259 --> 00:06:03,120 bueno, pues entonces me hago 140 00:06:03,120 --> 00:06:04,519 la clase lógica 141 00:06:04,519 --> 00:06:06,879 y ahí el método 142 00:06:06,879 --> 00:06:08,519 entonces la clase 143 00:06:08,519 --> 00:06:11,519 lógica es esta y aquí ya está 144 00:06:11,519 --> 00:06:11,980 el método 145 00:06:11,980 --> 00:06:14,540 vale, pues esto 146 00:06:14,540 --> 00:06:17,379 del JSON file me genera 147 00:06:17,379 --> 00:06:19,459 un PDF con este nombre, pues aquí 148 00:06:19,459 --> 00:06:20,639 ya es hacer 149 00:06:20,639 --> 00:06:26,579 lo que ya sabemos. Primero, la parte de generar el informe 150 00:06:26,579 --> 00:06:32,259 va a necesitar una lista con los datos que yo quiero recoger 151 00:06:32,259 --> 00:06:36,920 en el informe. Entonces, antes de nada, vamos a pensar 152 00:06:36,920 --> 00:06:39,879 a ver qué datos necesito yo en el informe, qué datos necesito. 153 00:06:41,379 --> 00:06:46,240 Pues los voy a meter en una clase aparte, aquí en este paquete 154 00:06:46,240 --> 00:06:49,120 de informe, los voy a meter aquí, que son el equipo, el corredor 155 00:06:49,120 --> 00:06:54,709 y los puntos. Estos son los datos. Pues esta es la clase que recoge 156 00:06:54,709 --> 00:06:58,670 los tres datos que van al informe. Luego 157 00:06:58,670 --> 00:07:02,709 este método de aquí, este método necesita 158 00:07:02,709 --> 00:07:05,810 una lista con esos datos. 159 00:07:07,050 --> 00:07:10,810 Bueno, pues entonces tengo yo que irlos construyendo 160 00:07:10,810 --> 00:07:14,170 a partir de todos y cada uno de los corredores 161 00:07:14,170 --> 00:07:18,910 del JSON. Bueno, pues vamos a leer el JSON con 162 00:07:18,910 --> 00:07:21,009 la librería Jackson exactamente 163 00:07:21,009 --> 00:07:23,050 igual que hicimos en el ejemplo de Jackson 164 00:07:23,050 --> 00:07:24,930 igual, es que no tenemos que cambiar nada 165 00:07:24,930 --> 00:07:27,089 vale, pues ¿qué hicimos en la librería 166 00:07:27,089 --> 00:07:28,730 de Jackson? pues convertimos 167 00:07:28,730 --> 00:07:30,910 el JSON a un objeto 168 00:07:30,910 --> 00:07:33,089 con la estructura de clases que hay 169 00:07:33,089 --> 00:07:34,709 aquí, que es la forma más fácil de trabajar 170 00:07:34,709 --> 00:07:37,069 pero yo puedo leer el JSON no de empezar 171 00:07:37,069 --> 00:07:38,949 a leer dentro de los JSON 172 00:07:38,949 --> 00:07:40,569 no de que hay debajo y navegar 173 00:07:40,569 --> 00:07:42,129 y no necesito ningún modelo 174 00:07:42,129 --> 00:07:45,069 pero si tengo 175 00:07:45,069 --> 00:07:46,810 la opción de hacerme un modelo de clases 176 00:07:46,810 --> 00:07:48,930 que representan ese JSON es mucho más fácil 177 00:07:48,930 --> 00:07:50,829 porque convierto el JSON 178 00:07:50,829 --> 00:07:52,629 en un objeto raíz 179 00:07:52,629 --> 00:07:54,709 y ya está, y a partir de ahí ya programo 180 00:07:54,709 --> 00:07:56,810 de toda la vida, entonces si tengo esa opción es lo más fácil 181 00:07:56,810 --> 00:07:58,949 ¿vale? pero claro, tengo que poder 182 00:07:58,949 --> 00:08:00,990 crearme yo unas clases modelo y tenerlas 183 00:08:00,990 --> 00:08:03,009 ahí y que nadie me diga, oye, esto molesta mucho 184 00:08:03,009 --> 00:08:04,589 bueno, pues como 185 00:08:04,589 --> 00:08:06,470 aquí no me han dicho que no haga eso 186 00:08:06,470 --> 00:08:08,790 pues venga, vamos a 187 00:08:08,790 --> 00:08:10,449 hacer unas clases modelo que 188 00:08:10,449 --> 00:08:11,610 representen esto 189 00:08:11,610 --> 00:08:12,910 esto 190 00:08:12,910 --> 00:08:19,149 son directamente objetos, entonces esto es muy fácil de hacer 191 00:08:19,149 --> 00:08:22,350 pues tengo mi objeto raíz, mi objeto raíz que tendrá 192 00:08:22,350 --> 00:08:26,730 una variable string y una lista de corredores, luego otra clase corredor 193 00:08:26,730 --> 00:08:31,189 cada clase corredor tendrá estas propiedades y a su vez 194 00:08:31,189 --> 00:08:34,330 un único objeto estadísticas, luego una tercera clase 195 00:08:34,330 --> 00:08:37,750 y esta tercera clase ya tiene estas cuatro, luego tres clases 196 00:08:37,750 --> 00:08:41,850 la raíz corredor de la cual la raíz tiene una lista 197 00:08:41,850 --> 00:08:45,669 y estadísticas de las cuales cada corredor tiene un único objeto. 198 00:08:46,570 --> 00:08:49,710 Pues venga, me hago esas tres clases 199 00:08:49,710 --> 00:08:52,610 y las meto aquí en el modelo. 200 00:08:54,590 --> 00:08:55,549 Vale, fórmula 1. 201 00:08:56,610 --> 00:08:59,110 Vale, bueno, esto lo hice así por comodidad. 202 00:08:59,110 --> 00:09:01,990 Luego os explico lo que es esto, ¿vale? 203 00:09:02,629 --> 00:09:07,450 Porque es una forma rápida de ahorrarte lo de los getter y los setter 204 00:09:07,450 --> 00:09:11,450 y cómoda 205 00:09:11,450 --> 00:09:13,649 lo que pasa es que está solo desde no sé qué versión 206 00:09:13,649 --> 00:09:14,970 15, 16, 17, no lo sé cuál 207 00:09:14,970 --> 00:09:17,370 17, puede ser, sí 208 00:09:17,370 --> 00:09:19,929 en realidad 209 00:09:19,929 --> 00:09:21,970 es lo que sustituye al antiguo 210 00:09:21,970 --> 00:09:23,250 bueno, antiguo que se sigue usando 211 00:09:23,250 --> 00:09:24,070 ¿suena a Lombok? 212 00:09:25,889 --> 00:09:27,149 ¿de qué te suena a Lombok? 213 00:09:29,149 --> 00:09:30,470 bueno, luego lo mencionamos 214 00:09:30,470 --> 00:09:30,850 también 215 00:09:30,850 --> 00:09:33,529 Lombok es una manera 216 00:09:33,529 --> 00:09:34,889 es una pequeña librería 217 00:09:34,889 --> 00:09:37,389 para que te genere automáticamente los Better y Setter 218 00:09:37,389 --> 00:09:57,519 Ahora mismo lo olvidamos. Vale, pues ahora mismo, olvidaos del récord este, lo puse a propósito para acordarme de explicarlo, pero esta es la clase Fórmula 1 con sus dos propiedades, temporada y corredores, ¿vale? Temporada y corredores. 219 00:09:57,519 --> 00:10:00,200 Deberían tener aquí los getter y setter 220 00:10:00,200 --> 00:10:02,340 Pero el récord me lo ahorra 221 00:10:02,340 --> 00:10:04,299 Porque, batatín, luego lo explicamos 222 00:10:04,299 --> 00:10:05,840 Porque me lo ahorra, ¿vale? 223 00:10:06,100 --> 00:10:07,740 Ahora, necesito corredor 224 00:10:07,740 --> 00:10:10,580 Corredor, pues corredor 225 00:10:10,580 --> 00:10:11,039 Tiene 226 00:10:11,039 --> 00:10:14,120 Esto lo he hecho con Lombok, también para 227 00:10:14,120 --> 00:10:15,700 Ahorrármelo y para 228 00:10:15,700 --> 00:10:18,360 Aprovechar y explicarlo, corredor tiene 229 00:10:18,360 --> 00:10:20,259 Estas, y de nombre 230 00:10:20,259 --> 00:10:22,279 Equipo, país, número y estadísticas 231 00:10:22,279 --> 00:10:24,779 Aquí es como si tuviera los getter y setter 232 00:10:24,779 --> 00:10:26,120 Imaginad que los tiene 233 00:10:26,120 --> 00:10:28,840 ¿Vale? No los tiene gracias a esta anotación 234 00:10:28,840 --> 00:10:29,700 Que yo le he puesto aquí 235 00:10:29,700 --> 00:10:31,100 Pero es como si los tuviera 236 00:10:31,100 --> 00:10:33,580 ¿Vale? Olvidados por ahora de eso 237 00:10:33,580 --> 00:10:35,519 Y ahora estadísticas tiene 238 00:10:35,519 --> 00:10:39,330 Estadísticas tiene esto 239 00:10:39,330 --> 00:10:40,429 Y ya está 240 00:10:40,429 --> 00:10:44,330 Luego el modelo ya lo tengo hecho con esas tres 241 00:10:44,330 --> 00:10:46,309 Claro, el modelo podría 242 00:10:46,309 --> 00:10:48,250 Se lo puedo pedir a HGPT 243 00:10:48,250 --> 00:10:49,889 Y lógicamente le digo 244 00:10:49,889 --> 00:10:51,610 Dame el modelo de clases de este JSON 245 00:10:51,610 --> 00:10:54,009 Y me lo va a hacer, pero es que esto en particular 246 00:10:54,009 --> 00:10:55,190 Es que es muy rápido 247 00:10:55,190 --> 00:10:58,230 Casi es más fácil que lo haga uno 248 00:10:58,230 --> 00:11:00,370 Porque se asegura de que no comete ningún error 249 00:11:00,370 --> 00:11:01,409 O no lo interpreta mal 250 00:11:01,409 --> 00:11:03,789 Bueno, pues ahora que ya tenemos el modelo 251 00:11:03,789 --> 00:11:05,230 Ahora ya de leer del JSON 252 00:11:05,230 --> 00:11:07,070 En el método este de lógica 253 00:11:07,070 --> 00:11:09,110 Ya es copiar y pegarlo 254 00:11:09,110 --> 00:11:09,909 Que ya sabemos hacer 255 00:11:09,909 --> 00:11:13,669 El mapper que me va a hacer todo 256 00:11:13,669 --> 00:11:17,590 En el mapper me leo el nodo raíz 257 00:11:17,590 --> 00:11:21,929 Y luego ya que hago con mi nodo raíz 258 00:11:21,929 --> 00:11:23,549 Pues podría navegar por él 259 00:11:23,549 --> 00:11:26,049 Y hacer con eso datos informes 260 00:11:26,049 --> 00:11:28,049 Repito, pero más fácil 261 00:11:28,049 --> 00:11:29,870 Como tengo las clases del modelo 262 00:11:29,870 --> 00:11:31,570 Lo convierto 263 00:11:31,570 --> 00:11:33,710 A un objeto 264 00:11:33,710 --> 00:11:35,509 Fórmula y ya está 265 00:11:35,509 --> 00:11:37,850 Y a partir de ahí a Jackson no me hace 266 00:11:37,850 --> 00:11:39,909 Falta para nada, tengo mi objeto 267 00:11:39,909 --> 00:11:40,809 Fórmula y ya está 268 00:11:40,809 --> 00:11:43,690 De hecho lo he dado en dos pasos 269 00:11:43,690 --> 00:11:44,450 Y ni siquiera 270 00:11:44,450 --> 00:11:47,389 Porque el propio mapper tiene ya un método 271 00:11:47,389 --> 00:11:48,769 Para del fichero 272 00:11:48,769 --> 00:11:50,909 Mandártelo a un objeto, pero bueno 273 00:11:50,909 --> 00:11:52,929 Como estos son los dos que mencionamos 274 00:11:52,929 --> 00:12:16,009 Es decir, Jackson tiene millones de posibilidades de métodos de cosas, pero bueno, de cara al examen vamos a centrarnos en las tres, cuatro cosas que hemos visto. Bueno, pues lo que vimos es leer un nodo raíz, navegar por él, en el ejemplo vimos cómo podemos navegar por él con el find value o convertirlo a un objeto. 275 00:12:16,009 --> 00:12:17,309 si yo tengo el modelo 276 00:12:17,309 --> 00:12:19,830 aquí lo convierto al objeto que tengo el modelo 277 00:12:19,830 --> 00:12:22,309 y ya está, y ahora se trata de hacer esto 278 00:12:22,309 --> 00:12:24,009 se trata de hacer esto 279 00:12:24,009 --> 00:12:26,509 y para hacer esto tendré que ir corredor por corredor 280 00:12:26,509 --> 00:12:28,429 haciendo esto 281 00:12:28,429 --> 00:12:29,970 ¿vale? 282 00:12:31,950 --> 00:12:34,049 entonces aquí lo tengo comentado porque lo 283 00:12:34,049 --> 00:12:36,230 hice de las dos 284 00:12:36,230 --> 00:12:38,049 formas para, vale 285 00:12:38,049 --> 00:12:40,269 entonces ya está, si me olvido de los 286 00:12:40,269 --> 00:12:42,330 streams y lo hago a mano 287 00:12:42,330 --> 00:12:43,330 como toda la vida 288 00:12:43,330 --> 00:12:45,809 pues ya está, voy corredor por corredor 289 00:12:45,809 --> 00:12:48,590 Para cada corredor 290 00:12:48,590 --> 00:12:49,850 Me creo un objeto de estos 291 00:12:49,850 --> 00:12:52,029 Y lo añado 292 00:12:52,029 --> 00:12:53,789 A mi lista de datos informe 293 00:12:53,789 --> 00:12:54,990 Y ya está 294 00:12:54,990 --> 00:12:57,990 Y ahora ya, copia y pega del Jasper Report 295 00:12:57,990 --> 00:13:00,309 Y se acabó, ya he terminado la aplicación 296 00:13:00,309 --> 00:13:01,629 Se acabó, no tengo más que hacer 297 00:13:01,629 --> 00:13:04,429 Luego lo único que tengo que hacer es copiar y pegar un proyecto 298 00:13:04,429 --> 00:13:06,450 Y completar este método 299 00:13:06,450 --> 00:13:07,610 ¿Vale? 300 00:13:08,190 --> 00:13:08,629 Entonces 301 00:13:08,629 --> 00:13:10,730 Esto de aquí está 302 00:13:10,730 --> 00:13:12,710 Para hacer esto mismo 303 00:13:12,710 --> 00:13:13,590 Con streams 304 00:13:13,590 --> 00:13:15,629 ¿Vale? 305 00:13:15,809 --> 00:13:19,669 Porque aquí en realidad, ¿qué hemos hecho? 306 00:13:20,669 --> 00:13:24,750 Para cada corredor de mi lista hago algo. 307 00:13:25,269 --> 00:13:27,929 ¿El qué? Crear un objeto de datos informe. 308 00:13:28,929 --> 00:13:32,289 Es decir, lo puedo ver como que cada corredor de mi lista 309 00:13:32,289 --> 00:13:35,210 lo estoy convirtiendo en objeto de datos informe. 310 00:13:36,309 --> 00:13:41,870 Entonces, si yo mi fila de corredores la convirtiera en una fila de datos informe, 311 00:13:42,549 --> 00:13:44,649 pues luego esa fila la paso a lista y se acabó. 312 00:13:44,649 --> 00:13:50,549 Entonces, pues hombre, convertir una fila de cosas a otra fila de cosas es precisamente el map 313 00:13:50,549 --> 00:13:51,610 Es justo el map 314 00:13:51,610 --> 00:13:57,509 Pues hombre, entonces me voy a hacer una filita con mis corredores 315 00:13:57,509 --> 00:14:00,409 Voy a hacer una filita con mis corredores 316 00:14:00,409 --> 00:14:06,049 Y ahora cada corredor lo voy a transformar a un objeto datos informe 317 00:14:06,049 --> 00:14:10,549 ¿Qué es lo que cambia aquí respecto a lo que estamos acostumbrados? 318 00:14:10,549 --> 00:14:12,870 que normalmente nuestros métodos 319 00:14:12,870 --> 00:14:14,629 de string, los que usamos 320 00:14:14,629 --> 00:14:16,470 no tienen 321 00:14:16,470 --> 00:14:18,409 varias líneas en la segunda parte 322 00:14:18,409 --> 00:14:20,590 o sea, cada corredor transforma algo a no sé qué 323 00:14:20,590 --> 00:14:22,149 entonces nos ahorramos el retun 324 00:14:22,149 --> 00:14:24,269 porque va implícito, pero en realidad 325 00:14:24,269 --> 00:14:26,529 el map es, para cada objeto 326 00:14:26,529 --> 00:14:28,669 corredor, me devuelve 327 00:14:28,669 --> 00:14:30,409 retun lo que sea, pero porque 328 00:14:30,409 --> 00:14:32,590 solo hay una línea que es ya el valor que devuelve 329 00:14:32,590 --> 00:14:34,409 pero en este caso no es tan fácil 330 00:14:34,409 --> 00:14:36,409 para cada corredor hay que hacer muchas 331 00:14:36,409 --> 00:14:38,169 cosas, no pasa nada 332 00:14:38,169 --> 00:14:39,590 lo metemos entre llaves 333 00:14:39,590 --> 00:14:42,570 ¿vale? para cada corredor 334 00:14:42,570 --> 00:14:44,470 crea un objeto de datos informe 335 00:14:44,470 --> 00:14:46,789 rellénalo con las propiedades 336 00:14:46,789 --> 00:14:48,549 y este es el que me devuelve 337 00:14:48,549 --> 00:14:49,909 aquí sí que hay que poner un return 338 00:14:49,909 --> 00:14:51,230 porque hay varias líneas 339 00:14:51,230 --> 00:14:53,830 ¿vale? esto pues lo 340 00:14:53,830 --> 00:14:56,070 mencionamos en su momento de cuando la 341 00:14:56,070 --> 00:14:57,090 parte 342 00:14:57,090 --> 00:15:00,049 la segunda parte de la lambda son varias 343 00:15:00,049 --> 00:15:01,990 líneas, ya es un código que pueden ser 344 00:15:01,990 --> 00:15:03,590 todas las que haya, todas las que quieran 345 00:15:03,590 --> 00:15:05,629 hay que ponerlas ya entre llaves, eso sí 346 00:15:05,629 --> 00:15:08,330 y si es un map porque te devuelve 347 00:15:08,330 --> 00:15:09,990 algo, pues un return 348 00:15:09,990 --> 00:15:13,669 bueno pues entonces 349 00:15:13,669 --> 00:15:15,990 ya hemos convertido nuestra filita 350 00:15:15,990 --> 00:15:18,029 de corredores, la acabamos 351 00:15:18,029 --> 00:15:20,129 de convertir en una filita de datos 352 00:15:20,129 --> 00:15:22,250 informe, ahora esa filita la llevamos a lista 353 00:15:22,250 --> 00:15:23,309 y ya está 354 00:15:23,309 --> 00:15:26,289 ya tenemos esta lista de una manera un poco más 355 00:15:26,289 --> 00:15:27,389 bonita 356 00:15:27,389 --> 00:15:29,470 que este for each de aquí 357 00:15:29,470 --> 00:15:33,269 pero no te gusta más esto 358 00:15:33,269 --> 00:15:39,389 y además el manejo 359 00:15:39,389 --> 00:15:41,330 interno de todo esto, estoy convencida 360 00:15:41,330 --> 00:15:41,950 no lo sé 361 00:15:41,950 --> 00:15:43,830 el for each 362 00:15:43,830 --> 00:15:46,070 tiene unas implicaciones 363 00:15:46,070 --> 00:15:49,309 de bloqueo 364 00:15:49,309 --> 00:15:50,889 que seguramente 365 00:15:50,889 --> 00:15:53,149 estén resueltas aquí ya, no lo sé 366 00:15:53,149 --> 00:15:56,370 bueno 367 00:15:56,370 --> 00:15:58,029 no os gusta, vale 368 00:15:58,029 --> 00:16:01,029 pero acostumbrad, es cómodo 369 00:16:01,029 --> 00:16:02,610 es que verdaderamente es muy cómodo 370 00:16:02,610 --> 00:16:04,470 tienes una lista y quieres hacer cosas con ella 371 00:16:04,470 --> 00:16:07,269 pues en lugar de plantearte el algoritmo 372 00:16:07,269 --> 00:16:08,730 de la recorro o no sé qué 373 00:16:08,730 --> 00:16:11,330 a esa lista la pones en fila 374 00:16:11,330 --> 00:16:13,350 es decir, pones stream, pones el punto 375 00:16:13,350 --> 00:16:15,230 y ahí se te abre el universo 376 00:16:15,230 --> 00:16:17,029 entero de posibilidades, pues explora 377 00:16:17,029 --> 00:16:18,870 a ver si alguna te interesa, y casi seguro 378 00:16:18,870 --> 00:16:19,929 que alguna te interesa 379 00:16:19,929 --> 00:16:22,129 entonces, es cambiar el chip 380 00:16:22,129 --> 00:16:24,490 tengo que hacer cosas con una lista 381 00:16:24,490 --> 00:16:26,269 la serializo con stream 382 00:16:26,269 --> 00:16:28,710 y ahora veo que me ofreces 383 00:16:28,710 --> 00:16:30,230 pues casi seguro que pum 384 00:16:30,230 --> 00:16:33,190 lo que me ofreces 385 00:16:33,190 --> 00:16:34,830 se encaja justo en lo que yo quiero hacer 386 00:16:34,830 --> 00:16:36,830 claro, luego hay que manejar 387 00:16:36,830 --> 00:16:38,490 un poquito la construcción básica 388 00:16:38,490 --> 00:16:40,350 de landas, porque son 389 00:16:40,350 --> 00:16:41,909 los parámetros para 390 00:16:41,909 --> 00:16:44,529 esos métodos de stream son landas 391 00:16:44,529 --> 00:16:45,990 entonces 392 00:16:45,990 --> 00:16:47,669 hay que manejarlo 393 00:16:47,669 --> 00:16:49,850 no, simplemente le cambió la sender 394 00:16:49,850 --> 00:16:52,950 y por qué, porque lleva mucho sin tocarlo 395 00:16:52,950 --> 00:16:54,549 no, porque no es mejor que pulsar 396 00:16:54,549 --> 00:17:00,860 vale, pues ya tenemos 397 00:17:00,860 --> 00:17:02,600 la lista de datos informe 398 00:17:02,600 --> 00:17:04,819 y ahora ya hacemos el copia y pega del Jasper Report 399 00:17:04,819 --> 00:17:06,680 me creo 400 00:17:06,680 --> 00:17:08,200 mi fuente de datos 401 00:17:08,200 --> 00:17:09,779 el Jasper Report 402 00:17:09,779 --> 00:17:10,900 asocia 403 00:17:10,900 --> 00:17:14,380 La plantilla, claro nos falta hacer la plantilla 404 00:17:14,380 --> 00:17:15,859 Hacemos básica la plantilla 405 00:17:15,859 --> 00:17:17,960 Me tengo que ir al Jaspers of Studio a hacerla 406 00:17:17,960 --> 00:17:19,440 Y esa plantilla 407 00:17:19,440 --> 00:17:21,759 La puedo hacer rápido si la hago mínima 408 00:17:21,759 --> 00:17:23,480 De tal forma que solamente tenga 409 00:17:23,480 --> 00:17:25,660 Estas tres fills 410 00:17:25,660 --> 00:17:28,160 Estos tres, se acabó, no me complico más la vida 411 00:17:28,160 --> 00:17:30,079 Vale 412 00:17:30,079 --> 00:17:37,509 ¿Hacerla aquí te refieres a hacer 413 00:17:37,509 --> 00:17:38,710 El jrxml? 414 00:17:42,769 --> 00:17:44,869 Bueno, yo la plantilla la tengo 415 00:17:44,869 --> 00:17:47,029 Aquí, lógicamente, mi plantilla es esta 416 00:17:47,029 --> 00:17:48,049 Que la he metido 417 00:17:48,049 --> 00:17:49,130 En 418 00:17:49,130 --> 00:17:51,329 Donde la tengo, jolines 419 00:17:51,329 --> 00:17:53,990 Sí, pero no veo la carpeta 420 00:17:53,990 --> 00:17:55,150 Aquí abajo, vale 421 00:17:55,150 --> 00:17:58,109 Vale, pero esa plantilla la he tenido que hacer 422 00:17:58,109 --> 00:17:59,049 Con 423 00:17:59,049 --> 00:18:00,849 El Jasper Software Studio 424 00:18:00,849 --> 00:18:03,410 ¿Que vas a escribir el jrxml aquí directamente? 425 00:18:03,529 --> 00:18:04,950 Es que no te entiendo, no sé a qué quieres decir 426 00:18:04,950 --> 00:18:17,660 Pero, ¿cómo? 427 00:18:29,150 --> 00:18:29,349 Pero 428 00:18:29,349 --> 00:18:32,750 Es que no sé lo que quieres decir 429 00:18:32,750 --> 00:18:33,829 O sea, lo que me está 430 00:18:33,829 --> 00:18:35,509 Con otra herramienta, de otra manera 431 00:18:35,509 --> 00:18:36,609 Sin el Jasper Report 432 00:18:36,609 --> 00:18:41,079 vale, entonces, ¿cómo has construido 433 00:18:41,079 --> 00:18:42,900 el PDF? es que yo no lo sé 434 00:18:42,900 --> 00:18:44,619 o sea, que esto has hecho lo desconozco 435 00:18:44,619 --> 00:18:46,680 pero bueno, vamos a completar esto y luego 436 00:18:46,680 --> 00:18:47,480 nos lo enseñas, ¿vale? 437 00:18:48,259 --> 00:18:49,319 vale, entonces 438 00:18:49,319 --> 00:18:52,799 tengo yo aquí mis datos informe 439 00:18:52,799 --> 00:18:54,960 hago el copia y pega, ¿dónde estamos? 440 00:18:59,190 --> 00:19:00,210 ah, estábamos 441 00:19:00,210 --> 00:19:01,269 aquí, vale 442 00:19:01,269 --> 00:19:04,410 hago mi copia y pega 443 00:19:04,410 --> 00:19:05,549 de aquí 444 00:19:05,549 --> 00:19:07,150 del Jasper Report 445 00:19:07,150 --> 00:19:10,170 le digo, esta es la plantilla que tienes 446 00:19:10,170 --> 00:19:16,630 que rellenar con datos informe la relleno a goles por manager y ya está y ya he terminado eso 447 00:19:16,630 --> 00:19:32,670 significa que en esta ruta en esta ruta de aquí en esta ya está mi pdf el de descarga lo descargará 448 00:19:32,670 --> 00:20:02,190 y listo, vale, y ya está, entonces voy a volver a comentar lo que tenía esto, entonces es el otro proyecto cambiando esta llamada y haciendo este método, vale, 449 00:20:02,190 --> 00:20:32,109 Luego la plantilla, la plantilla, pues una plantilla corriendo rápida, que, una plantilla que era esta yo creo, vale, en esta plantilla he creado, como iba a toda velocidad, pues he creado los tres campos, equipo, corredor, puntos, los he arrastrado, equipo, corredor, puntos y ya está. 450 00:20:32,109 --> 00:20:33,750 Y no he hecho más en la plantilla 451 00:20:33,750 --> 00:20:36,150 Él me ha creado automáticamente estos textos estáticos 452 00:20:36,150 --> 00:20:38,349 Los he arrastrado, lo he compilado 453 00:20:38,349 --> 00:20:40,750 Ha compilado, he llevado el Jasper compilado 454 00:20:40,750 --> 00:20:42,390 Al otro sitio y se acabó 455 00:20:42,390 --> 00:20:45,829 Y ya está 456 00:20:45,829 --> 00:20:48,430 Y ahora ejecuto esto 457 00:20:48,430 --> 00:20:49,769 Para ver si realmente 458 00:20:49,769 --> 00:20:54,990 Bueno, lo que sí que es cierto es que 459 00:20:54,990 --> 00:20:57,190 Unos cuantos limpias 460 00:20:57,190 --> 00:20:58,869 Tuvo que hacer, porque cuando tú vas haciendo 461 00:20:58,869 --> 00:21:00,509 Copias y pegas de otro proyecto 462 00:21:00,509 --> 00:21:02,589 Pues al final se te quedan un montón de clases 463 00:21:02,589 --> 00:21:05,349 compiladas, otras no, entonces 464 00:21:05,349 --> 00:21:07,789 clean todo el rato, cada vez que algo fallaba 465 00:21:07,789 --> 00:21:09,170 clean y se arreglaba, y ya está 466 00:21:09,170 --> 00:21:13,160 y ahora ya 467 00:21:13,160 --> 00:21:14,200 tenemos 468 00:21:14,200 --> 00:21:21,690 seleccionamos 469 00:21:21,690 --> 00:21:23,609 archivo, hay que pasar un JSON 470 00:21:23,609 --> 00:21:25,630 de 471 00:21:25,630 --> 00:21:27,490 fórmula 1, que el JSON de 472 00:21:27,490 --> 00:21:29,230 fórmula 1 estaba 473 00:21:29,230 --> 00:21:31,549 en el escritorio, ahí 474 00:21:31,549 --> 00:21:33,670 un JSON con ese modelo, claro 475 00:21:33,670 --> 00:21:36,150 lo subimos 476 00:21:36,150 --> 00:21:43,680 todo este rato que ha tardado se supone que se ha dado de convertirlo y ahora lo 477 00:21:43,680 --> 00:21:53,339 descargo y este es el pdf que me ha generado muy feo porque mi plantilla ni 478 00:21:53,339 --> 00:21:56,400 la he tocado ni la he retocado ni he hecho nada con ella 479 00:21:56,400 --> 00:22:04,839 vale pues entonces problemas que os habéis bueno tenemos que ver ahora como 480 00:22:04,839 --> 00:22:09,480 lo has hecho tú vale problemas que os habéis encontrado haciendo esto