diff --git a/.idea/material_theme_project_new.xml b/.idea/material_theme_project_new.xml new file mode 100644 index 0000000..b81c6a4 --- /dev/null +++ b/.idea/material_theme_project_new.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/src/main/java/org/biblioteca/Aplicacion.java b/src/main/java/org/biblioteca/Aplicacion.java index 3e3821a..2a56ad0 100644 --- a/src/main/java/org/biblioteca/Aplicacion.java +++ b/src/main/java/org/biblioteca/Aplicacion.java @@ -30,5 +30,4 @@ public static void main(String[] args) { } System.out.println("\n¡Gracias por usar el sistema!"); } -} - +} \ No newline at end of file diff --git a/src/main/java/org/biblioteca/entidades/Libro.java b/src/main/java/org/biblioteca/entidades/Libro.java index 8a43163..f7cbf0c 100644 --- a/src/main/java/org/biblioteca/entidades/Libro.java +++ b/src/main/java/org/biblioteca/entidades/Libro.java @@ -2,7 +2,7 @@ import java.util.Objects; -public class Libro { +public class Libro implements LibroInterface { private String isbn; private String titulo; private String autor; @@ -22,54 +22,67 @@ public Libro(String isbn, String titulo, String autor, String editorial, int eje this.ejemplaresDisponibles = ejemplaresDisponibles; } + @Override public String getIsbn() { return isbn; } + @Override public void setIsbn(String isbn) { this.isbn = isbn; } + @Override public String getTitulo() { return titulo; } + @Override public void setTitulo(String titulo) { this.titulo = titulo; } + @Override public String getAutor() { return autor; } + @Override public void setAutor(String autor) { this.autor = autor; } + @Override public String getEditorial() { return editorial; } + @Override public void setEditorial(String editorial) { this.editorial = editorial; } + @Override public int getEjemplaresDisponibles() { return ejemplaresDisponibles; } + @Override public void setEjemplaresDisponibles(int ejemplaresDisponibles) { this.ejemplaresDisponibles = ejemplaresDisponibles; } + @Override public int getEjemplaresTotales() { return ejemplaresTotales; } + @Override public void setEjemplaresTotales(int ejemplaresTotales) { this.ejemplaresTotales = ejemplaresTotales; } + @Override public boolean hayDisponibilidad() { return ejemplaresDisponibles > 0; } diff --git a/src/main/java/org/biblioteca/entidades/LibroInterface.java b/src/main/java/org/biblioteca/entidades/LibroInterface.java new file mode 100644 index 0000000..87c72f5 --- /dev/null +++ b/src/main/java/org/biblioteca/entidades/LibroInterface.java @@ -0,0 +1,38 @@ +package org.biblioteca.entidades; + +public interface LibroInterface { + String getIsbn(); + + void setIsbn(String isbn); + + String getTitulo(); + + void setTitulo(String titulo); + + String getAutor(); + + void setAutor(String autor); + + String getEditorial(); + + void setEditorial(String editorial); + + int getEjemplaresDisponibles(); + + void setEjemplaresDisponibles(int ejemplaresDisponibles); + + int getEjemplaresTotales(); + + void setEjemplaresTotales(int ejemplaresTotales); + + boolean hayDisponibilidad(); + + @Override + boolean equals(Object otro); + + @Override + int hashCode(); + + @Override + String toString(); +} diff --git a/src/main/java/org/biblioteca/entidades/Prestamo.java b/src/main/java/org/biblioteca/entidades/Prestamo.java index d93b60b..f6f2443 100644 --- a/src/main/java/org/biblioteca/entidades/Prestamo.java +++ b/src/main/java/org/biblioteca/entidades/Prestamo.java @@ -3,7 +3,7 @@ import java.time.LocalDate; import java.util.Objects; -public class Prestamo { +public class Prestamo implements PrestamoInterface { private String identificador; private String isbnLibro; private String numeroSocio; @@ -25,62 +25,77 @@ public Prestamo(String identificador, String isbnLibro, String numeroSocio, this.activo = true; } + @Override public String getIdentificador() { return identificador; } + @Override public void setIdentificador(String identificador) { this.identificador = identificador; } + @Override public String getIsbnLibro() { return isbnLibro; } + @Override public void setIsbnLibro(String isbnLibro) { this.isbnLibro = isbnLibro; } + @Override public String getNumeroSocio() { return numeroSocio; } + @Override public void setNumeroSocio(String numeroSocio) { this.numeroSocio = numeroSocio; } + @Override public LocalDate getFechaPrestamo() { return fechaPrestamo; } + @Override public void setFechaPrestamo(LocalDate fechaPrestamo) { this.fechaPrestamo = fechaPrestamo; } + @Override public LocalDate getFechaDevolucionPrevista() { return fechaDevolucionPrevista; } + @Override public void setFechaDevolucionPrevista(LocalDate fechaDevolucionPrevista) { this.fechaDevolucionPrevista = fechaDevolucionPrevista; } + @Override public LocalDate getFechaDevolucionReal() { return fechaDevolucionReal; } + @Override public void setFechaDevolucionReal(LocalDate fechaDevolucionReal) { this.fechaDevolucionReal = fechaDevolucionReal; } + @Override public boolean isActivo() { return activo; } + @Override public void setActivo(boolean activo) { this.activo = activo; } + @Override public boolean estaRetrasado() { if (!activo) return false; return LocalDate.now().isAfter(fechaDevolucionPrevista); diff --git a/src/main/java/org/biblioteca/entidades/PrestamoInterface.java b/src/main/java/org/biblioteca/entidades/PrestamoInterface.java new file mode 100644 index 0000000..445a4cd --- /dev/null +++ b/src/main/java/org/biblioteca/entidades/PrestamoInterface.java @@ -0,0 +1,44 @@ +package org.biblioteca.entidades; + +import java.time.LocalDate; + +public interface PrestamoInterface { + String getIdentificador(); + + void setIdentificador(String identificador); + + String getIsbnLibro(); + + void setIsbnLibro(String isbnLibro); + + String getNumeroSocio(); + + void setNumeroSocio(String numeroSocio); + + LocalDate getFechaPrestamo(); + + void setFechaPrestamo(LocalDate fechaPrestamo); + + LocalDate getFechaDevolucionPrevista(); + + void setFechaDevolucionPrevista(LocalDate fechaDevolucionPrevista); + + LocalDate getFechaDevolucionReal(); + + void setFechaDevolucionReal(LocalDate fechaDevolucionReal); + + boolean isActivo(); + + void setActivo(boolean activo); + + boolean estaRetrasado(); + + @Override + boolean equals(Object otro); + + @Override + int hashCode(); + + @Override + String toString(); +} diff --git a/src/main/java/org/biblioteca/entidades/Socio.java b/src/main/java/org/biblioteca/entidades/Socio.java index 6e80c6b..5a82b05 100644 --- a/src/main/java/org/biblioteca/entidades/Socio.java +++ b/src/main/java/org/biblioteca/entidades/Socio.java @@ -2,7 +2,7 @@ import java.util.Objects; -public class Socio { +public class Socio implements SocioInterface { private String numeroSocio; private String apellidos; private String nombre; @@ -20,46 +20,57 @@ public Socio(String numeroSocio, String apellidos, String nombre, String direcci this.telefono = telefono; } + @Override public String getNumeroSocio() { return numeroSocio; } + @Override public void setNumeroSocio(String numeroSocio) { this.numeroSocio = numeroSocio; } + @Override public String getApellidos() { return apellidos; } + @Override public void setApellidos(String apellidos) { this.apellidos = apellidos; } + @Override public String getNombre() { return nombre; } + @Override public void setNombre(String nombre) { this.nombre = nombre; } + @Override public String getDireccion() { return direccion; } + @Override public void setDireccion(String direccion) { this.direccion = direccion; } + @Override public String getTelefono() { return telefono; } + @Override public void setTelefono(String telefono) { this.telefono = telefono; } + @Override public String getNombreCompleto() { return nombre + " " + apellidos; } diff --git a/src/main/java/org/biblioteca/entidades/SocioInterface.java b/src/main/java/org/biblioteca/entidades/SocioInterface.java new file mode 100644 index 0000000..3086af9 --- /dev/null +++ b/src/main/java/org/biblioteca/entidades/SocioInterface.java @@ -0,0 +1,34 @@ +package org.biblioteca.entidades; + +public interface SocioInterface { + String getNumeroSocio(); + + void setNumeroSocio(String numeroSocio); + + String getApellidos(); + + void setApellidos(String apellidos); + + String getNombre(); + + void setNombre(String nombre); + + String getDireccion(); + + void setDireccion(String direccion); + + String getTelefono(); + + void setTelefono(String telefono); + + String getNombreCompleto(); + + @Override + boolean equals(Object otro); + + @Override + int hashCode(); + + @Override + String toString(); +} diff --git a/src/main/java/org/biblioteca/herramientas/JsonUtil.java b/src/main/java/org/biblioteca/herramientas/JsonUtil.java index f340039..a40beee 100644 --- a/src/main/java/org/biblioteca/herramientas/JsonUtil.java +++ b/src/main/java/org/biblioteca/herramientas/JsonUtil.java @@ -6,8 +6,8 @@ import java.time.LocalDate; import java.time.format.DateTimeFormatter; -public class JsonUtil { - private static Gson instancia = null; +public class JsonUtil implements JsonUtilInterface { + public static Gson instancia = null; private JsonUtil() { } @@ -22,23 +22,23 @@ public static Gson obtenerInstancia() { private static Gson crearGson() { GsonBuilder constructor = new GsonBuilder(); constructor.setPrettyPrinting(); - + DateTimeFormatter formato = DateTimeFormatter.ISO_LOCAL_DATE; - + constructor.registerTypeAdapter(LocalDate.class, new JsonSerializer() { @Override public JsonElement serialize(LocalDate fecha, Type tipo, JsonSerializationContext contexto) { return new JsonPrimitive(fecha.format(formato)); } }); - + constructor.registerTypeAdapter(LocalDate.class, new JsonDeserializer() { @Override public LocalDate deserialize(JsonElement elemento, Type tipo, JsonDeserializationContext contexto) throws JsonParseException { return LocalDate.parse(elemento.getAsString(), formato); } }); - + return constructor.create(); } } diff --git a/src/main/java/org/biblioteca/herramientas/JsonUtilInterface.java b/src/main/java/org/biblioteca/herramientas/JsonUtilInterface.java new file mode 100644 index 0000000..0df9d26 --- /dev/null +++ b/src/main/java/org/biblioteca/herramientas/JsonUtilInterface.java @@ -0,0 +1,39 @@ +package org.biblioteca.herramientas; + +import com.google.gson.*; + +import java.lang.reflect.Type; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; + +public interface JsonUtilInterface { + public static Gson obtenerInstancia() { + if (JsonUtil.instancia == null) { + JsonUtil.instancia = crearGson(); + } + return JsonUtil.instancia; + } + + static Gson crearGson() { + GsonBuilder constructor = new GsonBuilder(); + constructor.setPrettyPrinting(); + + DateTimeFormatter formato = DateTimeFormatter.ISO_LOCAL_DATE; + + constructor.registerTypeAdapter(LocalDate.class, new JsonSerializer() { + @Override + public JsonElement serialize(LocalDate fecha, Type tipo, JsonSerializationContext contexto) { + return new JsonPrimitive(fecha.format(formato)); + } + }); + + constructor.registerTypeAdapter(LocalDate.class, new JsonDeserializer() { + @Override + public LocalDate deserialize(JsonElement elemento, Type tipo, JsonDeserializationContext contexto) throws JsonParseException { + return LocalDate.parse(elemento.getAsString(), formato); + } + }); + + return constructor.create(); + } +} diff --git a/src/main/java/org/biblioteca/interfaz/MenuPrincipal.java b/src/main/java/org/biblioteca/interfaz/MenuPrincipal.java index c5fa648..85e6696 100644 --- a/src/main/java/org/biblioteca/interfaz/MenuPrincipal.java +++ b/src/main/java/org/biblioteca/interfaz/MenuPrincipal.java @@ -12,7 +12,7 @@ import java.util.Scanner; import java.util.UUID; -public class MenuPrincipal { +public class MenuPrincipal implements MenuPrincipalInterface { private final Scanner lector; private final GestionLibros gestionLibros; private final GestionSocios gestionSocios; @@ -25,6 +25,7 @@ public MenuPrincipal(Scanner lector) { this.gestionPrestamos = new GestionPrestamos(); } + @Override public void mostrarMenuLibros() { System.out.println("\n--- Gestión de Libros ---"); System.out.println("1) Añadir libro al catálogo"); @@ -43,6 +44,7 @@ public void mostrarMenuLibros() { } } + @Override public void añadirLibro() { System.out.print("ISBN: "); String isbn = lector.nextLine().trim(); @@ -68,6 +70,7 @@ public void mostrarMenuLibros() { } } + @Override public void eliminarLibro() { System.out.print("ISBN del libro a eliminar: "); String isbn = lector.nextLine().trim(); @@ -78,6 +81,7 @@ public void eliminarLibro() { } } + @Override public void verCatalogo() { List catalogo = gestionLibros.listarLibros(); if (catalogo.isEmpty()) { @@ -89,6 +93,7 @@ public void verCatalogo() { } } + @Override public void mostrarMenuSocios() { System.out.println("\n--- Gestión de Socios ---"); System.out.println("1) Registrar nuevo socio"); @@ -107,6 +112,7 @@ public void mostrarMenuSocios() { } } + @Override public void registrarSocio() { System.out.print("Nombre: "); String nombre = lector.nextLine().trim(); @@ -126,6 +132,7 @@ public void registrarSocio() { } } + @Override public void darDeBajaSocio() { System.out.print("Número de socio a dar de baja: "); String numeroSocio = lector.nextLine().trim(); @@ -136,6 +143,7 @@ public void darDeBajaSocio() { } } + @Override public void verListaSocios() { List socios = gestionSocios.listarSocios(); if (socios.isEmpty()) { @@ -147,6 +155,7 @@ public void verListaSocios() { } } + @Override public void mostrarMenuPrestamos() { System.out.println("\n--- Gestión de Préstamos ---"); System.out.println("1) Realizar préstamo"); @@ -165,6 +174,7 @@ public void mostrarMenuPrestamos() { } } + @Override public void realizarPrestamo() { System.out.print("ISBN del libro: "); String isbn = lector.nextLine().trim(); @@ -192,6 +202,7 @@ public void realizarPrestamo() { } } + @Override public void devolverLibro() { System.out.print("ID del préstamo: "); String identificador = lector.nextLine().trim(); @@ -202,6 +213,7 @@ public void devolverLibro() { } } + @Override public void verPrestamosActivos() { List prestamos = gestionPrestamos.listarPrestamos(); boolean hayActivos = false; diff --git a/src/main/java/org/biblioteca/interfaz/MenuPrincipalInterface.java b/src/main/java/org/biblioteca/interfaz/MenuPrincipalInterface.java new file mode 100644 index 0000000..45f0025 --- /dev/null +++ b/src/main/java/org/biblioteca/interfaz/MenuPrincipalInterface.java @@ -0,0 +1,27 @@ +package org.biblioteca.interfaz; + +public interface MenuPrincipalInterface { + void mostrarMenuLibros(); + + void añadirLibro(); + + void eliminarLibro(); + + void verCatalogo(); + + void mostrarMenuSocios(); + + void registrarSocio(); + + void darDeBajaSocio(); + + void verListaSocios(); + + void mostrarMenuPrestamos(); + + void realizarPrestamo(); + + void devolverLibro(); + + void verPrestamosActivos(); +} diff --git a/src/main/java/org/biblioteca/negocio/GestionLibros.java b/src/main/java/org/biblioteca/negocio/GestionLibros.java index a45419f..f68c975 100644 --- a/src/main/java/org/biblioteca/negocio/GestionLibros.java +++ b/src/main/java/org/biblioteca/negocio/GestionLibros.java @@ -6,21 +6,24 @@ import java.util.List; import java.util.Optional; -public class GestionLibros { +public class GestionLibros implements GestionLibrosInterface { private final AlmacenLibros almacen; public GestionLibros() { this.almacen = new AlmacenLibros(); } + @Override public List listarLibros() { return almacen.consultarTodos(); } + @Override public Optional buscarLibro(String isbn) { return almacen.consultarPorIsbn(isbn); } + @Override public boolean añadirLibro(Libro libro) { if (libro.getIsbn() == null || libro.getIsbn().isBlank()) { return false; @@ -34,10 +37,12 @@ public Optional buscarLibro(String isbn) { return almacen.guardar(libro); } + @Override public boolean eliminarLibro(String isbn) { return almacen.borrar(isbn); } + @Override public void modificarLibro(Libro libro) { almacen.actualizar(libro); } diff --git a/src/main/java/org/biblioteca/negocio/GestionLibrosInterface.java b/src/main/java/org/biblioteca/negocio/GestionLibrosInterface.java new file mode 100644 index 0000000..23de88c --- /dev/null +++ b/src/main/java/org/biblioteca/negocio/GestionLibrosInterface.java @@ -0,0 +1,18 @@ +package org.biblioteca.negocio; + +import org.biblioteca.entidades.Libro; + +import java.util.List; +import java.util.Optional; + +public interface GestionLibrosInterface { + List listarLibros(); + + Optional buscarLibro(String isbn); + + boolean añadirLibro(Libro libro); + + boolean eliminarLibro(String isbn); + + void modificarLibro(Libro libro); +} diff --git a/src/main/java/org/biblioteca/negocio/GestionPrestamos.java b/src/main/java/org/biblioteca/negocio/GestionPrestamos.java index 45dd943..62027b0 100644 --- a/src/main/java/org/biblioteca/negocio/GestionPrestamos.java +++ b/src/main/java/org/biblioteca/negocio/GestionPrestamos.java @@ -11,7 +11,7 @@ import java.util.List; import java.util.Optional; -public class GestionPrestamos { +public class GestionPrestamos implements GestionPrestamosInterface { private final AlmacenPrestamos almacenPrestamos; private final AlmacenLibros almacenLibros; private final AlmacenSocios almacenSocios; @@ -22,14 +22,17 @@ public GestionPrestamos() { this.almacenSocios = new AlmacenSocios(); } + @Override public List listarPrestamos() { return almacenPrestamos.consultarTodos(); } + @Override public Optional buscarPrestamo(String identificador) { return almacenPrestamos.consultarPorId(identificador); } + @Override public boolean realizarPrestamo(Prestamo prestamo) { if (prestamo.getIdentificador() == null || prestamo.getIdentificador().isBlank()) { return false; @@ -57,6 +60,7 @@ public boolean realizarPrestamo(Prestamo prestamo) { return almacenPrestamos.guardar(prestamo); } + @Override public boolean devolverLibro(String identificador) { Optional prestamoOpt = almacenPrestamos.consultarPorId(identificador); if (prestamoOpt.isEmpty()) { diff --git a/src/main/java/org/biblioteca/negocio/GestionPrestamosInterface.java b/src/main/java/org/biblioteca/negocio/GestionPrestamosInterface.java new file mode 100644 index 0000000..ea6f4cf --- /dev/null +++ b/src/main/java/org/biblioteca/negocio/GestionPrestamosInterface.java @@ -0,0 +1,16 @@ +package org.biblioteca.negocio; + +import org.biblioteca.entidades.Prestamo; + +import java.util.List; +import java.util.Optional; + +public interface GestionPrestamosInterface { + List listarPrestamos(); + + Optional buscarPrestamo(String identificador); + + boolean realizarPrestamo(Prestamo prestamo); + + boolean devolverLibro(String identificador); +} diff --git a/src/main/java/org/biblioteca/negocio/GestionSocios.java b/src/main/java/org/biblioteca/negocio/GestionSocios.java index ec9431e..f5ceafd 100644 --- a/src/main/java/org/biblioteca/negocio/GestionSocios.java +++ b/src/main/java/org/biblioteca/negocio/GestionSocios.java @@ -6,21 +6,24 @@ import java.util.List; import java.util.Optional; -public class GestionSocios { +public class GestionSocios implements GestionSociosInterface { private final AlmacenSocios almacen; public GestionSocios() { this.almacen = new AlmacenSocios(); } + @Override public List listarSocios() { return almacen.consultarTodos(); } + @Override public Optional buscarSocio(String numeroSocio) { return almacen.consultarPorNumero(numeroSocio); } + @Override public boolean registrarSocio(Socio socio) { if (socio.getNumeroSocio() == null || socio.getNumeroSocio().isBlank()) { return false; @@ -34,6 +37,7 @@ public boolean registrarSocio(Socio socio) { return almacen.guardar(socio); } + @Override public boolean darDeBajaSocio(String numeroSocio) { return almacen.borrar(numeroSocio); } diff --git a/src/main/java/org/biblioteca/negocio/GestionSociosInterface.java b/src/main/java/org/biblioteca/negocio/GestionSociosInterface.java new file mode 100644 index 0000000..8dea606 --- /dev/null +++ b/src/main/java/org/biblioteca/negocio/GestionSociosInterface.java @@ -0,0 +1,16 @@ +package org.biblioteca.negocio; + +import org.biblioteca.entidades.Socio; + +import java.util.List; +import java.util.Optional; + +public interface GestionSociosInterface { + List listarSocios(); + + Optional buscarSocio(String numeroSocio); + + boolean registrarSocio(Socio socio); + + boolean darDeBajaSocio(String numeroSocio); +} diff --git a/src/main/java/org/biblioteca/repositorio/AlmacenLibros.java b/src/main/java/org/biblioteca/repositorio/AlmacenLibros.java index 2097951..678f2b4 100644 --- a/src/main/java/org/biblioteca/repositorio/AlmacenLibros.java +++ b/src/main/java/org/biblioteca/repositorio/AlmacenLibros.java @@ -12,7 +12,7 @@ import java.util.List; import java.util.Optional; -public class AlmacenLibros { +public class AlmacenLibros implements AlmacenLibrosInterface { private final Path rutaArchivo; private final Type tipoListaLibros = new TypeToken>(){}.getType(); private List listaLibros = new ArrayList<>(); @@ -40,15 +40,7 @@ private void leerDesdeArchivo() { } } - private void escribirEnArchivo() { - try { - String json = JsonUtil.obtenerInstancia().toJson(listaLibros, tipoListaLibros); - Files.writeString(rutaArchivo, json); - } catch (IOException excepcion) { - System.err.println("Error al escribir libros: " + excepcion.getMessage()); - } - } - + @Override public List consultarTodos() { leerDesdeArchivo(); List copia = new ArrayList<>(); @@ -58,6 +50,7 @@ public List consultarTodos() { return copia; } + @Override public Optional consultarPorIsbn(String isbn) { leerDesdeArchivo(); for (Libro l : listaLibros) { @@ -68,6 +61,7 @@ public Optional consultarPorIsbn(String isbn) { return Optional.empty(); } + @Override public boolean guardar(Libro libro) { leerDesdeArchivo(); Optional existente = consultarPorIsbn(libro.getIsbn()); @@ -79,6 +73,7 @@ public boolean guardar(Libro libro) { return true; } + @Override public boolean borrar(String isbn) { leerDesdeArchivo(); boolean eliminado = false; @@ -95,6 +90,7 @@ public boolean borrar(String isbn) { return eliminado; } + @Override public void actualizar(Libro libro) { leerDesdeArchivo(); for (int indice = 0; indice < listaLibros.size(); indice++) { diff --git a/src/main/java/org/biblioteca/repositorio/AlmacenLibrosInterface.java b/src/main/java/org/biblioteca/repositorio/AlmacenLibrosInterface.java new file mode 100644 index 0000000..be5f2c5 --- /dev/null +++ b/src/main/java/org/biblioteca/repositorio/AlmacenLibrosInterface.java @@ -0,0 +1,27 @@ +package org.biblioteca.repositorio; + +import org.biblioteca.entidades.Libro; +import org.biblioteca.herramientas.JsonUtil; + +import java.io.IOException; +import java.nio.file.Files; +import java.util.List; +import java.util.Optional; + +public interface AlmacenLibrosInterface { + private void leerDesdeArchivo() { + } + + default void escribirEnArchivo() { + } + + List consultarTodos(); + + Optional consultarPorIsbn(String isbn); + + boolean guardar(Libro libro); + + boolean borrar(String isbn); + + void actualizar(Libro libro); +} diff --git a/src/main/java/org/biblioteca/repositorio/AlmacenPrestamos.java b/src/main/java/org/biblioteca/repositorio/AlmacenPrestamos.java index 05efd77..e98592e 100644 --- a/src/main/java/org/biblioteca/repositorio/AlmacenPrestamos.java +++ b/src/main/java/org/biblioteca/repositorio/AlmacenPrestamos.java @@ -12,7 +12,7 @@ import java.util.List; import java.util.Optional; -public class AlmacenPrestamos { +public class AlmacenPrestamos implements AlmacenPrestamosInterface { private final Path rutaArchivo; private final Type tipoListaPrestamos = new TypeToken>(){}.getType(); private List listaPrestamos = new ArrayList<>(); @@ -22,33 +22,7 @@ public AlmacenPrestamos() { leerDesdeArchivo(); } - private void leerDesdeArchivo() { - try { - if (Files.notExists(rutaArchivo.getParent())) { - Files.createDirectories(rutaArchivo.getParent()); - } - if (Files.notExists(rutaArchivo)) { - Files.writeString(rutaArchivo, "[]"); - } - String contenido = Files.readString(rutaArchivo); - List temporal = JsonUtil.obtenerInstancia().fromJson(contenido, tipoListaPrestamos); - if (temporal != null) { - listaPrestamos = temporal; - } - } catch (IOException excepcion) { - System.err.println("Error al leer préstamos: " + excepcion.getMessage()); - } - } - - private void escribirEnArchivo() { - try { - String json = JsonUtil.obtenerInstancia().toJson(listaPrestamos, tipoListaPrestamos); - Files.writeString(rutaArchivo, json); - } catch (IOException excepcion) { - System.err.println("Error al escribir préstamos: " + excepcion.getMessage()); - } - } - + @Override public List consultarTodos() { leerDesdeArchivo(); List copia = new ArrayList<>(); @@ -58,6 +32,7 @@ public List consultarTodos() { return copia; } + @Override public Optional consultarPorId(String identificador) { leerDesdeArchivo(); for (Prestamo p : listaPrestamos) { @@ -68,6 +43,7 @@ public Optional consultarPorId(String identificador) { return Optional.empty(); } + @Override public boolean guardar(Prestamo prestamo) { leerDesdeArchivo(); Optional existente = consultarPorId(prestamo.getIdentificador()); @@ -79,6 +55,7 @@ public boolean guardar(Prestamo prestamo) { return true; } + @Override public boolean borrar(String identificador) { leerDesdeArchivo(); boolean eliminado = false; @@ -95,6 +72,7 @@ public boolean borrar(String identificador) { return eliminado; } + @Override public void actualizar(Prestamo prestamo) { leerDesdeArchivo(); for (int indice = 0; indice < listaPrestamos.size(); indice++) { diff --git a/src/main/java/org/biblioteca/repositorio/AlmacenPrestamosInterface.java b/src/main/java/org/biblioteca/repositorio/AlmacenPrestamosInterface.java new file mode 100644 index 0000000..4348ee4 --- /dev/null +++ b/src/main/java/org/biblioteca/repositorio/AlmacenPrestamosInterface.java @@ -0,0 +1,29 @@ +package org.biblioteca.repositorio; + +import org.biblioteca.entidades.Prestamo; +import org.biblioteca.herramientas.JsonUtil; + +import java.io.IOException; +import java.nio.file.Files; +import java.util.List; +import java.util.Optional; + +public interface AlmacenPrestamosInterface { + default void leerDesdeArchivo() { + + } + + default void escribirEnArchivo() { + + } + + List consultarTodos(); + + Optional consultarPorId(String identificador); + + boolean guardar(Prestamo prestamo); + + boolean borrar(String identificador); + + void actualizar(Prestamo prestamo); +} diff --git a/src/main/java/org/biblioteca/repositorio/AlmacenSocios.java b/src/main/java/org/biblioteca/repositorio/AlmacenSocios.java index 0ebeaca..4429110 100644 --- a/src/main/java/org/biblioteca/repositorio/AlmacenSocios.java +++ b/src/main/java/org/biblioteca/repositorio/AlmacenSocios.java @@ -12,7 +12,7 @@ import java.util.List; import java.util.Optional; -public class AlmacenSocios { +public class AlmacenSocios implements AlmacenSociosInterface { private final Path rutaArchivo; private final Type tipoListaSocios = new TypeToken>(){}.getType(); private List listaSocios = new ArrayList<>(); @@ -22,33 +22,7 @@ public AlmacenSocios() { leerDesdeArchivo(); } - private void leerDesdeArchivo() { - try { - if (Files.notExists(rutaArchivo.getParent())) { - Files.createDirectories(rutaArchivo.getParent()); - } - if (Files.notExists(rutaArchivo)) { - Files.writeString(rutaArchivo, "[]"); - } - String contenido = Files.readString(rutaArchivo); - List temporal = JsonUtil.obtenerInstancia().fromJson(contenido, tipoListaSocios); - if (temporal != null) { - listaSocios = temporal; - } - } catch (IOException excepcion) { - System.err.println("Error al leer socios: " + excepcion.getMessage()); - } - } - - private void escribirEnArchivo() { - try { - String json = JsonUtil.obtenerInstancia().toJson(listaSocios, tipoListaSocios); - Files.writeString(rutaArchivo, json); - } catch (IOException excepcion) { - System.err.println("Error al escribir socios: " + excepcion.getMessage()); - } - } - + @Override public List consultarTodos() { leerDesdeArchivo(); List copia = new ArrayList<>(); @@ -58,6 +32,7 @@ public List consultarTodos() { return copia; } + @Override public Optional consultarPorNumero(String numeroSocio) { leerDesdeArchivo(); for (Socio s : listaSocios) { @@ -68,6 +43,7 @@ public Optional consultarPorNumero(String numeroSocio) { return Optional.empty(); } + @Override public boolean guardar(Socio socio) { leerDesdeArchivo(); Optional existente = consultarPorNumero(socio.getNumeroSocio()); @@ -79,6 +55,7 @@ public boolean guardar(Socio socio) { return true; } + @Override public boolean borrar(String numeroSocio) { leerDesdeArchivo(); boolean eliminado = false; diff --git a/src/main/java/org/biblioteca/repositorio/AlmacenSociosInterface.java b/src/main/java/org/biblioteca/repositorio/AlmacenSociosInterface.java new file mode 100644 index 0000000..5dd99c4 --- /dev/null +++ b/src/main/java/org/biblioteca/repositorio/AlmacenSociosInterface.java @@ -0,0 +1,27 @@ +package org.biblioteca.repositorio; + +import org.biblioteca.entidades.Socio; +import org.biblioteca.herramientas.JsonUtil; + +import java.io.IOException; +import java.nio.file.Files; +import java.util.List; +import java.util.Optional; + +public interface AlmacenSociosInterface { + default void leerDesdeArchivo() { + + } + + default void escribirEnArchivo() { + + } + + List consultarTodos(); + + Optional consultarPorNumero(String numeroSocio); + + boolean guardar(Socio socio); + + boolean borrar(String numeroSocio); +} diff --git a/target/classes/org/biblioteca/entidades/Libro.class b/target/classes/org/biblioteca/entidades/Libro.class index bccae87..ee2ef8d 100644 Binary files a/target/classes/org/biblioteca/entidades/Libro.class and b/target/classes/org/biblioteca/entidades/Libro.class differ diff --git a/target/classes/org/biblioteca/entidades/LibroInterface.class b/target/classes/org/biblioteca/entidades/LibroInterface.class new file mode 100644 index 0000000..07b05a0 Binary files /dev/null and b/target/classes/org/biblioteca/entidades/LibroInterface.class differ diff --git a/target/classes/org/biblioteca/entidades/Prestamo.class b/target/classes/org/biblioteca/entidades/Prestamo.class index 1fbc542..9a46147 100644 Binary files a/target/classes/org/biblioteca/entidades/Prestamo.class and b/target/classes/org/biblioteca/entidades/Prestamo.class differ diff --git a/target/classes/org/biblioteca/entidades/PrestamoInterface.class b/target/classes/org/biblioteca/entidades/PrestamoInterface.class new file mode 100644 index 0000000..b85c93c Binary files /dev/null and b/target/classes/org/biblioteca/entidades/PrestamoInterface.class differ diff --git a/target/classes/org/biblioteca/entidades/Socio.class b/target/classes/org/biblioteca/entidades/Socio.class index 697b6d8..8270855 100644 Binary files a/target/classes/org/biblioteca/entidades/Socio.class and b/target/classes/org/biblioteca/entidades/Socio.class differ diff --git a/target/classes/org/biblioteca/entidades/SocioInterface.class b/target/classes/org/biblioteca/entidades/SocioInterface.class new file mode 100644 index 0000000..65f5b97 Binary files /dev/null and b/target/classes/org/biblioteca/entidades/SocioInterface.class differ diff --git a/target/classes/org/biblioteca/herramientas/JsonUtil.class b/target/classes/org/biblioteca/herramientas/JsonUtil.class index f402af0..c2bdf1b 100644 Binary files a/target/classes/org/biblioteca/herramientas/JsonUtil.class and b/target/classes/org/biblioteca/herramientas/JsonUtil.class differ diff --git a/target/classes/org/biblioteca/herramientas/JsonUtilInterface$1.class b/target/classes/org/biblioteca/herramientas/JsonUtilInterface$1.class new file mode 100644 index 0000000..cbca081 Binary files /dev/null and b/target/classes/org/biblioteca/herramientas/JsonUtilInterface$1.class differ diff --git a/target/classes/org/biblioteca/herramientas/JsonUtilInterface$2.class b/target/classes/org/biblioteca/herramientas/JsonUtilInterface$2.class new file mode 100644 index 0000000..db3b249 Binary files /dev/null and b/target/classes/org/biblioteca/herramientas/JsonUtilInterface$2.class differ diff --git a/target/classes/org/biblioteca/herramientas/JsonUtilInterface.class b/target/classes/org/biblioteca/herramientas/JsonUtilInterface.class new file mode 100644 index 0000000..09af02c Binary files /dev/null and b/target/classes/org/biblioteca/herramientas/JsonUtilInterface.class differ diff --git a/target/classes/org/biblioteca/interfaz/MenuPrincipal.class b/target/classes/org/biblioteca/interfaz/MenuPrincipal.class index d802964..0d96f8e 100644 Binary files a/target/classes/org/biblioteca/interfaz/MenuPrincipal.class and b/target/classes/org/biblioteca/interfaz/MenuPrincipal.class differ diff --git a/target/classes/org/biblioteca/interfaz/MenuPrincipalInterface.class b/target/classes/org/biblioteca/interfaz/MenuPrincipalInterface.class new file mode 100644 index 0000000..c833d63 Binary files /dev/null and b/target/classes/org/biblioteca/interfaz/MenuPrincipalInterface.class differ diff --git a/target/classes/org/biblioteca/negocio/GestionLibros.class b/target/classes/org/biblioteca/negocio/GestionLibros.class index 5749777..cd97df2 100644 Binary files a/target/classes/org/biblioteca/negocio/GestionLibros.class and b/target/classes/org/biblioteca/negocio/GestionLibros.class differ diff --git a/target/classes/org/biblioteca/negocio/GestionLibrosInterface.class b/target/classes/org/biblioteca/negocio/GestionLibrosInterface.class new file mode 100644 index 0000000..96c5837 Binary files /dev/null and b/target/classes/org/biblioteca/negocio/GestionLibrosInterface.class differ diff --git a/target/classes/org/biblioteca/negocio/GestionPrestamos.class b/target/classes/org/biblioteca/negocio/GestionPrestamos.class index 39a7724..0cc1ce2 100644 Binary files a/target/classes/org/biblioteca/negocio/GestionPrestamos.class and b/target/classes/org/biblioteca/negocio/GestionPrestamos.class differ diff --git a/target/classes/org/biblioteca/negocio/GestionPrestamosInterface.class b/target/classes/org/biblioteca/negocio/GestionPrestamosInterface.class new file mode 100644 index 0000000..4801f5a Binary files /dev/null and b/target/classes/org/biblioteca/negocio/GestionPrestamosInterface.class differ diff --git a/target/classes/org/biblioteca/negocio/GestionSocios.class b/target/classes/org/biblioteca/negocio/GestionSocios.class index ee17e34..e2bf327 100644 Binary files a/target/classes/org/biblioteca/negocio/GestionSocios.class and b/target/classes/org/biblioteca/negocio/GestionSocios.class differ diff --git a/target/classes/org/biblioteca/negocio/GestionSociosInterface.class b/target/classes/org/biblioteca/negocio/GestionSociosInterface.class new file mode 100644 index 0000000..540c4f2 Binary files /dev/null and b/target/classes/org/biblioteca/negocio/GestionSociosInterface.class differ diff --git a/target/classes/org/biblioteca/repositorio/AlmacenLibros.class b/target/classes/org/biblioteca/repositorio/AlmacenLibros.class index 6c2b472..ddfb764 100644 Binary files a/target/classes/org/biblioteca/repositorio/AlmacenLibros.class and b/target/classes/org/biblioteca/repositorio/AlmacenLibros.class differ diff --git a/target/classes/org/biblioteca/repositorio/AlmacenLibrosInterface.class b/target/classes/org/biblioteca/repositorio/AlmacenLibrosInterface.class new file mode 100644 index 0000000..0836139 Binary files /dev/null and b/target/classes/org/biblioteca/repositorio/AlmacenLibrosInterface.class differ diff --git a/target/classes/org/biblioteca/repositorio/AlmacenPrestamos.class b/target/classes/org/biblioteca/repositorio/AlmacenPrestamos.class index 87f8483..dc129e7 100644 Binary files a/target/classes/org/biblioteca/repositorio/AlmacenPrestamos.class and b/target/classes/org/biblioteca/repositorio/AlmacenPrestamos.class differ diff --git a/target/classes/org/biblioteca/repositorio/AlmacenPrestamosInterface.class b/target/classes/org/biblioteca/repositorio/AlmacenPrestamosInterface.class new file mode 100644 index 0000000..544128d Binary files /dev/null and b/target/classes/org/biblioteca/repositorio/AlmacenPrestamosInterface.class differ diff --git a/target/classes/org/biblioteca/repositorio/AlmacenSocios.class b/target/classes/org/biblioteca/repositorio/AlmacenSocios.class index 51da4fa..946d3af 100644 Binary files a/target/classes/org/biblioteca/repositorio/AlmacenSocios.class and b/target/classes/org/biblioteca/repositorio/AlmacenSocios.class differ diff --git a/target/classes/org/biblioteca/repositorio/AlmacenSociosInterface.class b/target/classes/org/biblioteca/repositorio/AlmacenSociosInterface.class new file mode 100644 index 0000000..87eb539 Binary files /dev/null and b/target/classes/org/biblioteca/repositorio/AlmacenSociosInterface.class differ