*** **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/javadoc. *** Pro spuštění aplikace s jiným scénářem napište jeho cestu (tedy např. conf/double-spending-scenario.xml) jako první parametr při spuštění programu. Druhá varianta je vypsání cest ke všem scénářům jako argumenty programu v pořadí: kanály, nody, produkty, scénáře. ***