package Ġorg . know ledger . ledger . chain . handles . builder Ċ Ċ import Ġcom . github . m ichael bull . result . map Ċ import Ġkotlinx . serialization . Binary Format Ċ import Ġkotlinx . serialization . Experimental Serialization Api Ċ import Ġkotlinx . serialization . K Serializer Ċ import Ġkotlinx . serialization . cb or . Cb or Ċ import Ġkotlinx . serialization . modules . Serial izers Module Ċ import Ġorg . know ledger . collections . Mutable Sort edList Ċ import Ġorg . know ledger . collections . to Mutable Sort edList Ċ import Ġorg . know ledger . database . orient . Orient Database Ċ import Ġorg . know ledger . database . orient . Orient Database Info Ċ import Ġorg . know ledger . encoding . base 6 4 . base 6 4 Encoded Ċ import Ġorg . know ledger . ledger . adapters . Ledger Adapters Provider Ċ import Ġorg . know ledger . ledger . chain . Ledger Info Ċ import Ġorg . know ledger . ledger . chain . Persistence Context Ċ import Ġorg . know ledger . ledger . chain . handles . Ledger Handle Ċ import Ġorg . know ledger . ledger . chain . results . Ledger Builder Failure Ċ import Ġorg . know ledger . ledger . chain . service . Ledger Configuration Service Ċ import Ġorg . know ledger . ledger . chain . service . Ledger Service Ċ import Ġorg . know ledger . ledger . chain . solver . Storage Solver Impl Ċ import Ġorg . know ledger . ledger . chain . transactions . Persistence Wrapper Ċ import Ġorg . know ledger . ledger . core . adapters . Abstract Storage Adapter Ċ import Ġorg . know ledger . ledger . crypto . Hash Ċ import Ġorg . know ledger . ledger . crypto . hash . Hash ers Ċ import Ġorg . know ledger . ledger . crypto . hash . Hash ers . Companion . DEFAULT _ HAS HER Ċ import Ġorg . know ledger . ledger . database . Database Mode Ċ import Ġorg . know ledger . ledger . database . Database Type Ċ import Ġorg . know ledger . ledger . database . Managed Database Ċ import Ġorg . know ledger . ledger . database . Managed Session Ċ import Ġorg . know ledger . ledger . results . Outcome Ċ import Ġorg . know ledger . ledger . results . err Ċ import Ġorg . know ledger . ledger . results . ok Ċ import Ġorg . know ledger . ledger . serial . base Module Ċ import Ġorg . know ledger . ledger . serial . with Ċ import Ġorg . know ledger . ledger . serial . with Ledger Ċ import Ġorg . know ledger . ledger . storage . Data Formula Ċ import Ġorg . know ledger . ledger . storage . Default Diff Ċ import Ġorg . know ledger . ledger . storage . Factories Ċ import Ġorg . know ledger . ledger . storage . Ledger Data Ċ import Ġorg . know ledger . ledger . storage . Ledger Id Ċ import Ġorg . tiny log . kotlin . Logger Ċ import Ġjava . io . File Ċ import Ġkotlin . reflect . K Class Ċ Ċ @ Opt In ( Experimental Serialization Api :: class ) Ċ internal Ġabstract Ġclass ĠAbstract Ledger Builder Ġ{ ĊĠĠĠ Ġinternal Ġval Ġservice : ĠLed ger Service Ġ= ĠLed ger Configuration Service ĊĠĠĠ Ġinternal Ġval Ġfactories : ĠFact ories Ġ= ĠLed ger Configuration Service . factories ĊĠĠĠ Ġinternal Ġval Ġdefault Ledger Adapters : ĠLed ger Adapters Provider Ġ= ĊĠĠĠĠĠĠĠ ĠLed ger Configuration Service . ledger Adapters ĊĠĠĠ Ġprotected Ġabstract Ġvar Ġhash : ĠHash ĊĠĠĠ Ġprotected Ġvar Ġdb : ĠManaged Database ? Ġ= Ġnull ĊĠĠĠ Ġprotected Ġvar Ġsession : ĠManaged Session ? Ġ= Ġnull ĊĠĠĠ Ġprotected Ġvar Ġpath : ĠString Ġ= Ġ"./ db " ĊĠĠĠ Ġprivate Ġvar Ġdb Mode : ĠDatabase Mode Ġ= ĠDatabase Mode . EMB ED DED ĊĠĠĠ Ġprivate Ġvar Ġdb Type : ĠDatabase Type Ġ= ĠDatabase Type . LOCAL ĊĠĠĠ Ġprivate Ġvar Ġdb User : ĠString Ġ= Ġ" admin " ĊĠĠĠ Ġprivate Ġvar Ġdb Password : ĠString Ġ= Ġ" admin " ĊĠĠĠ Ġprivate Ġvar Ġserial Module : ĠSerial izers Module Ġ= Ġbase Module ĊĠĠĠ Ġlateinit Ġvar Ġencoder : ĠBinary Format ĊĊĠĠĠ Ġinternal Ġlateinit Ġvar Ġpersistence Context : ĠPersistence Context ĊĠĠĠ Ġinternal Ġlateinit Ġvar Ġpersistence Wrapper : ĠPersistence Wrapper ĊĠĠĠ Ġinternal Ġlateinit Ġvar Ġledger Info : ĠLed ger Info ĊĠĠĠ Ġinternal Ġvar Ġhash ers : ĠHash ers Ġ= ĠDEFAULT _ HAS HER ĊĠĠĠ Ġinternal Ġvar Ġformula : ĠData Formula Ġ= ĠDefault Diff ( hash ers ) ĊĊĠĠĠ Ġfun Ġset DB Path ( path : ĠFile ): ĠOut come < Unit , ĠLed ger Builder Failure > Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ(! path . exists () Ġ|| Ġpath . isDirectory ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . path Ġ= Ġpath . path ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUnit . ok () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLed ger Builder Failure . Path Cannot Resolve As Directory ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" Path Ġresolution Ġerror : ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġ${ path . path } Ġas Ġdirectory : Ġ${ path . isDirectory } ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġ${ path . path } Ġexists : Ġ${ path . exists ()} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). err () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Custom Session ( ĊĠĠĠĠĠĠĠ Ġdb Open Mode : ĠDatabase Mode , Ġdb Session Type : ĠDatabase Type , Ġdb User : ĠString ?, Ġdb Password : ĠString ?, ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdb Mode Ġ= Ġdb Open Mode ĊĠĠĠĠĠĠĠ Ġdb Type Ġ= Ġdb Session Type ĊĠĠĠĠĠĠĠ Ġdb User ?. let Ġ{ Ġthis . db User Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠ Ġdb Password ?. let Ġ{ Ġthis . db Password Ġ= Ġit Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġabstract Ġfun Ġattempt To Resolve Id (): ĠOut come < Ledger Id , ĠLed ger Builder Failure > ĊĊĠĠĠ Ġprivate Ġfun Ġbuild DB ( ĊĠĠĠĠĠĠĠ Ġregistered Adapters : ĠMutable Sort edList < Abstract Storage Adapter <* >>, Ġhash : ĠHash , ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( db Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb Ġ= ĠOrient Database ( Orient Database Info ( db Mode , Ġdb Type , Ġpath , Ġdb User , Ġdb Password )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( session Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsession Ġ= Ġdb !!. new Managed Session ( hash . base 6 4 Encoded ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpersistence Context Ġ= ĠPersistence Context ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġledger Info , Ġregistered Adapters , Ġfactories , Ġdefault Ledger Adapters ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġpersistence Wrapper Ġ= ĠPersistence Wrapper ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhash , Ġsession !! , Ġpersistence Context , ĠStorage Solver Impl ( session !! ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġset Custom DB ( db : ĠManaged Database , Ġsession : ĠManaged Session ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . db Ġ= Ġdb ĊĠĠĠĠĠĠĠ Ġthis . session Ġ= Ġsession ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġregister Serial izers ( ĊĠĠĠĠĠĠĠ Ġregistered Adapters : ĠMutable Sort edList < Abstract Storage Adapter <* >>, ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġserial Ġ= Ġregistered Adapters . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// this Ġis Ġa Ġvalid Ġcast Ġbecause Ġserializer Ġpair Ġclasses Ġforce ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// construction Ġof Ġproperties Ġwith Ġcorrect ĠLed ger Data Ġupper ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// type Ġbound . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . clazz Ġas ĠK Class < Ledger Data > Ġwith Ġit . serializer Ġas ĠK Serializer < Ledger Data > ĊĠĠĠĠĠĠĠ Ġ}. to Typed Array () ĊĠĠĠĠĠĠĠ Ġserial Module Ġ= Ġserial Module . with Ledger ( serial ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbuild (): ĠOut come < Ledger Handle , ĠLed ger Builder Failure > Ġ{ ĊĠĠĠĠĠĠĠ ĠLogger . debug Ġ{ Ġ" Building ĠLed ger ĠHandle " Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġregistered Adapters Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . calculate Adapters ( hash ers ). to Mutable Sort edList () ĊĠĠĠĠĠĠĠ Ġregister Serial izers ( registered Adapters ) ĊĠĠĠĠĠĠĠ Ġencoder Ġ= ĠC bor Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġencode Defaults Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġserializers Module Ġ= Ġserial Module ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠLogger . debug Ġ{ Ġ" Setup Ġserialization Ġfor Ġknown Ġdata Ġtypes " Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġattempt To Resolve Id (). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . debug Ġ{ Ġ" Resolved ĠLed ger Id : ĠHash Ġ-> Ġ${ it . tag }" Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġledger Info Ġ= ĠLed ger Info ( it , Ġhash ers , Ġserial Module , Ġfactories , Ġformula , Ġencoder ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . debug Ġ{ Ġ" Initializing ĠDatabase " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild DB ( registered Adapters , Ġhash ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . debug Ġ{ Ġ" Register ing Ġdefault Ġschemas Ġ" Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpersistence Wrapper . register Default Schemas () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . debug Ġ{ Ġ" Ledger Ġconstructed " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLed ger Handle ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }