package Ġjson blob . core . store ; Ċ Ċ import Ġjson blob . core . compression . Blob Compressor Picker Ċ import Ġjson blob . core . compression . compressor . Blob Compressor Ċ import Ġjson blob . core . id . Id Handler Ċ import Ġjson blob . model . Json Blob Ċ import Ġmu . Kotlin Logging Ċ import Ġjava . io . ByteArray OutputStream Ċ import Ġjava . io . InputStream ĊĊ Ċ private Ġval Ġlog Ġ= ĠKotlin Logging . logger Ġ{} Ċ Ċ abstract Ġclass ĠJson Blob Store ( ĊĠĠĠ ĠbasePath : ĠString , ĊĠĠĠ Ġid Resolvers : ĠList < Id Handler <* >>, ĊĠĠĠ Ġprivate Ġval Ġcompress or Picker : ĠBlob Compressor Picker , Ċ ) Ġ: ĠJson Blob Base ( basePath , Ġid Resolvers ) Ġ{ ĊĠĠĠ Ġabstract Ġfun Ġretrieve ( id : ĠString ): ĠInputStream ? ĊĠĠĠ Ġabstract Ġfun Ġstore ( id : ĠString , Ġjson : ĠString , Ġcompress or : ĠBlob Compressor ): ĠBoolean ĊĠĠĠ Ġabstract Ġfun Ġremove ( id : ĠString ): ĠBoolean ĊĠĠĠ Ġabstract Ġfun Ġpath ( id : ĠString ): ĠString ? ĊĊĠĠĠ Ġfun Ġexists ( id : ĠString ) Ġ= Ġpath ( id ) Ġ!= Ġnull ĊĊĠĠĠ Ġfun Ġread ( id : ĠString ): ĠJson Blob ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġkotlin . run Catch ing Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcreated Ġ= Ġresolve Timestamp ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠJson Blob ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġid , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson Ġ= Ġjson ( retrieve ( id ) Ġ?: Ġthrow ĠIllegalStateException (" Json Ġblob Ġ$ id Ġdoesn 't Ġexist ")), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreated Ġ= Ġcreated ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. on Failure Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . warn Ġ{ Ġ" Couldn 't Ġread ĠJson Blob Ġwith Ġid =$ id Ġ" Ġ} ĊĠĠĠĠĠĠĠ Ġ}. get OrNull () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwrite ( json Blob : ĠJson Blob ): ĠJson Blob Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġkotlin . run Catch ing Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcompress or Ġ= Ġcompress or Picker . best Compressor ( json Blob . json ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! store ( json Blob . id , Ġjson Blob . json , Ġcompress or )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Couldn 't Ġstore Ġblob Ġwith Ġid =${ json Blob . id }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠJson Blob ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġjson Blob . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson Ġ= Ġjson Blob . json , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreated Ġ= Ġresolve Timestamp ( json Blob . id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. on Failure Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . warn ( it ) Ġ{ Ġ" Couldn 't Ġwrite ĠJson Blob Ġwith Ġid =${ json Blob . id } Ġ" Ġ} ĊĠĠĠĠĠĠĠ Ġ}. getOrElse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Could Ġnot Ġstore Ġjson Ġblob Ġ${ json Blob . id }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġjson ( inputStream : ĠInputStream ) Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠinputStream . copy To ( this ) ĊĠĠĠĠĠĠĠ Ġ}. toString () Ċ } Ċ