package y1.pos;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
import y1.wms.Item;
/**
* Tellimuse klass.
*
* Tellimuse infot hoitakse hashmap struktuuris, kus key on kauba nimi
* ning value on kauba kogus integerina.
* Andmestruktuuri andmete lisamiseks on meetod add.
* Igal tellimusel on unikaalne kood, esimesel tellimusel 1, teisel 2 jne.
* Realiseeritud on toString meetod, mis tagastab tellimuse ID ja seal
* sisalduvad tooted ja nende hulga.
* Loodud on avalikud getQty ja getItem meetodid, et andmed oleks loetavad
* teises klassis Iterator'it kasutades.
*
* @author Jaak Laanpere
*
*/
public class Order {
private HashMap<Item, Integer> orderItems;
private static int lastOutputId = 0;
private int orderId;
/**
* Tellimuse klassi konstruktor.
* Väärtustab tellimuse unikaalse ID ja loob uue
* HashMap andmestruktuuri, millega kaupu hoida.
*
*/
public Order(){
this.orderId = ++lastOutputId;
this.orderItems = new HashMap<Item, Integer>();
}
/**
* Tellimusele kaupade lisamise meetod.
* Parameetritena võtab kauba ning lisatava koguse integerina.
* Kui lisatav kaup on tellimuses juba olemas, kasvatab lihtsalt selle kogust.
*
* Tagastab true/false vastavalt sellele, kas kaup lisati tellimusele või mitte.
*
* @param item — kaup
* @param quantity — kauba hulk
* @return true/false — lisamine õnnestus/lisamine ebaõnnestus
*/
public boolean add(Item item, int quantity){
if(item!=null && quantity>0){
if(this.orderItems.containsKey(item)){
orderItems.put(item, orderItems.get(item)+quantity);
}else{
orderItems.put(item, quantity);
}
return true;
}else{
return false;
}
}
/**
* Meetod, mis tagastab kõik kaubad ühes tellimuses.
*
* @return kõik kauba tellimused
*/
public Set<Item> getItem(){
return orderItems.keySet();
}
/**
* Meetod, mis tagastab kõik eri kaupade kogused ühes tellimuses.
*
* @return kõik eri kaupade tellimused
*
*/
public Collection<Integer> getQty(){
return orderItems.values();
}
/**
* Tagastab loetaval kujul esitatava info tellimuse kohta string'ina.
*
*/
public String toString(){
String order = "Tellimus nr: " + this.orderId + " sisaldab ";
Iterator<Item> iterator = this.orderItems.keySet().iterator();
while(iterator.hasNext()){
Item item = iterator.next();
if(order != "Tellimus nr: " + this.orderId + " sisaldab "){
order += ", ";
}
order += this.orderItems.get(item) + "x " + "(" + item + ")";
}
return order;
}
}