package Ġcom . yg . g ql w fd l Ċ Ċ import Ġcom . yg . g ql w fd l . services .* Ċ import Ġjava . sql . Driver Manager Ċ import Ġjava . sql . ResultSet Ċ import Ġjava . sql . Statement Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* ĠUsed Ġto Ġcreate Ġtest Ġdata . Ċ Ġ*/ Ċ class ĠData Setup ( private Ġval Ġdb Url : ĠString ) Ġ{ ĊĠĠĠ Ġfun Ġexecute () Ġ{ ĊĠĠĠĠĠĠĠ ĠDriver Manager . getConnection ( db Url , Ġ" sa ", Ġ""). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . createStatement (). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Tables ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate TestData ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate TestData ( statement : ĠStatement ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġv at Rates Ġ= Ġcreate V at Rates ( statement ) ĊĠĠĠĠĠĠĠ Ġval Ġdiscount Rates Ġ= Ġcreate Discount Rates ( statement ) ĊĠĠĠĠĠĠĠ Ġval Ġpayment Methods Ġ= Ġcreate Payment Methods ( statement ) ĊĠĠĠĠĠĠĠ Ġval Ġpr icing Details Ġ= Ġcreate Pricing Details ( statement , Ġv at Rates , Ġdiscount Rates , Ġpayment Methods ) ĊĠĠĠĠĠĠĠ Ġval Ġcompanies Ġ= Ġcreate Comp anies ( statement , Ġpr icing Details ) ĊĠĠĠĠĠĠĠ Ġval Ġcustomers Ġ= Ġcreate Customers ( statement , Ġcompanies , Ġpr icing Details ) ĊĠĠĠĠĠĠĠ Ġset OutOf Office Deleg ates ( statement , Ġcustomers ) ĊĠĠĠĠĠĠĠ Ġset Primary Contacts ( statement , Ġcompanies , Ġcustomers ) ĊĠĠĠĠĠĠĠ Ġcreate Company Part n ership s ( statement , Ġcompanies ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate V at Rates ( statement : ĠStatement ): ĠList < V at Rate > Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġcreate V at Rate ( description : ĠString , Ġvalue : ĠDouble ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatement . execute (" insert Ġinto Ġv at _ rate Ġ( description , Ġvalue ) Ġvalues ('$ description ', Ġ$ value ); ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcreate V at Rate (" Standard ", Ġ 2 0 . 0 ) ĊĠĠĠĠĠĠĠ Ġcreate V at Rate (" Reduc ed ", Ġ 5 . 0 ) ĊĠĠĠĠĠĠĠ Ġcreate V at Rate (" Zero ", Ġ 0 . 0 ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġlist From Query ( statement , Ġ" select Ġid , Ġdescription , Ġvalue Ġfrom Ġv at _ rate Ġorder Ġby Ġid ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠV at Rate ( it . getLong (" id "), Ġit . getString (" description "), Ġit . getDouble (" value ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Discount Rates ( statement : ĠStatement ): ĠList < Discount Rate > Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġcreate Discount Rate ( description : ĠString , Ġvalue : ĠDouble ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatement . execute (" insert Ġinto Ġdiscount _ rate Ġ( description , Ġvalue ) Ġvalues ('$ description ', Ġ$ value ); ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcreate Discount Rate (" None ", Ġ 0 . 0 ) ĊĠĠĠĠĠĠĠ Ġcreate Discount Rate (" Che ap ", Ġ 5 . 0 ) ĊĠĠĠĠĠĠĠ Ġcreate Discount Rate (" Che ape st ", Ġ 1 0 . 0 ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġlist From Query ( statement , Ġ" select Ġid , Ġdescription , Ġvalue Ġfrom Ġdiscount _ rate Ġorder Ġby Ġid ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDiscount Rate ( it . getLong (" id "), Ġit . getString (" description "), Ġit . getDouble (" value ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Payment Methods ( statement : ĠStatement ): ĠList < PaymentMethod > Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġcreate Payment Methods ( description : ĠString , Ġcharge : ĠDouble ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatement . execute (" insert Ġinto Ġpayment _ method Ġ( description , Ġcharge ) Ġvalues ('$ description ', Ġ$ charge ); ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcreate Payment Methods (" Cash ", Ġ 0 . 0 ) ĊĠĠĠĠĠĠĠ Ġcreate Payment Methods (" Che que ", Ġ 2 . 5 ) ĊĠĠĠĠĠĠĠ Ġcreate Payment Methods (" Card ", Ġ 1 . 5 ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġlist From Query ( statement , Ġ" select Ġid , Ġdescription , Ġcharge Ġfrom Ġpayment _ method Ġorder Ġby Ġid ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPayment Method ( it . getLong (" id "), Ġit . getString (" description "), Ġit . getDouble (" charge ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Pricing Details ( statement : ĠStatement , Ġv at Rates : ĠList < V at Rate >, Ġdiscount Rates : ĠList < Discount Rate >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpayment Methods : ĠList < PaymentMethod >) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ: ĠList < Pricing Details > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ( 1 .. 4 ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatement . execute (""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġinsert Ġinto Ġpr icing _ details Ġ( description , Ġv at _ rate , Ġdiscount _ rate , Ġpreferred _ payment _ method ) Ġvalues ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġ' Pricing Details -$ it ', ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġ${ vat Rates . random Item (). id }, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġ${ discount Rates . random Item (). id }, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġ${ payment Methods . random Item (). id } ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Margin ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġlist From Query ( statement , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" select Ġid , Ġdescription , Ġv at _ rate , Ġdiscount _ rate , Ġpreferred _ payment _ method Ġfrom Ġpr icing _ details Ġorder Ġby Ġid ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠP ric ing Details ( it . getLong (" id "), Ġit . getString (" description "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv at Rates . first Ġ{ Ġv at Rate Ġ-> Ġv at Rate . id Ġ== Ġit . getLong (" vat _ rate ") Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdiscount Rates . first Ġ{ Ġdiscount Rate Ġ-> Ġdiscount Rate . id Ġ== Ġit . getLong (" discount _ rate ") Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpayment Methods . first Ġ{ Ġpayment Method Ġ-> Ġpayment Method . id Ġ== Ġit . getLong (" preferred _ payment _ method ") Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Company Part n ership s ( statement : ĠStatement , Ġcompanies : ĠList < Company >) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġpart n ership s Ġbetween : ĊĠĠĠĠĠĠĠ Ġ// Ġ 1 . ĠThe Ġfirst Ġcompany Ġand Ġthe Ġsecond Ġcompany . ĊĠĠĠĠĠĠĠ Ġ// Ġ 2 . ĠThe Ġfirst Ġcompany Ġand Ġthe Ġthird Ġcompany . ĊĠĠĠĠĠĠĠ Ġ// Ġ 3 . ĠThe Ġsecond Ġcompany Ġand Ġthe Ġthird Ġcompany . ĊĊĠĠĠĠĠĠĠ Ġfun Ġcreate Part n ership ( company A : ĠCompany , Ġcompany B : ĠCompany ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatement . execute ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" insert Ġinto Ġcompany _ part n ership Ġ( company _ a , Ġcompany _ b ) Ġvalues Ġ(${ company A . id }, Ġ${ company B . id }); ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcreate Part n ership ( companies [ 0 ], Ġcompanies [ 1 ]) ĊĠĠĠĠĠĠĠ Ġcreate Part n ership ( companies [ 0 ], Ġcompanies [ 2 ]) ĊĠĠĠĠĠĠĠ Ġcreate Part n ership ( companies [ 1 ], Ġcompanies [ 2 ]) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Primary Contacts ( statement : ĠStatement , Ġcompanies : ĠList < Company >, Ġcustomers : ĠList < Customer >) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠRun Ġthrough Ġall Ġexisting Ġcompanies , Ġand Ġfor Ġeach Ġone Ġset Ġtheir Ġprimary Ġcontact . ĊĠĠĠĠĠĠĠ Ġ// ĠThere 's Ġa Ġ 5 0 % Ġchance Ġthat Ġthis Ġwill Ġbe Ġnull . Ġ ĠIf Ġnon - null , Ġit Ġwill Ġbe Ġa Ġrandomly Ġchosen Ġuser Ġfrom Ġthat Ġcompany . ĊĠĠĠĠĠĠĠ Ġval Ġcustomers By Company Ġ= Ġcustomers . groupBy Ġ{ Ġit . company Id Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġrandom Ġ= ĠRandom () ĊĊĠĠĠĠĠĠĠ Ġfun ĠCompany . set Primary Contact () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet Ġa Ġlist Ġof Ġthe Ġpeople Ġin Ġthis Ġcompany . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcustomers By Company [ this . id ]?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠChoose Ġa Ġrandom Ġcustomer Ġfrom Ġthis Ġlist Ġand Ġuse Ġthem Ġas Ġthe Ġprimary Ġcontact . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . primary Contact Ġ= Ġit . random Item (). id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatement . execute ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" update Ġcompany Ġset Ġprimary _ contact Ġ= Ġ${ this . primary Contact } Ġwhere Ġid Ġ= Ġ${ this . id }; ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcompanies . filter Ġ{ Ġrandom . next Boolean () Ġ}. forEach Ġ{ Ġit . set Primary Contact () Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠMake Ġsure Ġthat Ġthere Ġis Ġat Ġleast Ġone Ġcompany Ġwith Ġa Ġprimary Ġcontact ĊĠĠĠĠĠĠĠ Ġif Ġ( companies . all Ġ{ Ġit . primary Contact Ġ== Ġnull Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompanies . random Item (). set Primary Contact () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset OutOf Office Deleg ates ( statement : ĠStatement , Ġcustomers : ĠList < Customer >) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠRun Ġthrough Ġall Ġexisting Ġcustomers , Ġand Ġfor Ġeach Ġone Ġset Ġtheir Ġout - of - office Ġdelegate . ĊĠĠĠĠĠĠĠ Ġ// ĠThere 's Ġa Ġ 5 0 % Ġchance Ġthat Ġthis Ġwill Ġbe Ġnull . Ġ ĠIf Ġnon - null , Ġit Ġwill Ġbe Ġa Ġrandomly Ġchosen Ġuser Ġfrom Ġthe Ġsame Ġcompany . ĊĠĠĠĠĠĠĠ Ġval Ġcustomers By Company Ġ= Ġcustomers . groupBy Ġ{ Ġit . company Id Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġrandom Ġ= ĠRandom () ĊĊĠĠĠĠĠĠĠ Ġfun ĠCustomer . set OutOf Office Delegate () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet Ġa Ġlist Ġof Ġthe Ġother Ġpeople Ġin Ġthe Ġsame Ġcompany Ġas Ġthis Ġcustomer , Ġexcluding Ġthe Ġcustomer Ġthemselves . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcustomers By Company [ this . company Id ]?. minus Element ( this )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠChoose Ġa Ġrandom Ġcustomer Ġfrom Ġthis Ġlist Ġand Ġuse Ġthem Ġas Ġthe Ġdelegate . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . out Of Office Delegate Ġ= Ġit . random Item (). id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatement . execute ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" update Ġcustomer Ġset Ġout _ of _ office _ delegate Ġ= Ġ${ this . out Of Office Delegate } Ġwhere Ġid Ġ= Ġ${ this . id }; ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcustomers . filter Ġ{ Ġrandom . next Boolean () Ġ}. forEach Ġ{ Ġit . set OutOf Office Delegate () Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠMake Ġsure Ġthat Ġthere Ġis Ġat Ġleast Ġone Ġcustomer Ġwith Ġan Ġout - of - office Ġdelegate ĊĠĠĠĠĠĠĠ Ġif Ġ( customers . all Ġ{ Ġit . out Of Office Delegate Ġ== Ġnull Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcustomers . random Item (). set OutOf Office Delegate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Customers ( statement : ĠStatement , Ġcompanies : ĠList < Company >, Ġpr icing Details : ĠList < Pricing Details >) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ: ĠList < Customer > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// ĠCustom ers : Ġ 3 Ġcustomers Ġfor Ġeach Ġcompany . ĊĠĠĠĠĠĠĠ Ġcompanies . forEach Ġ{ Ġcompany : ĠCompany Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( 1 .. 3 ). forEach Ġ{ Ġuser Number : ĠInt Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatement . connection . createStatement (). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . execute (""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġinsert Ġinto Ġcustomer Ġ( first _ name , Ġlast _ name , Ġcompany _ id , Ġpr icing _ details ) Ġvalues ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġ' User -$ user Number ', Ġ' From -${ company . name }', Ġ${ company . id }, Ġ${ pricing Details . random Item (). id }); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Margin ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġlist From Query ( statement , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" select Ġid , Ġfirst _ name , Ġlast _ name , Ġcompany _ id , Ġpr icing _ details Ġfrom Ġcustomer Ġorder Ġby Ġid ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCustomer ( it . getLong (" id "), Ġit . getString (" first _ name "), Ġit . getString (" last _ name "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . getLong (" company _ id "), Ġit . getLong (" pricing _ details ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Comp anies ( statement : ĠStatement , Ġpr icing Details : ĠList < Pricing Details >): ĠList < Company > Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠComp anies : ĠA Ġto ĠC . ĊĠĠĠĠĠĠĠ Ġ(' A ' .. ' C '). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatement . execute (""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġinsert Ġinto Ġcompany Ġ( name , Ġaddress , Ġpr icing _ details ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġvalues (' Company -$ it ', Ġ'$ it ĠStreet , Ġ$ it ĠT own ', Ġ${ pricing Details . random Item (). id }); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Margin ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġlist From Query ( statement , Ġ" select Ġid , Ġname , Ġaddress , Ġpr icing _ details Ġfrom Ġcompany Ġorder Ġby Ġid ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCompany ( it . getLong (" id "), Ġit . getString (" name "), Ġit . getString (" address "), Ġit . getLong (" pricing _ details ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġ< T Ġ: ĠAny > Ġlist From Query ( statement : ĠStatement , Ġsql : ĠString , Ġextractor : Ġ( ResultSet ) Ġ-> ĠT ): ĠList < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġstatement . executeQuery ( sql ). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFrom Ġhttps :// stackoverflow . com / questions / 4 4 3 1 5 9 8 5 / pro ducing - a - list - from - a - result set ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgenerate Sequence Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . next ()) Ġextractor ( it ) Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. toList () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Tables ( statement : ĠStatement ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠDrop Ġexisting Ġtables . ĊĠĠĠĠĠĠĠ Ġstatement . execute (" drop Ġtable Ġif Ġexists Ġcustomer ; ") ĊĠĠĠĠĠĠĠ Ġstatement . execute (" drop Ġtable Ġif Ġexists Ġcompany ; ") ĊĠĠĠĠĠĠĠ Ġstatement . execute (" drop Ġtable Ġif Ġexists Ġcompany _ part n ership ; ") ĊĠĠĠĠĠĠĠ Ġstatement . execute (" drop Ġtable Ġif Ġexists Ġv at _ rate ; ") ĊĠĠĠĠĠĠĠ Ġstatement . execute (" drop Ġtable Ġif Ġexists Ġdiscount _ rate ; ") ĊĠĠĠĠĠĠĠ Ġstatement . execute (" drop Ġtable Ġif Ġexists Ġpayment _ method ; ") ĊĠĠĠĠĠĠĠ Ġstatement . execute (" drop Ġtable Ġif Ġexists Ġpr icing _ details ; ") ĊĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġthe Ġtables . ĊĠĠĠĠĠĠĠ Ġstatement . execute (""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġcreate Ġtable Ġcompany Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠ Ġid Ġbigint Ġauto _ increment Ġnot Ġnull Ġprimary Ġkey , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠ Ġname Ġvarchar ( 2 5 5 ) Ġnot Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠ Ġaddress Ġvarchar ( 2 5 5 ) Ġnot Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠ Ġprimary _ contact Ġbigint , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠ Ġpr icing _ details Ġbigint Ġnot Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġ); ĊĠĠĠĠĠĠĠ Ġ""" . trim Margin ()) ĊĊĠĠĠĠĠĠĠ Ġstatement . execute (""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġcreate Ġtable Ġcustomer Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠ Ġid Ġbigint Ġauto _ increment Ġnot Ġnull Ġprimary Ġkey , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠ Ġfirst _ name Ġvarchar ( 2 5 5 ) Ġnot Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠ Ġlast _ name Ġvarchar ( 2 5 5 ) Ġnot Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠ Ġcompany _ id Ġbigint Ġnot Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠ Ġout _ of _ office _ delegate Ġbigint , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠ Ġpr icing _ details Ġbigint Ġnot Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġ); ĊĠĠĠĠĠĠĠ Ġ""" . trim Margin ()) ĊĊĠĠĠĠĠĠĠ Ġstatement . execute (""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġcreate Ġtable Ġcompany _ part n ership Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠ Ġid Ġbigint Ġauto _ increment Ġnot Ġnull Ġprimary Ġkey , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠ Ġcompany _ a Ġbigint Ġnot Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠ Ġcompany _ b Ġbigint Ġnot Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġ); ĊĠĠĠĠĠĠĠ Ġ""" . trim Margin ()) ĊĊĠĠĠĠĠĠĠ Ġstatement . execute (""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġcreate Ġtable Ġv at _ rate Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠ Ġid Ġbigint Ġauto _ increment Ġnot Ġnull Ġprimary Ġkey , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠ Ġdescription Ġvarchar ( 2 5 5 ) Ġnot Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠ Ġvalue Ġdouble Ġnot Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġ); ĊĠĠĠĠĠĠĠ Ġ""" . trim Margin ()) ĊĊĠĠĠĠĠĠĠ Ġstatement . execute (""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġcreate Ġtable Ġdiscount _ rate Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠ Ġid Ġbigint Ġauto _ increment Ġnot Ġnull Ġprimary Ġkey , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠ Ġdescription Ġvarchar ( 2 5 5 ) Ġnot Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠ Ġvalue Ġdouble Ġnot Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġ); ĊĠĠĠĠĠĠĠ Ġ""" . trim Margin ()) ĊĊĠĠĠĠĠĠĠ Ġstatement . execute (""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġcreate Ġtable Ġpayment _ method Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠ Ġid Ġbigint Ġauto _ increment Ġnot Ġnull Ġprimary Ġkey , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠ Ġdescription Ġvarchar ( 2 5 5 ) Ġnot Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠ Ġcharge Ġdouble Ġnot Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġ); ĊĠĠĠĠĠĠĠ Ġ""" . trim Margin ()) ĊĊĠĠĠĠĠĠĠ Ġstatement . execute (""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġcreate Ġtable Ġpr icing _ details Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠ Ġid Ġbigint Ġauto _ increment Ġnot Ġnull Ġprimary Ġkey , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠ Ġdescription Ġvarchar ( 2 5 5 ) Ġnot Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠ Ġv at _ rate Ġbigint Ġnot Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠ Ġdiscount _ rate Ġbigint Ġnot Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠ Ġpreferred _ payment _ method Ġbigint Ġnot Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġ); ĊĠĠĠĠĠĠĠ Ġ""" . trim Margin ()) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġ< T > ĠList < T >. random Item ( random : ĠRandom Ġ= ĠRandom ()): ĠT Ġ= Ġthis [ random . nextInt ( this . size )]