package Ġau . com . di us . p act . external Ċ Ċ import Ġau . com . di us . p act . model . Provider State Ċ import Ġau . com . di us . p act . model . Request Response P act Ċ import Ġjava . util . LinkedList Ċ Ċ /** Ċ Ġ* ĠThis Ġis Ġa Ġweb Ġserver Ġwhich Ġhandles Ġstates Ġspecified Ġin Ġp acts Ġand Ġset Ġas Ġa Ġlist Ġof ĠProvider State . Ċ Ġ* Ġit Ġmatches Ġthe Ġincoming Ġrequest Ġto Ġany Ġinteraction Ġthat Ġis Ġspecified Ġas Ġpart Ġof Ġthe Ġcurrent Ġprovider Ġstate . Ċ Ġ* Ċ Ġ* Ġ@ author ĠJan ĠPhil lip ĠK ret z sch mar Ċ Ġ*/ Ċ open Ġclass ĠState full P act WebServer ( allow Unexpected Keys : ĠBoolean , Ġp act ErrorCode : ĠInt ) Ġ: ĠStateless P act WebServer ( allow Unexpected Keys , Ġp act ErrorCode ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġdefined P act List Ġ= ĠLinkedList < Request Response P act >() ĊĠĠĠ Ġprivate Ġvar Ġcurrent Provider States : ĠList < Provider State > Ġ= Ġempty List () ĊĊĠĠĠ Ġoverride Ġfun Ġteardown () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . teardown () ĊĠĠĠĠĠĠĠ Ġdefined P act List . clear () ĊĠĠĠĠĠĠĠ Ġcurrent Provider States Ġ= Ġempty List () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd P act ( p act : ĠRequest Response P act ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdefined P act List . add ( p act ) ĊĠĠĠĠĠĠĠ Ġsuper . add P act ( p act ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd P acts ( p acts : ĠCollection < Request Response P act >) Ġ{ ĊĠĠĠĠĠĠĠ Ġdefined P act List . addAll ( p acts ) ĊĠĠĠĠĠĠĠ Ġsuper . add P acts ( p acts ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclear P acts () Ġ{ ĊĠĠĠĠĠĠĠ Ġdefined P act List . clear () ĊĠĠĠĠĠĠĠ Ġsuper . clear P acts () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġvalidate P acts Completed (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcalculate Interaction Count Ġ= Ġdefined P act List . fold ( 0 L ) Ġ{ Ġcount , Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcount Ġ+ Ġitem . request Response Interactions . size ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . validate P acts Completed ( calculate Interaction Count ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset States ( states : ĠList < Provider State >) Ġ{ ĊĠĠĠĠĠĠĠ Ġcurrent Provider States Ġ= Ġstates ĊĠĠĠĠĠĠĠ Ġclear Current Interactions () ĊĠĠĠĠĠĠĠ Ġdefined P act List . forEach Ġ{ Ġp act Ġ-> Ġupdate Interactions ( p act ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Defined P act Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdefined P act List . size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Defined Interaction Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdefined P act List . sum By Ġ{ Ġit . request Response Interactions . size Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate Interactions ( p act : ĠRequest Response P act ) Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Current Interactions ( p act . request Response Interactions . filter Ġ{ Ġinteraction Ġ-> Ġcurrent Provider States . contains All ( interaction . provider States ) Ġ}) ĊĠĠĠ Ġ} Ċ }