Saltar navegación

20250321 EjerAppPedidos_1 - Contenido educativo

Ajuste de pantalla

El ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:

Subido el 25 de marzo de 2025 por Raquel G.

14 visualizaciones

Descargar la transcripción

Vale, pues si avanzamos un poquito más en esta aplicación, recordad que el diseño era este, bueno, el diseño era estas pestañitas para hacer cosas y luego el JList en el que se supone que aparece la lista de pedidos, entonces ella por lo que ha optado es descripción, ponemos aquí la descripción y al añadir pedido, el pedido ya aparece aquí, sin productos. 00:00:00
y luego ha optado 00:00:27
cuando el pedido ya existe 00:00:29
pues que tú le puedas añadir productos aquí 00:00:31
es una opción, yo lo que dije es que añadir productos 00:00:33
lo pusierais dentro de actualizar 00:00:35
porque era lo único que íbamos a actualizar, pero bueno da igual 00:00:37
lo que importa es que la funcionalidad esté 00:00:39
vale, pero aquí cuando tú pones el panel 00:00:41
consultar 00:00:43
que estamos aquí, el panel 00:00:44
consultar que es este, la idea 00:00:47
del JList precisamente 00:00:49
es que este campo no haga falta 00:00:51
porque tú aquí tienes 00:00:53
tu lista, seleccionas uno 00:00:55
y cuando le des a consultar 00:00:57
te va a consultar el que está aquí seleccionado 00:00:59
no le tienes que decir al usuario mete el código 00:01:01
porque entonces la aplicación se hace muy 00:01:03
poco agradable 00:01:05
de usar, lo agradable es que él vea 00:01:07
siempre aquí la lista de pedidos 00:01:09
en el panel de actualizar 00:01:10
tú ahora mismo aquí como 00:01:13
la única funcionalidad de actualizar 00:01:15
que dijimos que íbamos a poner es la de 00:01:17
añadir un pedido a un producto 00:01:19
esto pues 00:01:20
en este caso esta funcionalidad añadir producto 00:01:22
sería este producto 00:01:25
al pedido que hayas seleccionado 00:01:26
aquí, al que hayas seleccionado aquí 00:01:28
vale, pues en tu caso como ya 00:01:30
esa funcionalidad de añadir producto a un pedido 00:01:32
que está aquí seleccionado y ahora tienes 00:01:35
puesta ahí, pues el panel de 00:01:36
actualizar se te queda 00:01:38
que lo has 00:01:41
puesto para actualizar descripción 00:01:43
pero de nuevo 00:01:44
esto de buscar no te haría falta 00:01:46
porque tú seleccionarías aquí el pedido 00:01:48
y aquí 00:01:50
vale, con lo cual 00:01:52
vamos a quitar todo lo que sobra 00:01:54
para que se le quede a alguien una versión a medias 00:01:57
si quiere hacerla partir de aquí 00:02:00
en insertar dejamos todo lo que está 00:02:03
ponemos la descripción, añadimos pedido y aparecerá aquí 00:02:06
y ahora añadir producto 00:02:10
se añadirá este producto al pedido seleccionado aquí 00:02:12
aquí no sobra ni falta nada 00:02:14
panel consultar, en el panel consultar sobra 00:02:16
esta etiqueta y este texto 00:02:20
Porque se va a consultar el pedido que esté aquí. 00:02:23
Y a cambio falta, a cambio falta el control para mostrar el resultado. 00:02:26
Pues ese control que sea un textarea, por ejemplo, una ventanita grande. 00:02:32
Pues vamos a poner un textarea, por ejemplo aquí, pues este textarea de aquí va a ser para mostrar el contenido del pedido que hemos consultado. 00:02:37
Vale, luego el panel consultar se nos queda así, el panel actualizar, el panel actualizar, esto de código nos sobra y esto nos sobra y esto nos sobra, porque del que se le va a actualizar su descripción, Pedro, es del que esté, es del que esté seleccionado aquí. 00:02:58
Luego el panel actualizar se queda aquí 00:03:23
Descripción, el huequito 00:03:26
Y cambiamos la descripción del pedido que está aquí 00:03:27
Por este 00:03:30
Y en eliminar, en el panel eliminar 00:03:31
Que es este 00:03:33
También te sobra esto 00:03:35
Y te sobra esto 00:03:37
Porque vamos simplemente a 00:03:39
Eliminar el que esté seleccionado aquí 00:03:42
¿Vale? O sea, se quedan 00:03:44
Pues 00:03:46
Claro, pero bueno 00:03:46
De hecho dijimos que 00:03:49
Bueno, lo pusiéramos aquí debajo y ya está 00:03:51
Pero bueno, da igual lo ponemos ahí 00:03:53
Da igual ponerlo aquí, ponerlo aquí es lo mismo 00:03:56
Lo que nos importa es que va a tener un listener 00:03:58
Bueno, pues de todo esto 00:04:00
¿Qué listener has hecho tú? 00:04:02
Has hecho el de añadir pedido 00:04:03
¿Vale? Has hecho ese 00:04:05
Entonces, el de añadir pedido 00:04:07
Pues ya tiene su cosa 00:04:09
Porque el de añadir pedido, ¿qué tiene que hacer? 00:04:11
El de añadir pedido 00:04:15
Tiene que coger la descripción 00:04:16
Crear un producto nuevo 00:04:18
Perdón, un pedido nuevo 00:04:19
y añadirlo al list, este de aquí 00:04:21
bueno, pues el list 00:04:23
que es el componente desconocido 00:04:25
es un elemento sencillo 00:04:27
porque 00:04:29
ah, bueno, sí, claro, tienes razón 00:04:30
y el map, vale, el list 00:04:33
es un elemento sencillo porque el JList 00:04:35
al igual que el combo box 00:04:37
le podemos 00:04:39
no parametrizar 00:04:41
y el JList que admita cualquier cosa 00:04:43
entonces, lo que pasa 00:04:45
es que como el JList 00:04:47
te muestra 00:04:48
esa cualquier cosa que le mandamos 00:04:50
tendrá que llamar al toString, claro 00:04:52
en este caso tú lo has parametrizado 00:04:54
que está bien para que ya 00:04:57
desde código 00:04:58
desde fase de compilación, desde código 00:05:00
solo nos permita pasarle 00:05:02
objetos pedido, entonces le pasaremos 00:05:04
objetos pedido y nos mostrará 00:05:07
del pedido lo que figura en el 00:05:09
toString, claro lo que figura en el toString 00:05:10
entonces si nos vamos al toString 00:05:13
de pedido que está sin hacer 00:05:15
pues vamos a hacer un toString de pedido 00:05:16
con lo que queramos que muestre el JList 00:05:18
por ejemplo 00:05:20
entonces 00:05:22
nos hacemos un toString 00:05:23
con código y descripción solamente 00:05:25
vale 00:05:28
pedido, descripción 00:05:30
código, como va a quedar muy largo 00:05:32
y no lo vamos a ver 00:05:34
pues vamos a quitarle 00:05:35
vale 00:05:37
a ver 00:05:39
bueno, como voy a empezar a cambiar 00:05:40
y a pegar y me voy a liar con las comas 00:05:49
y las esas, voy a dejarlo así 00:05:52
pero es 00:05:54
descripción, código 00:05:54
lo del código 00:05:57
en realidad es si tú tienes que distinguir pedidos 00:05:59
con la misma descripción, pero sobre todo 00:06:02
el usuario cuando va a consultar 00:06:04
él, el dato que tiene en la cabeza 00:06:05
quiere consultar el de bolis, quiere consultar 00:06:07
el de gomas, entonces es lo que más 00:06:10
lo que pasa es que si tiene varios de bolis 00:06:11
entonces pues sí, la interesa ya 00:06:13
ah, pero dime, ¿qué código es? 00:06:15
es que siempre, aunque es verdad que es la descripción 00:06:17
más intuitiva, el código al final 00:06:19
siempre lo vas a tener en mente, porque si quieres 00:06:21
todos los 300, ni te acuerdas de la descripción 00:06:22
ni te acuerdas de nada 00:06:25
a ver, yo creo que es lo contrario, normalmente el gestor 00:06:25
el secretario que está ahí, no se acuerda de los códigos 00:06:28
por eso se acuerda de las descripciones 00:06:31
claro, pero cuando viene un usuario 00:06:33
o alguien, yo siempre lo pongo en ese sentido 00:06:34
si me habla alguien de 00:06:36
en mi pedido, número, no sé qué 00:06:38
claro, pero el usuario tampoco te va a decir 00:06:40
el código, soy Pepito 00:06:42
este es mi pedido y tú lo buscarás por los parámetros 00:06:44
que te da el usuario, que no son los técnicos 00:06:47
el técnico es el del código 00:06:48
a menos que tú le hayas enviado un email, tu código es este 00:06:50
si quieres una búsqueda, busca por código 00:06:53
claro, a ver, el asunto 00:06:55
es que todo esto pues le falta 00:06:57
lógicamente muchísimos más detalles 00:06:59
para saber exactamente cuál va a ser 00:07:00
el patrón de funcionamiento 00:07:03
claro, es que 00:07:04
todo esto le falta una 00:07:07
fase de análisis y diseño muchísimo más 00:07:08
completa, para decir, a ver 00:07:11
esto va a funcionar exactamente así 00:07:13
vale, que nos falta 00:07:15
bueno 00:07:17
vale, pues ya está, entonces 00:07:18
ahora, el evento 00:07:21
del, el evento del 00:07:23
botón, este añadir pedido 00:07:25
que es el que has hecho 00:07:27
pues aquí que es lo que has hecho 00:07:28
pues en este evento 00:07:30
un nuevo pedido con la descripción 00:07:33
ahora, cuando aparece 00:07:35
algo amarillo 00:07:37
al menos, escuchadle 00:07:37
por dios 00:07:40
porque es que no es que hayas hecho algo mal 00:07:42
que no te vaya a funcionar, pero tienes alguna 00:07:44
práctica de programación muy fea y muy poco 00:07:46
elegante, seguro, si hay algo amarillo 00:07:48
te dice anda que eres un poco 00:07:50
cutre, que te está diciendo 00:07:52
oye perdona, pedidos es 00:07:54
una variable estática, hace el favor 00:07:56
de accederla en el modo estático 00:07:58
hace el favor 00:08:00
y el modo estático es con el nombre de la clase 00:08:02
que da datos 00:08:05
ahora ya esto mucho más profesional 00:08:06
pues metemos el pedido 00:08:08
en nuestros datos 00:08:11
esto sería el equivalente a meterlo 00:08:13
en la base de datos, el equivalente a la base de datos 00:08:15
que no tenemos, y ahora ya 00:08:17
se lo añadimos al list 00:08:19
al list, pero esto del list 00:08:20
¿esto qué es? esto es el list 00:08:23
en realidad es el 00:08:25
modelo que tiene asociado el list 00:08:27
porque el JList funciona, este es nuestro 00:08:29
JList, que tú le has 00:08:31
instanciado aquí, abajo del todo 00:08:33
esto es nuestro 00:08:35
JList 00:08:37
que está instanciado 00:08:38
aquí, que esto no lo tenías puesto 00:08:41
ya que está parametrizado, porque te volvía a salir 00:08:45
el aviso, te decía, hombre, si está parametrizado 00:08:47
cuando la instancia es instancia lo parametrizado 00:08:49
vale, pero cuando instancias el JList 00:08:51
tú puedes 00:08:53
no es que sea obligatorio, pasarle 00:08:55
un objeto modelo asociado 00:08:57
y a través de ese objeto modelo es a través 00:08:59
del que le metes elementos 00:09:01
nuevos y se los quitas, les metes y se los quitas 00:09:03
Bueno, pues este modelo lista pedidos que lo tienes aquí declarado es efectivamente un objeto modelo que lo asociamos al JList. Lo podemos asociar en el momento de instanciarlo como has hecho tú. 00:09:05
O sea, hemos tenido que crear dos cosas, el JList en sí, que es el objeto gráfico y el default list model, que es un objeto que es el que recibe y del que se quitan los elementos y él ya se lo pasa al JList para que lo haga visible. 00:09:24
bueno, pues al JList hay que asociarle este modelo 00:09:36
vale, pues tú lo has asociado 00:09:39
en el momento de instanciarlo 00:09:41
¿dónde está el JList? aquí 00:09:44
en el momento de instanciarlo con el constructor lo has asociado 00:09:49
o bueno, también se puede asociar después 00:09:53
porque este constructor se le puede instanciar así 00:09:55
y ahora tú puedes decirle, oye lista pedidos 00:09:58
punto set model 00:10:01
no, maximum size no, set model 00:10:03
fíjate como modelo 00:10:07
el modelo ese 00:10:09
que no sé cuál era 00:10:12
modelo lista pedido se llamaba 00:10:12
vale, da igual, es lo mismo 00:10:15
me da igual pasárselo ya en el 00:10:21
constructor o 00:10:23
setearlo luego, vale 00:10:25
da lo mismo, ahora ya como 00:10:27
ya el modelo está asociado al list 00:10:29
cada elemento que tengamos que 00:10:31
añadir o remover o eliminar del list 00:10:33
pues se lo hacemos 00:10:35
al modelo que es lo que has hecho aquí 00:10:36
en el evento este 00:10:39
de añadir pedido 00:10:41
añadir pedido 00:10:42
eso lo has añadido 00:10:43
y luego ya 00:10:44
has habilitado el otro 00:10:44
para que se puedan 00:10:45
ya añadir productos 00:10:46
porque ya hay algún 00:10:47
producto añadido 00:10:48
etcétera 00:10:49
entonces 00:10:49
ahora mismo 00:10:49
una aplicación 00:10:50
parte ya lo tiene hecho 00:10:51
que es vamos a añadir 00:10:52
un pedido de bolis 00:10:53
ala 00:10:55
ya está aquí el pedido 00:10:56
con bolis cero 00:10:57
más bonito así 00:10:58
que con tu stream 00:10:58
y ahora ya 00:10:59
vamos a añadir 00:11:01
otro pedido 00:11:03
de rotus 00:11:04
siempre pido lo mismo 00:11:05
pedido rotus 00:11:06
vale, código 0 00:11:08
algo funciona mal en tu aplicación porque no se está actualizando 00:11:10
el código 00:11:13
pero esa parte ya la hicimos 00:11:13
se supone que se tenía que ir incrementando 00:11:16
vamos a ver, el código tendría que ser 00:11:17
en datos 00:11:21
era una variable estática 00:11:23
secuencia que empezaba en 1 00:11:24
y la incrementábamos 00:11:26
al crear el pedido 00:11:28
secuencia 00:11:30
code, se queda incrementada 00:11:33
pedidos 00:11:35
put, secuencia, code 00:11:37
¿y por qué se crea con cero todo el rato? 00:11:39
¿está usando la 00:11:48
secuencia code? 00:11:50
¿cómo la funciona? 00:11:52
la función de insertar pedido 00:11:56
¿la está usando? 00:11:58
efectivamente, tenéis toda razón 00:12:00
y la pista la daba que vale, claro, sí, sí, sí 00:12:02
lo está creando a mano, lógicamente 00:12:03
claro, entonces no 00:12:05
claro, entonces todo esto 00:12:07
claro 00:12:10
efectivamente 00:12:11
es que lo estás creando a mano. 00:12:14
Todo esto te sobra. 00:12:15
No, el P no sobraba porque tienes que pasar un pedido. 00:12:17
Sí, a ver. 00:12:19
Pedido. 00:12:22
Tenemos el pedido y ahora esto es lo que sobra. 00:12:22
Esto es lo que sobra y ahora ya datos, punto, 00:12:25
insertar pedido. 00:12:28
Muy bien, sois muy listos. 00:12:29
Datos, punto, ¿dónde tienes el método de insertar pedido? 00:12:31
¿Lo tienes como privado o qué pasa? 00:12:35
Y borra el constructor de pedido. 00:12:37
Pedido. 00:12:39
¿Dónde está datos? 00:12:39
Private, claro 00:12:44
Tienes como privado, muchacha 00:12:47
Es que hay que estar rápido 00:12:49
Porque yo puedo equivocarme 00:12:58
Si equivocáis y yo pongo privado 00:13:01
Pues ponéis público 00:13:02
Muy bien pensado también 00:13:03
Si es que estoy generando aquí 00:13:09
Unas máquinas de conocimiento 00:13:11
y de destrezas y de habilidades 00:13:13
claro, efectivamente 00:13:14
entonces este constructor 00:13:16
no, no cuestiono 00:13:18
vuestros conocimientos, cuestiono 00:13:22
vuestros hábitos de conducta 00:13:24
que es distinto 00:13:26
vale, entonces ahora ya si aquí 00:13:27
no, a ver 00:13:30
el pedido tenemos que instanciarlo 00:13:34
claro, el pedido hay que instanciarlo 00:13:35
podríamos cambiar datos 00:13:37
claro 00:13:41
Claro, pero entonces tenemos que pasarle los datos. 00:13:44
Claro, pero tendríamos que cambiar 00:13:47
demasiado. Si le pasamos los datos, sí, 00:13:48
y él ya lo instancia. Vale, lo hacíamos. 00:13:50
Pero bueno, como ya lo, para no cambiar 00:13:52
demasiadas cosas, entonces 00:13:54
vamos a 00:13:56
volver a hacer pedido 00:13:58
como público. 00:14:00
Vale, vamos a 00:14:04
hacer pedido como público 00:14:06
y entonces 00:14:08
ahora ya 00:14:09
en app pedido 00:14:11
tenemos una vez que tenemos el pedido 00:14:13
ahora ya veníamos aquí a insertar el pedido 00:14:15
de este que hemos hecho ya 00:14:17
y ya está 00:14:19
vale, ahora ya sí, muy bien visto 00:14:21
es que todo debería hacerse desde el propio insertar pedido 00:14:23
efectivamente 00:14:25
si hay un método insertar pedido 00:14:27
efectivamente es para enmascarar 00:14:28
todo eso al usuario 00:14:31
y proteger el resto del código de instanciaciones 00:14:33
en sitios donde no se deben hacer 00:14:35
pero 00:14:37
a ver, lo que pasa es que esto se suele hacer 00:14:40
en un montón de capas para hacer lo mismo 00:14:43
entonces siempre habrá una capa básica 00:14:44
que es la capa de datos 00:14:47
que se llama, en la que tú tengas un método 00:14:48
y le pasas el objeto, luego habrá una 00:14:50
capa intermedia, que es la capa de 00:14:52
transmisión, a la que le pasas 00:14:54
los valores y ella te lo instancia 00:14:56
entonces 00:14:58
pero bueno, olvidados de lo que he dicho 00:14:59
es justo 00:15:02
al final el desacoplamiento 00:15:04
lo que implica es que para hacer algo 00:15:06
que son dos líneas de código 00:15:08
llamas a mil clases 00:15:10
pero a mil literal prácticamente 00:15:11
nunca lo escribo 00:15:14
eso 00:15:15
bueno pues ahora ya sí que nos va a funcionar 00:15:16
instanciando 00:15:20
el este verdad 00:15:21
aquí la verdad es que al usuario le sería más cómodo 00:15:23
si le dejamos el enter porque tener que irse 00:15:26
al ratón al botoncito o al tabulador 00:15:28
a darle al este 00:15:30
o puedes poner que funciona de dos maneras 00:15:31
efectivamente 00:15:35
ahora ya sí 00:15:36
nada, muy bonito, vale 00:15:38
lo que pasa es que esta aplicación ya se quedaba aquí 00:15:40
a la falta del resto de las 00:15:42
funcionalidades, pero 00:15:44
añadir producto, pues añadir producto 00:15:46
está claro que tendrá 00:15:48
añadir producto 00:15:49
tendrá que leer lo que hay aquí 00:15:52
sacar del JLIS 00:15:54
el seleccionado, pero eso es con un método 00:15:56
getSelected, ya está 00:15:59
cuando ya tenemos lo seleccionado 00:16:00
con split, con como sea 00:16:03
extraer el código 00:16:05
pero aquí tenemos una suerte maravillosa 00:16:07
que es como está parametrizado a pedido 00:16:09
lo que sacamos con el get 00:16:11
va a ser el objeto pedido enterito 00:16:13
entonces podemos ir a la propiedad 00:16:15
si no estuviera el JList parametrizado 00:16:17
a pedido y le estuviéramos metiendo el string 00:16:19
como lo mete Ana, te daría el string 00:16:21
entonces tienes que hacer un split y partirlo 00:16:23
pero como está parametrizado a pedido 00:16:26
pues con el get sacamos 00:16:27
el objeto pedido, cogemos el código 00:16:29
y nos vamos al map 00:16:31
sacamos el pedido 00:16:33
con ese código 00:16:35
y a su lista de productos 00:16:36
le añadimos un nuevo producto con esto 00:16:39
y ya está 00:16:40
a ver, lo he metido en el map 00:16:41
insertar pedido y mete en el map 00:16:44
insertar pedido y mete en el map 00:16:47
y luego con esto se pone en el list 00:16:48
de hecho esto es solo para meter en el map 00:16:50
¿vale? 00:16:52
entonces ahora ya lo único que 00:16:56
falta por hacer de esa aplicación 00:16:57
es eso 00:16:59
lo único es eso 00:17:00
saber coger 00:17:04
saber coger del elemento JList 00:17:05
el elemento seleccionado 00:17:09
pero eso a través de un método, ya está 00:17:11
y una vez que está cogido 00:17:12
el elemento seleccionado 00:17:14
a ver 00:17:16
pues 00:17:21
yo di clase en Buenos Aires 00:17:21
seis meses y 00:17:25
dije coger todo el rato porque no 00:17:26
voy a cambiar los hábitos ahora y tampoco 00:17:28
pasó nada 00:17:30
Bueno, pues hay que saber 00:17:31
coger bien las cosas 00:17:39
y sacar del list 00:17:41
el objeto pedido 00:17:43
o el string, depende de cómo lo tengas hecho 00:17:45
y luego la parte que viene ahí 00:17:47
es programar lo que supone que sabéis hacer 00:17:49
y lo que realmente os vamos a evaluar 00:17:51
que es hacer un get en el map 00:17:52
con el código 00:17:55
y ahora ya ese get del map con el código 00:17:56
me da el pedido 00:17:59
pues de ese pedido le saco su lista 00:18:00
de productos con su get 00:18:03
y le añado un producto nuevo 00:18:04
y ya está, y ese evento pues ya está 00:18:06
el de añadir producto 00:18:09
el evento de consultar, pues lo mismo 00:18:09
sacamos del list el pedido 00:18:13
seleccionado 00:18:15
y nos vamos al map, lo recuperamos 00:18:15
y construimos un string 00:18:19
con las propiedades, construimos un string 00:18:20
y ese string se pega al textarea 00:18:23
ahí pegado, ya está, nada más 00:18:24
el evento de actualizar 00:18:26
Pues igual cogemos del JList 00:18:28
El pedido seleccionado 00:18:30
Y le hacemos un set con esta descripción 00:18:32
Listo 00:18:35
Y el evento de eliminar 00:18:35
Pues ya está, cogemos de aquí el pedido seleccionado 00:18:38
Y hacemos un remove en el map 00:18:41
Y en el list 00:18:43
¿El método split que has mencionado? 00:18:45
¿Le metes la coma? 00:18:47
Sí, le metes 00:18:49
Cualquier carácter, el separador 00:18:50
Y te da un array de string 00:18:52
Con todos los sub-string que hay 00:18:54
Separados a través de separados 00:18:57
sin incluir el separador 00:18:58
pues entonces ya se queda poco por hacer 00:18:59
se queda hacer get y set 00:19:02
y put en un map y poco más 00:19:03
vale 00:19:06
bueno 00:19:07
¿alguien necesita que subamos esta versión para arrancarla? 00:19:09
vamos a subirla, si no te molesta 00:19:12
¿no te molesta? 00:19:14
cada uno que la use 00:19:22
tiene que hacer un bizul 00:19:23
de 50 centímetros 00:19:25
¿Por cada apellido que añadamos o por acá? 00:19:32
Cada vez que pruebas la aplicación, 50. 00:19:35
Pues nada, ya puede dejar el ciclo directamente. 00:19:39
Vale, pues vamos a parar. 00:19:42
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:
14
Fecha:
25 de marzo de 2025 - 12:50
Visibilidad:
Clave
Centro:
IES ROSA CHACEL
Duración:
19′ 44″
Relación de aspecto:
1.78:1
Resolución:
1920x1080 píxeles
Tamaño:
94.35 MBytes

Del mismo autor…

Ver más del mismo autor


EducaMadrid, Plataforma Educativa de la Comunidad de Madrid

Plataforma Educativa EducaMadrid