Added Customer protection against eating non existing food. Added blocking of logs from Money.class Fixed some stuff and bugs.
Funkční požadavky:
- F1: package node
- F2: package operation
- F3: OperationBase / lastOperation
- F4: FoodChainReportVisitor
- F5: package channel
- F6: scénář double-spending-scenario.xml + kontrola při změně productState (konkr. změna na stav IN_REQUIREMENT)
- F7: lastOperation se nastavuje pouze v konstruktoru a není možné ji ji přepsat zpětně => nelze odsimulovat
- F8: Product => setStateTo...()
- F9: Requirement + NodeBase / update()
- F10: package reporting
Použité návrhové vzory:
- Facade - FactoryManager
- Object pool - Skupina tříd v package pool
- Simple factory - Skupina tříd v package factory
- Strategy - ScenarioStep + odděděné třídy
- Observer - Kombinace channel + node (observable + observer)
- State - State machine ve třídě produktu
- Visitor - Skupina tříd použitá v reportingu
- Singleton - Využit u poolů a factory
- Builder - Report builder
Nefunkční požadavky:
- Aplikace nepožaduje autentizaci ani autorizaci.
- Do konzole se při každém ticku vypisují provedené úkony. Z toho pak vzniká TransactionReport.
- V systému není centrální autorita, jednotlivé nody na sebe nevidí a jediná třída přes kterou procházejí všechny transakce je SignatureManager, který je v tomto směru naprosto neutrální. Aplikace běží pouze v jednom threadu.
- Všechny proměnné jsou private nebo protected. Většina proměnných je final, abychom se vyhnuli např. změtným úpravám transakcí.
- SignatureManager přidává na transakce Signature, které následně i validuje. Node zahazuje (ukládá jako neplatné) všechny nevalidní transakce.
- Reporty se generují do stejnojmenných textových souborů.
- Konfigurace probíhá pomocí XML souborů (defaultně ve složce conf).
Požadované výstupy:
- Diskrétní kroky jsou realizovány pomocí třídy Ticker resp. metody tick() na jednotlivých třídách.
- Diagramy jsou ve složce resources v souboru FoodChain.eap.
- Javadoc je ve složce resources v souboru FoodChain.html.
Description