Existující třídy neměňte. K dispozici máte testovací třídu, která testuje základní funcionalitu. Zejména se snaží načíst nejprve správný vstup ze souboru config.txt a pak chybné vstupy ze souborů config_errorX.txt. Dále máte k dispozici třídu Demo s metodou main, jejíž výstup vám opět může sloužit pro kontrolu.

Zadání

Vytvořte třídu DrinkMachine implementující rozhraní Machine. Detaily viz JavaDoc dokumentace v rozhraní. Třída bude mít jeden veřejný kostruktor podle následujícího specifikace:

  /** 
   * Konstruktor, ktery nacte inicialni konfiguraci automatu na napoje
   * ze souboru
   * 
   * @param file nazev vstupniho souboru s konfiguraci
   * @throws IOException pri jakekoliv chybe vstupu/vystupu,
   *         nebo pri jakekoliv chybe ve formatu konfiguracniho souboru.
   *         vyjimka bude obsahovat strucny popis chyby!
   */
  public DrinkMachine(String file) throws IOException

Soubor má následující formát. Viz také soubory config.txt a config_errorX.txt v pracovním adresáři:

Příklad:
Coffee 10.50 2
Tea 8 25
je správný formát a říká, že v automatu je k dispozici 2x kafe po 10,50 Kč a 25x čaj po 8.- Kč.

Očekávaný výstup třídy Demo je následující:

--- Start ---
In stock: [Coffee (unit price=10.5, quantity=2), Tea (unit price=8.0, quantity=25), Chocolate (unit price=9.3, quantity=0)]
--- Transaction #1 ---
--- Transaction #2 ---
Out of stock Coffee
--- Finished ---
History: [Sold Coffee, Sold Tea, Sold Tea, Sold Coffee, Sold Tea, Out of stock Coffee]
In stock: [Coffee (unit price=10.5, quantity=0), Tea (unit price=8.0, quantity=22), Chocolate (unit price=9.3, quantity=0)]
Total spent: 45.0