Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
144 changes: 144 additions & 0 deletions src/main/java/shopManager/MyBagManager.java
Original file line number Diff line number Diff line change
@@ -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<String,Product> 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<String,Product>();
}

public MyBagManager(OrderRepository repo,StockManager stockManager){
cesta=new HashMap<String,Product>();
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<Product> getBag() {

return (List<Product>) cesta.values();
}

@Override
public Optional<Product> findProduct(String productId) {
Product producto=null;
if(cesta.containsKey(productId))
producto=cesta.get(productId);

return Optional.ofNullable(producto);
}

@Override
public Optional<Product> 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<Product> getPriceIterator(){
//Cesta es un mapa String, Product. Necesito obtener los productos en una lista
List<Product> productos = new ArrayList(cesta.values());
//List<Product> productos = cesta.values().stream().collect(Collectors.toList());
//List<Product> productos = (List<Product>) this.getBag();
Collections.sort(productos, new PriceComparator());
Iterator iterador = productos.iterator();
return iterador;
}
}
25 changes: 18 additions & 7 deletions src/main/java/shopManager/MyProduct.java
Original file line number Diff line number Diff line change
@@ -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
*
*/

Expand All @@ -24,15 +24,17 @@ 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;
}

MyProduct(String id,int number) {
this.id=id;
this.number=number;
this.price = 0;
}
@Override
public void setId(String id) {
Expand All @@ -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;
Expand Down
25 changes: 21 additions & 4 deletions src/main/java/shopManager/Product.java
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -23,4 +38,6 @@ public interface Product {
* @return int new value
*/
public int oneLess();

public float getPrice();
}
99 changes: 99 additions & 0 deletions src/test/java/shopManager/getPrizeIteratorTest.java
Original file line number Diff line number Diff line change
@@ -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");


}

}