package Ġcom . template . service Ċ Ċ import Ġcom . template . model . Legal Party Reference Ċ import Ġcom . template . service . core . Database Manager Ċ import Ġcom . template . service . core . Injector Ċ import Ġcom . template . service . core . Legal Party Service Ċ import Ġcom . template . service . core . Request Processing Queue Ċ import Ġcom . template . service . model . Legal Party Ċ import Ġnet . cord a . core . contracts . require That Ċ import Ġnet . cord a . core . crypto . Transaction Signature Ċ import Ġnet . cord a . core . flows . Flow Session Ċ import Ġnet . cord a . core . node . services . C ord a Service Ċ import Ġnet . cord a . core . serialization . Singleton Serialize As Token Ċ import Ġnet . cord a . core . transactions . Signed Transaction Ċ import Ġjava . security . cert . Certificate Ċ Ċ @ C ord a Service Ċ class ĠThird Party CA Service Ġ: ĠSingleton Serialize As Token () Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠBuild Ġinjector Ġand Ġentity Ġgraph ĊĠĠĠĠĠĠĠ Ġval Ġinjector : ĠInject or Ġ= ĠTODO () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġdatabase Manager : ĠDatabase Manager Ġ= Ġinjector . getInstance ( Database Manager :: class . java ) ĊĠĠĠ Ġprivate Ġval Ġrequest Processing Queue Ġ= Ġinjector . getInstance ( Request Processing Queue :: class . java ) ĊĠĠĠ Ġprivate Ġval Ġlegal Party Service Ġ= Ġinjector . getInstance ( Legal Party Service :: class . java ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠCheck Ġdatabase , Ġcreate Ġtables Ġif Ġnecessary ĊĠĠĠĠĠĠĠ Ġdatabase Manager . validate Integr ity () Ġ// ĠWe Ġneed Ġto Ġmove Ġdatabase Ġmanaging Ġlogic Ġto ĠLeg al Party Service ĊĠĠĠĠĠĠĠ Ġrequest Processing Queue . start () ĊĠĠĠĠĠĠĠ Ġ// ĠStart Ġcallback ĠService ĊĠĠĠĠĠĠĠ Ġ// ĠCheck Ġfor Ġpending Ġwork ĊĠĠĠĠĠĠĠ Ġ// ĠRes ub mit Ġpending Ġwork ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcollect Signatures ( ĊĠĠĠĠĠĠĠ Ġsessions : ĠList < Flow Session >, Ġexternal Legal Part ies : ĠCollection < Legal Party Reference >, ĊĠĠĠĠĠĠĠ Ġpartially Signed Transaction : ĠSigned Transaction ĊĠĠĠ Ġ): ĠSigned Transaction Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠShould Ġcheck Ġto Ġsee Ġwhich Ġexternal ĠPart ies Ġis Ġknown Ġto Ġthis Ġnode Ġand Ġrun Ġa Ġcommand Ġto Ġcollect Ġit 's ĊĠĠĠĠĠĠĠ Ġ// Ġsignature Ġrem otely ĊĊĠĠĠĠĠĠĠ Ġval Ġlegal Part ies Ġ= Ġexternal Legal Part ies . map Ġ{ Ġlegal Party Service . get ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġlocal Legal Part ies Ġ= Ġlegal Part ies . filter Ġ{ Ġit . isPresent Ġ}. map Ġ{ Ġit . get () Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġremote Legal Part ies Ġ= Ġlegal Part ies . filter Ġ{ Ġ! it . isPresent Ġ}. map Ġ{ Ġit . get () Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġlocal Signatures Ġ= Ġlocal Legal Part ies . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Processing Queue . add Signature Request ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpartially Signed Transaction ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. map Ġ{ Ġit . get () Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠWe Ġneed Ġto Ġmake Ġsure Ġthat Ġwe Ġcan Ġstart Ġflows Ġinside Ġof Ġthe Ġservice Ġto Ġbe Ġable Ġto Ġcollect Ġremote Ġsignatures Ġhere , ĊĠĠĠĠĠĠĠ Ġ// Ġor Ġif Ġwe Ġneed Ġto Ġmove Ġthis Ġlogic Ġthe Ġflow ĊĠĠĠĠĠĠĠ Ġval Ġremote Signatures : ĠCollection < Transaction Signature > Ġ= Ġremote Legal Part ies . map Ġ{ ĠTODO (" Signature ĠCollection ĠMagic ") Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġpartially Signed Transaction Ġ+ Ġlocal Signatures Ġ+ Ġremote Signatures ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcollect Signatures ( ĊĠĠĠĠĠĠĠ Ġexternal Legal Part ies : ĠCollection < Legal Party Reference >, ĊĠĠĠĠĠĠĠ Ġpartially Signed Transaction : ĠSigned Transaction ĊĠĠĠ Ġ): ĠSigned Transaction Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠShould Ġcheck Ġto Ġsee Ġwhich Ġexternal ĠPart ies Ġis Ġknown Ġto Ġthis Ġnode Ġand Ġfail Ġwhen Ġsome ĠLeg al Party Ġis Ġmissing ĊĠĠĠĠĠĠĠ Ġval Ġlegal Part ies Ġ= Ġexternal Legal Part ies . map Ġ{ Ġlegal Party Service . get ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġrequire That Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" All Ġparties Ġshould Ġbe Ġpresent ." Ġusing Ġlegal Part ies . all Ġ{ Ġit . isPresent Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġpartially Signed Transaction Ġ+ Ġlegal Part ies . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Processing Queue . add Signature Request ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . get (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpartially Signed Transaction ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. map Ġ{ Ġit . get () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Legal Party Reference ( reference : ĠLeg al Party Reference , Ġcertificate : ĠCertificate , Ġlocal : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlegal Party Service . add ( Legal Party ( reference , Ġcertificate , Ġlocal )) ĊĠĠĠ Ġ} Ċ Ċ // ĠThis Ġmethod Ġneeds Ġto Ġbe Ġcreated Ġas Ġa Ġdecorator Ġwhen Ġusing ĠC ord a ĠAccount Ċ // ĠĠĠ Ġfun Ġadd Legal Party Reference With Account ( reference : ĠLeg al Party Reference , Ġcertificate : ĠPublicKey , ĠAccount ) Ġ{ Ċ // Ċ // ĠĠĠ Ġ} Ċ Ċ }