package Ġorg . vit riv r . cott ont ail . database . catalog ue Ċ Ċ import Ġorg . map db . Data Input 2 Ċ import Ġorg . map db . Data Output 2 Ċ import Ġorg . vit riv r . cott ont ail . database . general . DB O Version Ċ import Ġorg . vit riv r . cott ont ail . model . exceptions . Database Exception Ċ import Ġjava . nio . file . Path Ċ import Ġjava . nio . file . Paths Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* ĠThe Ġheader Ġsection Ġof Ġthe Ġ[ Default Catalog ue ] Ġdata Ġstructure . Ċ Ġ* Ċ Ġ* Ġ@ see Ġ[ Default Catalog ue ] Ċ Ġ* Ċ Ġ* Ġ@ author ĠR alph ĠG asser Ċ Ġ* Ġ@ version Ġ 2 . 0 . 0 Ċ Ġ*/ Ċ internal Ġdata Ġclass ĠCatalog ue Header ( ĊĠĠĠ Ġval Ġuid : ĠString Ġ= ĠUUID . randomUUID (). toString (), ĊĠĠĠ Ġval Ġcreated : ĠLong Ġ= ĠSystem . currentTimeMillis (), ĊĠĠĠ Ġval Ġmodified : ĠLong Ġ= ĠSystem . currentTimeMillis (), ĊĠĠĠ Ġval Ġschemas : ĠList < Schema Ref > Ġ= Ġempty List () Ċ ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject ĠSerializer Ġ: Ġorg . map db . Serializer < Catalog ue Header > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġserialize ( out : ĠData Output 2 , Ġvalue : ĠCatalog ue Header ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout . pack Int ( DB O Version . V 2 _ 0 . ordinal ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout . write UTF ( value . uid ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout . write Long ( value . created ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout . write Long ( value . modified ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout . pack Int ( value . schemas . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . schemas . forEach Ġ{ ĠSchema Ref . serialize ( out , Ġit ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdeserialize ( input : ĠData Input 2 , Ġavailable : ĠInt ): ĠCatalog ue Header Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġversion Ġ= ĠD BO Version . values ()[ input . unpack Int ()] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( version Ġ!= ĠD BO Version . V 2 _ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠDatabase Exception . Version Mismatch Exception ( version , ĠD BO Version . V 2 _ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCatalog ue Header ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput . read UTF (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput . read Long (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput . read Long (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( 0 Ġuntil Ġinput . unpack Int ()). map Ġ{ ĠSchema Ref . deserialize ( input , Ġavailable ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠA Ġreference Ġto Ġa Ġschema . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġdata Ġclass ĠSchema Ref ( val Ġname : ĠString , Ġval Ġpath : ĠPath ? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcompanion Ġobject ĠSerializer Ġ: Ġorg . map db . Serializer < Schema Ref > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġserialize ( out : ĠData Output 2 , Ġvalue : ĠSchema Ref ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout . write UTF ( value . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout . write Boolean ( value . path Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value . path Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout . write UTF ( value . path . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdeserialize ( input : ĠData Input 2 , Ġavailable : ĠInt ): ĠSchema Ref Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠSchema Ref ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput . read UTF (), Ġif Ġ( input . read Boolean ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPaths . get ( input . read UTF ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ