package Ġcom . me . history . writer Ċ Ċ import Ġcom . me . history . writer . utils . to Sql Timestamp Ċ import Ġcom . sw iss chain . matching . engine . messages . outgoing . Outgoing Messages Ċ import Ġcom . sw iss chain . matching . engine . messages . outgoing . Outgoing Messages .* Ċ import Ġremove Extra Wh ites p aces Ċ import Ġjava . sql . Connection Ċ Ċ class ĠTrade Pers ister Ġ( connection : ĠConnection ) Ġ{ ĊĠĠĠ Ġprivate Ġval ĠINSERT _ TRA DE Ġ= Ġ""" ĊĠĠĠĠĠĠĠ ĠINSERT ĠINTO Ġtr ades Ġ( order _ id , Ġorder _ history _ id , Ġmessage _ id , Ġsequence _ number , Ġexternal _ order _ id , Ġtrade _ id , Ġbroker _ id , Ġaccount _ id , Ġwallet _ id , Ġbase _ asset _ id , Ġbase _ volume , Ġprice , Ġtimestamp , Ġopposite _ order _ id , Ġopposite _ external _ order _ id , Ġopposite _ wallet _ id , Ġqu oting _ asset _ id , Ġqu oting _ volume , Ġindex , Ġabsolute _ spread , Ġrelative _ spread , Ġrole ) ĊĠĠĠĠĠĠĠ ĠVALUES ĠĠĠĠĠĠĠĠĠĠĠĠ Ġ(? ĠĠĠĠĠĠ Ġ, Ġ? ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ, Ġ? ĠĠĠĠĠĠĠĠ Ġ, Ġ? ĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ, Ġ? ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ, Ġ? ĠĠĠĠĠĠ Ġ, Ġ? ĠĠĠĠĠĠĠ Ġ, Ġ? ĠĠĠĠĠĠĠĠ Ġ, Ġ? ĠĠĠĠĠĠĠ Ġ, Ġ? ĠĠĠĠĠĠĠĠĠĠĠ Ġ, Ġ? ĠĠĠĠĠĠĠĠĠ Ġ, Ġ? ĠĠĠ Ġ, Ġ? ĠĠĠĠĠĠĠ Ġ, Ġ? ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ, Ġ? ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ, Ġ? ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ, Ġ? ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ, Ġ? ĠĠĠĠĠĠĠĠĠĠĠĠ Ġ, Ġ? ĠĠĠ Ġ, Ġ? ĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ, Ġ? ĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ, Ġ? ) ĊĠĠĠĠĠĠĠ ĠRET UR NING Ġid ; ĊĠĠĠ Ġ""" . remove Extra Wh ites p aces (). trim Indent () ĊĊĠĠĠ Ġprivate Ġval Ġprepared Statement Trade Ġ= Ġconnection . prepareStatement ( INSERT _ TRA DE ) ĊĊĠĠĠ Ġprivate Ġval Ġfee Trans fers Pers ister Ġ= ĠF ee Trans fers Pers ister ( connection ) ĊĊĠĠĠ Ġfun Ġpersist Trades ( message Id : ĠLong , Ġsequence Number : ĠLong , ĠorderId : ĠLong , Ġexternal OrderId : ĠString , Ġorder History Id : ĠLong , Ġbroker Id : ĠString , ĠaccountId : ĠLong , Ġwallet Id : ĠLong , Ġtr ades : ĠList < Execution Event . Order . Trade >) Ġ{ ĊĠĠĠĠĠĠĠ Ġtr ades . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtrade Id Ġ= Ġpersist Trade ( message Id , Ġsequence Number , ĠorderId , Ġexternal OrderId , Ġorder History Id , Ġbroker Id , ĠaccountId , Ġwallet Id , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . fees List . forEach Ġ{ Ġfee Transfer Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfee Trans fers Pers ister . persist Trade Fee Transfer ( message Id , Ġsequence Number , Ġbroker Id , Ġfee Transfer , ĠorderId , Ġtrade Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpersist Trade ( message Id : ĠLong , Ġsequence Number : ĠLong , ĠorderId : ĠLong , Ġexternal OrderId : ĠString , Ġorder History Id : ĠLong , Ġbroker Id : ĠString , ĠaccountId : ĠLong , Ġwallet Id : ĠLong , Ġtrade : ĠExecution Event . Order . Trade ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġprepared Statement Trade . set Long ( i ++, ĠorderId ) ĊĠĠĠĠĠĠĠ Ġprepared Statement Trade . set Long ( i ++, Ġorder History Id ) ĊĠĠĠĠĠĠĠ Ġprepared Statement Trade . set Long ( i ++, ĠmessageId ) ĊĠĠĠĠĠĠĠ Ġprepared Statement Trade . set Long ( i ++, Ġsequence Number ) ĊĠĠĠĠĠĠĠ Ġprepared Statement Trade . setString ( i ++, Ġexternal OrderId ) ĊĠĠĠĠĠĠĠ Ġprepared Statement Trade . setString ( i ++, Ġtrade . trade Id ) ĊĠĠĠĠĠĠĠ Ġprepared Statement Trade . setString ( i ++, Ġbroker Id ) ĊĠĠĠĠĠĠĠ Ġprepared Statement Trade . set Long ( i ++, ĠaccountId ) ĊĠĠĠĠĠĠĠ Ġprepared Statement Trade . set Long ( i ++, Ġwallet Id ) ĊĠĠĠĠĠĠĠ Ġprepared Statement Trade . setString ( i ++, Ġtrade . base Asset Id ) ĊĠĠĠĠĠĠĠ Ġprepared Statement Trade . setString ( i ++, Ġtrade . base Volume ) ĊĠĠĠĠĠĠĠ Ġprepared Statement Trade . setString ( i ++, Ġtrade . price ) ĊĠĠĠĠĠĠĠ Ġprepared Statement Trade . set Timestamp ( i ++, Ġtrade . timestamp . to Sql Timestamp ()) ĊĠĠĠĠĠĠĠ Ġprepared Statement Trade . setString ( i ++, Ġtrade . op pos ite OrderId ) ĊĠĠĠĠĠĠĠ Ġprepared Statement Trade . setString ( i ++, Ġtrade . op pos ite External OrderId ) ĊĠĠĠĠĠĠĠ Ġprepared Statement Trade . set Long ( i ++, Ġtrade . op pos ite Wallet Id ) ĊĠĠĠĠĠĠĠ Ġprepared Statement Trade . setString ( i ++, Ġtrade . quot ing Asset Id ) ĊĠĠĠĠĠĠĠ Ġprepared Statement Trade . setString ( i ++, Ġtrade . quot ing Volume ) ĊĠĠĠĠĠĠĠ Ġprepared Statement Trade . setInt ( i ++, Ġtrade . index ) ĊĠĠĠĠĠĠĠ Ġprepared Statement Trade . setString ( i ++, Ġtrade . absolute Spread ) ĊĠĠĠĠĠĠĠ Ġprepared Statement Trade . setString ( i ++, Ġtrade . relative Spread ) ĊĠĠĠĠĠĠĠ Ġprepared Statement Trade . setInt ( i , Ġtrade . role ) ĊĊĠĠĠĠĠĠĠ Ġval Ġrs Ġ= Ġprepared Statement Trade . executeQuery () ĊĠĠĠĠĠĠĠ Ġif Ġ( rs . next ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġrs . getLong ( 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthrow ĠException (" Unable Ġto Ġget Ġtrade Ġid ") ĊĠĠĠ Ġ} Ċ }