Reto Final: Completando el CRUD
En el apartado anterior hemos sentado las bases de nuestra aplicación demoIntegracion. Hemos conseguido leer de la base de datos, navegar entre distintas pantallas e incluso insertar nuevos registros combinando datos entre ventanas mediante un formulario modal.
Sin embargo, una aplicación de gestión real no está terminada hasta que cuenta con todas sus operaciones CRUD (Crear, Leer, Actualizar, Borrar) para todas sus entidades.
Ha llegado el momento de que pongas a prueba todo lo aprendido. El reto final consiste en ampliar el proyecto base para que sea totalmente funcional. Deberás implementar de forma autónoma los siguientes requisitos:
1. Gestión Completa de Fabricantes
Actualmente, la pantalla fabricantes.fxml solo nos permite ver la lista y añadir un artículo a un fabricante.
Tu objetivo es dotarla de operaciones CRUD completas para la entidad Fabricante:
- Nuevo Fabricante: Añade un botón que abra una nueva ventana modal (tendrás que diseñar un
modal-fabricante.fxmlcon su correspondiente controlador). Este modal albergará un formulario sencillo para crear un fabricante (campos para elIDy elNombre). - Actualizar Fabricante: Añade un botón de edición. Al seleccionar un fabricante de la tabla y pulsar este botón, se debe abrir el mismo modal anterior, pero con los datos del fabricante pre-cargados en las cajas de texto y listos para modificarse. ¡Recuerda bloquear el campo ID como hicimos con los artículos!
- Borrar Fabricante: Añade un botón de borrado. Al pulsar este botón (teniendo un fabricante seleccionado en la tabla), deberás pedir confirmación al usuario utilizando un
Alertde tipoCONFIRMATION. Si el usuario acepta, procede a borrarlo de la base de datos utilizando el métodoeliminar()deFabricanteDAO.
Cuidado con las Claves Foráneas
Ten precaución al borrar fabricantes. Si intentas borrar un fabricante que actualmente tiene artículos asociados a él, la base de datos PostgreSQL lanzará una excepción debido a la restricción de la clave foránea id_fab. Deberás capturar este posible error (SQLException) desde Java y mostrar un Alert de error al usuario indicándole que "No se puede borrar un fabricante que tenga artículos en stock".

2. Gestión Completa de Artículos
Nuestra pantalla general articulos.fxml actualmente solo nos sirve a modo de listado visual. Debemos proporcionarle la interactividad que le falta:
- Actualizar Artículo: Añade un botón "Editar Artículo" en esta pantalla. Cuando el usuario seleccione una fila en la tabla de artículos y pulse el botón, se deberá abrir directamente nuestro formulario ya existente (
modal-articulo.fxml). A diferencia de cuando dábamos un alta (donde le pasábamos un artículo vacío con ID-1), aquí deberás pasarle al controlador del modal el objetoArticuloreal que has extraído de la tabla. Tras volver de la ventana, deberás ejecutar en tu base de datos unUPDATE(adao.actualizar(...)). - Borrar Artículo: Añade un botón "Eliminar Artículo". Al igual que con los fabricantes, debe comprobar primero que haya una fila seleccionada en el
TableView, mostrar un diálogo de confirmación de borrado, y llamar al métodoeliminar()deArticuloDAOen caso afirmativo.

Refrescando los TableView
Una vez que la base de datos se modifica, la tabla gráfica no se actualizará sola de forma mágica. Debes reflejar esos cambios. La vía más rápida para garantizar que tienes los datos idénticos a los de la BD es vaciar la tabla y volverla a llenar: