package Ġcom . sw iss chain . matching . engine . order . transaction Ċ Ċ import Ġcom . sw iss chain . matching . engine . da os . Limit Order Ċ import Ġcom . sw iss chain . matching . engine . database . common . entity . Order Book Persistence Data Ċ import Ġcom . sw iss chain . matching . engine . database . common . entity . Order Books Persistence Data Ċ import Ġcom . sw iss chain . matching . engine . order . Order Status Ċ import Ġcom . sw iss chain . matching . engine . services . Asset Stop Order Book Ċ import Ġcom . sw iss chain . matching . engine . services . Generic Stop Limit Order Service Ċ import Ġjava . math . BigDecimal Ċ import Ġjava . util . Date Ċ Ċ class ĠCurrent Transaction Stop Order Books Holder ( private Ġval Ġgeneric Stop Limit Order Service : ĠGeneric Stop Limit Order Service ) ĊĠĠĠ Ġ: ĠAbstract Transaction Order Books Holder < Asset Stop Order Book , ĠGeneric Stop Limit Order Service >( generic Stop Limit Order Service ) Ġ{ ĊĊĠĠĠ Ġfun Ġpoll Stop Order To Execute ( broker Id : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġasset Pair Id : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbest Bid Price : ĠBigDecimal , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbest Ask Price : ĠBigDecimal , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate : ĠDate ): ĠLimit Order ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġpoll Stop Order To Execute ( broker Id , Ġasset Pair Id , Ġbest Bid Price , Ġfalse , Ġdate ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġpoll Stop Order To Execute ( broker Id , Ġasset Pair Id , Ġbest Ask Price , Ġtrue , Ġdate ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpoll Stop Order To Execute ( broker Id : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġasset Pair Id : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbest Opp osite Price : ĠBigDecimal , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Buy Side : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate : ĠDate ): ĠLimit Order ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( best Opp osite Price Ġ<= ĠBigDecimal . ZERO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġstop Order Book Ġ= Ġget Changed Copy Or Original Order Book ( broker Id , Ġasset Pair Id ) ĊĠĠĠĠĠĠĠ Ġvar Ġorder : ĠLimit Order ? ĊĠĠĠĠĠĠĠ Ġvar Ġorder Price : ĠBigDecimal ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġorder Ġ= Ġstop Order Book . getOrder ( best Opp osite Price , Ġis Buy Side , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġif Ġ( order Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorder Price Ġ= Ġorder . lower Price !! ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorder Ġ= Ġstop Order Book . getOrder ( best Opp osite Price , Ġis Buy Side , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( order Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorder Price Ġ= Ġorder . upper Price !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( order Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġadd Removed Orders ( listOf ( order ), Ġcompleted Orders ) ĊĠĠĠĠĠĠĠ Ġget Changed Order Book Copy ( broker Id , Ġasset Pair Id ). remove Order ( order ) ĊĠĠĠĠĠĠĠ Ġval Ġorder Copy Ġ= Ġorder . copy () ĊĠĠĠĠĠĠĠ Ġorder Copy . price Ġ= Ġorder Price !! ĊĠĠĠĠĠĠĠ Ġorder Copy . update Status ( Order Status . Executed , Ġdate ) ĊĠĠĠĠĠĠĠ Ġreturn Ġorder Copy ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġapply Specific Part ( date : ĠDate ) Ġ{ ĊĠĠĠĠĠĠĠ Ġasset Order Book Cop ies By Asset Pair Id . forEach Ġ{ Ġ( asset Pair Id , Ġorder Book ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgeneric Stop Limit Order Service . set Order Book ( order Book . broker Id , Ġasset Pair Id , Ġorder Book ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Persistence Data (): ĠOrder Books Persistence Data Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġorder Book Persistence DataList Ġ= Ġmutable ListOf < Order Book Persistence Data >() ĊĠĠĠĠĠĠĠ Ġval Ġorders To Save Ġ= Ġmutable ListOf < Limit Order >() ĊĠĠĠĠĠĠĠ Ġval Ġorders ToRemove Ġ= ĠArrayList < Limit Order >( completed Orders . size Ġ+ Ġcancelled Orders . size Ġ+ Ġreplaced Orders . size ) ĊĊĠĠĠĠĠĠĠ Ġorders ToRemove . addAll ( completed Orders ) ĊĠĠĠĠĠĠĠ Ġorders ToRemove . addAll ( cancelled Orders ) ĊĠĠĠĠĠĠĠ Ġorders ToRemove . addAll ( re placed Orders ) ĊĊĠĠĠĠĠĠĠ Ġasset Order Book Cop ies By Asset Pair Id . forEach Ġ{ Ġasset Pair Id , Ġorder Book Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( changed Buy Side s . contains ( asset Pair Id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorder Book Persistence DataList . add ( Order Book Persistence Data ( asset Pair Id , Ġtrue , Ġorder Book . getOrder Book ( true ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( changed Sell Side s . contains ( asset Pair Id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorder Book Persistence DataList . add ( Order Book Persistence Data ( asset Pair Id , Ġfalse , Ġorder Book . getOrder Book ( false ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġorders To Save . addAll ( new Orders By External Id . values ) ĊĠĠĠĠĠĠĠ Ġreturn ĠOrder Books Persistence Data ( order Book Persistence DataList , Ġorders To Save , Ġorders ToRemove ) ĊĠĠĠ Ġ} Ċ Ċ }