Este trabajo será realizado por:
- Fabián Sola Durán
- Antonio Pérez Serrano
El objetivo de este trabajo es la realización de un servicio de organización de eventos que permita a los usuarios crear eventos los cuáles estén asociados a ocupaciones asociadas a espacios físicos cercanos a ciertos puntos de interés.
Para ello, hemos utilizado el patrón Repositorio y el patrón Servicio además de métodos factoría para la creación de los mismos. Todo ello, utilizando el principio de inversión de dependencias.
Para la realización de los test hemos utilizado JUnit 5. Para ello, hemos creado una clase de test para cada clase Servicio de nuestro proyecto. En dichas clases de test, hemos creado una instancia de la clase Servicio a testear y hemos creado los test necesarios para comprobar que el servicio funciona correctamente.
Estos test hacen uso de la base de datos por lo que después de las ejecuciones de pruebas, se deja la base de datos vacía para su posterior uso. Es decir, Una vez puesto en funcionamiento nuestro programa NO DEBEN EJECUTARSE LOS TEST CON UNA CONEXIÓN A BASE DE DATOS DE PRODUCCIÓN YA QUE BORRARÍA SU CONTENIDO
Para probar el programa, hemos creado una clase PruebaPrograma en la que se crean instancias de las clases Servicio y Repositorio y se realizan las operaciones necesarias para comprobar que el programa funciona correctamente.
En este apartado añadiremos una guía para el uso correcto de nuestra aplicación en el que visualizaremos las distintas vistas que hemos definido y cómo se puede conseguir interactuar con ellas. Previo a realizar cualquier comprobación de la aplicación debemos de insertar en base de datos una serie de datos ficticios en la aplicación para poder interactuar con la misma. Se adjunta el script SQL que nosotros hemos utilizado para la realización de pruebas:
INSERT INTO espaciofisico
(id, nombre, propietario, capacidad, longitud, latitud, direccion, descripcion, estado)
VALUES
-- Inserciones para Fabián
('1', 'Auditorio Central', 'Fabián', 300, -103.349609, 20.659698, 'Av. Principal 123, Ciudad',
'Auditorio ideal para conferencias y eventos académicos.', 'ACTIVO'),
('2', 'Salón de Eventos Sociales', 'Fabián', 200, -103.360001, 20.650001,
'Calle Flores 456, Ciudad', 'Espacio perfecto para reuniones y celebraciones.', 'ACTIVO'),
('3', 'Centro de Convenciones', 'Fabián', 800, -103.370000, 20.640000,
'Av. Las Torres 789, Ciudad', 'Moderno centro para grandes exposiciones y ferias.', 'ACTIVO'),
('4', 'Galería de Arte Moderno', 'Fabián', 100, -103.365000, 20.645000, 'Av. Independencia 101, Ciudad', 'Galería con exposiciones de artistas contemporáneos.', 'ACTIVO'),
('5', 'Plaza de Exposiciones', 'Fabián', 500, -103.361111, 20.643333, 'Av. Expo 303, Ciudad',
'Plaza amplia para exposiciones al aire libre.', 'ACTIVO'),
-- Inserciones para Antonio
('6', 'Teatro Alameda', 'Antonio', 200, -103.351000, 20.661000,
'Av. Alameda 789, Ciudad', 'Teatro clásico para obras culturales.', 'ACTIVO'),
('7', 'Campo Deportivo Regional', 'Antonio', 600, -103.355555, 20.652222,
'Calle Campo Deportivo 123, Ciudad', 'Instalaciones para torneos y eventos deportivos.', 'ACTIVO'),
('8', 'Sala de Conferencias Empresarial', 'Antonio', 150, -103.357890, 20.648900,
'Edificio Empresarial 405, Ciudad', 'Sala equipada con tecnología moderna.', 'ACTIVO'),
('9', 'Parque Recreativo', 'Antonio', 400, -103.359999, 20.650123, 'Calle Parque 678, Ciudad',
'Espacio abierto para actividades recreativas y culturales.', 'ACTIVO'),
('10', 'Biblioteca Regional', 'Antonio', 250, -103.360987, 20.651456, 'Calle del Saber 202, Ciudad',
'Biblioteca con recursos extensos para estudiantes y académicos.', 'ACTIVO'),
-- Más inserciones para ambos
('11', 'Auditorio del Este', 'Fabián', 350, -103.340001, 20.659111, 'Av. Este 120, Ciudad',
'Espacio para eventos académicos y culturales.', 'ACTIVO'),
('12', 'Estadio del Norte', 'Antonio', 1200, -103.380500, 20.670300,
'Boulevard Norte 678, Ciudad', 'Gran estadio para eventos deportivos y conciertos.', 'ACTIVO'),
('13', 'Centro Cultural Municipal', 'Fabián', 180, -103.350456, 20.650789,
'Calle Cultura 345, Ciudad', 'Centro cultural con talleres y exposiciones.', 'ACTIVO'),
('14', 'Centro de Eventos Exclusivo', 'Antonio', 700, -103.351234, 20.651987,
'Calle Exclusiva 567, Ciudad', 'Espacio para eventos privados de alto perfil.', 'ACTIVO'),
('15', 'Zona Deportiva Olímpica', 'Fabián', 800, -103.362222, 20.644444, 'Av. Olímpica 432, Ciudad',
'Zona para competencias deportivas de alto nivel.', 'ACTIVO');El contenido de este script también se puede encontrar en la raíz del proyecto en el fichero "script_pruebas.sql".
Una vez hayamos insertado los distintos datos que hemos proporcionado podremos ejecutar la aplicación desde nuestro entorno eclipse utilizando como objetivo de dicha ejecución el servidor jetty tal y como nos han enseñado durante las prácticas de la asignatura. A continuación se irán adjuntando distintos pantallazos de nuestro proyecto e iremos explicando qué es lo que se puede hacer para interactuar con el mismo.
Aclarar que de forma opcional y porque nos parecía útil implementamos un bean para cambiar el idioma de la aplicación en cualquier momento utilizando un desplegable
La interfaz que hemos realizado para simular el inicio de sesión es la siguiente:
Como podemos ver dicha interfaz tiene un encabezado con el nombre de la aplicación y nos da la posibilidad de escribir nuestro nombre de usuario y, además, tiene un desplegable el cual tiene dos opciones, una primera opción es que iniciar sesión con rol organizador y un segundo rol para iniciar sesión como propietario. Pues lo dicho, vamos a realizar justo lo que hemos explicado, vamos a introducir un nombre y vamos a seleccionar nuestro rol.
Por último, tras haber completado esta información pulsamos en el inicio de sesión lo cual nos redirigirá a la siguiente vista.
La vista asociada a un propietario será la siguiente:
En esta vista como podemos ver encontramos diversos componentes en la interfaz coméntemoslos de arriba hacia abajo:
En la parte más superior de la interfaz encontramos un componente de primefaces llamado breadcrumb el cual nos servirá para asegurar la navegabilidad hacia atrás en nuestra aplicación y volver al inicio de sesión para poder realizar el cambio de rol de un usuario. Es decir, si pulsamos sobre el icono de la casa, volveremos a la interfaz de inicio de sesión Posteriormente, como ya hemos comentado, tenemos un desplegable el cual nos permitirá cambiar en cualquier momento el lenguaje de la aplicación Por último, tenemos una tabla la cual nos permitirá cambiar el estado de cualquier espacio físico del cual somos propietarios de la siguiente forma
Nos tendremos que situar en la fila en cuestión del espacio físico que queremos modificar su estado.
Y nos tendremos que situar en la columna correspondiente al estado y le daremos clic para que nos aparezca un desplegable con dos opciones de estado "ACTIVO" o "CERRADO_TEMPORALMENTE".
Una vez hayamos cambiado el estado al deseado pulsamos sobre el botón aplicar cambios y se nos informará de que se ha cambiado el estado de nuestro espacio físico con una notificación en la parte superior derecha de la pantalla tal y como se ve en la siguiente imagen.
Un organizador de eventos debe de tener la capacidad de dar alta eventos y, además, debe de tener la capacidad de poder buscar los espacios físicos donde va a realizar dichos eventos. Es por este motivo que ideamos la siguiente interfaz:
En esta interfaz, al igual que en la interfaz del propietario vamos a ir de arriba hacia abajo explicando los distintos componentes que encontramos en ella:
En primer lugar, al igual que en la interfaz del propietario encontramos un breadcrumb el cual nos sirve para asegurar la navegabilidad hacia atrás en nuestra aplicación y poder volver a la interfaz de inicio de sesión pulsando en el icono de la casita. Posteriormente, encontramos el desplegable de los idiomas en el que podemos seleccionar el idioma que deseamos utilizar. A continuación y en la misma fila encontramos tres componentes
-
Un selector de la fecha de inicio que es un componente de primefaces llamado DatePicker
-
Un selector de la fecha de fin de nuestro evento el cual también es un componente DatePicker de primefaces.
-
Un spinner también de la librería de primefaces el cual nos servirá para indicar la capacidad requerida para nuestro evento
Por último, tenemos una tabla donde nos saldrán todos los espacios físicos disponibles y con la capacidad mínima requerida en esas fechas para celebrar nuestro evento el cual vamos a crear y dar de alta a posteriori.
La manera de interactuar con la aplicación sería bastante simple.
Seleccionamos, fecha y hora de inicio y fecha y hora de fin.
Seleccionamos la capacidad mínima requerida y pulsamos en el botón "Buscar espacios físicos".
Puesto que en este caso de uso vamos a suponer que nuestro evento va a ser de caracter cultural decidimos escoger la biblioteca regional como espacio físico idóneo para nuestro evento. Por tanto, pulsamos sobre el botón "Crear un evento" de la fila cuyo nombre es "Biblioteca Regional".
Tras pulsar sobre dicho botón nos aparecerá una nueva vista la cual es un formulario que nos permitirá rellenar la información que falta para crear nuestro evento.
Como podemos ver en la anterior imagen, se nos ha autocompletado la información tanto de fecha de inicio, fecha de fin, el nombre del organizador y el número de plazas que inicialmente necesitábamos.
Por último, rellenamos toda la información necesaria para poder llevar a cabo la creación del evento (aclarar que categoría es un desplegable que contiene los tipos de eventos soportados):
Tras haber realizado, el rellenado de información, pulsaremos sobre "Crear evento" y la Biblioteca regional nos dejará de aparecer como espacio físico disponible en ese rango de fechas además de aparecernos la notificación pertinente de creación.











