From 82bf84817896414a503fdceb6a2fab0a3398f838 Mon Sep 17 00:00:00 2001 From: Ezequiel-UNI <73581792+Ezequiel-UNI@users.noreply.github.com> Date: Sat, 16 Jan 2021 11:01:58 +0100 Subject: [PATCH 1/3] =?UTF-8?q?Se=20a=C3=B1ade=20el=20m=C3=A9todo=20getPri?= =?UTF-8?q?ce()=20a=20la=20interfaz=20Product?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Se añade el método getPrice() a la interfaz Product Se añade a la implementación de la interfaz MyProduct el atributo Price con métodos getter y setter --- src/main/java/shopManager/MyProduct.java | 25 +++++++++++++++++------- src/main/java/shopManager/Product.java | 25 ++++++++++++++++++++---- 2 files changed, 39 insertions(+), 11 deletions(-) diff --git a/src/main/java/shopManager/MyProduct.java b/src/main/java/shopManager/MyProduct.java index 3a7b995..5724a01 100644 --- a/src/main/java/shopManager/MyProduct.java +++ b/src/main/java/shopManager/MyProduct.java @@ -1,18 +1,18 @@ -package shopManager; +package model; import java.io.Serializable; /** * Producto es la clase que representa todos los productos de la tienda * - * el id (string) se usará como clave del mapa hazelcast * + * el id (string) se usar� como clave del mapa hazelcast * */ import java.util.logging.*; /** - * @author Isabel Román + * @author Isabel Rom�n * @version 0.0 - * Primera versión de la clase MyProduct que implementa la interfaz Product y Serializable, porque debe guardarse en un mapa hazelcast + * Primera versi�n de la clase MyProduct que implementa la interfaz Product y Serializable, porque debe guardarse en un mapa hazelcast * */ @@ -24,8 +24,9 @@ public class MyProduct implements Product,Serializable{ //identificador del producto private String id; private int number; + private float price; - MyProduct(String id) { + public MyProduct(String id) { this.id=id; number=1; } @@ -33,6 +34,7 @@ public class MyProduct implements Product,Serializable{ MyProduct(String id,int number) { this.id=id; this.number=number; + this.price = 0; } @Override public void setId(String id) { @@ -57,13 +59,22 @@ public int oneMore() { number++; return number; } + //Nuevos metodos + public float getPrice() { + return this.price; + } + public void setPrice(float price) { + this.price = price; + } + + @Override public int oneLess(){ if (number!= 0){ number--; - trazador.info("El número de unidades del producto se reduce uno"); + trazador.info("El n�mero de unidades del producto se reduce uno"); } else { - trazador.info("El número de unidades del producto no se puede reducir porque es cero"); + trazador.info("El n�mero de unidades del producto no se puede reducir porque es cero"); } trazador.info(this.toString()); return number; diff --git a/src/main/java/shopManager/Product.java b/src/main/java/shopManager/Product.java index 74ab7ff..4df75ee 100644 --- a/src/main/java/shopManager/Product.java +++ b/src/main/java/shopManager/Product.java @@ -1,17 +1,32 @@ -package shopManager; +package model; /** * - * @author Isabel Román + * @author Isabel Rom�n * @version 0.0. - * Primera versión de la interfaz Product, los elementos que vende nuestra tienda + * Primera versi�n de la interfaz Product, los elementos que vende nuestra tienda * */ -public interface Product { +public interface Product{ + /** + * @param id identificador que se le quiere poner al producto + */ public void setId(String id); + /** + * + * @return devuelve el identificador del producto + */ public String getId(); + /** + * + * @param number n�mero de unidades del producto + */ public void setNumber(int number); + /** + * + * @return devuelve el n�mero de unidades del producto + */ public int getNumber(); /** * Suma uno @@ -23,4 +38,6 @@ public interface Product { * @return int new value */ public int oneLess(); + + public float getPrice(); } \ No newline at end of file From 11a11de927328046aec21dbc3e37ad994f0b538b Mon Sep 17 00:00:00 2001 From: Ezequiel-UNI <73581792+Ezequiel-UNI@users.noreply.github.com> Date: Sat, 16 Jan 2021 11:03:10 +0100 Subject: [PATCH 2/3] =?UTF-8?q?Se=20a=C3=B1ade=20la=20clase=20BagManager?= =?UTF-8?q?=20con=20el=20m=C3=A9todo=20getPriceIterator()?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/shopManager/MyBagManager.java | 144 ++++++++++++++++++++ 1 file changed, 144 insertions(+) create mode 100644 src/main/java/shopManager/MyBagManager.java diff --git a/src/main/java/shopManager/MyBagManager.java b/src/main/java/shopManager/MyBagManager.java new file mode 100644 index 0000000..d0048ef --- /dev/null +++ b/src/main/java/shopManager/MyBagManager.java @@ -0,0 +1,144 @@ +/** + * + */ +package shopmanager; + +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Optional; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.logging.Logger; +import java.util.stream.Collectors; + +import exceptions.NoEnoughStock; +import exceptions.NotInStock; +import exceptions.UnknownRepo; +import model.MyOrder; +import model.MyProduct; +import model.Order; +import model.Product; +import persistency.OrderRepository; +import shopmanager.StockManager; +/** + * @author Isabel Rom�n + * @author Ezequiel Montero + * + */ +public class MyBagManager implements BagManager { + private static Logger trazador=Logger.getLogger(MyStockManager.class.getName()); + private Map cesta; + private OrderRepository repositorio; + private StockManager stock; + private Order order; + private PriceComparator comparadorPrecio= new PriceComparator(); + + /** + * Al hacer privado el constructor obligo a que la construcci�n del objeto se haga siempre a trav�s de newBag + */ + public MyBagManager(){ + cesta=new HashMap(); + } + + public MyBagManager(OrderRepository repo,StockManager stockManager){ + cesta=new HashMap(); + repositorio=repo; + stock=stockManager; + } + + + + @Override + public Product addProduct(Product newProduct)throws NoEnoughStock, NotInStock{ + String msg="El id del producto es "+newProduct.getId()+" y las unidades a a�adir"+newProduct.getNumber(); + trazador.info(msg); + //quito del stock las unidades solicitadas, si no hubiera suficientes lanza NoEnoughStock, si el producto no existe lanza NotInStock + //stock.lessProduct(newProduct); + if(cesta.containsKey(newProduct.getId())){ + int antes=cesta.get(newProduct.getId()).getNumber(); + newProduct.setNumber(newProduct.getNumber()+antes); + cesta.put(newProduct.getId(), newProduct); + } + else + cesta.put(newProduct.getId(), newProduct); + return newProduct; + } + + @Override + public Product lessProduct(Product oldProduct)throws NotInStock { + // TODO Auto-generated method stub + return null; + } + + @Override + public boolean removeProduct(Product oldProduct)throws NotInStock { + // TODO Auto-generated method stub + return false; + + } + + @Override + public void removeProduct(String productId)throws NotInStock { + // TODO Auto-generated method stub + + } + + @Override + public Collection getBag() { + + return (List) cesta.values(); + } + + @Override + public Optional findProduct(String productId) { + Product producto=null; + if(cesta.containsKey(productId)) + producto=cesta.get(productId); + + return Optional.ofNullable(producto); + } + + @Override + public Optional findProduct(Product product) { + return findProduct(product.getId()); + } + + @Override + public Order order() { + // No crea el objeto order, a�n no est� resuelto qui�n ser� el responsable de elegir el tipo concreto + try{ + trazador.info("Intento persistir el stock"); + stock.save(); + trazador.info("Actualizo el pedido"); + order.setProducts(cesta.values()); + trazador.info("Persisto el pedido"); + repositorio.save(order); + + } catch (UnknownRepo ex) { + trazador.info("No ha sido posible guardar el pedido, no se estableci� el repositorio en el stock"); + } + + return order; + } + + @Override + public void reset() { + // Deber�a restaurar el stock, pero por ahora no se hace, s�lo borra + cesta.clear(); + + } + + public Iterator getPriceIterator(){ + //Cesta es un mapa String, Product. Necesito obtener los productos en una lista + List productos = new ArrayList(cesta.values()); + //List productos = cesta.values().stream().collect(Collectors.toList()); + //List productos = (List) this.getBag(); + Collections.sort(productos, new PriceComparator()); + Iterator iterador = productos.iterator(); + return iterador; + } +} From e9bbf8093867cabc693440e05372ccdda37095a0 Mon Sep 17 00:00:00 2001 From: Ezequiel-UNI <73581792+Ezequiel-UNI@users.noreply.github.com> Date: Sat, 16 Jan 2021 11:04:26 +0100 Subject: [PATCH 3/3] =?UTF-8?q?Se=20a=C3=B1ade=20la=20clase=20para=20proba?= =?UTF-8?q?r=20el=20m=C3=A9todo=20getPriceIterator()?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../shopManager/getPrizeIteratorTest.java | 99 +++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 src/test/java/shopManager/getPrizeIteratorTest.java diff --git a/src/test/java/shopManager/getPrizeIteratorTest.java b/src/test/java/shopManager/getPrizeIteratorTest.java new file mode 100644 index 0000000..0ceafbd --- /dev/null +++ b/src/test/java/shopManager/getPrizeIteratorTest.java @@ -0,0 +1,99 @@ +package shopManager; + +import static org.junit.jupiter.api.Assertions.*; + +import java.util.Iterator; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Tag; +import org.junit.jupiter.api.Test; + +import exceptions.NoEnoughStock; +import exceptions.NotInStock; +import model.MyProduct; +import model.Product; +import shopmanager.MyBagManager; + +class getPrizeIteratorTest{ + + @Test + @Tag("unidad") + @DisplayName("Prueba del iterador que recorre la cesta de menor a menor precio") + void testCompare() { + MyProduct producto1 = new MyProduct("Producto1"); + MyProduct producto2 = new MyProduct("Producto2"); + + producto1.setPrice(6); + producto2.setPrice(15); + + MyBagManager micestaTesteada = new MyBagManager(); + + try { + micestaTesteada.addProduct(producto1); + } catch (NoEnoughStock | NotInStock e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + try { + micestaTesteada.addProduct(producto2); + } catch (NoEnoughStock | NotInStock e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + //Deberia devolver el test primero producto2 y luego producto 1. + Iterator it = micestaTesteada.getPriceIterator(); + + assertEquals((float)15, ((MyProduct) it.next()).getPrice(),"Primero debería salir el producto 2 del iterador"); + assertEquals((float)6,((MyProduct) it.next()).getPrice(),"Segundo debería salir el producto 1 del iterador"); + + + MyProduct producto3 = new MyProduct("Producto3"); + MyProduct producto4 = new MyProduct("Producto4"); + MyProduct producto5 = new MyProduct("Producto5"); + MyProduct producto6 = new MyProduct("Producto6"); + + producto3.setPrice(6); + producto4.setPrice(25); + producto5.setPrice(36); + producto6.setPrice(5); + + MyBagManager micestaTesteada2 = new MyBagManager(); + + try { + micestaTesteada2.addProduct(producto3); + } catch (NoEnoughStock | NotInStock e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + try { + micestaTesteada2.addProduct(producto4); + } catch (NoEnoughStock | NotInStock e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + try { + micestaTesteada2.addProduct(producto5); + } catch (NoEnoughStock | NotInStock e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + try { + micestaTesteada2.addProduct(producto6); + } catch (NoEnoughStock | NotInStock e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + //Deberia devolver el test primero producto2 y luego producto 1. + Iterator it2 = micestaTesteada2.getPriceIterator(); + + assertEquals((float)36,((MyProduct) it2.next()).getPrice(),"Primero debería salir el producto 5 del iterador"); + assertEquals((float)25,((MyProduct) it2.next()).getPrice(),"Segundo debería salir el producto 4 del iterador"); + assertEquals((float)6,((MyProduct) it2.next()).getPrice(),"Tercero debería salir el producto 3 del iterador"); + assertEquals((float)5,((MyProduct) it2.next()).getPrice(),"Cuarto debería salir el producto 6 del iterador"); + + + } + +} \ No newline at end of file