20251120 EjerRepaso_Biblioteca - Contenido educativo
Ajuste de pantallaEl ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:
Yo voy a usar para corregir una plantilla de ejecución.
00:00:00
Entonces, lo voy a dejar claro en el examen.
00:00:07
Pero las firmas de las cosas que tenéis que hacer,
00:00:10
tenéis que respetarlas tal cual.
00:00:12
Para que yo pueda directamente ejecutar vuestro código
00:00:14
sin tener que adaptar a cada examen,
00:00:17
ver porque si no, me vuelvo loca.
00:00:20
Eso para empezar.
00:00:22
Pero voy a dejar claro el examen.
00:00:23
Todas las firmas que yo os diga de métodos y de cosas,
00:00:24
respetarlas tal cual.
00:00:27
Eso por un lado.
00:00:29
vale, si las cosas no funcionan
00:00:30
yo lo ejecuto y no funciona
00:00:32
a ver, ahí ya
00:00:33
la cosa apunta fea, pero eso significa
00:00:36
apunta fea
00:00:38
sí, o sea
00:00:40
apunta fea, pero significa que no miro
00:00:41
nada más, no
00:00:44
miro algo más, ¿por qué? porque podría
00:00:45
darse el caso de que no funcionara
00:00:48
por algo que se ha escapado de vuestro
00:00:49
control, pues porque efectivamente
00:00:52
yo lo estoy ejecutando mal
00:00:53
no, puede
00:00:55
estarlo yo ejecutando mal, o puedo yo
00:00:57
darme cuenta de que en mi portátil hay algo
00:00:59
que está colisionando con los ordenadores del aula.
00:01:02
Puedo darme cuenta ahí de mil cosas
00:01:04
que significan que no es un problema vuestro.
00:01:05
¿Y si no te das cuenta?
00:01:07
Hombre, normalmente
00:01:10
llego a saber
00:01:12
por qué no funciona.
00:01:13
Normalmente. A ver, es un trabajo gordo
00:01:15
porque ahí empiezo a ver un montón de letras rojas
00:01:17
y tengo que averiguar por qué no me funciona
00:01:19
para ver si es algo que dependía de vosotros o no.
00:01:21
Entonces, muchas veces concluyo
00:01:24
que es algo que no dependía de vosotros.
00:01:25
entonces si concluyo que es algo que no dependía de vosotros
00:01:28
si el código está bien, vale
00:01:30
pero, si yo entro en el código
00:01:32
y al margen
00:01:34
de que no funcione
00:01:36
porque algo, no
00:01:38
veo ahí cosas raras de programación
00:01:39
burradas de programación, veo cosas
00:01:43
eso también es suspenso
00:01:44
como yo vea
00:01:46
que programáis mal
00:01:48
Que no vas a hacer el ridículo
00:01:50
Venga, primer método que vamos a hacer
00:02:03
Dado un ID de un libro
00:02:09
Modificar su género
00:02:12
Y esto, vamos a hacerlo con DOM
00:02:14
Vale, pues entonces
00:02:15
Nos hacemos nuestra clase
00:02:17
de utilidades
00:02:18
antes que nada
00:02:21
por esto puntas algo
00:02:22
¿por qué?
00:02:25
que no puntúa con nada
00:02:28
ya, ya, ya
00:02:29
venga, pues ala, esta es nuestra clase
00:02:30
ala, pues nuestro método
00:02:38
el que luego invocará el controlador
00:02:51
con el fichero que ya ha recibido, lo que sea
00:02:56
nuestro método
00:02:58
que lo que hace es
00:03:00
dado una idea de un libro, modificar su género
00:03:01
de esto realmente es de lo que yo tengo
00:03:04
que evaluar según los contenidos de mi módulo
00:03:06
pues de hacer estas operativas
00:03:08
de modificación de cosas en ficheros
00:03:10
No, que estamos haciendo
00:03:12
estas utilidades en un método
00:03:18
y luego estas utilidades ya las llamará
00:03:19
quien sea en función de cómo es la aplicación
00:03:22
si la haces con un main de escritorio
00:03:24
pues el main, si lo haces en una
00:03:25
web, el controlador, ya quien sea
00:03:27
llamar a quien sea
00:03:29
vale, pues entonces
00:03:30
vamos a necesitar
00:03:33
modificar género
00:03:38
y aquí
00:03:40
jo, que sale todo siempre no binario
00:03:42
a ver, pero si
00:03:45
la o y la e están muy lejos, ¿por qué me sale siempre la e?
00:03:47
no lo sé
00:03:50
¿qué clases inclusivas?
00:03:50
pues yo que sé, va a ser eso
00:03:52
Pero hay manera de ponerla hoy
00:03:54
Vale, vamos a pasar el
00:03:55
Fichero
00:03:58
Lo de paz es por perderle un poco de respeto
00:03:59
El fichero
00:04:04
El nuevo género
00:04:07
El ID del género
00:04:09
A ver
00:04:10
El ID
00:04:11
Y el nuevo género
00:04:13
Y sin valor de retorno vamos mal
00:04:20
Venga, ¿qué queremos?
00:04:32
¿Un boy o un boolean?
00:04:35
Un boolean, he dicho por ahí
00:04:37
Se ha adelantado ella
00:04:39
Ya he dicho un boolean
00:04:41
Retún
00:04:43
Esto, ¿vale?
00:04:46
Retún
00:04:48
Ya lo cambiaremos al final
00:04:49
Vale, paz
00:04:55
Importar
00:04:57
¡Hala! Pues venga
00:04:59
¿Qué haríais aquí?
00:05:02
Nuestro fichero es este
00:05:06
¡No!
00:05:08
usas unos términos muy profesionales
00:05:11
no, desde luego
00:05:17
es que yo no sé
00:05:19
qué haces aquí
00:05:21
no, pero
00:05:22
te lo digo
00:05:27
con toda la buena voluntad del mundo
00:05:28
porque yo tengo una especial fobia
00:05:30
a la sensación de perder el tiempo
00:05:33
una cosa personal
00:05:34
y a lo mejor estás perdiendo mucho el tiempo
00:05:36
aumentar el link
00:05:39
Ah, bueno, vale, eso sí.
00:05:40
Tienes un título nuevo, eso sí.
00:05:42
Vale, pues ¿qué es lo primero que haríais
00:05:48
para modificar el género?
00:05:49
El objetivo de modificar el género es
00:05:52
llegar a este nodo
00:05:54
y este nodo cambiarlo.
00:05:57
Entonces, eso sería ser tan fácil
00:06:00
como crear otro nodo,
00:06:03
si digo por esto, ver los métodos que hay,
00:06:04
en el peor de los casos siempre puedo.
00:06:06
Si he llegado a este libro,
00:06:08
hacer un remove de este y hacerle un append
00:06:09
de este, que sería lo más fácil también,
00:06:11
pero tengo que llegar a este.
00:06:14
Entonces, para llegar a este,
00:06:16
pues como tengo
00:06:19
la suerte de que
00:06:20
no hay nodos libro que se llamen
00:06:22
también y dados aquí, me hago un getElementsByTagName
00:06:24
libro y ya
00:06:26
tengo todos los nodos libro.
00:06:28
Los recorro, me quedo con aquel
00:06:30
cuyo id, cuyo atributo
00:06:32
sea el que me han
00:06:34
dado y ya a ese nodo
00:06:36
le remuevo este hijo y le pego otro
00:06:38
o si hay algún método que me ofrezca
00:06:41
document, que me ofrezca la clase no
00:06:43
de element, para sustituir uno
00:06:44
por otro, pues sustituyo o para cambiar
00:06:46
el valor y ya está, ya hemos terminado
00:06:48
ese código, vale
00:06:50
bueno, tendré que leer lógicamente
00:06:52
primero
00:06:55
este fichero, lo vuelco
00:06:55
a document, me hago el
00:06:58
getElementsByTagName para sacarme
00:07:00
todos los nodos, lo recorro
00:07:02
hasta quedarme con el nodo cuyo atributo
00:07:04
es este y cuando ya me he quedado
00:07:06
remove child, append child
00:07:09
o si hay algún método que me lo facilite
00:07:10
cambiando el valor de este
00:07:12
pues lo hago y se acabó esa funcionalidad
00:07:14
¿vale?
00:07:17
pues venga
00:07:18
como lo que os falta
00:07:19
y nos falta a todos en general es
00:07:22
sobre todo a ti, es el que más te falta
00:07:24
puesto en orden de a quien le falta más
00:07:26
la facilidad para vencer la pereza
00:07:28
es a ti, el segundo
00:07:31
todavía no lo hemos puesto
00:07:32
Yo, o sea, de Juanjo diré
00:07:33
Que no es tan vago
00:07:37
Soy yo el vago
00:07:38
Bueno, él le da pereza
00:07:40
Hacer las cosas
00:07:43
A todos nos da pereza
00:07:44
Pero es que tenemos que examinarnos
00:07:48
Y para eso pues tenemos que ponernos a hacer algo
00:07:50
Para ponernos una nota, es que no hay tutía
00:07:51
De ahí mi conflicto interno
00:07:53
¿Hace falta todo esto para que aprendáis?
00:07:54
No, podéis aprender por vuestra cuenta perfectamente
00:07:56
Pero mientras no cambie el esquema
00:07:58
De funcionamiento de esta sociedad
00:08:01
Pues tendremos que seguir haciendo esto
00:08:02
Vale, pues venga
00:08:04
Vamos a intentarlo, 5 o 10 minutos
00:08:07
Para intentar hacerlo
00:08:09
Y así vencéis esa pereza
00:08:10
Que nos invade a todos
00:08:12
Daniel, yo creo que ya lo tienes hecho
00:08:14
¿Ya lo tienes hecho?
00:08:16
Ay, Daniel, estás de un serio
00:08:21
Últimamente que me estás
00:08:23
Preocupando
00:08:24
¿Qué habréis hecho aquí?
00:08:26
Bueno, pues
00:08:30
¿eh? ah, perdón
00:08:31
esto de aquí, vale, pues ¿qué habréis
00:08:34
hecho aquí? bueno, pues primero
00:08:36
llevar el fichero al document
00:08:38
esto habréis
00:08:39
copiado y pegado el método que tenemos ya en otro
00:08:41
proyecto, copiar y pegar el que
00:08:43
te carga de un fichero
00:08:46
a un document, pues nada, yo lo he copiado
00:08:47
y pegado del proyecto que teníamos ejemplo de clase
00:08:50
y ya está, ya tengo aquí
00:08:52
el document, ahora
00:08:54
me cojo todos los libros
00:08:55
mediante este método
00:08:57
Y ahora ya recorro libro por libro
00:09:00
Vale, aquí tengo cada libro
00:09:02
Para cada libro
00:09:04
Si su atributo id
00:09:06
Que se llama id
00:09:08
Es igual al que me han pasado como parámetro
00:09:10
Estoy en el libro
00:09:12
Al que quiero cambiar el género
00:09:13
¿Cómo saco el nodo género del libro?
00:09:16
Pues de nuevo con esto
00:09:18
Este me daría
00:09:19
Todos los hijos del libro que se llaman género
00:09:22
Solo tiene uno
00:09:24
Que se llama género
00:09:26
Por eso me quedo directamente con el ítem 0
00:09:27
me quedo con el ítem 0 y ahora
00:09:29
de este género, aquí
00:09:31
tendría que hacerle, pues
00:09:33
tengo que ver, ¿hay algún método que me permita
00:09:35
cambiar su contenido de texto?
00:09:37
Sí, igual que tenía el getTextContext
00:09:40
para darme
00:09:42
el texto que tenía, pues
00:09:43
rápidamente me he cogido un setTextContext
00:09:45
y así me ahorro
00:09:47
al género
00:09:48
borrarle el ítem o texto
00:09:50
y querrálo otra vez, pues ya está
00:09:53
ya lo tendríamos hecho con esto
00:09:55
a ver, me falta
00:09:57
volver a escribirlo
00:09:58
con lo cual tengo que hacer el
00:10:00
copiar aquí
00:10:02
copiar de aquí el
00:10:04
el de escribir, volver a guardar en el fichero
00:10:05
actualizar fichero
00:10:09
vale
00:10:12
pues copio y pego este
00:10:13
y ya está
00:10:15
y se acabó esa funcionalidad
00:10:16
copio y pego este, actualizar fichero
00:10:20
le voy a pasar
00:10:27
el, como no lo tengo
00:10:29
como variables estáticas
00:10:31
Se lo voy a pasar por aquí
00:10:32
Y aquí esto
00:10:34
Ah bueno, al fichero resultante
00:10:38
Se lo paso también como parámetro
00:10:43
Guárdame ese doc
00:10:46
En este
00:10:49
Entonces stream result
00:10:51
Fichero.toFile
00:10:55
Porque esta librería trabaja con file
00:10:57
No con par
00:10:59
Y
00:11:00
El doc este
00:11:02
Es este doc
00:11:04
Ya está
00:11:05
Y ahora ya a este método
00:11:09
Actualizar fichero
00:11:11
Que tendrá que ser estático
00:11:12
Para poder llamarle desde el otro lado
00:11:15
A este método actualizar fichero
00:11:16
Lo llamo desde aquí
00:11:21
Pasándole doc
00:11:23
Y fichero
00:11:27
Y aquí return true
00:11:29
Entonces
00:11:33
Pues ya está
00:11:40
Siguiente
00:11:43
funcionalidad
00:11:44
que tenemos que hacer?
00:11:46
¿Cómo que por qué
00:11:51
no métodos de biblioteca?
00:11:52
A ver, ¿a mí qué me interesan?
00:11:58
Me interesan los nodos libro.
00:12:00
Pues hombre, este es el método clave
00:12:02
porque es el más cómodo. Este método
00:12:04
del XML
00:12:06
te saca una colección,
00:12:07
una lista de nodos, una colección
00:12:10
con todos los nodos
00:12:12
que se llamen así.
00:12:14
Y eso es lo que a mí me interesa
00:12:16
Los libros que se llaman así
00:12:18
El nodo biblioteca que los envuelve
00:12:19
Bueno, me interesa
00:12:21
¿Eh?
00:12:23
Pero es que no sé de qué idea es
00:12:31
Porque a lo mejor no están por orden
00:12:32
Claro, hay una idea de parámetro
00:12:34
Vale, pues ya está
00:12:37
Siguiente cosa
00:12:39
Ah, sí, no, lo he cambiado ya
00:12:41
Este, dices
00:12:46
Es que voy a dar true
00:12:46
Porque no tengo
00:12:51
aquí no hay ningún exception, ni hay ningún
00:12:52
nada
00:12:55
¿en qué punto podría salir como
00:12:55
falso? podría salir como falso
00:12:58
si no llega a encontrar estos, si no los encuentra
00:13:00
por ejemplo, entonces sí, podría incorporar aquí
00:13:03
un boolean
00:13:05
de encontrado
00:13:07
y ya está, y así
00:13:08
efectivamente si tengo muchos libros
00:13:17
añado en mi for
00:13:19
y mientras no he encontrado
00:13:21
y bueno, es verdad que queda un poco mejor
00:13:23
y así en cuanto, como los ideas se supone que son
00:13:25
únicos, en cuanto llegue al libro
00:13:29
con ese id, ya no sigue mirando más
00:13:31
porque sería una pérdida de tiempo
00:13:33
y ahora ya sí que
00:13:34
podría hacer aquí
00:13:37
si no he encontrado
00:13:38
retun false
00:13:40
efectivamente
00:13:47
me falta aquí
00:13:52
que he encontrado
00:13:54
a true
00:13:56
vale, entonces este método yo ahora aquí
00:13:57
claro, aquí lo ideal es que yo hiciera
00:14:00
una buena documentación
00:14:03
ahora, que especificara
00:14:04
lo que es fichero, lo que es id, lo que es
00:14:06
nuevo género, devuelve true
00:14:08
si ha pasado esto, false si no ha
00:14:10
encontrado el nombre, ahora ya aquí
00:14:12
pues bueno, lo tendría que documentar bien
00:14:14
para generar un javado, pero bueno
00:14:16
vale
00:14:18
vale, lo que hemos hecho está
00:14:19
claro, entonces al final
00:14:22
tirando de los métodos básicos
00:14:26
este para sacar los nodos
00:14:27
que a mi me interesan, recorrer
00:14:30
y luego ya pues ir
00:14:32
sacando el contenido
00:14:34
que tiene con GetTechContext
00:14:36
pues lo puedo hacer
00:14:38
todo de forma sencilla
00:14:42
con esta librería y no necesitamos nada más
00:14:43
lo siguiente
00:14:46
vale
00:14:48
insertar libros garantizando su unicidad
00:14:58
de ides y hacerlo con
00:15:01
Jaxby, vale
00:15:03
pues entonces vamos a hacer las clases rápidamente
00:15:04
y estas clases
00:15:07
son
00:15:15
Son
00:15:16
Libro y biblioteca
00:15:21
Ya está, dos clases
00:15:24
Tiene este modelo
00:15:25
Uy, ¿qué he hecho yo aquí?
00:15:27
Yo quería el paquete y he hecho una clase
00:15:30
Me he equivocado
00:15:31
Yo quería un paquete
00:15:34
Entonces
00:15:38
Hacemos libro primero
00:15:43
Si este modelo
00:15:44
Si este modelo
00:15:53
Me sirviera solo
00:15:56
Para recoger los
00:15:57
objetos del fichero
00:15:59
y consultarlos
00:16:01
solo para hacer consultas
00:16:02
pues podría hacerlo en lugar de con una clase
00:16:05
y la verdad es que sería mucho más cómodo
00:16:07
podríamos hacerlo así, ¿verdad?
00:16:10
¿eh?
00:16:15
esto es lo que mencionamos el otro día
00:16:17
entonces yo aquí pondría
00:16:19
las propiedades
00:16:20
y de lo que fuera
00:16:22
y ya está
00:16:24
y aquí ya directamente tengo como si tuviera
00:16:26
de la clase con propiedades
00:16:29
privadas y posibilidad de acceder.
00:16:31
Pero claro, de hecho, se llama récord,
00:16:33
bueno, digo yo que se llama récord,
00:16:35
intuido que se llama récord, porque esto
00:16:37
te vale solo para registrar
00:16:38
lo que hay fuera,
00:16:41
para quedarte con un registro, pero luego no vas
00:16:42
a modificarlo, ni vas a hacer nada.
00:16:44
Entonces tú luego consultas aquí para ver lo que
00:16:47
hay. Es como una especie de grabación
00:16:49
de lo que hay fuera, es una grabación.
00:16:50
Pero no es
00:16:53
el caso. Nosotros aquí tenemos que hacer
00:16:54
las clases enteritas, porque
00:16:56
bueno, aparte me estoy pasando de lista
00:16:59
aquí yo no puedo poner anotaciones
00:17:01
de XB, claro
00:17:03
yo quiero esto para poner anotaciones
00:17:05
de XB en las propiedades y cambiar de nombre
00:17:07
aquí no sé si podría integrar
00:17:09
anotaciones de XB
00:17:11
no lo sé, es que no he probado
00:17:12
a hacerlo en la vida
00:17:15
vale, no lo sé
00:17:16
si dejaría anotar con XM
00:17:18
y el problema es aquí
00:17:21
ponerlas aquí
00:17:23
no lo sé, se podría probar pero bueno
00:17:25
probadlo por curiosidad si queréis
00:17:27
pues igual las de JaxB también, no lo sé
00:17:29
pero como en nuestro caso
00:17:34
ni siquiera podemos usar récord porque queremos
00:17:36
hacer modificaciones
00:17:38
insertar libros nuevos y todo eso
00:17:40
pues no vamos a hacer
00:17:42
un récord
00:17:44
sino que vamos a hacer una clase
00:17:45
una clase libro
00:17:48
y la clase libro
00:17:55
ahora ya sí que tiene
00:17:57
tiene cinco cosas
00:17:59
y de título
00:18:02
autor, año y género
00:18:03
Cinco cositas tiene, el ID como string, claro, ID, título, autor, género, el año,
00:18:05
y ahora aquí sí que sí, los getter y los setters, de todo, vale.
00:18:31
Ahora, las anotaciones, las anotaciones para indicar qué es cada cosa,
00:18:46
Bueno, vamos a hacer primero biblioteca, que es el raíz.
00:18:52
Las anotaciones, las puedo poner tanto en la propiedad como en
00:18:55
el get.
00:19:01
Lo que pasa es que si las ponemos en la propiedad,
00:19:02
había que poner aquí lo de accessor type fill para que
00:19:04
JacksBee sepa qué tiene que hacer a través de la propiedad.
00:19:09
Yo lo pongo en el get y ya está.
00:19:12
Entonces, bueno, vamos a poner las que afecten aquí al libro.
00:19:15
El libro, por lo menos una de orden nos afecta.
00:19:19
si queremos cambiar el nombre de alguna la cambiamos
00:19:22
pero no, id hay que ponerlo
00:19:26
atributo, veis como estáis más
00:19:28
espabilados de lo que parece
00:19:30
pero claro, antes de poner yo una propiedad
00:19:31
¿qué me falta? pues la dependencia
00:19:34
de JaxB
00:19:36
la dependencia la copio y pego
00:19:36
de un proyecto que ya nos haya funcionado
00:19:40
y que
00:19:42
esté estable
00:19:43
pues JaxB
00:19:45
Aquí
00:19:51
Ala, esa será
00:19:53
Diego se arrepiente de haberse quedado
00:20:01
Porque está muy aburrido
00:20:04
Vale
00:20:05
Ah
00:20:06
Pues mira, no te puedo ayudar de eso
00:20:11
Ejercicio, repaso
00:20:14
Estamos aquí
00:20:18
Ala
00:20:19
Ponemos aquí esta cosa
00:20:21
Ahora ya si que puedo poner anotaciones
00:20:24
Sin que se queje
00:20:27
Id es un atributo
00:20:30
xml
00:20:33
Atribute
00:20:35
La he escrito bien
00:20:38
O entonces porque no me deja importarla
00:20:41
Así funciona
00:20:48
A ver que he escrito mal aquí
00:20:49
Pero no pasa nada
00:21:00
Porque como tenemos nuestros proyectos
00:21:02
La doble T es que
00:21:03
No, no, no es así
00:21:08
No, es que a mí con una doble
00:21:08
A ver, pero como tenemos nuestros proyectos
00:21:11
Para mirarlo, pues no pasa nada
00:21:14
No hay ningún tipo de pavor
00:21:16
Lo miramos
00:21:17
Mira, tenemos hasta uno que era un libro y todo
00:21:19
Pero espérate
00:21:21
Espérate que no sé lo que estoy abriendo
00:21:26
Vale, a ver
00:21:31
¿Pero qué hago yo aquí?
00:21:37
Ah, es que estoy donde no es
00:21:45
He hecho el paquete donde no es
00:21:47
Pero bueno, lo podría... vale
00:21:50
Lo has hecho en otro proyecto
00:21:52
Vale, pero da igual
00:21:56
Entonces, ahora, esta que estaba aquí, que sobra, la copiamos aquí.
00:22:00
Y esto se quita.
00:22:12
Este paquete entero se quita porque esto aquí no pintaba nada.
00:22:15
Este paquete entero se quita.
00:22:20
Y esto afuera.
00:22:28
Ahora.
00:22:31
Vale, libro.
00:22:39
Ahora. Vale.
00:22:42
Estaba en la clase que no era.
00:22:44
Estaba en DOM.
00:22:46
Ahí. Ya está.
00:22:48
Si alguna cambiara de nombre
00:22:50
lo pondríamos, pero no es el caso.
00:22:52
El orden lo voy a tener que poner
00:22:54
porque no está por orden alfabético.
00:22:56
Entonces hay que poner un XML
00:22:58
type. Ahí.
00:22:59
Igual.
00:23:13
Y esto era entre paréntesis y así.
00:23:13
Primero queremos el ID.
00:23:16
Luego queremos
00:23:18
el título.
00:23:19
Bueno, el id no lo queremos porque es un atributo
00:23:21
Perdón
00:23:26
Queremos primero el título
00:23:27
Luego queremos el autor
00:23:29
Luego queremos el año
00:23:31
Y luego queremos el género
00:23:37
Para que no ordene de manera alfabética
00:23:40
Exacto
00:23:42
Para que no ordene de manera alfabética
00:23:43
Y el libro no hay más cosas que poner
00:23:46
Y ahora nos falta la clase
00:23:49
Biblioteca
00:23:54
Un dopelota
00:23:57
Lleva una lista de libros
00:23:58
Depende de cómo esté el XML
00:24:02
Perdón, biblioteca
00:24:10
Vale, depende
00:24:13
¿Este tiene un envolvente?
00:24:18
No, no tiene un envolvente
00:24:19
Entonces no le hago un grupper
00:24:21
¿Veis? Esto no está metido dentro de libros
00:24:22
Están ahí sueltos
00:24:24
Entonces no hay un grupper aquí
00:24:25
Entonces
00:24:27
Un grupper habría
00:24:28
Si esto
00:24:32
Tú tienes aquí un nodo libros
00:24:33
Ah, vale
00:24:36
Que se cierra abajo
00:24:37
Entonces sí, pondríamos un grupper
00:24:40
Pero
00:24:44
Lo hemos puesto sin grupper
00:24:46
A propósito para
00:24:47
Están todos ahí seguidos a mogollón
00:24:50
Vale, pues entonces
00:24:54
La propiedad está claro
00:24:57
Es igualmente
00:24:59
Es que eso es un nodo raíz
00:25:00
No es un envolvente
00:25:04
Es el XML root element
00:25:05
Se lo podemos dejar puesto ya
00:25:07
Y lo quitamos de encima
00:25:09
Este es que ya es el raíz
00:25:10
Luego tiene ya su función
00:25:16
Y ahora
00:25:17
Private
00:25:22
Este
00:25:24
Una lista de libros
00:25:25
Ahora
00:25:28
Venga
00:25:30
¿A este cómo lo llamo?
00:25:35
Lo llamo libro
00:25:49
Porque el nombre que aparezca aquí
00:25:50
Es el nombre que aparece ahí
00:25:54
Entonces lo llamo libro
00:25:56
Para que aparezca libro
00:25:59
Es que no me gusta
00:26:00
Y lo quiero llamar libro
00:26:01
Es porque me apaño mejor en la parte de Java
00:26:03
Pues me tendría que hacer un xml element
00:26:05
¿Vale?
00:26:07
Poner aquí arriba xml element name libro
00:26:09
Para asegurarme de que este nodo
00:26:12
Cuando aparezca se va a llamar libro, no se va a llamar libros como aparezca aquí.
00:26:14
Pero si yo lo llamo así tal cual, este nodo cada vez que aparezca se llamará libro,
00:26:19
que es justo como aparece aquí, cada vez que aparece se llama libro.
00:26:24
Y este ya no tiene nada más que su get y su set.
00:26:28
Pues esto ya se ha acabado.
00:26:41
Ahora ya todo lo que falta es java.
00:26:43
Es irnos aquí, hacer el método correspondiente.
00:26:45
Y el método correspondiente es
00:26:48
Insertar libro
00:26:51
¿Vale?
00:26:54
Insertar libro
00:26:58
Y aquí ya podemos hacernos
00:26:59
Y aquí
00:27:03
Vamos a aprovechar el modelo
00:27:16
¿Vale? Vamos a aprovechar el modelo
00:27:23
Y en lugar de pasarle los datos
00:27:27
¿Vale?
00:27:29
Podemos reutilizar este modelo JaxB
00:27:35
Podemos reutilizar el modelo
00:27:37
Para Java
00:27:39
Entonces
00:27:40
¿qué tenemos que hacer aquí?
00:27:47
leer los libros
00:27:50
leer el fichero
00:27:52
y añadir a la colección este
00:27:54
pero cuidado con el id
00:27:56
porque el id lo genera automáticamente
00:27:58
luego aquí en este libro
00:28:00
no me vendrá id
00:28:03
porque es el dato que me dio el usuario
00:28:06
que el usuario mete solamente
00:28:08
título, autor, género y año
00:28:09
entonces el id lo generaré yo automáticamente
00:28:10
se lo pondré aquí a mano
00:28:13
antes de añadirlo al fichero
00:28:14
cuando lo leas, sí, pero es que ahora
00:28:16
esto es uno nuevo, pues el nuevo
00:28:26
los datos que vienen de fuera son
00:28:28
solo autor, título, no, el usuario
00:28:30
no me da ID, con lo cual este libro
00:28:32
su ID está sin setear
00:28:34
lo tengo que fijar yo
00:28:36
leyendo los que hay de antes
00:28:38
y generando uno único
00:28:40
¿vale? pues entonces
00:28:41
esto
00:28:43
Aquí, copiar el método
00:28:45
De leer de JaxB
00:28:48
Bueno, vamos a un proyecto de JaxB
00:28:50
Y aquí lo tendremos
00:28:52
En JaxB
00:28:58
Tendremos un método para
00:29:02
Escribir el XML
00:29:04
¿Eh?
00:29:05
Sí, pero no tengo
00:29:15
Uno que sea escribir porque lo tenía
00:29:16
Lo tengo aquí pegado, entonces lo tengo que extraer
00:29:17
Este es el de escribir, hacer el
00:29:20
Marshall, entonces este no lo tenía
00:29:22
Sacado a un método aparte, lo tenía directamente
00:29:24
aquí metido, entonces
00:29:26
este voy a hacer ahora ya así que un método
00:29:27
que sea escribir
00:29:30
en mi nuevo código aquí
00:29:31
vamos a hacernos aquí
00:29:33
public static
00:29:35
void
00:29:41
escribir xml
00:29:41
yaxb
00:29:45
y
00:29:46
¿qué le voy a pasar? le voy a pasar
00:29:48
el objeto biblioteca
00:29:50
este es el que le voy a pasar
00:29:52
y ¿dónde? pues al fichero
00:29:55
lo que sea. Y aquí ya sí que voy a pegar el código del Marshall, que era este. Lo
00:30:00
que pasa es que aquí lo cambio por biblioteca, lógicamente. Biblioteca. Importo biblioteca.
00:30:08
Y ¿dónde? Pues donde esté trabajando. Vamos a estar trabajando en el proyecto directamente.
00:30:19
me dio a olvidar de carpetas en el raíz
00:30:26
o sea
00:30:28
aquí es el fichero tal cual
00:30:30
pues paz
00:30:32
punto
00:30:36
perdón
00:30:37
el que hay subido
00:30:40
lo que pasa es que está dentro del método
00:30:43
sí, sí, sí
00:30:46
y ahora aquí me calca
00:30:47
es que no lo separé
00:31:04
Y ahora
00:31:06
Aquí se le daba
00:31:10
File
00:31:12
Uy, qué tontería, si ya lo tengo el file
00:31:13
¿Qué es este?
00:31:16
Ahora
00:31:19
Vale, pues ya tengo el de escribir xml
00:31:19
Que era hacer el contexto, crear el marshaler
00:31:24
Y mandar mi objeto biblioteca
00:31:27
Al fichero file que le estoy pasando
00:31:29
Y ya está
00:31:31
Ya tengo escribir xml
00:31:32
Y, pero perdonad, estaba buscando leer
00:31:36
Claro, cuando me he dicho leer es que estaba buscando leer
00:31:39
Claro, ya lo tenía
00:31:41
Voy a copiar leer, Polines
00:31:43
Era el que estaba buscando, parezco tonta
00:31:46
Vale, leer
00:31:48
Está aquí, que era efectivamente
00:31:48
El que estaba buscando
00:31:51
Sí, que sí, que me he liado
00:31:53
Por eso cuando me ha dicho, él tienes ahí leer
00:31:55
He dicho, pero quiero escribir, pues no, no quería escribir
00:31:57
Quería leer
00:31:59
Vale, es que me he liado
00:32:00
Vale, entonces
00:32:01
Ahora, leer xml
00:32:04
De JaxB
00:32:11
Mi fichero y ahora que lo que me va a dar
00:32:12
Es una biblioteca
00:32:17
Biblioteca
00:32:18
Vale
00:32:20
Dime
00:32:21
Pero a ver, se supone
00:32:25
Que no me estáis copiando
00:32:29
Que lo estáis haciendo en paralelo
00:32:32
Como ya pero
00:32:34
Vale, vale
00:32:35
Bueno, pues ahora revisamos
00:32:38
Pero
00:32:40
Vale, pues he copiado
00:32:40
el leer xml del proyecto
00:32:52
cambiando recetario
00:32:54
que era el ejemplo que teníamos por biblioteca
00:32:56
y pasándole el fichero
00:32:58
que le hemos dado como parámetro, ya está
00:33:00
he cambiado solamente eso, recetario por biblioteca
00:33:02
y el fichero
00:33:04
como se lo estoy pasando en path, pues lo convierto aquí a
00:33:06
file y ya está
00:33:08
este es el de leer xml
00:33:10
y ahora el de... vale
00:33:11
¿qué? ¿qué pasa?
00:33:15
¿qué no me pasa?
00:33:20
Bueno, pues ya está
00:33:24
Ahora ya nos vamos aquí a insertar libro
00:33:51
Leemos el fichero
00:33:54
Leer
00:33:55
xml
00:34:02
Sí, perdón
00:34:04
He visto libro arriba y me he liado
00:34:07
Biblioteca
00:34:13
Ler xml
00:34:15
El fichero
00:34:16
Insertar libro
00:34:22
Y no le he pasado el fichero
00:34:24
No le he pasado el fichero
00:34:25
Con el que estamos trabajando
00:34:28
Habría sido más cómodo ponerlo en un properties
00:34:29
O algo así para no arrastrarlo todo el rato
00:34:32
Pero bueno
00:34:34
Venga, leer XML, JAXB, fichero.
00:34:34
Ya está.
00:34:49
Ahora, mi único problema es...
00:34:53
Mi único problema sería...
00:35:01
Mi único problema sería...
00:35:03
A esta colección de libros, en realidad, añadirle el libro nuevo y luego ya escribir el XML.
00:35:07
¿Vale?
00:35:18
Vale, y aquí yo ya, librería y fichero.
00:35:28
vale, pero que ocurre
00:35:36
que no puedo hacerlo así sin más
00:35:44
porque antes de añadir el libro
00:35:45
tengo que fijarle un ID
00:35:48
que sea único, que no esté ya
00:35:49
entonces antes de hacer esto
00:35:51
tenemos que sacar los IDs de la colección
00:35:53
para generar uno único
00:35:56
entonces, ¿cuál sería
00:35:58
el argumento más fácil? vamos a sacar
00:36:00
el máximo de todos los IDs
00:36:01
que están en esta colección
00:36:04
y le sumo uno más para setearlo
00:36:06
y ya está, entonces, pues eso
00:36:09
¿Perdón?
00:36:10
¿Bajar a dónde? ¿A cuál?
00:36:18
¿Vale?
00:36:28
Vale
00:36:30
Bueno, pues ala
00:36:30
entonces, ahora, antes de hacer esto
00:36:36
tenemos que hacerle un set al libro del ID
00:36:38
y el ID que sea
00:36:41
una unidad más del máximo
00:36:43
de los que ya están
00:36:45
pues venga, ¿cómo me hacéis eso?
00:36:46
el máximo
00:36:50
de los IDs, pues eso con streams
00:36:51
lo hacéis a toda velocidad, ¿verdad que sí?
00:36:53
estos son los libros
00:36:57
de los libros quiero sacar
00:36:58
el máximo de los IDs que tienen
00:37:00
nos ponemos todos en fila
00:37:02
hasta ahí hemos llegado
00:37:05
todos en fila
00:37:07
De cada libro me quedo con su ID
00:37:07
Ahí que funciona habrá que hacer
00:37:10
No, un filter no
00:37:12
No hace falta
00:37:15
Un map
00:37:17
De cada fila de libros
00:37:19
Me quedo con su ID
00:37:21
Y ahora de esa fila de IDs
00:37:22
Le hago la función máximo
00:37:25
¿Vale? Pues que de cada fila
00:37:26
De libros
00:37:29
Map es cuando tienes una lista dentro
00:37:30
Flat map es cuando tienes una lista dentro de otra
00:37:33
Claro, pero aquí entonces
00:37:35
si no. Pues de cada
00:37:37
libro de estos, me
00:37:39
quedo con su
00:37:40
ID.
00:37:42
Pero con su ID a paloseco, no.
00:37:47
Lo tengo que convertir a entero, porque quiero hacer
00:37:49
el máximo. Entonces,
00:37:50
¿qué haremos aquí?
00:37:53
Casting. ¿Cómo que casting?
00:37:54
¿Cómo que casting?
00:37:58
Estas son las cosas que son de cero.
00:37:59
Pero un íntegro para seguir, por Dios
00:38:00
santo.
00:38:02
Un casting, dice.
00:38:06
Ah, sí
00:38:10
Vale
00:38:14
Ahora, tengo ya una filita
00:38:16
De IDES
00:38:23
¿Vale?
00:38:25
Vale, y ahora
00:38:34
No me ofrece el máximo
00:38:36
Porque no es una
00:38:40
Si le pongo map to int
00:38:42
Como son enteros
00:38:44
Yo creo que ya me ofrecerá la función máximo
00:38:46
Entonces map to int
00:38:48
No sé dónde estaba la mayúscula
00:38:49
Map to int
00:38:53
Aquí está
00:38:57
Con tu int
00:38:58
Vale
00:39:00
Map to int
00:39:00
Vale, ya tengo la filita de enteros
00:39:06
Y ahora esta filita de enteros
00:39:09
Me ofrece ya el máximo
00:39:12
De toda esta fila
00:39:15
Y ahora
00:39:16
De esta como es tan opcional
00:39:19
Pues la saco
00:39:22
Así a lo bestia
00:39:25
Venga, sácamelo como entero
00:39:26
Pues si a todo esto le sumo uno
00:39:28
Y se lo seteo
00:39:32
Al libro, ya está
00:39:34
A todo esto le sumo uno
00:39:36
Y todo esto se lo seteo
00:39:39
Al libro
00:39:41
Libro.set
00:39:41
id
00:39:44
pero lo tengo que convertir a íntegro otra vez
00:39:45
set id
00:39:50
y ahora
00:39:53
es que ya he perdido los paréntesis
00:39:58
pero
00:40:00
y ahora esto
00:40:02
para que me lo convierta
00:40:04
a string, porque el id es en string
00:40:08
bueno, he perdido los paréntesis
00:40:10
me falta uno, ¿de dónde?
00:40:11
Ah, me falta uno después de aquí
00:40:14
Ya está
00:40:16
Ya le he puesto
00:40:18
Un ID único
00:40:26
Tal cual
00:40:27
¿Eh?
00:40:28
¿Cómo?
00:40:35
Cuando te barren todos los libros
00:40:39
Ah, bueno, bueno
00:40:40
Ya, ya, ya, vale
00:40:43
No estamos en el examen
00:40:43
En el examen no tenemos esas consideraciones
00:40:46
¿Vale?
00:40:48
Bueno, tenemos ya libros
00:40:50
Y ya está
00:40:52
y me quedo
00:40:54
con el máximo
00:40:56
le sumo uno
00:40:58
claro, si la colección
00:40:58
es diferente de, o sea, realmente
00:41:04
esto
00:41:06
lo que pasa es que podríamos
00:41:07
hacer algo más infinito, el set ID podríamos ponerle aquí
00:41:11
un ternario, que es
00:41:14
live.getlibros
00:41:16
diferente de null o live.getlibros
00:41:20
.size
00:41:22
y
00:41:23
Mayor que cero
00:41:24
Esto
00:41:27
En el otro estremo
00:41:28
Uno
00:41:31
¿Vale?
00:41:32
Es decir, si nos venimos arriba
00:41:38
En plan fanfarrones
00:41:40
Y ponemos
00:41:41
Lit.get libro
00:41:43
Es diferente
00:41:45
De null
00:41:48
Y además de ser
00:41:50
Diferente de null
00:41:52
joder
00:41:54
y además de ser diferente de null
00:41:56
list.getLibro
00:41:59
.
00:42:01
size
00:42:03
es mayor que 0
00:42:05
pues en ese caso me plantas eso al id
00:42:07
y si no
00:42:11
me plantas
00:42:13
1
00:42:15
y aquí me falta un paréntesis y aquí me sobra
00:42:15
ala
00:42:23
como una reina
00:42:27
déjalo
00:42:28
bueno, venga, ¿qué vas a decir?
00:42:33
ah, tienes toda la razón
00:42:40
vale, vale, sí
00:42:41
ya no sabéis hacer esto tan bonito
00:42:42
vale, vale
00:42:43
que cuando sacas el int
00:42:44
este le pones y si no lo hay
00:42:50
en el sacar del optional
00:42:52
pues me da cero
00:42:53
pero bueno
00:42:54
así no nos olvidamos
00:42:58
de alternario
00:43:00
claro, lo he sacado
00:43:01
de un opcional, he asumido que existe
00:43:05
pero puede no existir
00:43:06
puede que en el opcional no haya nada
00:43:08
¿vale?
00:43:09
accediendo a él
00:43:14
bueno, venga
00:43:15
esto era un poco por a...
00:43:20
en el examen
00:43:23
en realidad, a menos que yo lo especifique
00:43:25
si no me tenéis en cuenta
00:43:27
si no hay libros o lo que sea, da igual
00:43:28
Bueno, pues esta funcionalidad ya está
00:43:30
Pero a mí me está...
00:43:41
Esta ya está
00:43:43
Y lo tengo bien
00:43:44
¿Cómo es posible que es que somos
00:43:48
Haceros un poco?
00:43:53
En plan, ¿en qué modo?
00:43:55
Pero vamos con él
00:43:58
Pero vamos a ver
00:43:59
Si realmente tú quieres hacer el máximo
00:44:06
De una serie de números
00:44:07
No te es mucho más fácil
00:44:08
O sea, es que hacer el máximo ha sido
00:44:10
El string y el map y el max
00:44:12
Ha sido esto
00:44:14
Esto realmente sí es más fácil que un for
00:44:14
Que te saca el máximo
00:44:18
Así que lo es
00:44:19
Porque un for que te saca el máximo
00:44:21
Pues tienes tú que hacer el algoritmo
00:44:24
Un for e ir sustituyendo el máximo
00:44:25
Entonces esto ya es más fácil
00:44:28
Claro, porque este es el máximo
00:44:29
De los IDs que ya hay
00:44:37
Entonces yo quiero crear uno nuevo y único
00:44:38
Pues esta funcionalidad ya estaría
00:44:39
Esto fuera
00:44:48
Vale, pues venga, siguiente
00:45:02
Un JSON
00:45:09
Pues es que esto es en el Jackson
00:45:11
Mandarle el valor y ya está
00:45:14
Pues venga, generamos el JSON
00:45:16
Dependencia de JSON
00:45:20
Pues vamos a buscarla
00:45:24
En otro fichero que ya esté
00:45:25
La dependencia de Jackson
00:45:27
Esto
00:45:35
La copiamos
00:45:36
Vale
00:45:41
Ya está
00:46:03
Pues venga.
00:46:08
Son dos dependencias, ¿no?
00:46:09
Pero la segunda era
00:46:11
cuando usamos lo de pasar directamente
00:46:13
de XML a...
00:46:15
La pusimos. O sea, el Jackson
00:46:17
básico era una. La otra
00:46:19
era otra dependencia.
00:46:21
Se me ha escapado una.
00:46:25
Aquí tengo solo las que...
00:46:26
A ver.
00:46:29
En mi U de uno picharro es Jason.
00:46:29
A ver.
00:46:31
Joder, ¿dónde está?
00:46:34
Acá.
00:46:37
jason dotavine y jackson corey solo
00:46:38
a donde estoy yo, jolines
00:46:41
jason
00:46:43
estoy
00:46:47
jason aquí
00:46:48
vale, tenemos esta
00:46:50
yo tengo esta solamente
00:46:53
yo solo tengo uno
00:46:55
yo tengo dotavine y corey
00:46:56
dotavine y corey
00:46:58
no lo sé
00:47:02
a ver
00:47:07
bueno, lo tengo solo con dotavine
00:47:08
Bueno
00:47:09
Voy a poner esa
00:47:20
Vale
00:47:22
Vale
00:47:22
Vale, pues a ver
00:47:39
El método que nos falta
00:47:45
Guardar en fichero json
00:47:46
Era, ¿no?
00:47:50
Public static
00:47:52
Voy a cambiarle el false
00:47:57
A true aquí
00:48:02
Vale, escribir public static
00:48:04
Voy a escribir
00:48:08
Jason
00:48:11
Escribir Jason
00:48:13
Entonces, ¿qué?
00:48:17
Pues vamos a escribir de Jason
00:48:19
Aquí, este, el biblioteca
00:48:21
¿Y en qué fichero? Pues en el que me digan
00:48:23
Escribir Jason
00:48:26
Bueno, pues aquí el mapper
00:48:33
Es el que hacía de todo
00:48:38
Pues tiro de él
00:48:39
A ver qué me ofrece
00:48:40
Vamos a tirar de él
00:48:44
Vale, pues el mapper
00:48:54
Podemos mirarlo en el proyecto
00:49:06
Tiene un método
00:49:08
Ya directamente para escribir
00:49:13
Sacamos el writer
00:49:15
Y luego era write value
00:49:26
O ya directamente write value
00:49:28
Vale
00:49:30
Pues vamos a escribir
00:49:31
En fichero
00:49:33
Punto
00:49:36
Tu file
00:49:40
Y vamos a escribir
00:49:42
Vamos a escribir
00:49:46
este
00:49:48
si, este era para que
00:49:49
fuera bonito, ¿verdad?
00:49:54
claro, pues vamos a usar
00:49:56
el que fuera bonito
00:49:58
write
00:50:00
with default
00:50:02
este, entonces
00:50:04
este te sacaba
00:50:09
vale, te sacaba
00:50:11
el writer, bonito
00:50:14
y ahora
00:50:16
escribíamos el fichero
00:50:18
Y el tema es que lo puedes hacer sin hacerlo bonito
00:50:20
porque hay que decidir
00:50:23
que tenías que hacerlo feo también.
00:50:25
Que crea por defecto.
00:50:28
Sí, hay informáticos que se la
00:50:29
refanficlan y se la ponen feo.
00:50:31
Entonces te dan la opción de yo lo quiero
00:50:33
feo.
00:50:35
El quererlo feo debería ser la opción
00:50:37
mala.
00:50:39
A ver, lo que pasa es que los JSON
00:50:41
esencialmente son para máquinas.
00:50:45
Y las máquinas, cuanto más feo
00:50:47
mejor porque no tienen que parsear espacio,
00:50:49
no tienen que parsear nada.
00:50:51
¿Eh?
00:50:53
Bueno.
00:51:02
Pues ya está.
00:51:03
¿Cuál?
00:51:10
¿Modificar?
00:51:15
¿Modificar el qué?
00:51:18
¡Ah!
00:51:21
modificar género
00:51:23
es esto
00:51:25
porque me ha dado
00:51:26
a mí por ahí, yo que sé
00:51:49
a ver, habrá
00:51:50
APIs que por las características
00:51:57
de PAD les interese PAD
00:51:59
sobre todo yo creo que
00:52:00
aparte del diseño es distinto
00:52:03
la arquitectura de diseño es distinto
00:52:04
creo que es compatible con
00:52:06
URIs, con cosas que File no lo es
00:52:09
entonces tu PAD lo puedes asociar a un
00:52:11
recurso genérico
00:52:15
o a una URI, pero
00:52:16
asociar un File a una URI no puedes
00:52:18
claro, File es para un
00:52:20
fichero, PAD es más amplio, es un camino
00:52:23
y un PAD puede ser
00:52:25
PAD to File, pero un PAD puede ser PAD to PAD
00:52:26
no creo que esté
00:52:28
No lo sé.
00:52:31
A ver, en File no, pero PAD.
00:52:33
Claro, pero tú puedes crear un PAD pasando en el File.
00:52:37
¿Eh?
00:52:43
Que hay un tu PAD dentro de File para convertirlo a PAD.
00:52:45
Pues no lo sé.
00:52:49
Bueno, pues a ver, siguiente método.
00:52:52
Ahora ya, usando el archivo, no usando biblioteca,
00:52:55
vamos a consultar libro por ID.
00:52:59
Pues venga, vamos a consultar libro por id
00:53:01
Ala
00:53:03
Vale, pues vamos a devolver
00:53:05
El libro con un id
00:53:19
Dado
00:53:21
String id
00:53:22
A fichero
00:53:29
Vale
00:53:33
Igual a
00:53:34
Venga, pues ala
00:53:50
El object mapper
00:54:01
Porque vamos a trabajar
00:54:03
Con el fichero JSON
00:54:05
Ahora, vamos a
00:54:06
Esto directamente con el Jackson
00:54:16
Se puede tal cual ya
00:54:23
Como tiene la biblioteca
00:54:24
Tiene el modelo
00:54:28
Pues es que ya directamente con el Jackson
00:54:29
Podemos hacer esto
00:54:31
Mapper.read
00:54:32
Reactree
00:54:35
¿No?
00:54:37
Y...
00:54:40
No, el Reactree te da el JSON node
00:54:40
Reactvalue será
00:54:42
ReactValue
00:54:44
Te da directamente
00:54:46
De
00:54:49
Tú le dices el fichero
00:54:50
Y luego le dices aquí la clase
00:54:52
En la que tiene que parsear
00:55:00
Biblioteca.class
00:55:01
¿Vale?
00:55:05
Y ya está
00:55:07
Y es que ya habría que sacar ahí el que tiene ese ID
00:55:08
Y se acabó
00:55:12
Entonces
00:55:12
el reactree cuando lo quieres
00:55:18
guardar en un json node
00:55:22
porque no tienes el objeto
00:55:24
biblioteca, podemos hacerlo ahora
00:55:26
entonces, ahora si lo
00:55:28
como tenemos el modelo y tenemos el objeto
00:55:29
la clase biblioteca, lo vuelco al modelo
00:55:31
y ya está, pero si yo no tuviera
00:55:34
estas clases no puedo volcarlo al modelo
00:55:36
entonces lo vuelco a un json node, que es una
00:55:37
estructura de json
00:55:39
de Jackson, vale, entonces aquí
00:55:41
me quedaría con mis
00:55:43
libros y quiero solo
00:55:46
que tiene el id, pues hombre
00:55:48
aquí hace uno su superfilter
00:55:49
bueno, primero se hace
00:55:52
su filita
00:55:53
y se hace
00:55:55
su superfilter y ya está
00:55:57
y que nos quedamos
00:56:00
pues quédate
00:56:01
solamente de cada libro
00:56:03
quédate con aquel que cumpla
00:56:05
que
00:56:08
x.getid
00:56:09
es igual
00:56:12
Al ID que tú le estás pasando
00:56:18
No lo sé
00:56:20
Ah, por este espacio que tengo aquí tan feo
00:56:28
Hombre, claro
00:56:33
El simbolito este
00:56:36
No le puedo poner separado
00:56:38
Entonces, aquí
00:56:39
Este es el libro que tengo que filtro
00:56:40
Entonces
00:56:44
De aquí me quiero quedar
00:56:45
Con
00:56:48
El primero de todos
00:56:49
Tendré una opción de quedarme
00:56:52
Con el primero de todos, ¿no?
00:56:54
Que es el único en este caso
00:56:55
Ah, es que me lo he saltado
00:56:56
Ah, que está aquí
00:57:07
Vale
00:57:09
Me lo he saltado
00:57:11
Vale
00:57:13
Este, find first
00:57:16
Y ahora
00:57:19
Yo es que aquí
00:57:21
Asumo que todo existe
00:57:22
Lo saco tal cual
00:57:24
Este es el libro
00:57:26
Que devolvemos
00:57:29
Eso es lo que iba a decir
00:57:32
Que yo aquí estoy
00:57:38
Vale, entonces
00:57:39
Aquí puedo
00:57:41
Find first
00:57:43
Entonces
00:57:45
De aquí me saco
00:57:46
Olers
00:57:48
Libro
00:57:49
Olers
00:57:50
No
00:57:51
Vale
00:57:52
Si no existe el libro
00:57:53
No devuelvo el null
00:57:55
¿Vale?
00:57:56
Te devuelvo un litro
00:58:06
O un null o el objeto libre
00:58:07
¿Vale? Entonces de hecho
00:58:09
Podríamos hasta
00:58:11
Meter
00:58:13
Esto aquí
00:58:14
Y el sumétodo de una sola línea
00:58:17
Pero bueno, ya demasiado frío, no hay necesidad de
00:58:19
¿Cómo?
00:58:38
Estamos jodidos
00:58:47
¿Pero de qué me estás hablando? ¿De esto?
00:58:48
¿Este método te da
00:58:52
error de compilación? ¿Que no lo encuentra?
00:58:53
¿O cómo?
00:58:56
¿Que no puede resolver el qué?
00:58:58
¿O sea, aquí le estás pasando?
00:59:03
Si se lo pasas a File
00:59:08
Tampoco te lo coge
00:59:10
Pero es muy raro porque
00:59:11
Como no sea la versión de Jackson
00:59:12
Pero me extraña mucho
00:59:15
Hombre, tendrá las firmas
00:59:16
Para los dos
00:59:22
Pero lo que me extraña es que
00:59:23
A él no le coja el de File
00:59:26
Pues
00:59:27
No sé decirte
00:59:34
¿Qué versión tienes?
00:59:36
De
00:59:39
Vamos a ver
00:59:39
Yo tengo la 3-0
00:59:44
No sé si será por eso
00:59:52
Que no le he cambiado esto
00:59:54
Entonces
01:00:05
Si uno no tuviera el modelo
01:00:06
Esto se complicaría un pelín este método
01:00:07
Porque yo no podría leer en biblioteca
01:00:10
Directamente, si uno no tuviera el modelo
01:00:13
Esto ya no sería tan sencillo
01:00:14
Si no lo tuviéramos, tendríamos que leer
01:00:16
A un JSON node
01:00:18
¿Qué?
01:00:20
Ni siquiera sé si la clave se llamaba así
01:00:29
Y ahora ya sí que sería
01:00:31
Mapper.reactree
01:00:35
¿Vale?
01:00:37
Y aquí ya el
01:00:38
Fichero
01:00:40
Y esta no sé si la he escrito bien
01:00:43
Sí, está bien escrita
01:00:45
Vale, entonces aquí sería un rollo
01:00:48
Porque aquí ahora ya tendríamos que navegar por aquí
01:00:51
Tendríamos que
01:00:53
Encontrar
01:00:55
Nodo tiene su find
01:00:57
A partir de los find
01:00:59
Pues tenemos que encontrar
01:01:06
Claro, o sea, este nodo
01:01:10
lo podemos cambiar con el método
01:01:22
tree to value, lo cambiaríamos a biblioteca
01:01:24
Bueno, si estás en otro
01:01:26
momento de tu método
01:01:30
porque aquí es que lo acabamos de leer
01:01:32
pero tú podrías estar en una zona de tu aplicación
01:01:33
donde tienes el JSON node
01:01:36
y ahí ya lo quieres convertir
01:01:37
a un modelo en ese momento
01:01:39
porque vienes de otro sitio
01:01:40
aquí en particular sería absurdo
01:01:42
leerlo como JSON node
01:01:44
para cambiarlo si ya lo podemos leer
01:01:46
con real value
01:01:48
simplemente para ver ese método
01:01:49
yo la 301
01:01:52
3.0.1
01:01:57
aquí por ejemplo
01:02:03
pues aquí tendríamos find values
01:02:06
que me saca
01:02:08
toda la lista de json nodes
01:02:14
vale
01:02:16
con esta propiedad, tendría que navegar
01:02:17
por ella, cuando encuentre
01:02:23
el ids así
01:02:25
pues tendría que sacarme
01:02:27
el resto de propiedades para hacer un libro
01:02:28
o sea, sería una, navegar a través de aquí
01:02:31
es un poco rollo, vale
01:02:33
venga, ni vamos a entrar en ello
01:02:35
ahora mismo, aparte de por la hora que es
01:02:37
entonces esto
01:02:39
Vale, ¿qué podríamos incorporar aquí?
01:02:40
Que no hemos incorporado
01:02:52
Que liste
01:02:53
Doctor, que liste
01:03:02
El informe, no entiendo nada
01:03:32
Punto PDF
01:03:34
Vale, pues un informe
01:03:34
Autor, tres libros
01:03:38
Autor, tal, cuatro libros
01:03:40
Autor, no sé cuánto, cinco libros
01:03:42
Para procesar un poquito el fichero
01:03:44
Y luego yo hago el informe y ya está
01:03:46
A ver
01:03:47
Ahora, si incorporamos los logs
01:03:51
Pues aquí
01:03:54
Para incorporar los logs, ¿qué haríamos?
01:03:55
Primero, necesitaríamos la dependencia
01:03:59
Pues vamos a copiar la dependencia
01:04:00
Venga
01:04:02
Vamos a generar archivos de logs aquí
01:04:03
A ver
01:04:07
La dependencia de log4j
01:04:08
Imagino
01:04:13
Aquí está
01:04:15
Venga
01:04:16
Aquí
01:04:19
Aquí
01:04:22
Eran estas dos
01:04:23
Vale
01:04:25
Y esta de Jackson
01:04:30
era necesaria si el archivo de configuración
01:04:32
de xml
01:04:35
era json
01:04:36
si el archivo de configuración de log4j
01:04:37
era json, si era xml no
01:04:40
entonces
01:04:42
vamos a copiar
01:04:44
estas dos
01:04:47
¿vale?
01:04:51
por ejemplo
01:04:54
copiamos esta dependencia
01:04:55
a nuestro
01:04:58
pom
01:04:59
porque si el archivo
01:05:00
de configuración de
01:05:03
logs, era con JSON
01:05:04
que era una posibilidad
01:05:07
entonces le quitabas la dependencia de Jackson
01:05:08
vale, si es con XML no te hace falta
01:05:11
entonces, a ver, vamos a ver
01:05:13
vamos a ponerle los logs
01:05:17
y nos vamos
01:05:18
pues venga, voy a añadir
01:05:19
vamos a ponerle los logs, como lo haríamos
01:05:22
Le pongo la dependencia esta de logs
01:05:30
Esta de jacksons, se me ha escapado
01:05:33
Que ya la tengo arriba
01:05:35
Entonces esto lo voy a quitar porque se me ha escapado
01:05:36
Le pongo la dependencia de logs
01:05:38
Vale
01:05:41
Un fichero de configuración me va a hacer falta
01:05:42
Pues vamos a coger un fichero de configuración
01:05:45
Y lo retocamos
01:05:47
Pues venga, un fichero de configuración
01:05:48
Lo tenemos en nuestro ejemplo
01:05:51
De logs
01:05:53
En recursos
01:05:54
Vale
01:05:56
el xml
01:05:58
por ejemplo
01:06:00
lo copiamos en los recursos
01:06:03
de aquí
01:06:09
vale, que le voy a cambiar el nombre
01:06:10
porque ahí estaba
01:06:16
mal llamado
01:06:17
venga, ok
01:06:21
ala, he puesto la dependencia
01:06:26
Y el archivo de configuración en resources
01:06:30
Vale, vamos a abrirlo
01:06:32
Para adaptarlo a nuestra situación
01:06:34
Venga
01:06:36
Que appenders tenemos, este de consola
01:06:39
Muy bien, este fichero
01:06:41
Quiero que se llame así, venga
01:06:43
Y tengo un fichero, este fichero de aquí
01:06:45
Quiero que se guarden
01:06:48
Logs, aplicación.log
01:06:50
Venga, si, si no le cambio de nombre y ya está
01:06:51
Estos appenders me gustan
01:06:53
Ahora, los logger
01:06:55
Vamos a ver, lo vamos a configurar
01:06:57
Los logger, cuidado con esto
01:07:01
Logger raíz, quiero que todas las clases se configuren
01:07:03
Igual, pues de esto
01:07:06
Paso, porque esto es para configurar
01:07:08
Cada clase por separado
01:07:10
Para que cada una tenga un nivel
01:07:11
De logs distintos
01:07:13
Entonces, venga, esto lo quito
01:07:15
Y aquí ya
01:07:18
Decido
01:07:20
Nivel de logs
01:07:21
One, no es a ver
01:07:24
One, info, el que sea
01:07:26
Vamos a ponerle
01:07:27
Pues yo pongo info, ala
01:07:29
Tú pones Juan, pues yo pongo info
01:07:32
¿A dónde queremos que vayan los logs?
01:07:36
Al fichero y a la consola
01:07:38
¡Hala, ya está!
01:07:40
Ahora, si hemos hecho esto
01:07:42
Es para ahora
01:07:43
Hacer aquí cosas un poco más
01:07:45
Monas, por ejemplo
01:07:47
Hay que crear un log
01:07:49
Aquí, pues yo haría
01:07:53
Ah, claro, hay que crear el log, jolines
01:07:56
Me pongo el log
01:07:58
On fire
01:08:00
Vale, entonces
01:08:03
Voy a copiar la línea directamente
01:08:06
De aquí
01:08:08
A la mi logger
01:08:11
Ahí
01:08:18
Venga
01:08:21
Y ahora la clase se llama lógica
01:08:27
Vale, pues este es el logger
01:08:37
De mi clase lógica
01:08:38
Que como no tiene una configuración específica
01:08:40
Para él en el fichero de configuración
01:08:43
No tiene una específica para él
01:08:45
Pues se va a configurar con el del raíz
01:08:48
Esto fuera
01:08:50
Ahora
01:08:56
Y ahora ya, pues por ejemplo aquí
01:08:59
Y no he encontrado
01:09:01
Pues yo que sé, uno podría a lo mejor
01:09:06
Querer hacer esto
01:09:09
Log.one
01:09:10
No se actualizó
01:09:16
No
01:09:21
Antes
01:09:24
No se actualizó
01:09:25
Ningún fichero
01:09:31
Yo que sé, cualquier cosa que yo quiera
01:09:33
Dejar registro
01:09:35
Y mi variable no se llamaba log
01:09:36
Sino
01:09:40
Y ya está
01:09:41
Y ahora ya aviso donde a mí me dé la gana
01:09:47
Aviso y se acabó
01:09:49
Cuando yo quiera
01:09:50
Claro, con el nivel que yo quiera
01:09:52
Que luego estoy en fase de desarrollo
01:09:57
Quiero que me lleguen todos los logs
01:09:59
Pues me aseguro de que en mi fichero de configuración
01:10:00
Que
01:10:03
Es este
01:10:04
Me aseguro de que aquí está el nivel que yo quiero
01:10:07
Que ya estoy en producción
01:10:09
Ya en el servidor final
01:10:10
Pues aquí pondré error
01:10:12
Para que solo vayan a log los importantes
01:10:14
Que quiero una configuración
01:10:16
Específica para mi clase cualquiera
01:10:19
Pues me añado aquí un log
01:10:21
Para esa clase
01:10:23
Acabo de eliminar
01:10:24
para que las clases vayan con diferentes niveles
01:10:25
esta que vaya con info y ya está
01:10:29
hay poco más que esto, ¿vale?
01:10:30
muy sencillito
01:10:36
falta la parte del controlador
01:10:37
es sencillín, pero bueno
01:10:40
ahora esto
01:10:41
tendríamos que meterlo
01:10:44
en la arquitectura
01:10:46
estos son las funcionalidades
01:10:49
ahora ya pues uno que lo quiere como
01:10:50
aplicación de escritorio, se hace su menú
01:10:52
y llama esto
01:10:54
que lo quiere como aplicación web
01:10:55
se hace su controlador
01:10:57
y desde el controlador llama a esto
01:10:59
y ya está
01:11:01
venga, pues nos vamos
01:11:02
bueno, tenéis menos miedo
01:11:17
No me lo creo
01:11:25
¿Habéis visto que lo habéis podido hacer todo?
01:11:30
- Materias:
- Programación
- Niveles educativos:
- ▼ Mostrar / ocultar niveles
- Formación Profesional
- Ciclo formativo de grado superior
- Primer Curso
- Subido por:
- Raquel G.
- Licencia:
- Todos los derechos reservados
- Visualizaciones:
- 5
- Fecha:
- 21 de noviembre de 2025 - 13:10
- Visibilidad:
- Clave
- Centro:
- IES ROSA CHACEL
- Duración:
- 1h′ 11′ 38″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 332.74 MBytes