diff --git a/pom.xml b/pom.xml index 1d9a8cf..b02af09 100644 --- a/pom.xml +++ b/pom.xml @@ -20,6 +20,17 @@ gson 2.10.1 + + org.junit.jupiter + junit-jupiter + 5.10.0 + test + + + org.jboss.weld.se + weld-se-core + 5.1.6.Final + diff --git a/src/main/java/org/biblioteca/config/ConfigProducer.java b/src/main/java/org/biblioteca/config/ConfigProducer.java new file mode 100644 index 0000000..ed57b52 --- /dev/null +++ b/src/main/java/org/biblioteca/config/ConfigProducer.java @@ -0,0 +1,14 @@ +package org.biblioteca.config; + +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.enterprise.inject.Produces; + +import java.util.Scanner; + +@ApplicationScoped +public class ConfigProducer { + @Produces + public Scanner produceScanner(){ + return new Scanner(System.in); + } +} diff --git a/src/main/java/org/biblioteca/interfaz/MenuPrincipal.java b/src/main/java/org/biblioteca/interfaz/MenuPrincipal.java index c5fa648..6a4a29f 100644 --- a/src/main/java/org/biblioteca/interfaz/MenuPrincipal.java +++ b/src/main/java/org/biblioteca/interfaz/MenuPrincipal.java @@ -3,9 +3,10 @@ import org.biblioteca.entidades.Libro; import org.biblioteca.entidades.Prestamo; import org.biblioteca.entidades.Socio; -import org.biblioteca.negocio.GestionLibros; -import org.biblioteca.negocio.GestionPrestamos; -import org.biblioteca.negocio.GestionSocios; +import org.biblioteca.negocio.*; +import org.biblioteca.repositorio.*; +import org.jboss.weld.environment.se.Weld; +import org.jboss.weld.environment.se.WeldContainer; import java.time.LocalDate; import java.util.List; @@ -17,12 +18,16 @@ public class MenuPrincipal { private final GestionLibros gestionLibros; private final GestionSocios gestionSocios; private final GestionPrestamos gestionPrestamos; + private final AlmacenLibros almacenLibros = new AlmacenLibrosImpl(); + private final AlmacenPrestamos almacenPrestamos = new AlmacenPrestamosImpl(); + private final AlmacenSocios almacenSocios = new AlmacenSociosImpl(); + WeldContainer container = new Weld().initialize(); public MenuPrincipal(Scanner lector) { this.lector = lector; - this.gestionLibros = new GestionLibros(); - this.gestionSocios = new GestionSocios(); - this.gestionPrestamos = new GestionPrestamos(); + this.gestionLibros = new GestionLibrosImpl(almacenLibros); + this.gestionSocios = new GestionSociosImpl(almacenSocios); + this.gestionPrestamos = new GestionPrestamosImpl(almacenPrestamos, almacenLibros, almacenSocios); } public void mostrarMenuLibros() { diff --git a/src/main/java/org/biblioteca/negocio/GestionLibros.java b/src/main/java/org/biblioteca/negocio/GestionLibros.java index a45419f..823be30 100644 --- a/src/main/java/org/biblioteca/negocio/GestionLibros.java +++ b/src/main/java/org/biblioteca/negocio/GestionLibros.java @@ -1,45 +1,18 @@ package org.biblioteca.negocio; import org.biblioteca.entidades.Libro; -import org.biblioteca.repositorio.AlmacenLibros; import java.util.List; import java.util.Optional; -public class GestionLibros { - private final AlmacenLibros almacen; +public interface GestionLibros { + List listarLibros(); - public GestionLibros() { - this.almacen = new AlmacenLibros(); - } + Optional buscarLibro(String isbn); - public List listarLibros() { - return almacen.consultarTodos(); - } + boolean añadirLibro(Libro libro); - public Optional buscarLibro(String isbn) { - return almacen.consultarPorIsbn(isbn); - } + boolean eliminarLibro(String isbn); - public boolean añadirLibro(Libro libro) { - if (libro.getIsbn() == null || libro.getIsbn().isBlank()) { - return false; - } - if (libro.getTitulo() == null || libro.getTitulo().isBlank()) { - return false; - } - if (libro.getEjemplaresTotales() <= 0) { - return false; - } - return almacen.guardar(libro); - } - - public boolean eliminarLibro(String isbn) { - return almacen.borrar(isbn); - } - - public void modificarLibro(Libro libro) { - almacen.actualizar(libro); - } + void modificarLibro(Libro libro); } - diff --git a/src/main/java/org/biblioteca/negocio/GestionLibrosImpl.java b/src/main/java/org/biblioteca/negocio/GestionLibrosImpl.java new file mode 100644 index 0000000..84f0bd1 --- /dev/null +++ b/src/main/java/org/biblioteca/negocio/GestionLibrosImpl.java @@ -0,0 +1,53 @@ +package org.biblioteca.negocio; + +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; +import org.biblioteca.entidades.Libro; +import org.biblioteca.repositorio.AlmacenLibros; +import org.biblioteca.repositorio.AlmacenLibrosImpl; + +import java.util.List; +import java.util.Optional; +@ApplicationScoped +public class GestionLibrosImpl implements GestionLibros { + private final AlmacenLibros almacen; + @Inject + public GestionLibrosImpl(AlmacenLibros almacen) { + this.almacen = almacen; + } + + @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; + } + if (libro.getTitulo() == null || libro.getTitulo().isBlank()) { + return false; + } + if (libro.getEjemplaresTotales() <= 0) { + return false; + } + 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/GestionPrestamos.java b/src/main/java/org/biblioteca/negocio/GestionPrestamos.java index 45dd943..8259c12 100644 --- a/src/main/java/org/biblioteca/negocio/GestionPrestamos.java +++ b/src/main/java/org/biblioteca/negocio/GestionPrestamos.java @@ -1,86 +1,16 @@ package org.biblioteca.negocio; -import org.biblioteca.entidades.Libro; import org.biblioteca.entidades.Prestamo; -import org.biblioteca.entidades.Socio; -import org.biblioteca.repositorio.AlmacenLibros; -import org.biblioteca.repositorio.AlmacenPrestamos; -import org.biblioteca.repositorio.AlmacenSocios; -import java.time.LocalDate; import java.util.List; import java.util.Optional; -public class GestionPrestamos { - private final AlmacenPrestamos almacenPrestamos; - private final AlmacenLibros almacenLibros; - private final AlmacenSocios almacenSocios; +public interface GestionPrestamos { + List listarPrestamos(); - public GestionPrestamos() { - this.almacenPrestamos = new AlmacenPrestamos(); - this.almacenLibros = new AlmacenLibros(); - this.almacenSocios = new AlmacenSocios(); - } + Optional buscarPrestamo(String identificador); - public List listarPrestamos() { - return almacenPrestamos.consultarTodos(); - } + boolean realizarPrestamo(Prestamo prestamo); - public Optional buscarPrestamo(String identificador) { - return almacenPrestamos.consultarPorId(identificador); - } - - public boolean realizarPrestamo(Prestamo prestamo) { - if (prestamo.getIdentificador() == null || prestamo.getIdentificador().isBlank()) { - return false; - } - - Optional socioOpt = almacenSocios.consultarPorNumero(prestamo.getNumeroSocio()); - if (socioOpt.isEmpty()) { - return false; - } - - Optional libroOpt = almacenLibros.consultarPorIsbn(prestamo.getIsbnLibro()); - if (libroOpt.isEmpty()) { - return false; - } - - Libro libro = libroOpt.get(); - if (!libro.hayDisponibilidad()) { - return false; - } - - int disponibles = libro.getEjemplaresDisponibles() - 1; - libro.setEjemplaresDisponibles(disponibles); - almacenLibros.actualizar(libro); - - return almacenPrestamos.guardar(prestamo); - } - - public boolean devolverLibro(String identificador) { - Optional prestamoOpt = almacenPrestamos.consultarPorId(identificador); - if (prestamoOpt.isEmpty()) { - return false; - } - - Prestamo prestamo = prestamoOpt.get(); - if (!prestamo.isActivo()) { - return false; - } - - prestamo.setActivo(false); - prestamo.setFechaDevolucionReal(LocalDate.now()); - almacenPrestamos.actualizar(prestamo); - - Optional libroOpt = almacenLibros.consultarPorIsbn(prestamo.getIsbnLibro()); - if (libroOpt.isPresent()) { - Libro libro = libroOpt.get(); - int disponibles = libro.getEjemplaresDisponibles() + 1; - libro.setEjemplaresDisponibles(disponibles); - almacenLibros.actualizar(libro); - } - - return true; - } + boolean devolverLibro(String identificador); } - diff --git a/src/main/java/org/biblioteca/negocio/GestionPrestamosImpl.java b/src/main/java/org/biblioteca/negocio/GestionPrestamosImpl.java new file mode 100644 index 0000000..f951d9e --- /dev/null +++ b/src/main/java/org/biblioteca/negocio/GestionPrestamosImpl.java @@ -0,0 +1,90 @@ +package org.biblioteca.negocio; + +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; +import org.biblioteca.entidades.Libro; +import org.biblioteca.entidades.Prestamo; +import org.biblioteca.entidades.Socio; +import org.biblioteca.repositorio.*; + +import java.time.LocalDate; +import java.util.List; +import java.util.Optional; +@ApplicationScoped +public class GestionPrestamosImpl implements GestionPrestamos { + private final AlmacenPrestamos almacenPrestamos; + private final AlmacenLibros almacenLibros; + private final AlmacenSocios almacenSocios; + @Inject + public GestionPrestamosImpl(AlmacenPrestamos almacenPrestamos, AlmacenLibros almacenLibros, AlmacenSocios almacenSocios) { + this.almacenPrestamos = almacenPrestamos; + this.almacenLibros = almacenLibros; + this.almacenSocios = 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; + } + + Optional socioOpt = almacenSocios.consultarPorNumero(prestamo.getNumeroSocio()); + if (socioOpt.isEmpty()) { + return false; + } + + Optional libroOpt = almacenLibros.consultarPorIsbn(prestamo.getIsbnLibro()); + if (libroOpt.isEmpty()) { + return false; + } + + Libro libro = libroOpt.get(); + if (!libro.hayDisponibilidad()) { + return false; + } + + int disponibles = libro.getEjemplaresDisponibles() - 1; + libro.setEjemplaresDisponibles(disponibles); + almacenLibros.actualizar(libro); + + return almacenPrestamos.guardar(prestamo); + } + + @Override + public boolean devolverLibro(String identificador) { + Optional prestamoOpt = almacenPrestamos.consultarPorId(identificador); + if (prestamoOpt.isEmpty()) { + return false; + } + + Prestamo prestamo = prestamoOpt.get(); + if (!prestamo.isActivo()) { + return false; + } + + prestamo.setActivo(false); + prestamo.setFechaDevolucionReal(LocalDate.now()); + almacenPrestamos.actualizar(prestamo); + + Optional libroOpt = almacenLibros.consultarPorIsbn(prestamo.getIsbnLibro()); + if (libroOpt.isPresent()) { + Libro libro = libroOpt.get(); + int disponibles = libro.getEjemplaresDisponibles() + 1; + libro.setEjemplaresDisponibles(disponibles); + almacenLibros.actualizar(libro); + } + + return true; + } +} + diff --git a/src/main/java/org/biblioteca/negocio/GestionSocios.java b/src/main/java/org/biblioteca/negocio/GestionSocios.java index ec9431e..e3cad99 100644 --- a/src/main/java/org/biblioteca/negocio/GestionSocios.java +++ b/src/main/java/org/biblioteca/negocio/GestionSocios.java @@ -1,41 +1,16 @@ package org.biblioteca.negocio; import org.biblioteca.entidades.Socio; -import org.biblioteca.repositorio.AlmacenSocios; import java.util.List; import java.util.Optional; -public class GestionSocios { - private final AlmacenSocios almacen; +public interface GestionSocios { + List listarSocios(); - public GestionSocios() { - this.almacen = new AlmacenSocios(); - } + Optional buscarSocio(String numeroSocio); - public List listarSocios() { - return almacen.consultarTodos(); - } + boolean registrarSocio(Socio socio); - public Optional buscarSocio(String numeroSocio) { - return almacen.consultarPorNumero(numeroSocio); - } - - public boolean registrarSocio(Socio socio) { - if (socio.getNumeroSocio() == null || socio.getNumeroSocio().isBlank()) { - return false; - } - if (socio.getApellidos() == null || socio.getApellidos().isBlank()) { - return false; - } - if (socio.getNombre() == null || socio.getNombre().isBlank()) { - return false; - } - return almacen.guardar(socio); - } - - public boolean darDeBajaSocio(String numeroSocio) { - return almacen.borrar(numeroSocio); - } + boolean darDeBajaSocio(String numeroSocio); } - diff --git a/src/main/java/org/biblioteca/negocio/GestionSociosImpl.java b/src/main/java/org/biblioteca/negocio/GestionSociosImpl.java new file mode 100644 index 0000000..1de71e4 --- /dev/null +++ b/src/main/java/org/biblioteca/negocio/GestionSociosImpl.java @@ -0,0 +1,48 @@ +package org.biblioteca.negocio; + +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; +import org.biblioteca.entidades.Socio; +import org.biblioteca.repositorio.AlmacenSocios; +import org.biblioteca.repositorio.AlmacenSociosImpl; + +import java.util.List; +import java.util.Optional; +@ApplicationScoped +public class GestionSociosImpl implements GestionSocios { + private final AlmacenSocios almacen; + + public GestionSociosImpl(AlmacenSocios almacen) { + this.almacen = almacen; + } + @Inject + @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; + } + if (socio.getApellidos() == null || socio.getApellidos().isBlank()) { + return false; + } + if (socio.getNombre() == null || socio.getNombre().isBlank()) { + return false; + } + return almacen.guardar(socio); + } + + @Override + public boolean darDeBajaSocio(String numeroSocio) { + return almacen.borrar(numeroSocio); + } +} + diff --git a/src/main/java/org/biblioteca/repositorio/AlmacenLibros.java b/src/main/java/org/biblioteca/repositorio/AlmacenLibros.java index 2097951..267d855 100644 --- a/src/main/java/org/biblioteca/repositorio/AlmacenLibros.java +++ b/src/main/java/org/biblioteca/repositorio/AlmacenLibros.java @@ -1,109 +1,22 @@ package org.biblioteca.repositorio; -import com.google.gson.reflect.TypeToken; import org.biblioteca.entidades.Libro; -import org.biblioteca.herramientas.JsonUtil; -import java.io.IOException; -import java.lang.reflect.Type; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.ArrayList; import java.util.List; import java.util.Optional; -public class AlmacenLibros { - private final Path rutaArchivo; - private final Type tipoListaLibros = new TypeToken>(){}.getType(); - private List listaLibros = new ArrayList<>(); +public interface AlmacenLibros { + void leerDesdeArchivo(); - public AlmacenLibros() { - this.rutaArchivo = Path.of("datos", "libros.json"); - leerDesdeArchivo(); - } + void escribirEnArchivo(); - 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, tipoListaLibros); - if (temporal != null) { - listaLibros = temporal; - } - } catch (IOException excepcion) { - System.err.println("Error al leer libros: " + excepcion.getMessage()); - } - } + List consultarTodos(); - 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()); - } - } + Optional consultarPorIsbn(String isbn); - public List consultarTodos() { - leerDesdeArchivo(); - List copia = new ArrayList<>(); - for (Libro l : listaLibros) { - copia.add(l); - } - return copia; - } + boolean guardar(Libro libro); - public Optional consultarPorIsbn(String isbn) { - leerDesdeArchivo(); - for (Libro l : listaLibros) { - if (l.getIsbn().equals(isbn)) { - return Optional.of(l); - } - } - return Optional.empty(); - } + boolean borrar(String isbn); - public boolean guardar(Libro libro) { - leerDesdeArchivo(); - Optional existente = consultarPorIsbn(libro.getIsbn()); - if (existente.isPresent()) { - return false; - } - listaLibros.add(libro); - escribirEnArchivo(); - return true; - } - - public boolean borrar(String isbn) { - leerDesdeArchivo(); - boolean eliminado = false; - for (int i = 0; i < listaLibros.size(); i++) { - if (listaLibros.get(i).getIsbn().equals(isbn)) { - listaLibros.remove(i); - eliminado = true; - break; - } - } - if (eliminado) { - escribirEnArchivo(); - } - return eliminado; - } - - public void actualizar(Libro libro) { - leerDesdeArchivo(); - for (int indice = 0; indice < listaLibros.size(); indice++) { - if (listaLibros.get(indice).getIsbn().equals(libro.getIsbn())) { - listaLibros.set(indice, libro); - escribirEnArchivo(); - break; - } - } - } + void actualizar(Libro libro); } - diff --git a/src/main/java/org/biblioteca/repositorio/AlmacenLibrosImpl.java b/src/main/java/org/biblioteca/repositorio/AlmacenLibrosImpl.java new file mode 100644 index 0000000..dfba8d6 --- /dev/null +++ b/src/main/java/org/biblioteca/repositorio/AlmacenLibrosImpl.java @@ -0,0 +1,118 @@ +package org.biblioteca.repositorio; + +import com.google.gson.reflect.TypeToken; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; +import org.biblioteca.entidades.Libro; +import org.biblioteca.herramientas.JsonUtil; + +import java.io.IOException; +import java.lang.reflect.Type; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; +@ApplicationScoped +public class AlmacenLibrosImpl implements AlmacenLibros { + private final Path rutaArchivo; + private final Type tipoListaLibros = new TypeToken>(){}.getType(); + private List listaLibros = new ArrayList<>(); + + public AlmacenLibrosImpl() { + this.rutaArchivo = Path.of("datos", "libros.json"); + leerDesdeArchivo(); + } + @Inject + @Override + public 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, tipoListaLibros); + if (temporal != null) { + listaLibros = temporal; + } + } catch (IOException excepcion) { + System.err.println("Error al leer libros: " + excepcion.getMessage()); + } + } + + @Override + public 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<>(); + for (Libro l : listaLibros) { + copia.add(l); + } + return copia; + } + + @Override + public Optional consultarPorIsbn(String isbn) { + leerDesdeArchivo(); + for (Libro l : listaLibros) { + if (l.getIsbn().equals(isbn)) { + return Optional.of(l); + } + } + return Optional.empty(); + } + + @Override + public boolean guardar(Libro libro) { + leerDesdeArchivo(); + Optional existente = consultarPorIsbn(libro.getIsbn()); + if (existente.isPresent()) { + return false; + } + listaLibros.add(libro); + escribirEnArchivo(); + return true; + } + + @Override + public boolean borrar(String isbn) { + leerDesdeArchivo(); + boolean eliminado = false; + for (int i = 0; i < listaLibros.size(); i++) { + if (listaLibros.get(i).getIsbn().equals(isbn)) { + listaLibros.remove(i); + eliminado = true; + break; + } + } + if (eliminado) { + escribirEnArchivo(); + } + return eliminado; + } + + @Override + public void actualizar(Libro libro) { + leerDesdeArchivo(); + for (int indice = 0; indice < listaLibros.size(); indice++) { + if (listaLibros.get(indice).getIsbn().equals(libro.getIsbn())) { + listaLibros.set(indice, libro); + escribirEnArchivo(); + break; + } + } + } +} + diff --git a/src/main/java/org/biblioteca/repositorio/AlmacenPrestamos.java b/src/main/java/org/biblioteca/repositorio/AlmacenPrestamos.java index 05efd77..c604e22 100644 --- a/src/main/java/org/biblioteca/repositorio/AlmacenPrestamos.java +++ b/src/main/java/org/biblioteca/repositorio/AlmacenPrestamos.java @@ -1,109 +1,22 @@ package org.biblioteca.repositorio; -import com.google.gson.reflect.TypeToken; import org.biblioteca.entidades.Prestamo; -import org.biblioteca.herramientas.JsonUtil; -import java.io.IOException; -import java.lang.reflect.Type; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.ArrayList; import java.util.List; import java.util.Optional; -public class AlmacenPrestamos { - private final Path rutaArchivo; - private final Type tipoListaPrestamos = new TypeToken>(){}.getType(); - private List listaPrestamos = new ArrayList<>(); +public interface AlmacenPrestamos { + void leerDesdeArchivo(); - public AlmacenPrestamos() { - this.rutaArchivo = Path.of("datos", "prestamos.json"); - leerDesdeArchivo(); - } + void escribirEnArchivo(); - 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()); - } - } + List consultarTodos(); - 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()); - } - } + Optional consultarPorId(String identificador); - public List consultarTodos() { - leerDesdeArchivo(); - List copia = new ArrayList<>(); - for (Prestamo p : listaPrestamos) { - copia.add(p); - } - return copia; - } + boolean guardar(Prestamo prestamo); - public Optional consultarPorId(String identificador) { - leerDesdeArchivo(); - for (Prestamo p : listaPrestamos) { - if (p.getIdentificador().equals(identificador)) { - return Optional.of(p); - } - } - return Optional.empty(); - } + boolean borrar(String identificador); - public boolean guardar(Prestamo prestamo) { - leerDesdeArchivo(); - Optional existente = consultarPorId(prestamo.getIdentificador()); - if (existente.isPresent()) { - return false; - } - listaPrestamos.add(prestamo); - escribirEnArchivo(); - return true; - } - - public boolean borrar(String identificador) { - leerDesdeArchivo(); - boolean eliminado = false; - for (int i = 0; i < listaPrestamos.size(); i++) { - if (listaPrestamos.get(i).getIdentificador().equals(identificador)) { - listaPrestamos.remove(i); - eliminado = true; - break; - } - } - if (eliminado) { - escribirEnArchivo(); - } - return eliminado; - } - - public void actualizar(Prestamo prestamo) { - leerDesdeArchivo(); - for (int indice = 0; indice < listaPrestamos.size(); indice++) { - if (listaPrestamos.get(indice).getIdentificador().equals(prestamo.getIdentificador())) { - listaPrestamos.set(indice, prestamo); - escribirEnArchivo(); - break; - } - } - } + void actualizar(Prestamo prestamo); } - diff --git a/src/main/java/org/biblioteca/repositorio/AlmacenPrestamosImpl.java b/src/main/java/org/biblioteca/repositorio/AlmacenPrestamosImpl.java new file mode 100644 index 0000000..6347909 --- /dev/null +++ b/src/main/java/org/biblioteca/repositorio/AlmacenPrestamosImpl.java @@ -0,0 +1,118 @@ +package org.biblioteca.repositorio; + +import com.google.gson.reflect.TypeToken; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; +import org.biblioteca.entidades.Prestamo; +import org.biblioteca.herramientas.JsonUtil; + +import java.io.IOException; +import java.lang.reflect.Type; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; +@ApplicationScoped +public class AlmacenPrestamosImpl implements AlmacenPrestamos { + private final Path rutaArchivo; + private final Type tipoListaPrestamos = new TypeToken>(){}.getType(); + private List listaPrestamos = new ArrayList<>(); + + public AlmacenPrestamosImpl() { + this.rutaArchivo = Path.of("datos", "prestamos.json"); + leerDesdeArchivo(); + } + @Inject + @Override + public 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()); + } + } + + @Override + public 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<>(); + for (Prestamo p : listaPrestamos) { + copia.add(p); + } + return copia; + } + + @Override + public Optional consultarPorId(String identificador) { + leerDesdeArchivo(); + for (Prestamo p : listaPrestamos) { + if (p.getIdentificador().equals(identificador)) { + return Optional.of(p); + } + } + return Optional.empty(); + } + + @Override + public boolean guardar(Prestamo prestamo) { + leerDesdeArchivo(); + Optional existente = consultarPorId(prestamo.getIdentificador()); + if (existente.isPresent()) { + return false; + } + listaPrestamos.add(prestamo); + escribirEnArchivo(); + return true; + } + + @Override + public boolean borrar(String identificador) { + leerDesdeArchivo(); + boolean eliminado = false; + for (int i = 0; i < listaPrestamos.size(); i++) { + if (listaPrestamos.get(i).getIdentificador().equals(identificador)) { + listaPrestamos.remove(i); + eliminado = true; + break; + } + } + if (eliminado) { + escribirEnArchivo(); + } + return eliminado; + } + + @Override + public void actualizar(Prestamo prestamo) { + leerDesdeArchivo(); + for (int indice = 0; indice < listaPrestamos.size(); indice++) { + if (listaPrestamos.get(indice).getIdentificador().equals(prestamo.getIdentificador())) { + listaPrestamos.set(indice, prestamo); + escribirEnArchivo(); + break; + } + } + } +} + diff --git a/src/main/java/org/biblioteca/repositorio/AlmacenSocios.java b/src/main/java/org/biblioteca/repositorio/AlmacenSocios.java index 0ebeaca..66ceed9 100644 --- a/src/main/java/org/biblioteca/repositorio/AlmacenSocios.java +++ b/src/main/java/org/biblioteca/repositorio/AlmacenSocios.java @@ -1,98 +1,20 @@ package org.biblioteca.repositorio; -import com.google.gson.reflect.TypeToken; import org.biblioteca.entidades.Socio; -import org.biblioteca.herramientas.JsonUtil; -import java.io.IOException; -import java.lang.reflect.Type; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.ArrayList; import java.util.List; import java.util.Optional; -public class AlmacenSocios { - private final Path rutaArchivo; - private final Type tipoListaSocios = new TypeToken>(){}.getType(); - private List listaSocios = new ArrayList<>(); +public interface AlmacenSocios { + void leerDesdeArchivo(); - public AlmacenSocios() { - this.rutaArchivo = Path.of("datos", "socios.json"); - leerDesdeArchivo(); - } + void escribirEnArchivo(); - 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()); - } - } + List consultarTodos(); - 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()); - } - } + Optional consultarPorNumero(String numeroSocio); - public List consultarTodos() { - leerDesdeArchivo(); - List copia = new ArrayList<>(); - for (Socio s : listaSocios) { - copia.add(s); - } - return copia; - } + boolean guardar(Socio socio); - public Optional consultarPorNumero(String numeroSocio) { - leerDesdeArchivo(); - for (Socio s : listaSocios) { - if (s.getNumeroSocio().equals(numeroSocio)) { - return Optional.of(s); - } - } - return Optional.empty(); - } - - public boolean guardar(Socio socio) { - leerDesdeArchivo(); - Optional existente = consultarPorNumero(socio.getNumeroSocio()); - if (existente.isPresent()) { - return false; - } - listaSocios.add(socio); - escribirEnArchivo(); - return true; - } - - public boolean borrar(String numeroSocio) { - leerDesdeArchivo(); - boolean eliminado = false; - for (int i = 0; i < listaSocios.size(); i++) { - if (listaSocios.get(i).getNumeroSocio().equals(numeroSocio)) { - listaSocios.remove(i); - eliminado = true; - break; - } - } - if (eliminado) { - escribirEnArchivo(); - } - return eliminado; - } + boolean borrar(String numeroSocio); } - diff --git a/src/main/java/org/biblioteca/repositorio/AlmacenSociosImpl.java b/src/main/java/org/biblioteca/repositorio/AlmacenSociosImpl.java new file mode 100644 index 0000000..5f4e673 --- /dev/null +++ b/src/main/java/org/biblioteca/repositorio/AlmacenSociosImpl.java @@ -0,0 +1,106 @@ +package org.biblioteca.repositorio; + +import com.google.gson.reflect.TypeToken; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; +import org.biblioteca.entidades.Socio; +import org.biblioteca.herramientas.JsonUtil; + +import java.io.IOException; +import java.lang.reflect.Type; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; +@ApplicationScoped +public class AlmacenSociosImpl implements AlmacenSocios { + private final Path rutaArchivo; + private final Type tipoListaSocios = new TypeToken>(){}.getType(); + private List listaSocios = new ArrayList<>(); + + public AlmacenSociosImpl() { + this.rutaArchivo = Path.of("datos", "socios.json"); + leerDesdeArchivo(); + } + @Inject + @Override + public 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()); + } + } + + @Override + public 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<>(); + for (Socio s : listaSocios) { + copia.add(s); + } + return copia; + } + + @Override + public Optional consultarPorNumero(String numeroSocio) { + leerDesdeArchivo(); + for (Socio s : listaSocios) { + if (s.getNumeroSocio().equals(numeroSocio)) { + return Optional.of(s); + } + } + return Optional.empty(); + } + + @Override + public boolean guardar(Socio socio) { + leerDesdeArchivo(); + Optional existente = consultarPorNumero(socio.getNumeroSocio()); + if (existente.isPresent()) { + return false; + } + listaSocios.add(socio); + escribirEnArchivo(); + return true; + } + + @Override + public boolean borrar(String numeroSocio) { + leerDesdeArchivo(); + boolean eliminado = false; + for (int i = 0; i < listaSocios.size(); i++) { + if (listaSocios.get(i).getNumeroSocio().equals(numeroSocio)) { + listaSocios.remove(i); + eliminado = true; + break; + } + } + if (eliminado) { + escribirEnArchivo(); + } + return eliminado; + } +} + diff --git a/src/main/resources/META-INF/beans.xml b/src/main/resources/META-INF/beans.xml new file mode 100644 index 0000000..3e8774e --- /dev/null +++ b/src/main/resources/META-INF/beans.xml @@ -0,0 +1,7 @@ + + + diff --git a/target/classes/org/biblioteca/interfaz/MenuPrincipal.class b/target/classes/org/biblioteca/interfaz/MenuPrincipal.class index d802964..53163d8 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/negocio/GestionLibros.class b/target/classes/org/biblioteca/negocio/GestionLibros.class index 5749777..d63bad8 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/GestionPrestamos.class b/target/classes/org/biblioteca/negocio/GestionPrestamos.class index 39a7724..a22282a 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/GestionSocios.class b/target/classes/org/biblioteca/negocio/GestionSocios.class index ee17e34..f40629f 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/repositorio/AlmacenLibros$1.class b/target/classes/org/biblioteca/repositorio/AlmacenLibros$1.class deleted file mode 100644 index 6de083a..0000000 Binary files a/target/classes/org/biblioteca/repositorio/AlmacenLibros$1.class and /dev/null differ diff --git a/target/classes/org/biblioteca/repositorio/AlmacenLibros.class b/target/classes/org/biblioteca/repositorio/AlmacenLibros.class index 6c2b472..7058913 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/AlmacenPrestamos$1.class b/target/classes/org/biblioteca/repositorio/AlmacenPrestamos$1.class deleted file mode 100644 index 1adbb21..0000000 Binary files a/target/classes/org/biblioteca/repositorio/AlmacenPrestamos$1.class and /dev/null differ diff --git a/target/classes/org/biblioteca/repositorio/AlmacenPrestamos.class b/target/classes/org/biblioteca/repositorio/AlmacenPrestamos.class index 87f8483..6fcd257 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/AlmacenSocios$1.class b/target/classes/org/biblioteca/repositorio/AlmacenSocios$1.class deleted file mode 100644 index fbb9c8c..0000000 Binary files a/target/classes/org/biblioteca/repositorio/AlmacenSocios$1.class and /dev/null differ diff --git a/target/classes/org/biblioteca/repositorio/AlmacenSocios.class b/target/classes/org/biblioteca/repositorio/AlmacenSocios.class index 51da4fa..f738945 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/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst index 21a2905..815d7ea 100644 --- a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst +++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -1,6 +1,5 @@ org\biblioteca\entidades\Libro.class org\biblioteca\entidades\Prestamo.class -org\biblioteca\repositorio\AlmacenLibros$1.class org\biblioteca\entidades\Socio.class org\biblioteca\repositorio\AlmacenPrestamos.class org\biblioteca\herramientas\JsonUtil$1.class @@ -12,6 +11,4 @@ org\biblioteca\interfaz\MenuPrincipal.class org\biblioteca\repositorio\AlmacenLibros.class org\biblioteca\repositorio\AlmacenSocios.class org\biblioteca\negocio\GestionSocios.class -org\biblioteca\repositorio\AlmacenSocios$1.class org\biblioteca\herramientas\JsonUtil.class -org\biblioteca\repositorio\AlmacenPrestamos$1.class diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst index a4614bd..2b7d220 100644 --- a/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -1,12 +1,18 @@ -I:\JAVA\Proyectos\Examen2EVAEXT\src\main\java\org\biblioteca\Aplicacion.java -I:\JAVA\Proyectos\Examen2EVAEXT\src\main\java\org\biblioteca\entidades\Libro.java -I:\JAVA\Proyectos\Examen2EVAEXT\src\main\java\org\biblioteca\entidades\Prestamo.java -I:\JAVA\Proyectos\Examen2EVAEXT\src\main\java\org\biblioteca\entidades\Socio.java -I:\JAVA\Proyectos\Examen2EVAEXT\src\main\java\org\biblioteca\herramientas\JsonUtil.java -I:\JAVA\Proyectos\Examen2EVAEXT\src\main\java\org\biblioteca\interfaz\MenuPrincipal.java -I:\JAVA\Proyectos\Examen2EVAEXT\src\main\java\org\biblioteca\negocio\GestionLibros.java -I:\JAVA\Proyectos\Examen2EVAEXT\src\main\java\org\biblioteca\negocio\GestionPrestamos.java -I:\JAVA\Proyectos\Examen2EVAEXT\src\main\java\org\biblioteca\negocio\GestionSocios.java -I:\JAVA\Proyectos\Examen2EVAEXT\src\main\java\org\biblioteca\repositorio\AlmacenLibros.java -I:\JAVA\Proyectos\Examen2EVAEXT\src\main\java\org\biblioteca\repositorio\AlmacenPrestamos.java -I:\JAVA\Proyectos\Examen2EVAEXT\src\main\java\org\biblioteca\repositorio\AlmacenSocios.java +C:\Users\1dam\IdeaProjects\Examen2EVAEXTSamuel\src\main\java\org\biblioteca\Aplicacion.java +C:\Users\1dam\IdeaProjects\Examen2EVAEXTSamuel\src\main\java\org\biblioteca\entidades\Libro.java +C:\Users\1dam\IdeaProjects\Examen2EVAEXTSamuel\src\main\java\org\biblioteca\entidades\Prestamo.java +C:\Users\1dam\IdeaProjects\Examen2EVAEXTSamuel\src\main\java\org\biblioteca\entidades\Socio.java +C:\Users\1dam\IdeaProjects\Examen2EVAEXTSamuel\src\main\java\org\biblioteca\herramientas\JsonUtil.java +C:\Users\1dam\IdeaProjects\Examen2EVAEXTSamuel\src\main\java\org\biblioteca\interfaz\MenuPrincipal.java +C:\Users\1dam\IdeaProjects\Examen2EVAEXTSamuel\src\main\java\org\biblioteca\negocio\GestionLibros.java +C:\Users\1dam\IdeaProjects\Examen2EVAEXTSamuel\src\main\java\org\biblioteca\negocio\GestionLibrosImpl.java +C:\Users\1dam\IdeaProjects\Examen2EVAEXTSamuel\src\main\java\org\biblioteca\negocio\GestionPrestamos.java +C:\Users\1dam\IdeaProjects\Examen2EVAEXTSamuel\src\main\java\org\biblioteca\negocio\GestionPrestamosImpl.java +C:\Users\1dam\IdeaProjects\Examen2EVAEXTSamuel\src\main\java\org\biblioteca\negocio\GestionSocios.java +C:\Users\1dam\IdeaProjects\Examen2EVAEXTSamuel\src\main\java\org\biblioteca\negocio\GestionSociosImpl.java +C:\Users\1dam\IdeaProjects\Examen2EVAEXTSamuel\src\main\java\org\biblioteca\repositorio\AlmacenLibros.java +C:\Users\1dam\IdeaProjects\Examen2EVAEXTSamuel\src\main\java\org\biblioteca\repositorio\AlmacenLibrosImpl.java +C:\Users\1dam\IdeaProjects\Examen2EVAEXTSamuel\src\main\java\org\biblioteca\repositorio\AlmacenPrestamos.java +C:\Users\1dam\IdeaProjects\Examen2EVAEXTSamuel\src\main\java\org\biblioteca\repositorio\AlmacenPrestamosImpl.java +C:\Users\1dam\IdeaProjects\Examen2EVAEXTSamuel\src\main\java\org\biblioteca\repositorio\AlmacenSocios.java +C:\Users\1dam\IdeaProjects\Examen2EVAEXTSamuel\src\main\java\org\biblioteca\repositorio\AlmacenSociosImpl.java