From 5a1dd544ad41cf245a90d9cfd812649cadb919d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Cort=C3=A9s?= Date: Thu, 23 May 2019 13:10:24 -0400 Subject: [PATCH] Se creo un objeto que contiene la validacion y muestra el mensaje de error --- biblioteca.vpp | Bin 898048 -> 898048 bytes script.sql | 2 +- src/main/java/xyz/danielcortes/App.java | 3 +- .../autor/AutorCreateController.java | 20 +- .../autor/AutorSearchController.java | 7 +- .../autor/AutorUpdateController.java | 25 ++- .../categoria/CategoriaCreateController.java | 7 +- .../categoria/CategoriaSearchController.java | 7 +- .../categoria/CategoriaUpdateController.java | 47 +--- .../categoria/CategoriaViewController.java | 3 - .../editorial/EditorialCreateController.java | 7 +- .../editorial/EditorialSearchController.java | 6 +- .../editorial/EditorialUpdateController.java | 11 +- .../idioma/IdiomaCreateController.java | 6 +- .../idioma/IdiomaSearchController.java | 7 +- .../idioma/IdiomaUpdateController.java | 13 +- .../libro/LibroCreateController.java | 55 ++++- .../libro/LibroSearchController.java | 6 +- .../libro/LibroUpdateController.java | 63 +++++- .../framework/ValidationResult.java | 49 +++++ .../validator/AutorValidator.java | 80 ++----- .../validator/CategoriaValidator.java | 41 ++-- .../validator/EditorialValidator.java | 44 +--- .../validator/EjemplarValidator.java | 27 +-- .../validator/IdiomaValidator.java | 46 +--- .../validator/LibroValidator.java | 205 ++++-------------- .../xyz/danielcortes/views/LaunchFrame.java | 1 + 27 files changed, 372 insertions(+), 416 deletions(-) create mode 100644 src/main/java/xyz/danielcortes/framework/ValidationResult.java diff --git a/biblioteca.vpp b/biblioteca.vpp index 5feccf1385e95b19ee9506536b7da3271ff959f5..34f5a522731009550e32b73cf78f917430743567 100644 GIT binary patch delta 9059 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 UW%vIU6z9K0?fkw_P(}v(AAW6Mx&QzG delta 38548 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 idiomas = this.view.getIdiomasList().getSelectedValuesList(); - if(!validator.validateIdiomas(idiomas)) return; + ValidationResult idiomasValidation = this.validator.validateIdiomas(idiomas); + if(idiomasValidation.hasError()){ + idiomasValidation.showErrorDialog(); + return; + } List autores = this.view.getAutoresList().getSelectedValuesList(); - if(!validator.validateAutores(autores)) return; + ValidationResult autoresValidation = this.validator.validateAutores(autores); + if(autoresValidation.hasError()) { + autoresValidation.showErrorDialog(); + return; + } List categorias = this.view.getCategoriasList().getSelectedValuesList(); - if(!validator.validateCategorias(categorias)) return; + ValidationResult categoriasValidation = this.validator.validateCategorias(categorias); + if(categoriasValidation.hasError()){ + categoriasValidation.showErrorDialog(); + return; + } Editorial editorial = (Editorial) this.view.getEditorialCombo().getSelectedItem(); - if(!validator.validateEditorial(editorial)) return; + ValidationResult editorialValidation = this.validator.validateEditorial(editorial); + if(editorialValidation.hasError()){ + editorialValidation.showErrorDialog(); + return; + } Libro libro = new Libro(); libro.setIsbn(isbn); diff --git a/src/main/java/xyz/danielcortes/controllers/libro/LibroSearchController.java b/src/main/java/xyz/danielcortes/controllers/libro/LibroSearchController.java index 2a72958..8225c58 100644 --- a/src/main/java/xyz/danielcortes/controllers/libro/LibroSearchController.java +++ b/src/main/java/xyz/danielcortes/controllers/libro/LibroSearchController.java @@ -6,6 +6,7 @@ import xyz.danielcortes.controllers.BaseController; import xyz.danielcortes.controllers.LaunchController; import xyz.danielcortes.framework.BaseTableModel; import xyz.danielcortes.framework.PanelName; +import xyz.danielcortes.framework.ValidationResult; import xyz.danielcortes.models.Ejemplar; import xyz.danielcortes.models.Libro; import xyz.danielcortes.repository.EjemplarRepository; @@ -110,8 +111,11 @@ public class LibroSearchController extends BaseController { if (serie == null) return; - if (!this.ejemplarValidator.validateSerie(serie, libro.getId())) + ValidationResult ejemplarValidation = this.ejemplarValidator.validateSerie(serie, libro.getId()); + if (ejemplarValidation.hasError()){ + ejemplarValidation.showErrorDialog(); return; + } Ejemplar ejemplar = new Ejemplar(); ejemplar.setLibro(libro); diff --git a/src/main/java/xyz/danielcortes/controllers/libro/LibroUpdateController.java b/src/main/java/xyz/danielcortes/controllers/libro/LibroUpdateController.java index c4bf070..4a8074d 100644 --- a/src/main/java/xyz/danielcortes/controllers/libro/LibroUpdateController.java +++ b/src/main/java/xyz/danielcortes/controllers/libro/LibroUpdateController.java @@ -9,6 +9,7 @@ import xyz.danielcortes.controllers.BaseController; import xyz.danielcortes.controllers.LaunchController; import xyz.danielcortes.framework.JListUtils; import xyz.danielcortes.framework.PanelName; +import xyz.danielcortes.framework.ValidationResult; import xyz.danielcortes.models.Autor; import xyz.danielcortes.models.Categoria; import xyz.danielcortes.models.Editorial; @@ -86,37 +87,75 @@ public class LibroUpdateController extends BaseController { } private void update() { - // @formatter:off - if(!validator.validateLibro(libro)) return; + ValidationResult libroValidation = this.validator.validateLibro(this.libro); + if(libroValidation.hasError()){ + libroValidation.showErrorDialog(); + return; + } String isbn = this.view.getIsbnField().getText(); - if(!validator.validateISBN(isbn)) return; + ValidationResult isbnValidation = this.validator.validateISBN(isbn); + if(isbnValidation.hasError()){ + isbnValidation.showErrorDialog(); + return; + } isbn = isbn.replaceAll("[^\\d]", ""); String titulo = this.view.getTituloField().getText(); - if(!validator.validateTitulo(titulo)) return; + ValidationResult tituloValidation = this.validator.validateTitulo(titulo); + if(tituloValidation.hasError()){ + tituloValidation.showErrorDialog(); + return; + } String numeroPaginas = this.view.getPaginasField().getText(); - if(!validator.validateNumeroPaginas(numeroPaginas)) return; + ValidationResult numeroPaginasValidation = this.validator.validateNumeroPaginas(numeroPaginas); + if(numeroPaginasValidation.hasError()){ + numeroPaginasValidation.showErrorDialog(); + return; + } String anoPublicacion = this.view.getAnoPublicacionField().getText(); - if(!validator.validateAnoPublicacion(anoPublicacion)) return; + ValidationResult anoPublicacionValidation = this.validator.validateAnoPublicacion(anoPublicacion); + if(anoPublicacionValidation.hasError()){ + anoPublicacionValidation.showErrorDialog(); + return; + } String precioReferencial = this.view.getPrecioReferenciaField().getText(); - if(!validator.validatePrecioReferencia(precioReferencial)) return; + ValidationResult precioReferencialValidation = this.validator.validatePrecioReferencia(precioReferencial); + if(precioReferencialValidation.hasError()){ + precioReferencialValidation.showErrorDialog(); + return; + } List idiomas = this.view.getIdiomasList().getSelectedValuesList(); - if(!validator.validateIdiomas(idiomas)) return; + ValidationResult idiomasValidation = this.validator.validateIdiomas(idiomas); + if(idiomasValidation.hasError()){ + idiomasValidation.showErrorDialog(); + return; + } List autores = this.view.getAutoresList().getSelectedValuesList(); - if(!validator.validateAutores(autores)) return; + ValidationResult autoresValidation = this.validator.validateAutores(autores); + if(autoresValidation.hasError()) { + autoresValidation.showErrorDialog(); + return; + } List categorias = this.view.getCategoriasList().getSelectedValuesList(); - if(!validator.validateCategorias(categorias)) return; + ValidationResult categoriasValidation = this.validator.validateCategorias(categorias); + if(categoriasValidation.hasError()){ + categoriasValidation.showErrorDialog(); + return; + } Editorial editorial = (Editorial) this.view.getEditorialCombo().getSelectedItem(); - if(!validator.validateEditorial(editorial)) return; - // @formatter:on + ValidationResult editorialValidation = this.validator.validateEditorial(editorial); + if(editorialValidation.hasError()){ + editorialValidation.showErrorDialog(); + return; + } assert libro != null; diff --git a/src/main/java/xyz/danielcortes/framework/ValidationResult.java b/src/main/java/xyz/danielcortes/framework/ValidationResult.java new file mode 100644 index 0000000..bcf553a --- /dev/null +++ b/src/main/java/xyz/danielcortes/framework/ValidationResult.java @@ -0,0 +1,49 @@ +package xyz.danielcortes.framework; + +import javax.swing.JOptionPane; + +public class ValidationResult { + public static ValidationResult NON_ERROR = new ValidationResult(); + private String message; + private String title; + private boolean hasError; + + private ValidationResult(){ + this.hasError = false; + this.message = "No hubo error"; + this.title = "Info"; + } + + public ValidationResult(String message){ + this.title = "Error"; + this.message = message; + this.hasError = true; + } + + public ValidationResult(String message, String title) { + this.title = title; + this.message = message; + this.hasError = true; + } + + public String getMessage() { + return message; + } + + public String getTitle() { + return title; + } + + public boolean hasError() { + return hasError; + } + + public void showErrorDialog() { + if(this.hasError) + JOptionPane.showMessageDialog( + null, + this.message, + this.title, + JOptionPane.ERROR_MESSAGE); + } +} diff --git a/src/main/java/xyz/danielcortes/validator/AutorValidator.java b/src/main/java/xyz/danielcortes/validator/AutorValidator.java index e02ea6a..8122bfc 100644 --- a/src/main/java/xyz/danielcortes/validator/AutorValidator.java +++ b/src/main/java/xyz/danielcortes/validator/AutorValidator.java @@ -1,6 +1,6 @@ package xyz.danielcortes.validator; -import javax.swing.JOptionPane; +import xyz.danielcortes.framework.ValidationResult; import xyz.danielcortes.models.Autor; import xyz.danielcortes.repository.AutorRepository; @@ -12,87 +12,45 @@ public class AutorValidator { this.autorRepository = autorRepository; } - public boolean validateNombre(String nombre) { + public ValidationResult validateNombre(String nombre) { if (nombre == null) { - JOptionPane.showMessageDialog( - null, - "El nombre es nulo", - "Error", - JOptionPane.ERROR_MESSAGE); - return false; + return new ValidationResult("El nombre es nulo"); } else if (nombre.isEmpty()) { - JOptionPane.showMessageDialog( - null, - "El nombre esta vacío", - "Error", - JOptionPane.ERROR_MESSAGE); - return false; + return new ValidationResult("El nombre esta vacio"); } - return true; + return ValidationResult.NON_ERROR; } - public boolean validateApellidoPaterno(String apellidoPaterno) { + public ValidationResult validateApellidoPaterno(String apellidoPaterno) { if (apellidoPaterno == null) { - JOptionPane.showMessageDialog( - null, - "El apellido paterno es nulo", - "Error", - JOptionPane.ERROR_MESSAGE); - return false; + return new ValidationResult("El apellido paterno es nulo"); } else if (apellidoPaterno.isEmpty()) { - JOptionPane.showMessageDialog( - null, - "El apellido paterno esta vacío", - "Error", - JOptionPane.ERROR_MESSAGE); - return false; + return new ValidationResult("El apellido paterno esta vacio"); } - return true; + return ValidationResult.NON_ERROR; } - public boolean validateApellidoMaterno(String apellidoMaterno) { + public ValidationResult validateApellidoMaterno(String apellidoMaterno) { if (apellidoMaterno == null) { - JOptionPane.showMessageDialog( - null, - "El apellido materno es nulo", - "Error", - JOptionPane.ERROR_MESSAGE); - return false; + return new ValidationResult("El apellido materno es nulo"); } else if (apellidoMaterno.isEmpty()) { - JOptionPane.showMessageDialog( - null, - "El apellido materno esta vacío", - "Error", - JOptionPane.ERROR_MESSAGE); - return false; + return new ValidationResult("El apellido materno esta vacío"); } - return true; + return ValidationResult.NON_ERROR; } - public boolean validateOriginal(Autor original) { + public ValidationResult validateOriginal(Autor original) { if (original == null) { - JOptionPane.showMessageDialog( - null, - "No hay Autor seleccionado", - "Error", - JOptionPane.ERROR_MESSAGE - ); - return false; + return new ValidationResult("No hay Autor seleccionado"); } - return true; + return ValidationResult.NON_ERROR; } - public boolean isDeleteable(Autor autor){ + public ValidationResult isDeleteable(Autor autor){ if(autor.getLibros().size() > 0){ - JOptionPane.showMessageDialog( - null, - "No se puede eliminar el autor ya que tiene libros asociados", - "Error", - JOptionPane.ERROR_MESSAGE - ); - return false; + return new ValidationResult("No se puede eliminar el autor ya que tiene libros asociados"); } - return true; + return ValidationResult.NON_ERROR; } } diff --git a/src/main/java/xyz/danielcortes/validator/CategoriaValidator.java b/src/main/java/xyz/danielcortes/validator/CategoriaValidator.java index e1b7d85..846d908 100644 --- a/src/main/java/xyz/danielcortes/validator/CategoriaValidator.java +++ b/src/main/java/xyz/danielcortes/validator/CategoriaValidator.java @@ -1,6 +1,6 @@ package xyz.danielcortes.validator; -import javax.swing.JOptionPane; +import xyz.danielcortes.framework.ValidationResult; import xyz.danielcortes.models.Categoria; import xyz.danielcortes.repository.CategoriaRepository; @@ -12,34 +12,27 @@ public class CategoriaValidator { this.categoriaRepository = categoriaRepository; } - public boolean validateNombre(String nombre) { + public ValidationResult validateNombre(String nombre) { if (nombre == null) { - JOptionPane.showMessageDialog( - null, - "El nombre es nulo", - "Error", - JOptionPane.ERROR_MESSAGE); - return false; + return new ValidationResult("El nombre es nulo"); } else if (nombre.isEmpty()) { - JOptionPane.showMessageDialog( - null, - "El nombre esta vacío", - "Error", - JOptionPane.ERROR_MESSAGE); - return false; + return new ValidationResult("El nombre esta vacío"); } - return true; + return ValidationResult.NON_ERROR; } - public boolean isDeleteable(Categoria categoria){ - if(categoria.getLibros().size() > 0){ - JOptionPane.showMessageDialog( - null, - "No se puede eliminar la categoria ya que tiene libros asociados", - "Error", - JOptionPane.ERROR_MESSAGE); - return false; + public ValidationResult validateOriginal(Categoria categoria){ + if(categoria == null){ + return new ValidationResult("No hay categoria seleccionada"); } - return true; + return ValidationResult.NON_ERROR; } + + public ValidationResult isDeleteable(Categoria categoria){ + if(categoria.getLibros().size() > 0){ + return new ValidationResult("No se puede eliminar la categoria ya que tiene libros asociados"); + } + return ValidationResult.NON_ERROR; + } + } diff --git a/src/main/java/xyz/danielcortes/validator/EditorialValidator.java b/src/main/java/xyz/danielcortes/validator/EditorialValidator.java index 1ede5c7..3666400 100644 --- a/src/main/java/xyz/danielcortes/validator/EditorialValidator.java +++ b/src/main/java/xyz/danielcortes/validator/EditorialValidator.java @@ -1,6 +1,6 @@ package xyz.danielcortes.validator; -import javax.swing.JOptionPane; +import xyz.danielcortes.framework.ValidationResult; import xyz.danielcortes.models.Editorial; import xyz.danielcortes.repository.EditorialRepository; @@ -12,49 +12,27 @@ public class EditorialValidator { this.editorialRepository = editorialRepository; } - public boolean validateNombre(String nombre) { + public ValidationResult validateNombre(String nombre) { if (nombre == null) { - JOptionPane.showMessageDialog( - null, - "El nombre es nulo", - "Error", - JOptionPane.ERROR_MESSAGE); - return false; + return new ValidationResult("El nombre es nulo"); } else if (nombre.isEmpty()) { - JOptionPane.showMessageDialog( - null, - "El nombre esta vacío", - "Error", - JOptionPane.ERROR_MESSAGE); - return false; + return new ValidationResult("El nombre esta vacío"); } - return true; + return ValidationResult.NON_ERROR; } - public boolean validateOriginal(Editorial original) { + public ValidationResult validateOriginal(Editorial original) { if (original == null) { - JOptionPane.showMessageDialog( - null, - "No hay Editorial seleccionada", - "Error", - JOptionPane.ERROR_MESSAGE - ); - return false; + return new ValidationResult("No hay Editorial seleccionada"); } - return true; + return ValidationResult.NON_ERROR; } - public boolean isDeleteable(Editorial editorial){ + public ValidationResult isDeleteable(Editorial editorial){ if(editorial.getLibros().size() > 0){ - JOptionPane.showMessageDialog( - null, - "No se puede eliminar la editorial ya que tiene libros asociados", - "Error", - JOptionPane.ERROR_MESSAGE - ); - return false; + return new ValidationResult("No se puede eliminar la editorial ya que tiene libros asociados"); } - return true; + return ValidationResult.NON_ERROR; } } diff --git a/src/main/java/xyz/danielcortes/validator/EjemplarValidator.java b/src/main/java/xyz/danielcortes/validator/EjemplarValidator.java index 3ea9a4f..6f525f5 100644 --- a/src/main/java/xyz/danielcortes/validator/EjemplarValidator.java +++ b/src/main/java/xyz/danielcortes/validator/EjemplarValidator.java @@ -1,6 +1,6 @@ package xyz.danielcortes.validator; -import javax.swing.JOptionPane; +import xyz.danielcortes.framework.ValidationResult; import xyz.danielcortes.repository.EjemplarRepository; public class EjemplarValidator { @@ -11,32 +11,17 @@ public class EjemplarValidator { this.ejemplarRepository = ejemplarRepository; } - public boolean validateSerie(String serie, Integer libro_id) { + public ValidationResult validateSerie(String serie, Integer libro_id) { if (serie == null) { - JOptionPane.showMessageDialog( - null, - "La serie es nula", - "Error", - JOptionPane.ERROR_MESSAGE); - return false; + return new ValidationResult("La serie es nula"); } if (serie.isEmpty()) { - JOptionPane.showMessageDialog( - null, - "La serie esta vacia", - "Error", - JOptionPane.ERROR_MESSAGE); - return false; + return new ValidationResult("La serie esta vacia"); } if (ejemplarRepository.exists(serie, libro_id)) { - JOptionPane.showMessageDialog( - null, - "El numero de serie ya existe", - "Error", - JOptionPane.ERROR_MESSAGE); - return false; + return new ValidationResult("El numero de serie ya existe"); } - return true; + return ValidationResult.NON_ERROR; } } diff --git a/src/main/java/xyz/danielcortes/validator/IdiomaValidator.java b/src/main/java/xyz/danielcortes/validator/IdiomaValidator.java index 6c9e439..cf3d5df 100644 --- a/src/main/java/xyz/danielcortes/validator/IdiomaValidator.java +++ b/src/main/java/xyz/danielcortes/validator/IdiomaValidator.java @@ -1,6 +1,6 @@ package xyz.danielcortes.validator; -import javax.swing.JOptionPane; +import xyz.danielcortes.framework.ValidationResult; import xyz.danielcortes.models.Idioma; import xyz.danielcortes.repository.IdiomaRepository; @@ -13,49 +13,27 @@ public class IdiomaValidator { } - public boolean validateOriginal(Idioma original) { + public ValidationResult validateOriginal(Idioma original) { if (original == null) { - JOptionPane.showMessageDialog( - null, - "No hay Idioma seleccionado", - "Error", - JOptionPane.ERROR_MESSAGE - ); - return false; + return new ValidationResult("No hay Idioma seleccionado"); } - return true; + return ValidationResult.NON_ERROR; } - public boolean validateNombre(String nombre) { + public ValidationResult validateNombre(String nombre) { if (nombre == null) { - JOptionPane.showMessageDialog( - null, - "El nombre es nulo", - "Error", - JOptionPane.ERROR_MESSAGE); - return false; + return new ValidationResult("El nombre es nulo"); } else if (nombre.isEmpty()) { - JOptionPane.showMessageDialog( - null, - "El nombre esta vacío", - "Error", - JOptionPane.ERROR_MESSAGE); - return false; + return new ValidationResult("El nombre esta vacío"); } - return true; + return ValidationResult.NON_ERROR; } - public boolean isDeleteable(Idioma idioma){ - if(idioma.getLibros().size() > 0){ - JOptionPane.showMessageDialog( - null, - "No se puede eliminar el idioma ya que tiene libros asociados", - "Error", - JOptionPane.ERROR_MESSAGE - ); - return false; + public ValidationResult isDeleteable(Idioma idioma) { + if (idioma.getLibros().size() > 0) { + return new ValidationResult("No se puede eliminar el idioma ya que tiene libros asociados"); } - return true; + return ValidationResult.NON_ERROR; } } diff --git a/src/main/java/xyz/danielcortes/validator/LibroValidator.java b/src/main/java/xyz/danielcortes/validator/LibroValidator.java index 46f3c8c..c0eb84c 100644 --- a/src/main/java/xyz/danielcortes/validator/LibroValidator.java +++ b/src/main/java/xyz/danielcortes/validator/LibroValidator.java @@ -2,8 +2,8 @@ package xyz.danielcortes.validator; import java.util.List; import java.util.Objects; -import javax.swing.JOptionPane; import xyz.danielcortes.framework.GeneralValidator; +import xyz.danielcortes.framework.ValidationResult; import xyz.danielcortes.models.Autor; import xyz.danielcortes.models.Categoria; import xyz.danielcortes.models.Editorial; @@ -19,239 +19,122 @@ public class LibroValidator { this.libroRepository = libroRepository; } - public boolean validateLibro(Libro libro) { + public ValidationResult validateLibro(Libro libro) { if (libro == null) { - JOptionPane.showMessageDialog( - null, - "No hay Libro seleccionado", - "Error", - JOptionPane.ERROR_MESSAGE - ); - return false; + return new ValidationResult("No hay Libro seleccionado"); } - return true; + return ValidationResult.NON_ERROR; } - public boolean validateISBN(String isbn) { + public ValidationResult validateISBN(String isbn) { if (isbn == null) { - JOptionPane.showMessageDialog( - null, - "El ISBN es nulo", - "Error", - JOptionPane.ERROR_MESSAGE); - return false; + return new ValidationResult("El ISBN es nulo"); } if (isbn.isEmpty()) { - JOptionPane.showMessageDialog( - null, - "El ISBN esta vacio", - "Error", - JOptionPane.ERROR_MESSAGE); - return false; + return new ValidationResult("El ISBN esta vacio"); } isbn = isbn.replaceAll("[^\\d]", ""); if ((isbn.length() == 13 && !ISBN13CheckSum(isbn)) || (isbn.length() == 10 && !ISBN10CheckSum(isbn)) || (isbn.length() != 10 && isbn.length() != 13)) { - JOptionPane.showMessageDialog( - null, - "El ISBN no es valido", - "Error", - JOptionPane.ERROR_MESSAGE); - return false; + return new ValidationResult("El ISBN no es valido"); } - return true; + return ValidationResult.NON_ERROR; } - public boolean validateTitulo(String titulo) { + public ValidationResult validateTitulo(String titulo) { if (titulo == null) { - JOptionPane.showMessageDialog( - null, - "El titulo es nulo", - "Error", - JOptionPane.ERROR_MESSAGE); - return false; + return new ValidationResult("El titulo es nulo"); } if (titulo.isEmpty()) { - JOptionPane.showMessageDialog( - null, - "El titulo esta vacio", - "Error", - JOptionPane.ERROR_MESSAGE); - return false; + return new ValidationResult("El titulo esta vacio"); } - return true; + return ValidationResult.NON_ERROR; } - public boolean validateNumeroPaginas(String numeroPaginas) { + public ValidationResult validateNumeroPaginas(String numeroPaginas) { if (numeroPaginas == null) { - JOptionPane.showMessageDialog( - null, - "El numero de paginas es nulo", - "Error", - JOptionPane.ERROR_MESSAGE); - return false; + return new ValidationResult("El numero de paginas es nulo"); } if (numeroPaginas.isEmpty()) { - JOptionPane.showMessageDialog( - null, - "El numero de paginas esta vacio", - "Error", - JOptionPane.ERROR_MESSAGE); - return false; + return new ValidationResult("El numero de paginas esta vacio"); } if (!GeneralValidator.isInteger(numeroPaginas)) { - JOptionPane.showMessageDialog( - null, - "El numero de paginas no es un numero", - "Error", - JOptionPane.ERROR_MESSAGE); - return false; + return new ValidationResult("El numero de paginas no es un numero"); } - - return true; + return ValidationResult.NON_ERROR; } - public boolean validatePrecioReferencia(String precioReferencia) { + public ValidationResult validatePrecioReferencia(String precioReferencia) { if (precioReferencia == null) { - JOptionPane.showMessageDialog( - null, - "El precio referencial es nulo", - "Error", - JOptionPane.ERROR_MESSAGE); - return false; + return new ValidationResult("El precio referencial es nulo"); } if (precioReferencia.isEmpty()) { - JOptionPane.showMessageDialog( - null, - "El precio referencial esta vacio", - "Error", - JOptionPane.ERROR_MESSAGE); - return false; + return new ValidationResult("El precio referencial esta vacio"); } if (!GeneralValidator.isInteger(precioReferencia)) { - JOptionPane.showMessageDialog( - null, - "El precio referencial no es un numero", - "Error", - JOptionPane.ERROR_MESSAGE); - return false; + return new ValidationResult("El precio referencial no es un numero"); } - return true; + return ValidationResult.NON_ERROR; } - public boolean validateAnoPublicacion(String anoPublicacion) { + public ValidationResult validateAnoPublicacion(String anoPublicacion) { if (anoPublicacion == null) { - JOptionPane.showMessageDialog( - null, - "El año de publicacion es nulo", - "Error", - JOptionPane.ERROR_MESSAGE); - return false; + return new ValidationResult("El año de publicacion es nulo"); } if (anoPublicacion.isEmpty()) { - JOptionPane.showMessageDialog( - null, - "El año de publicacion esta vacio", - "Error", - JOptionPane.ERROR_MESSAGE); - return false; + return new ValidationResult("El año de publicacion esta vacio"); } if (!GeneralValidator.isInteger(anoPublicacion)) { - JOptionPane.showMessageDialog( - null, - "El año de publicacion no es un numero", - "Error", - JOptionPane.ERROR_MESSAGE); - return false; + return new ValidationResult("El año de publicacion no es un numero"); } if (!GeneralValidator.isYear(anoPublicacion)) { - JOptionPane.showMessageDialog( - null, - "El año de publicacion no es un año valido", - "Error", - JOptionPane.ERROR_MESSAGE); - return false; + return new ValidationResult("El año de publicacion no es un año valido"); } - return true; + return ValidationResult.NON_ERROR; } - public boolean validateIdiomas(List idiomas) { + public ValidationResult validateIdiomas(List idiomas) { if (idiomas.size() == 0) { - JOptionPane.showMessageDialog( - null, - "No hay idiomas seleccionados", - "Error", - JOptionPane.ERROR_MESSAGE); - return false; + return new ValidationResult("No hay idiomas seleccionados"); } if (idiomas.stream().anyMatch(Objects::isNull)) { - JOptionPane.showMessageDialog( - null, - "Se selecciono un idioma no existente", - "Error", - JOptionPane.ERROR_MESSAGE); - return false; + return new ValidationResult("Se selecciono un idioma no existente"); } - return true; + return ValidationResult.NON_ERROR; } - public boolean validateAutores(List autores) { + public ValidationResult validateAutores(List autores) { if (autores.size() == 0) { - JOptionPane.showMessageDialog( - null, - "No hay autores seleccionados", - "Error", - JOptionPane.ERROR_MESSAGE); - return false; + return new ValidationResult("No hay autores seleccionados"); } if (autores.stream().anyMatch(Objects::isNull)) { - JOptionPane.showMessageDialog( - null, - "Se selecciono un autor no existente", - "Error", - JOptionPane.ERROR_MESSAGE); - return false; + return new ValidationResult("Se selecciono un autor no existente"); } - return true; + return ValidationResult.NON_ERROR; } - public boolean validateCategorias(List categorias) { + public ValidationResult validateCategorias(List categorias) { if (categorias.size() == 0) { - JOptionPane.showMessageDialog( - null, - "No hay autores seleccionados", - "Error", - JOptionPane.ERROR_MESSAGE); - return false; + return new ValidationResult("No hay categorias seleccionadas"); } if (categorias.stream().anyMatch(Objects::isNull)) { - JOptionPane.showMessageDialog( - null, - "Se selecciono una categoria no existente", - "Error", - JOptionPane.ERROR_MESSAGE); - return false; + return new ValidationResult("Se selecciono una categoria no existente"); } - return true; + return ValidationResult.NON_ERROR; } - public boolean validateEditorial(Editorial editorial) { + public ValidationResult validateEditorial(Editorial editorial) { if (editorial == null) { - JOptionPane.showMessageDialog( - null, - "No hay editorial seleccionada", - "Error", - JOptionPane.ERROR_MESSAGE); - return false; + return new ValidationResult("No hay editorial seleccionada"); } - return true; + return ValidationResult.NON_ERROR; } private boolean ISBN10CheckSum(String isbn) { diff --git a/src/main/java/xyz/danielcortes/views/LaunchFrame.java b/src/main/java/xyz/danielcortes/views/LaunchFrame.java index 3aae536..51280ad 100644 --- a/src/main/java/xyz/danielcortes/views/LaunchFrame.java +++ b/src/main/java/xyz/danielcortes/views/LaunchFrame.java @@ -17,6 +17,7 @@ public class LaunchFrame extends JFrame { this.setMinimumSize(this.dimension); this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); this.setLocationRelativeTo(null); + this.setTitle("Biblioteca"); this.setupCardPanel(); }