Commit 285fb0dc authored by juna101's avatar juna101
Browse files

actualizada documentación

parent 60908736
# Inyección de Dependencias con Spring
¿Por qué usamos el framework Spring? Spring nos ayuda a automatizar muchas tareas de "calentar el plato" o *boilerplate*.
Spring nos permite desarrollar aplicaciones de manera más rápida, eficaz y corta, saltándonos tareas repetitivas y ahorrándonos lineas de código.
## Prerrequisitos
Necesitamos tener instalada una [JDK](http://jdk.java.net/14/) y [Maven](http://maven.apache.org) en el equipo y accesible en la variable PATH del sistema operativo. Dependiendo del sistema operativo, es posible instalarlos desde las diferentes herramientas (ej. apt en Debian, brew en MAC....) sin tener que buscar en Internet.
Vamos a trabajar con VisualStudio Code y necesitamos tener instalados los plugins siguientes:
**Java Extension Pack**
![Java Extension Pack](docs/javaextensionpack.png)
**Spring boot Extension Pack**
![Springboot Extension PAck](docs/springbootextensionpack.png)
**Markdown All in One**
![Markdownallinone](docs/markdownallinone.png)
## Puntos clave de Spring
* **Inversion de Control (IoC)**: básicamente de lo que se trata es de invertir la forma en que se controla la aplicación, lo qué antes dependía del programador, una secuencia de comandos desde alguno de nuestros métodos, ahora depende completamente del framework, con la idea de crear aplicaciones más complejas y con funcionamientos más automáticos.
* **Inyección de dependencia (DI)**: el manejo de las propiedades de un objeto son inyectadas a través de un constructor, un setter, un servicio, etc.
## Creación del proyecto tipo
Para la creación del proyecto nos vamos a la paleta de comandos y cremos un proyecto Spring con Maven:
![Creación de proyecto Spring con Maven](docs/01-paletanuevoproyectospringmaven.png)
Al pulsar **enter** podemos seleccionar la versión de Spring boot que queremo usar, seleccionamos la última en nuestro caso.
![Selección Spring Boot](docs/02-springbootversion.png)
Seguidamente seleccionamos el lenguaje de programación que queremos usar, en nuestro caso nos decantamos por Java:
![Selección del lenguaje de programación](docs/03-selecionjava.png)
Ya podemos indicar el grupo (paquete) donde va a estar nuestra aplicación:
![Indicamos el paquete](docs/04-grupo.png)
Tras el paquete, hay que introducir el nombre de nuestro artefacto (aplicación):
![Indicamos el artefacto](docs/05-artefacto.png)
Luego el tipo de empaquetado, como es una aplicación Spring Boot usaremos **JAR**, pues no necesitamos un servidor de aplicaciones, lleva embebido un Tomcat:
![Empaquetado](docs/06-empaquetado.png)
A continuación seleccionamos la versión de Java, donde selecionaremos 17 por ser la última LTS liberada a día de hoy:
![Seleción de la versión de Java](docs/07-versionjava.png)
En este proyecto *tonto* no necesitamos añadir ninguna dependencia a nuestro proyecto Maven, así que simplemente pulsamos enter en la selección de las mismas:
![Selección de dependencias Maven](docs/08-dependencias.png)
# Ejemplo de DI
En la carpeta **resources** Spring busca por recursos para utilizar en el proyecto (por ejemplo, configuración de los DataSources, seguridad, etc.).
En dicha carpeta crearemos un fichero llamado beans.xml con la siguiente estructura:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- aquí van nuestras beans -->
</beans>
```
Esta será la estructura genérica que siempre tendrá nuestro archivo de beans. Ahora dentro, ya podemos crear elementos a los que Spring hará su magia y los convertirá en objetos en tiempo de ejecución, por ejemplo, si dentro del archivo creamos el bean:
```xml
<bean id="mi_moto" class="com.iesvdc.acceso.beans.Moto">
<property name="marca" value="Harley Davidson"></property>
<property name="modelo" value="SportSter 1200"></property>
</bean>
```
Desde la aplicación Spring Boot podremos leerlo así:
```java
public class App
{
public static void main( String[] args )
{
ApplicationContext ac =
new ClassPathXmlApplicationContext("com/iesvdc/acceso/xml/beans.xml");
Moto miMoto = (Moto) ac.getBean("mi_moto");
System.out.println(miMoto.toString());
}
}
```
## Cómo ejecutar una aplicación Spring Boot desde CLI
Para invocar la aplicación desde Maven bastará con escribir desde la raíz del proyecto la siguiente orden:
```bash
mvn spring-boot:run
```
## Añadiendo Starters a Spring Initializr
### Devtools
Spring reinicia el programa en ejecución cada vez que hay un cambio en el disco (cuando pulsamos CTRL+S). Cuidado si tienes activado el autoguardado en tu IDE porque puede dar problemas.
### Spring JPA
Para las anotaciones de las clases entidad (modelo).
### Mysql Driver
Necesario para conectar a MySQL.
### Lombok
Un clásico en los proyectos con clases modelo (los llamados POJO o Plain Old Java Objects).
Lombok automatiza la tarea de añadir todos los constructores, getters, setters, etc. a nuestras clases modelo.
## Un poco de magia Spring
La Inversión de Control (IoC) es un principiop de ingeniería del software por el cual se transfiere el control de objetos o parte de un programa a un contenedor o framework
Spring es un framework que permite inversión de control, es decir, parte de su gran poder reside en hacer tareas por sí misma que de otra manera tendría que implementar el programador.
Por ejemplo, para montar una API REST que haga el marshalling de un objeto a JSON para que sea consumido en un endpoint concreto, con Java tendríamos que usar Jersey, JAXB, un proxy JSON y un servidor de aplicaciones donde correrlo.
Con Spring montar una API de ejemplo se hace en apenas unas líneas de código. Veamos esta versión extendida del anterior programa:
```java
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
// clase base, el POJO
import com.iesvdc.acceso.beans.Moto;
@RestController
@RequestMapping("api")
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
@GetMapping(value = "moto")
public Moto findMoto() {
ApplicationContext ac = new ClassPathXmlApplicationContext("com/iesvdc/acceso/xml/beans.xml");
Moto miMoto = (Moto) ac.getBean("mi_moto");
return miMoto;
}
}
```
En una terminal podemos escribir:
> mvn spring-boot:run
Mientras que en otra se puede comprobar con:
> curl http://localhost:8080/api/moto
Acabamos de ver cómo sólo con añadir la anotación **@RestController** nuestra aplicación ya contesta a paticiones Web y cómo hemos hecho el marshalling/unmarshalling del objeto moto (lo hemos leído de un XML y lo mandamos en JSON), todo en tres líneas de código.
# Planificación del proyecto
## Primer Sprint
* Análisis:
* Diseño de clases
* Diagrama de caso de uso
* Creación de los modelos
* Creación de los repositorios
* Creación de los servicios
## Segundo Sprint
* Análisis:
* Diagrama de casos de uso
* Creación Web con Thymeleaf de listado de instalaciones
* Creación Web con Thymeleaf de listado de horarios
## Tercer Spring
* Análisis:
* Diagrama de casos de uso
* Listado de roles y rutas
* Spring Security con sesiones
## Cuarto Spring
* El product owner nos cambia todo a REST con autenticación JWT y login social (GitHub) + registro por email.
## Quinto Spring
*
\ No newline at end of file
# Creación de los contenedores para la práctica
## Mysql
## Adminer
## Roundcube/Dovecot/Postfix
......@@ -4,4 +4,5 @@ Ejemplo de sistema de gestión con:
* **backend**: Spring. Montaremos un servicio REST que consumirá peticiones del front-end hecho con React. Autenticación con JWT.
* **frontend**: React
* **sign up**: Registro (correo electrónico). Docker (correo).
* **CI-CD**: Integración contuinua.
docs/01-paletanuevoproyectospringmaven.png

102 KB

docs/02-springbootversion.png

67.3 KB

docs/03-selecionjava.png

78.1 KB

docs/04-grupo.png

99.9 KB

docs/05-artefacto.png

77.4 KB

docs/06-empaquetado.png

84 KB

docs/07-versionjava.png

75.2 KB

docs/08-dependencias.png

233 KB

docs/diagrama de casos de uso.png

18.8 KB

docs/diagrama de clases.png

43.3 KB

docs/javaextensionpack.png

221 KB

docs/markdownallinone.png

111 KB

docs/springbootextensionpack.png

202 KB

<?xml version="1.0" encoding="UTF-8"?>
<XMI xmi.version="1.2" timestamp="2023-01-12T12:08:37" verified="false" xmlns:UML="http://schema.omg.org/spec/UML/1.4">
<XMI.header>
<XMI.documentation>
<XMI.exporter>umbrello uml modeller 2.32.3 http://umbrello.kde.org</XMI.exporter>
<XMI.exporterVersion>1.7.3</XMI.exporterVersion>
<XMI.exporterEncoding>UnicodeUTF8</XMI.exporterEncoding>
</XMI.documentation>
<XMI.metamodel xmi.name="UML" xmi.version="1.4" href="UML.xml"/>
</XMI.header>
<XMI.content>
<UML:Model xmi.id="m1" name="Modelo UML" isSpecification="false" isAbstract="false" isRoot="false" isLeaf="false">
<UML:Namespace.ownedElement>
<UML:Stereotype isSpecification="false" isLeaf="false" isRoot="false" isAbstract="false" xmi.id="folder" name="folder" namespace="m1" visibility="public"/>
<UML:Model isSpecification="false" isLeaf="false" isRoot="false" isAbstract="false" xmi.id="Logical_View" name="Logical View" namespace="m1" visibility="public">
<UML:Namespace.ownedElement>
<UML:Package isSpecification="false" isLeaf="false" isRoot="false" isAbstract="false" xmi.id="Datatypes" name="Datatypes" namespace="Logical_View" visibility="public" stereotype="folder">
<UML:Namespace.ownedElement>
<UML:DataType isSpecification="false" isLeaf="false" isRoot="false" isAbstract="false" xmi.id="ulCueLQ90cdiL" name="char" namespace="Datatypes" visibility="public"/>
<UML:DataType isSpecification="false" isLeaf="false" isRoot="false" isAbstract="false" xmi.id="un1Own0e2LUzQ" name="int" namespace="Datatypes" visibility="public"/>
<UML:DataType isSpecification="false" isLeaf="false" isRoot="false" isAbstract="false" xmi.id="uNQnHXqlzvDeI" name="float" namespace="Datatypes" visibility="public"/>
<UML:DataType isSpecification="false" isLeaf="false" isRoot="false" isAbstract="false" xmi.id="uELjF4oHly40A" name="double" namespace="Datatypes" visibility="public"/>
<UML:DataType isSpecification="false" isLeaf="false" isRoot="false" isAbstract="false" xmi.id="uhyzT2pkYKBBR" name="bool" namespace="Datatypes" visibility="public"/>
<UML:DataType isSpecification="false" isLeaf="false" isRoot="false" isAbstract="false" xmi.id="uEkoxyIWUGBxw" name="string" namespace="Datatypes" visibility="public"/>
<UML:DataType isSpecification="false" isLeaf="false" isRoot="false" isAbstract="false" xmi.id="uCSF41T3WlIgF" name="unsigned char" namespace="Datatypes" visibility="public"/>
<UML:DataType isSpecification="false" isLeaf="false" isRoot="false" isAbstract="false" xmi.id="uzHPQzanF3FRr" name="signed char" namespace="Datatypes" visibility="public"/>
<UML:DataType isSpecification="false" isLeaf="false" isRoot="false" isAbstract="false" xmi.id="uEACWVVA2GTJ2" name="unsigned int" namespace="Datatypes" visibility="public"/>
<UML:DataType isSpecification="false" isLeaf="false" isRoot="false" isAbstract="false" xmi.id="ugnGrUtRaLzLS" name="signed int" namespace="Datatypes" visibility="public"/>
<UML:DataType isSpecification="false" isLeaf="false" isRoot="false" isAbstract="false" xmi.id="uWrW4nTZx1hbW" name="short int" namespace="Datatypes" visibility="public"/>
<UML:DataType isSpecification="false" isLeaf="false" isRoot="false" isAbstract="false" xmi.id="uNFkzVs7Zwwfs" name="unsigned short int" namespace="Datatypes" visibility="public"/>
<UML:DataType isSpecification="false" isLeaf="false" isRoot="false" isAbstract="false" xmi.id="uxqVGiRxQv7MA" name="signed short int" namespace="Datatypes" visibility="public"/>
<UML:DataType isSpecification="false" isLeaf="false" isRoot="false" isAbstract="false" xmi.id="urq4kUFkyJY9Q" name="long int" namespace="Datatypes" visibility="public"/>
<UML:DataType isSpecification="false" isLeaf="false" isRoot="false" isAbstract="false" xmi.id="uRvf7xFOZxziZ" name="signed long int" namespace="Datatypes" visibility="public"/>
<UML:DataType isSpecification="false" isLeaf="false" isRoot="false" isAbstract="false" xmi.id="ugj81WWzgRHiz" name="unsigned long int" namespace="Datatypes" visibility="public"/>
<UML:DataType isSpecification="false" isLeaf="false" isRoot="false" isAbstract="false" xmi.id="uiOC6ZXiav4iM" name="long double" namespace="Datatypes" visibility="public"/>
<UML:DataType isSpecification="false" isLeaf="false" isRoot="false" isAbstract="false" xmi.id="uCcd84gRBkXtK" name="wchar_t" namespace="Datatypes" visibility="public"/>
</UML:Namespace.ownedElement>
</UML:Package>
<UML:Class isSpecification="false" isLeaf="false" isRoot="false" isAbstract="false" xmi.id="uYd9HMvrZr333" name="Instalación" namespace="Logical_View" visibility="public">
<UML:Classifier.feature>
<UML:Attribute isSpecification="false" xmi.id="u7s8k2kdD6OkX" name="id" visibility="private" type="un1Own0e2LUzQ"/>
<UML:Attribute isSpecification="false" xmi.id="uBRkHMFILWklg" name="nombre" visibility="private" type="uEkoxyIWUGBxw"/>
</UML:Classifier.feature>
</UML:Class>
<UML:Class isSpecification="false" isLeaf="false" isRoot="false" isAbstract="false" xmi.id="ueP06PKTw5jdA" name="Horario" namespace="Logical_View" visibility="public">
<UML:Classifier.feature>
<UML:Attribute isSpecification="false" xmi.id="uXii89V2wCqt9" name="instalacion" visibility="private" type="uYd9HMvrZr333"/>
<UML:Attribute isSpecification="false" xmi.id="urlSX9jiyK3Ng" name="hora_inicio" visibility="private" type="uUIkhdPLPXUtH"/>
<UML:Attribute isSpecification="false" xmi.id="uo0PU4cpYt6x8" name="hora_fin" visibility="private" type="uUIkhdPLPXUtH"/>
</UML:Classifier.feature>
</UML:Class>
<UML:Class isSpecification="false" isLeaf="false" isRoot="false" isAbstract="false" xmi.id="uCMsEdBAaFHtK" name="Usuario" namespace="Logical_View" visibility="public">
<UML:Classifier.feature>
<UML:Attribute isSpecification="false" xmi.id="uVflo1ChEz9t5" name="id" visibility="private" type="un1Own0e2LUzQ"/>
<UML:Attribute isSpecification="false" xmi.id="uXQubPCQOjamE" name="username" visibility="private" type="uEkoxyIWUGBxw"/>
<UML:Attribute isSpecification="false" xmi.id="u0FlGAWcuLPb3" name="password" visibility="private" type="uEkoxyIWUGBxw"/>
<UML:Attribute isSpecification="false" xmi.id="uBpQqnJdMq1C7" name="email" visibility="private" type="uEkoxyIWUGBxw"/>
<UML:Attribute isSpecification="false" xmi.id="u8VcPKLIIDaAH" name="activo" visibility="private" type="uhyzT2pkYKBBR"/>
</UML:Classifier.feature>
</UML:Class>
<UML:Class isSpecification="false" isLeaf="false" isRoot="false" isAbstract="false" xmi.id="udji3tqu0BFrq" name="Reserva" namespace="Logical_View" visibility="public">
<UML:Classifier.feature>
<UML:Attribute isSpecification="false" xmi.id="uvDZr7DFp4veg" name="usuario" visibility="private" type="uCMsEdBAaFHtK"/>
<UML:Attribute isSpecification="false" xmi.id="uGxFO1PB6DRg8" name="Horario" visibility="private" type="ueP06PKTw5jdA"/>
<UML:Attribute isSpecification="false" xmi.id="uzOI2t6V59ZgO" name="fecha" visibility="private" type="ufxtncD5g1d6P"/>
</UML:Classifier.feature>
</UML:Class>
<UML:Class isSpecification="false" isLeaf="false" isRoot="false" isAbstract="false" xmi.id="ufxtncD5g1d6P" name="Date" namespace="Logical_View" visibility="public"/>
<UML:Class isSpecification="false" isLeaf="false" isRoot="false" isAbstract="false" xmi.id="uUIkhdPLPXUtH" name="Time" namespace="Logical_View" visibility="public"/>
<UML:Association isSpecification="false" xmi.id="uOjDzkbZqShgI" name="" namespace="Logical_View" visibility="public">
<UML:Association.connection>
<UML:AssociationEnd isSpecification="false" xmi.id="uF1BeEQYtRefZ" name="" visibility="public" type="uA0NxTXHQFo17" aggregation="none" isNavigable="true" visibility="public" changeability="changeable"/>
<UML:AssociationEnd isSpecification="false" xmi.id="u4cAjAaqi2w7b" name="" visibility="public" type="uDtCO2SUagD0Y" aggregation="none" isNavigable="true" visibility="public" changeability="changeable"/>
</UML:Association.connection>
</UML:Association>
<UML:Association isSpecification="false" xmi.id="uhR7TQBi7taz6" name="" namespace="Logical_View" visibility="public">
<UML:Association.connection>
<UML:AssociationEnd isSpecification="false" xmi.id="u7rNjKjszOXeA" name="" visibility="public" type="uA0NxTXHQFo17" aggregation="none" isNavigable="true" visibility="public" changeability="changeable"/>
<UML:AssociationEnd isSpecification="false" xmi.id="umlCRtVgTT8Qh" name="" visibility="public" type="uJBcBeOsNiHz1" aggregation="none" isNavigable="true" visibility="public" changeability="changeable"/>
</UML:Association.connection>
</UML:Association>
<UML:Association isSpecification="false" xmi.id="u37LvNrQUvT5w" name="" namespace="Logical_View" visibility="public">
<UML:Association.connection>
<UML:AssociationEnd isSpecification="false" xmi.id="uXo0MUGXiRfN5" name="" visibility="public" type="uA0NxTXHQFo17" aggregation="none" isNavigable="true" visibility="public" changeability="changeable"/>
<UML:AssociationEnd isSpecification="false" xmi.id="uG6C2p6gVLoCT" name="" visibility="public" type="uyJFWesdHWOQ6" aggregation="none" isNavigable="true" visibility="public" changeability="changeable"/>
</UML:Association.connection>
</UML:Association>
<UML:Association isSpecification="false" xmi.id="u3HEm2g8Q9Fu0" name="" namespace="Logical_View" visibility="public">
<UML:Association.connection>
<UML:AssociationEnd isSpecification="false" xmi.id="u2v55RYP7iXFa" name="" visibility="public" type="uA0NxTXHQFo17" aggregation="none" isNavigable="true" visibility="public" changeability="changeable"/>
<UML:AssociationEnd isSpecification="false" xmi.id="uD9KuoDnk8RdT" name="" visibility="public" type="uwSHO4YOFfx3o" aggregation="none" isNavigable="true" visibility="public" changeability="changeable"/>
</UML:Association.connection>
</UML:Association>
<UML:Association isSpecification="false" xmi.id="u7CTHwQd5nMHM" name="" namespace="Logical_View" visibility="public">
<UML:Association.connection>
<UML:AssociationEnd isSpecification="false" xmi.id="ubVrUd8CUjpAS" name="" visibility="public" type="u3m1SPGrJ8TDp" aggregation="none" isNavigable="true" visibility="public" changeability="changeable"/>
<UML:AssociationEnd isSpecification="false" xmi.id="udFdBYUozIEcF" name="" visibility="public" type="ukaO4ZT2xWuLV" aggregation="none" isNavigable="true" visibility="public" changeability="changeable"/>
</UML:Association.connection>
</UML:Association>
<UML:Association isSpecification="false" xmi.id="uTstLYd917VyX" name="" namespace="Logical_View" visibility="public">
<UML:Association.connection>
<UML:AssociationEnd isSpecification="false" xmi.id="uaxEPR97eylz8" name="" visibility="public" type="u3m1SPGrJ8TDp" aggregation="none" isNavigable="true" visibility="public" changeability="changeable"/>
<UML:AssociationEnd isSpecification="false" xmi.id="uHrTAea47Hisu" name="" visibility="public" type="uiSSjIpod82oT" aggregation="none" isNavigable="true" visibility="public" changeability="changeable"/>
</UML:Association.connection>
</UML:Association>
<UML:Association isSpecification="false" xmi.id="uZUYFKUieHiCI" name="" namespace="Logical_View" visibility="public">
<UML:Association.connection>
<UML:AssociationEnd isSpecification="false" xmi.id="uPdP7KqXBI61y" name="" visibility="public" type="unoZYPgwDs5Js" aggregation="none" isNavigable="true" visibility="public" changeability="changeable"/>
<UML:AssociationEnd isSpecification="false" xmi.id="uarWx2ZTkfSPs" name="" visibility="public" type="uJ3quxvltoENZ" aggregation="none" isNavigable="true" visibility="public" changeability="changeable"/>
</UML:Association.connection>
</UML:Association>
<UML:Dependency isSpecification="false" xmi.id="uy1FOy0kUHxK3" name="" namespace="Logical_View" visibility="public" client="uDtCO2SUagD0Y" supplier="uAZNoDWikeo8V"/>
<UML:Dependency isSpecification="false" xmi.id="uvHVDehAZ1fTh" name="" namespace="Logical_View" visibility="public" client="uJBcBeOsNiHz1" supplier="uAZNoDWikeo8V"/>
<UML:Dependency isSpecification="false" xmi.id="ufbVe2M4TQfsh" name="" namespace="Logical_View" visibility="public" client="uyJFWesdHWOQ6" supplier="uAZNoDWikeo8V"/>
<UML:Dependency isSpecification="false" xmi.id="uQyAK40yfJuPf" name="" namespace="Logical_View" visibility="public" client="uwSHO4YOFfx3o" supplier="uAZNoDWikeo8V"/>
<UML:Dependency isSpecification="false" xmi.id="ueCgLiOg1JgNy" name="" namespace="Logical_View" visibility="public" client="uJ3quxvltoENZ" supplier="uAZNoDWikeo8V"/>
<UML:Dependency isSpecification="false" xmi.id="u7fj1dySZ1nOz" name="" namespace="Logical_View" visibility="public" client="uiSSjIpod82oT" supplier="uAZNoDWikeo8V"/>
<UML:Dependency isSpecification="false" xmi.id="ufZXkVa3GBK1n" name="" namespace="Logical_View" visibility="public" client="ukaO4ZT2xWuLV" supplier="uAZNoDWikeo8V"/>
<UML:Association isSpecification="false" xmi.id="u6kq3AXi8uZQA" name="" namespace="Logical_View" visibility="public">
<UML:Association.connection>
<UML:AssociationEnd isSpecification="false" xmi.id="ufEgHaV75czEB" name="" visibility="public" type="unoZYPgwDs5Js" aggregation="none" isNavigable="true" visibility="public" changeability="changeable"/>
<UML:AssociationEnd isSpecification="false" xmi.id="uDjXGjVv3KV69" name="" visibility="public" type="ukaO4ZT2xWuLV" aggregation="none" isNavigable="true" visibility="public" changeability="changeable"/>
</UML:Association.connection>
</UML:Association>
<UML:Association isSpecification="false" xmi.id="urR9hq4qTww5q" name="" namespace="Logical_View" visibility="public">
<UML:Association.connection>
<UML:AssociationEnd isSpecification="false" xmi.id="u4UoPz2vqt8z4" name="" visibility="public" type="unoZYPgwDs5Js" aggregation="none" isNavigable="true" visibility="public" changeability="changeable"/>
<UML:AssociationEnd isSpecification="false" xmi.id="ulQoSO25Z6UO5" name="" visibility="public" type="u5yy9HVv6wqzz" aggregation="none" isNavigable="true" visibility="public" changeability="changeable"/>
</UML:Association.connection>
</UML:Association>
</UML:Namespace.ownedElement>
<XMI.extension xmi.extender="umbrello">
<diagrams resolution="96">
<diagram xmi.id="ulu8abThn41bo" name="diagrama de clases" type="1" documentation="" backgroundcolor="#ffffff" fillcolor="#ffffc0" font="Ubuntu,10,-1,5,50,0,0,0,0,0" griddotcolor="#d3d3d3" linecolor="#990000" linewidth="0" textcolor="#000000" usefillcolor="1" showattribassocs="1" showatts="1" showattsig="1" showops="1" showopsig="1" showpackage="1" showpubliconly="0" showscope="1" showstereotype="2" localid="-1" showgrid="0" snapgrid="0" snapcsgrid="0" snapx="25" snapy="25" zoom="134" canvasheight="458" canvaswidth="387" isopen="1">
<widgets>
<classwidget xmi.id="uCMsEdBAaFHtK" localid="uIpnLVpweVGQU" textcolor="#000000" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="0" usesdiagramusefillcolor="0" fillcolor="#ffffc0" font="Ubuntu,10,-1,5,50,0,0,0,0,0,Regular" autoresize="1" x="31" y="-676" width="119" height="97" isinstance="0" showstereotype="2" showoperations="1" showpubliconly="0" showopsigs="601" showpackage="1" showscope="1" showattributes="1" showattsigs="601" showstereotype="2"/>
<classwidget xmi.id="ueP06PKTw5jdA" localid="u6NvV44fZ1Izd" textcolor="#000000" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="0" usesdiagramusefillcolor="0" fillcolor="#ffffc0" font="Ubuntu,10,-1,5,50,0,0,0,0,0" autoresize="1" x="29" y="-399" width="153" height="67" isinstance="0" showstereotype="2" showoperations="1" showpubliconly="0" showopsigs="601" showpackage="1" showscope="1" showattributes="1" showattsigs="601" showstereotype="2"/>
<classwidget xmi.id="uYd9HMvrZr333" localid="uRJWI6l5IJCGq" textcolor="#000000" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="0" usesdiagramusefillcolor="0" fillcolor="#ffffc0" font="Ubuntu,10,-1,5,50,0,0,0,0,0" autoresize="1" x="-205" y="-270" width="107" height="52" isinstance="0" showstereotype="2" showoperations="1" showpubliconly="0" showopsigs="601" showpackage="1" showscope="1" showattributes="1" showattsigs="601" showstereotype="2"/>
<classwidget xmi.id="udji3tqu0BFrq" localid="uB7dtkjXtyKo1" textcolor="#000000" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="0" usesdiagramusefillcolor="0" fillcolor="#ffffc0" font="Ubuntu,10,-1,5,50,0,0,0,0,0" autoresize="1" x="-178" y="-545" width="116" height="67" isinstance="0" showstereotype="2" showoperations="1" showpubliconly="0" showopsigs="601" showpackage="1" showscope="1" showattributes="1" showattsigs="601" showstereotype="2"/>
</widgets>
<messages/>
<associations>
<assocwidget xmi.id="uXii89V2wCqt9" localid="uPDTmdoDpmUDG" textcolor="none" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Ubuntu,10,-1,5,50,0,0,0,0,0" autoresize="1" seqnum="" xmi.id="uXii89V2wCqt9" type="510" visibilityA="1" visibilityB="1" changeabilityA="900" changeabilityB="900" widgetaid="ueP06PKTw5jdA" widgetbid="uYd9HMvrZr333" indexa="1" totalcounta="2" indexb="1" totalcountb="2">
<floatingtext xmi.id="uwcTwUgzWEk00" localid="un7NyfBuuCdoF" textcolor="none" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Ubuntu,10,-1,5,50,0,0,0,0,0" autoresize="1" x="-96" y="-291" width="75" height="19" isinstance="0" showstereotype="2" text="instalacion" pretext="-" posttext="" role="710"/>
<linepath layout="Direct">
<startpoint startx="29" starty="-332"/>
<endpoint endx="-98" endy="-270"/>
</linepath>
</assocwidget>
<assocwidget xmi.id="uvDZr7DFp4veg" localid="u5d9TOFhoRkWO" textcolor="none" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Ubuntu,10,-1,5,50,0,0,0,0,0" autoresize="1" seqnum="" xmi.id="uvDZr7DFp4veg" type="510" visibilityA="1" visibilityB="1" changeabilityA="900" changeabilityB="900" widgetaid="udji3tqu0BFrq" widgetbid="uCMsEdBAaFHtK" indexa="1" totalcounta="2" indexb="1" totalcountb="2">
<floatingtext xmi.id="umGE74IeFCybz" localid="uqKhIvUYbL4Mq" textcolor="none" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Ubuntu,10,-1,5,50,0,0,0,0,0" autoresize="1" x="-22" y="-577" width="55" height="19" isinstance="0" showstereotype="2" text="usuario" pretext="-" posttext="" role="710"/>
<linepath layout="Direct">
<startpoint startx="-62" starty="-545"/>
<endpoint endx="31" endy="-579"/>
</linepath>
</assocwidget>
<assocwidget xmi.id="uGxFO1PB6DRg8" localid="uOedjc5RtWjzt" textcolor="none" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Ubuntu,10,-1,5,50,0,0,0,0,0" autoresize="1" seqnum="" xmi.id="uGxFO1PB6DRg8" type="510" visibilityA="1" visibilityB="1" changeabilityA="900" changeabilityB="900" widgetaid="udji3tqu0BFrq" widgetbid="ueP06PKTw5jdA" indexa="1" totalcounta="2" indexb="1" totalcountb="2">
<floatingtext xmi.id="uWoIah70U2cK4" localid="uk3begHsjHEWl" textcolor="none" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Ubuntu,10,-1,5,50,0,0,0,0,0" autoresize="1" x="-26" y="-420" width="56" height="19" isinstance="0" showstereotype="2" text="Horario" pretext="-" posttext="" role="710"/>
<linepath layout="Direct">
<startpoint startx="-62" starty="-478"/>
<endpoint endx="29" endy="-399"/>
</linepath>
</assocwidget>
</associations>
</diagram>
</diagrams>
</XMI.extension>
</UML:Model>
<UML:Model isSpecification="false" isLeaf="false" isRoot="false" isAbstract="false" xmi.id="Use_Case_View" name="Use Case View" namespace="m1" visibility="public">
<UML:Namespace.ownedElement>
<UML:Actor isSpecification="false" isLeaf="false" isRoot="false" isAbstract="false" xmi.id="unoZYPgwDs5Js" name="usuario" namespace="Use_Case_View" visibility="public"/>
<UML:Actor isSpecification="false" isLeaf="false" isRoot="false" isAbstract="false" xmi.id="uA0NxTXHQFo17" name="administrador" namespace="Use_Case_View" visibility="public"/>
<UML:Actor isSpecification="false" isLeaf="false" isRoot="false" isAbstract="false" xmi.id="u3m1SPGrJ8TDp" name="mantenimiento" namespace="Use_Case_View" visibility="public"/>
<UML:UseCase isSpecification="false" isLeaf="false" isRoot="false" isAbstract="false" xmi.id="uDtCO2SUagD0Y" name="CRUD INSTALACION" namespace="Use_Case_View" visibility="public"/>
<UML:UseCase isSpecification="false" isLeaf="false" isRoot="false" isAbstract="false" xmi.id="uJBcBeOsNiHz1" name="CRUD HORARIOS" namespace="Use_Case_View" visibility="public"/>
<UML:UseCase isSpecification="false" isLeaf="false" isRoot="false" isAbstract="false" xmi.id="uyJFWesdHWOQ6" name="CRUD RESERVAS" namespace="Use_Case_View" visibility="public"/>
<UML:UseCase isSpecification="false" isLeaf="false" isRoot="false" isAbstract="false" xmi.id="uwSHO4YOFfx3o" name="CRUD USUARIOS" namespace="Use_Case_View" visibility="public"/>
<UML:UseCase isSpecification="false" isLeaf="false" isRoot="false" isAbstract="false" xmi.id="ukaO4ZT2xWuLV" name="(R) INSTALACION" namespace="Use_Case_View" visibility="public"/>
<UML:UseCase isSpecification="false" isLeaf="false" isRoot="false" isAbstract="false" xmi.id="uiSSjIpod82oT" name="(R) RESERVA" namespace="Use_Case_View" visibility="public"/>
<UML:UseCase isSpecification="false" isLeaf="false" isRoot="false" isAbstract="false" xmi.id="uJ3quxvltoENZ" name="CRUD (su) RESERVA" namespace="Use_Case_View" visibility="public"/>
<UML:UseCase isSpecification="false" isLeaf="false" isRoot="false" isAbstract="false" xmi.id="uAZNoDWikeo8V" name="login" namespace="Use_Case_View" visibility="public"/>
<UML:UseCase isSpecification="false" isLeaf="false" isRoot="false" isAbstract="false" xmi.id="u5yy9HVv6wqzz" name="(R) HORARIO" namespace="Use_Case_View" visibility="public"/>
<UML:Association isSpecification="false" xmi.id="ubCTOZ355QjZ5" name="" namespace="Use_Case_View" visibility="public">
<UML:Association.connection>
<UML:AssociationEnd isSpecification="false" xmi.id="uKzJYo98sNxLA" name="" visibility="public" type="uA0NxTXHQFo17" aggregation="none" isNavigable="true" visibility="public" changeability="changeable"/>
<UML:AssociationEnd isSpecification="false" xmi.id="uRGYVYLpOMxU9" name="" visibility="public" type="uJBcBeOsNiHz1" aggregation="none" isNavigable="true" visibility="public" changeability="changeable"/>
</UML:Association.connection>
</UML:Association>
<UML:Association isSpecification="false" xmi.id="u13BZ25wbrjok" name="" namespace="Use_Case_View" visibility="public">
<UML:Association.connection>
<UML:AssociationEnd isSpecification="false" xmi.id="ulEa0O2r3Vynk" name="" visibility="public" type="uA0NxTXHQFo17" aggregation="none" isNavigable="true" visibility="public" changeability="changeable"/>
<UML:AssociationEnd isSpecification="false" xmi.id="uvhsBGIBPQufp" name="" visibility="public" type="uDtCO2SUagD0Y" aggregation="none" isNavigable="true" visibility="public" changeability="changeable"/>
</UML:Association.connection>
</UML:Association>
<UML:Association isSpecification="false" xmi.id="ugLRuciYSbVJP" name="" namespace="Use_Case_View" visibility="public">
<UML:Association.connection>
<UML:AssociationEnd isSpecification="false" xmi.id="uwBIpnZJM3X1P" name="" visibility="public" type="uA0NxTXHQFo17" aggregation="none" isNavigable="true" visibility="public" changeability="changeable"/>
<UML:AssociationEnd isSpecification="false" xmi.id="uFmShhEeWxNuB" name="" visibility="public" type="uwSHO4YOFfx3o" aggregation="none" isNavigable="true" visibility="public" changeability="changeable"/>
</UML:Association.connection>
</UML:Association>
<UML:Association isSpecification="false" xmi.id="u4c76E0q3tI4p" name="" namespace="Use_Case_View" visibility="public">
<UML:Association.connection>
<UML:AssociationEnd isSpecification="false" xmi.id="uFX6EPm8AVIjy" name="" visibility="public" type="uA0NxTXHQFo17" aggregation="none" isNavigable="true" visibility="public" changeability="changeable"/>
<UML:AssociationEnd isSpecification="false" xmi.id="urY4NUmXnhKfL" name="" visibility="public" type="uyJFWesdHWOQ6" aggregation="none" isNavigable="true" visibility="public" changeability="changeable"/>
</UML:Association.connection>
</UML:Association>
<UML:Association isSpecification="false" xmi.id="uA9UGjKmo3xAQ" name="" namespace="Use_Case_View" visibility="public">
<UML:Association.connection>
<UML:AssociationEnd isSpecification="false" xmi.id="utGTr5Czfz6ZY" name="" visibility="public" type="u3m1SPGrJ8TDp" aggregation="none" isNavigable="true" visibility="public" changeability="changeable"/>
<UML:AssociationEnd isSpecification="false" xmi.id="uzAnwBi6TJcSl" name="" visibility="public" type="uiSSjIpod82oT" aggregation="none" isNavigable="true" visibility="public" changeability="changeable"/>
</UML:Association.connection>
</UML:Association>
<UML:Association isSpecification="false" xmi.id="uZXZOsOkqbq5B" name="" namespace="Use_Case_View" visibility="public">
<UML:Association.connection>
<UML:AssociationEnd isSpecification="false" xmi.id="uBktnbXzYfsXw" name="" visibility="public" type="u3m1SPGrJ8TDp" aggregation="none" isNavigable="true" visibility="public" changeability="changeable"/>
<UML:AssociationEnd isSpecification="false" xmi.id="u4cvyOykVMKCf" name="" visibility="public" type="u5yy9HVv6wqzz" aggregation="none" isNavigable="true" visibility="public" changeability="changeable"/>
</UML:Association.connection>
</UML:Association>
<UML:Association isSpecification="false" xmi.id="u0aLPtAmkE9tx" name="" namespace="Use_Case_View" visibility="public">
<UML:Association.connection>
<UML:AssociationEnd isSpecification="false" xmi.id="u1dwS1lHX8lNf" name="" visibility="public" type="u3m1SPGrJ8TDp" aggregation="none" isNavigable="true" visibility="public" changeability="changeable"/>
<UML:AssociationEnd isSpecification="false" xmi.id="u3zdErGY169b4" name="" visibility="public" type="ukaO4ZT2xWuLV" aggregation="none" isNavigable="true" visibility="public" changeability="changeable"/>
</UML:Association.connection>
</UML:Association>
<UML:Association isSpecification="false" xmi.id="uYiZExm9ceM1o" name="" namespace="Use_Case_View" visibility="public">
<UML:Association.connection>
<UML:AssociationEnd isSpecification="false" xmi.id="uvzSsSAejPatM" name="" visibility="public" type="unoZYPgwDs5Js" aggregation="none" isNavigable="true" visibility="public" changeability="changeable"/>
<UML:AssociationEnd isSpecification="false" xmi.id="uVPCXiCAjhsgN" name="" visibility="public" type="uJ3quxvltoENZ" aggregation="none" isNavigable="true" visibility="public" changeability="changeable"/>
</UML:Association.connection>
</UML:Association>
<UML:Association isSpecification="false" xmi.id="u60gImm2QS8dk" name="" namespace="Use_Case_View" visibility="public">
<UML:Association.connection>
<UML:AssociationEnd isSpecification="false" xmi.id="uBH0t2f28ff6V" name="" visibility="public" type="unoZYPgwDs5Js" aggregation="none" isNavigable="true" visibility="public" changeability="changeable"/>
<UML:AssociationEnd isSpecification="false" xmi.id="utz8HCPiLYEtr" name="" visibility="public" type="ukaO4ZT2xWuLV" aggregation="none" isNavigable="true" visibility="public" changeability="changeable"/>
</UML:Association.connection>
</UML:Association>
<UML:Association isSpecification="false" xmi.id="ufix94CaaRBvm" name="" namespace="Use_Case_View" visibility="public">
<UML:Association.connection>
<UML:AssociationEnd isSpecification="false" xmi.id="uvERC6RfCLIVt" name="" visibility="public" type="unoZYPgwDs5Js" aggregation="none" isNavigable="true" visibility="public" changeability="changeable"/>
<UML:AssociationEnd isSpecification="false" xmi.id="u9DPLtjTDPUSu" name="" visibility="public" type="u5yy9HVv6wqzz" aggregation="none" isNavigable="true" visibility="public" changeability="changeable"/>
</UML:Association.connection>
</UML:Association>
<UML:Dependency isSpecification="false" xmi.id="uPzoRQcxO8r5G" name="" namespace="Use_Case_View" visibility="public" client="uyJFWesdHWOQ6" supplier="uAZNoDWikeo8V"/>
<UML:Dependency isSpecification="false" xmi.id="udEdbmu5P9aYD" name="" namespace="Use_Case_View" visibility="public" client="uwSHO4YOFfx3o" supplier="uAZNoDWikeo8V"/>
<UML:Dependency isSpecification="false" xmi.id="uVi0hmM54Zmo4" name="" namespace="Use_Case_View" visibility="public" client="uDtCO2SUagD0Y" supplier="uAZNoDWikeo8V"/>
<UML:Dependency isSpecification="false" xmi.id="uciBueGSs0ABI" name="" namespace="Use_Case_View" visibility="public" client="uJBcBeOsNiHz1" supplier="uAZNoDWikeo8V"/>
<UML:Dependency isSpecification="false" xmi.id="umJMN1SEDEzW9" name="" namespace="Use_Case_View" visibility="public" client="uiSSjIpod82oT" supplier="uAZNoDWikeo8V"/>
<UML:Dependency isSpecification="false" xmi.id="uXn9KpoU002v0" name="" namespace="Use_Case_View" visibility="public" client="uJ3quxvltoENZ" supplier="uAZNoDWikeo8V"/>
</UML:Namespace.ownedElement>
<XMI.extension xmi.extender="umbrello">
<diagrams resolution="96">
<diagram xmi.id="u4tr09YwQV6V6" name="diagrama de casos de uso" type="2" documentation="" backgroundcolor="#ffffff" fillcolor="#ffffc0" font="Ubuntu,10,-1,5,50,0,0,0,0,0" griddotcolor="#d3d3d3" linecolor="#990000" linewidth="0" textcolor="#000000" usefillcolor="1" showattribassocs="1" showatts="1" showattsig="1" showops="1" showopsig="1" showpackage="1" showpubliconly="0" showscope="1" showstereotype="2" localid="-1" showgrid="0" snapgrid="0" snapcsgrid="0" snapx="25" snapy="25" zoom="114.783" canvasheight="583.248" canvaswidth="557.174" isopen="1">
<widgets>
<usecasewidget xmi.id="uDtCO2SUagD0Y" localid="uAeIWyQmI9Fim" textcolor="#000000" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="0" usesdiagramusefillcolor="0" fillcolor="#ffffc0" font="Ubuntu,10,-1,5,50,0,0,0,0,0" autoresize="1" x="-14966.3" y="-15644.6" width="136" height="50" isinstance="0" showstereotype="2"/>
<usecasewidget xmi.id="uyJFWesdHWOQ6" localid="uZSLWsPV7H8cN" textcolor="#000000" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="0" usesdiagramusefillcolor="0" fillcolor="#ffffc0" font="Ubuntu,10,-1,5,50,0,0,0,0,0" autoresize="1" x="-14974.7" y="-15538" width="115" height="50" isinstance="0" showstereotype="2"/>
<usecasewidget xmi.id="uiSSjIpod82oT" localid="uhEmuIdZbQMhe" textcolor="#000000" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="0" usesdiagramusefillcolor="0" fillcolor="#ffffc0" font="Ubuntu,10,-1,5,50,0,0,0,0,0" autoresize="1" x="-14749.3" y="-15466.9" width="91" height="50" isinstance="0" showstereotype="2"/>
<actorwidget xmi.id="uA0NxTXHQFo17" localid="uESLZFLfwgmDu" textcolor="#000000" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="0" usesdiagramusefillcolor="0" fillcolor="#ffffc0" font="Ubuntu,10,-1,5,50,0,0,0,0,0" autoresize="1" x="-15097.2" y="-15606.8" width="99" height="99" isinstance="0" showstereotype="2"/>
<usecasewidget xmi.id="uJ3quxvltoENZ" localid="u5d6nvgIGuadc" textcolor="#000000" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="0" usesdiagramusefillcolor="0" fillcolor="#ffffc0" font="Ubuntu,10,-1,5,50,0,0,0,0,0" autoresize="1" x="-15056.7" y="-15335.5" width="134" height="50" isinstance="0" showstereotype="2"/>
<usecasewidget xmi.id="uwSHO4YOFfx3o" localid="uVEh0cAtYqx2a" textcolor="#000000" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="0" usesdiagramusefillcolor="0" fillcolor="#ffffc0" font="Ubuntu,10,-1,5,50,0,0,0,0,0" autoresize="1" x="-14965.2" y="-15590.1" width="115" height="50" isinstance="0" showstereotype="2"/>
<usecasewidget xmi.id="ukaO4ZT2xWuLV" localid="uWQiHZKlb2QJu" textcolor="#000000" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="0" usesdiagramusefillcolor="0" fillcolor="#ffffc0" font="Ubuntu,10,-1,5,50,0,0,0,0,0" autoresize="1" x="-14781" y="-15234.7" width="118" height="50" isinstance="0" showstereotype="2"/>
<usecasewidget xmi.id="uJBcBeOsNiHz1" localid="ukGomvHp8Jvxi" textcolor="#000000" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="0" usesdiagramusefillcolor="0" fillcolor="#ffffc0" font="Ubuntu,10,-1,5,50,0,0,0,0,0" autoresize="1" x="-14959.5" y="-15701.4" width="118" height="50" isinstance="0" showstereotype="2"/>
<actorwidget xmi.id="unoZYPgwDs5Js" localid="ubmMzc83Er4UC" textcolor="#000000" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="0" usesdiagramusefillcolor="0" fillcolor="#ffffc0" font="Ubuntu,10,-1,5,50,0,0,0,0,0" autoresize="1" x="-14960.3" y="-15174.1" width="56" height="56" isinstance="0" showstereotype="2"/>
<usecasewidget xmi.id="u5yy9HVv6wqzz" localid="udhZQ0powph9f" textcolor="#000000" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="0" usesdiagramusefillcolor="0" fillcolor="#ffffc0" font="Ubuntu,10,-1,5,50,0,0,0,0,0" autoresize="1" x="-14807.5" y="-15307.3" width="93" height="50" isinstance="0" showstereotype="2"/>
<actorwidget xmi.id="u3m1SPGrJ8TDp" localid="uteDiTFVCi7ng" textcolor="#000000" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="0" usesdiagramusefillcolor="0" fillcolor="#ffffc0" font="Ubuntu,10,-1,5,50,0,0,0,0,0" autoresize="1" x="-14645" y="-15454.1" width="105" height="105" isinstance="0" showstereotype="2"/>
<usecasewidget xmi.id="uAZNoDWikeo8V" localid="uesQXmoog28pm" textcolor="#000000" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="0" usesdiagramusefillcolor="0" fillcolor="#ffffc0" font="Ubuntu,10,-1,5,50,0,0,0,0,0" autoresize="1" x="-14736.2" y="-15625.3" width="70" height="50" isinstance="0" showstereotype="2"/>
</widgets>
<messages/>
<associations>
<assocwidget xmi.id="uPzoRQcxO8r5G" localid="u2T70w38pFjGB" textcolor="none" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Ubuntu,10,-1,5,50,0,0,0,0,0" autoresize="1" seqnum="" xmi.id="uPzoRQcxO8r5G" type="502" widgetaid="uyJFWesdHWOQ6" widgetbid="uAZNoDWikeo8V" indexa="1" totalcounta="2" indexb="1" totalcountb="2">
<linepath layout="Direct">
<startpoint startx="-14859.7" starty="-15538"/>
<endpoint endx="-14736.2" endy="-15575.3"/>
</linepath>
</assocwidget>
<assocwidget xmi.id="udEdbmu5P9aYD" localid="uocZVFClq9q30" textcolor="none" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Ubuntu,10,-1,5,50,0,0,0,0,0" autoresize="1" seqnum="" xmi.id="udEdbmu5P9aYD" type="502" widgetaid="uwSHO4YOFfx3o" widgetbid="uAZNoDWikeo8V" indexa="1" totalcounta="2" indexb="1" totalcountb="2">
<linepath layout="Direct">
<startpoint startx="-14850.2" starty="-15575.3"/>
<endpoint endx="-14736.2" endy="-15575.3"/>
</linepath>
</assocwidget>
<assocwidget xmi.id="uXn9KpoU002v0" localid="ufbnMzU7h9MBh" textcolor="none" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Ubuntu,10,-1,5,50,0,0,0,0,0" autoresize="1" seqnum="" xmi.id="uXn9KpoU002v0" type="502" widgetaid="uJ3quxvltoENZ" widgetbid="uAZNoDWikeo8V" indexa="1" totalcounta="2" indexb="1" totalcountb="2">
<linepath layout="Direct">
<startpoint startx="-14922.7" starty="-15335.5"/>
<endpoint endx="-14736.2" endy="-15575.3"/>
</linepath>
</assocwidget>
<assocwidget xmi.id="u0aLPtAmkE9tx" localid="udxPV925HM5RM" textcolor="none" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Ubuntu,10,-1,5,50,0,0,0,0,0" autoresize="1" seqnum="" xmi.id="u0aLPtAmkE9tx" type="503" widgetaid="u3m1SPGrJ8TDp" widgetbid="ukaO4ZT2xWuLV" indexa="1" totalcounta="2" indexb="1" totalcountb="2">
<linepath layout="Direct">
<startpoint startx="-14645" starty="-15349.1"/>
<endpoint endx="-14663" endy="-15234.7"/>
</linepath>
</assocwidget>
<assocwidget xmi.id="uYiZExm9ceM1o" localid="uAAzZELyHo5q0" textcolor="none" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Ubuntu,10,-1,5,50,0,0,0,0,0" autoresize="1" seqnum="" xmi.id="uYiZExm9ceM1o" type="503" widgetaid="unoZYPgwDs5Js" widgetbid="uJ3quxvltoENZ" indexa="1" totalcounta="2" indexb="1" totalcountb="2">
<linepath layout="Direct">
<startpoint startx="-14956" starty="-15174.1"/>
<endpoint endx="-14956" endy="-15285.5"/>
</linepath>
</assocwidget>
<assocwidget xmi.id="umJMN1SEDEzW9" localid="udQmKKp5dCqy8" textcolor="none" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Ubuntu,10,-1,5,50,0,0,0,0,0" autoresize="1" seqnum="" xmi.id="umJMN1SEDEzW9" type="502" widgetaid="uiSSjIpod82oT" widgetbid="uAZNoDWikeo8V" indexa="1" totalcounta="2" indexb="1" totalcountb="2">
<linepath layout="Direct">
<startpoint startx="-14668" starty="-15466.9"/>
<endpoint endx="-14668" endy="-15575.3"/>
</linepath>
</assocwidget>
<assocwidget xmi.id="ugLRuciYSbVJP" localid="ujHnsW0e9OD8E" textcolor="none" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Ubuntu,10,-1,5,50,0,0,0,0,0" autoresize="1" seqnum="" xmi.id="ugLRuciYSbVJP" type="503" widgetaid="uA0NxTXHQFo17" widgetbid="uwSHO4YOFfx3o" indexa="1" totalcounta="2" indexb="1" totalcountb="2">
<linepath layout="Direct">
<startpoint startx="-14998.2" starty="-15540.1"/>
<endpoint endx="-14965.2" endy="-15540.1"/>
</linepath>
</assocwidget>
<assocwidget xmi.id="u4c76E0q3tI4p" localid="uB283KwmGc3DZ" textcolor="none" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Ubuntu,10,-1,5,50,0,0,0,0,0" autoresize="1" seqnum="" xmi.id="u4c76E0q3tI4p" type="503" widgetaid="uA0NxTXHQFo17" widgetbid="uyJFWesdHWOQ6" indexa="1" totalcounta="2" indexb="1" totalcountb="2">
<linepath layout="Direct">
<startpoint startx="-14998.2" starty="-15513"/>
<endpoint endx="-14974.7" endy="-15513"/>
</linepath>
</assocwidget>
<assocwidget xmi.id="uZXZOsOkqbq5B" localid="u4catfdkNx8zs" textcolor="none" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Ubuntu,10,-1,5,50,0,0,0,0,0" autoresize="1" seqnum="" xmi.id="uZXZOsOkqbq5B" type="503" widgetaid="u3m1SPGrJ8TDp" widgetbid="u5yy9HVv6wqzz" indexa="1" totalcounta="2" indexb="1" totalcountb="2">
<linepath layout="Direct">
<startpoint startx="-14645" starty="-15349.1"/>
<endpoint endx="-14714.5" endy="-15307.3"/>
</linepath>
</assocwidget>
<assocwidget xmi.id="uA9UGjKmo3xAQ" localid="u5pH7oElybYFO" textcolor="none" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Ubuntu,10,-1,5,50,0,0,0,0,0" autoresize="1" seqnum="" xmi.id="uA9UGjKmo3xAQ" type="503" widgetaid="u3m1SPGrJ8TDp" widgetbid="uiSSjIpod82oT" indexa="1" totalcounta="2" indexb="1" totalcountb="2">
<linepath layout="Direct">
<startpoint startx="-14645" starty="-15441.9"/>
<endpoint endx="-14658.3" endy="-15441.9"/>
</linepath>
</assocwidget>
<assocwidget xmi.id="u13BZ25wbrjok" localid="uL61VUlpzICyt" textcolor="none" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Ubuntu,10,-1,5,50,0,0,0,0,0" autoresize="1" seqnum="" xmi.id="u13BZ25wbrjok" type="503" widgetaid="uA0NxTXHQFo17" widgetbid="uDtCO2SUagD0Y" indexa="1" totalcounta="2" indexb="1" totalcountb="2">
<linepath layout="Direct">
<startpoint startx="-14998.2" starty="-15594.6"/>
<endpoint endx="-14966.3" endy="-15594.6"/>
</linepath>
</assocwidget>
<assocwidget xmi.id="u60gImm2QS8dk" localid="ucY04iupKPrrq" textcolor="none" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Ubuntu,10,-1,5,50,0,0,0,0,0" autoresize="1" seqnum="" xmi.id="u60gImm2QS8dk" type="503" widgetaid="unoZYPgwDs5Js" widgetbid="ukaO4ZT2xWuLV" indexa="1" totalcounta="2" indexb="1" totalcountb="2">
<linepath layout="Direct">
<startpoint startx="-14904.3" starty="-15174.1"/>
<endpoint endx="-14781" endy="-15184.7"/>
</linepath>
</assocwidget>
<assocwidget xmi.id="uVi0hmM54Zmo4" localid="ugGB3NUK6g1Rv" textcolor="none" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Ubuntu,10,-1,5,50,0,0,0,0,0" autoresize="1" seqnum="" xmi.id="uVi0hmM54Zmo4" type="502" widgetaid="uDtCO2SUagD0Y" widgetbid="uAZNoDWikeo8V" indexa="1" totalcounta="2" indexb="1" totalcountb="2">
<linepath layout="Direct">
<startpoint startx="-14830.3" starty="-15594.6"/>
<endpoint endx="-14736.2" endy="-15594.6"/>
</linepath>
</assocwidget>
<assocwidget xmi.id="ufix94CaaRBvm" localid="uQJSn7U3Hxi34" textcolor="none" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Ubuntu,10,-1,5,50,0,0,0,0,0" autoresize="1" seqnum="" xmi.id="ufix94CaaRBvm" type="503" widgetaid="unoZYPgwDs5Js" widgetbid="u5yy9HVv6wqzz" indexa="1" totalcounta="2" indexb="1" totalcountb="2">
<linepath layout="Direct">
<startpoint startx="-14904.3" starty="-15174.1"/>
<endpoint endx="-14807.5" endy="-15257.3"/>
</linepath>
</assocwidget>
<assocwidget xmi.id="ubCTOZ355QjZ5" localid="uIfCx0GCUnOjz" textcolor="none" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Ubuntu,10,-1,5,50,0,0,0,0,0" autoresize="1" seqnum="" xmi.id="ubCTOZ355QjZ5" type="503" widgetaid="uA0NxTXHQFo17" widgetbid="uJBcBeOsNiHz1" indexa="1" totalcounta="2" indexb="1" totalcountb="2">
<linepath layout="Direct">
<startpoint startx="-14998.2" starty="-15606.8"/>
<endpoint endx="-14959.5" endy="-15651.4"/>
</linepath>
</assocwidget>
<assocwidget xmi.id="uciBueGSs0ABI" localid="ucvXRsemZ5gVs" textcolor="none" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Ubuntu,10,-1,5,50,0,0,0,0,0" autoresize="1" seqnum="" xmi.id="uciBueGSs0ABI" type="502" widgetaid="uJBcBeOsNiHz1" widgetbid="uAZNoDWikeo8V" indexa="1" totalcounta="2" indexb="1" totalcountb="2">
<linepath layout="Direct">
<startpoint startx="-14841.5" starty="-15651.4"/>
<endpoint endx="-14736.2" endy="-15625.3"/>
</linepath>
</assocwidget>
</associations>
</diagram>
</diagrams>
</XMI.extension>
</UML:Model>
<UML:Model isSpecification="false" isLeaf="false" isRoot="false" isAbstract="false" xmi.id="Component_View" name="Component View" namespace="m1" visibility="public">
<UML:Namespace.ownedElement/>
</UML:Model>
<UML:Model isSpecification="false" isLeaf="false" isRoot="false" isAbstract="false" xmi.id="Deployment_View" name="Deployment View" namespace="m1" visibility="public">
<UML:Namespace.ownedElement/>
</UML:Model>
<UML:Model isSpecification="false" isLeaf="false" isRoot="false" isAbstract="false" xmi.id="Entity_Relationship_Model" name="Entity Relationship Model" namespace="m1" visibility="public">
<UML:Namespace.ownedElement/>
</UML:Model>
</UML:Namespace.ownedElement>
</UML:Model>
</XMI.content>
<XMI.extensions xmi.extender="umbrello">
<docsettings viewid="u4tr09YwQV6V6" documentation="" uniqueid="utXx8WtbJas1E"/>
<listview>
<listitem id="Views" type="800" open="1">
<listitem id="Entity_Relationship_Model" type="836" open="1"/>
<listitem id="Use_Case_View" type="802" open="1">
<listitem id="u5yy9HVv6wqzz" type="812" open="1"/>
<listitem id="ukaO4ZT2xWuLV" type="812" open="1"/>
<listitem id="uiSSjIpod82oT" type="812" open="1"/>
<listitem id="uA0NxTXHQFo17" type="811" open="1"/>
<listitem id="uJ3quxvltoENZ" type="812" open="1"/>
<listitem id="uJBcBeOsNiHz1" type="812" open="1"/>
<listitem id="uDtCO2SUagD0Y" type="812" open="1"/>
<listitem id="uyJFWesdHWOQ6" type="812" open="1"/>
<listitem id="uwSHO4YOFfx3o" type="812" open="1"/>
<listitem id="u6Q5LAceL5QXS" type="805" label="diagrama de casos de uso" open="0"/>
<listitem id="u4tr09YwQV6V6" type="805" label="diagrama de casos de uso" open="0"/>
<listitem id="uAZNoDWikeo8V" type="812" open="1"/>
<listitem id="u3m1SPGrJ8TDp" type="811" open="1"/>
<listitem id="unoZYPgwDs5Js" type="811" open="1"/>
</listitem>
<listitem id="Component_View" type="821" open="1"/>
<listitem id="Deployment_View" type="827" open="1"/>
<listitem id="Logical_View" type="801" open="1">
<listitem id="ufxtncD5g1d6P" type="813" open="1"/>
<listitem id="ulu8abThn41bo" type="807" label="diagrama de clases" open="0"/>
<listitem id="ueP06PKTw5jdA" type="813" open="1">
<listitem id="uo0PU4cpYt6x8" type="814" open="0"/>
<listitem id="urlSX9jiyK3Ng" type="814" open="0"/>
<listitem id="uXii89V2wCqt9" type="814" open="0"/>
</listitem>
<listitem id="uYd9HMvrZr333" type="813" open="1">
<listitem id="u7s8k2kdD6OkX" type="814" open="0"/>
<listitem id="uBRkHMFILWklg" type="814" open="0"/>
</listitem>
<listitem id="udji3tqu0BFrq" type="813" open="1">
<listitem id="uzOI2t6V59ZgO" type="814" open="0"/>
<listitem id="uGxFO1PB6DRg8" type="814" open="0"/>
<listitem id="uvDZr7DFp4veg" type="814" open="0"/>
</listitem>
<listitem id="uUIkhdPLPXUtH" type="813" open="1"/>
<listitem id="Datatypes" type="830" open="0">
<listitem id="uhyzT2pkYKBBR" type="829" open="0"/>
<listitem id="ulCueLQ90cdiL" type="829" open="0"/>
<listitem id="uELjF4oHly40A" type="829" open="0"/>
<listitem id="uNQnHXqlzvDeI" type="829" open="0"/>
<listitem id="un1Own0e2LUzQ" type="829" open="0"/>
<listitem id="uiOC6ZXiav4iM" type="829" open="0"/>
<listitem id="urq4kUFkyJY9Q" type="829" open="0"/>
<listitem id="uWrW4nTZx1hbW" type="829" open="0"/>
<listitem id="uzHPQzanF3FRr" type="829" open="0"/>
<listitem id="ugnGrUtRaLzLS" type="829" open="0"/>
<listitem id="uRvf7xFOZxziZ" type="829" open="0"/>
<listitem id="uxqVGiRxQv7MA" type="829" open="0"/>
<listitem id="uEkoxyIWUGBxw" type="829" open="0"/>
<listitem id="uCSF41T3WlIgF" type="829" open="0"/>
<listitem id="uEACWVVA2GTJ2" type="829" open="0"/>
<listitem id="ugj81WWzgRHiz" type="829" open="0"/>
<listitem id="uNFkzVs7Zwwfs" type="829" open="0"/>
<listitem id="uCcd84gRBkXtK" type="829" open="0"/>
</listitem>
<listitem id="uCMsEdBAaFHtK" type="813" open="1">
<listitem id="u8VcPKLIIDaAH" type="814" open="0"/>
<listitem id="uBpQqnJdMq1C7" type="814" open="0"/>
<listitem id="uVflo1ChEz9t5" type="814" open="0"/>
<listitem id="u0FlGAWcuLPb3" type="814" open="0"/>
<listitem id="uXQubPCQOjamE" type="814" open="0"/>
</listitem>
</listitem>
</listitem>
</listview>
<codegeneration>
<codegenerator language="C++"/>
</codegeneration>
</XMI.extensions>
</XMI>
......@@ -56,11 +56,11 @@
</dependency>
<!-- <dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
<version>3.0.1</version>
</dependency> -->
</dependency>
<dependency>
<groupId>org.hibernate.validator</groupId>
......
......@@ -26,4 +26,9 @@ public class GeneralController {
return "index";
}
/*@GetMapping("/login")
public String showlogin() {
return "login";
}*/
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment