/* Ċ Ġ* ĠCopyright Ġ 2 0 1 8 ĠK ouch lin ĠProject Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġorg . k ouch lin Ċ Ċ import Ġcom . github . kit tin un f . fuel . http Delete Ċ import Ġcom . github . kit tin un f . fuel . http Get Ċ import Ġcom . github . kit tin un f . fuel . http Head Ċ import Ġcom . github . kit tin un f . fuel . http Put Ċ import Ġmu . Kotlin Logging Ċ import Ġorg . k ouch lin . domain . Attachment Ċ import Ġorg . k ouch lin . util .* Ċ Ċ private Ġval Ġlogger Ġ= ĠKotlin Logging . logger Ġ{} Ċ Ċ class ĠCouch Database Doc Attachment ( val Ġdb : ĠCouch Database , Ġval Ġdoc : ĠCouch Database Document , Ġval Ġname : ĠString ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġattachment URI Ġ= Ġ"${ db . dbName }/${ doc . id }/ $ name " ĊĊĠĠĠ Ġfun Ġexists ( rev : ĠString ? Ġ= Ġnull , Ġet ag : ĠString ? Ġ= Ġnull ): ĠTrip le < Int ?, ĠString ?, ĠSTATUS > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġheaders Ġ= Ġconfigure Headers ( etag Ġ= Ġet ag , Ġrev Ġ= Ġrev ) ĊĊĠĠĠĠĠĠĠ Ġval Ġ(_, Ġresponse , Ġ_) Ġ= Ġattachment URI . http Head () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. configure Authentication ( db . server ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. header ( headers ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. response () ĊĊĠĠĠĠĠĠĠ Ġval Ġresponse E tag Ġ= Ġresponse . getHeader Value < String ? >( ET AG _ HEADER ) ĊĠĠĠĠĠĠĠ Ġval Ġcontent L enght Ġ= Ġresponse . getHeader Value < Int ? >( CONTENT _ LEN G HT _ HEADER ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠTrip le ( content L enght , Ġresponse E tag , Ġresponse . to Status ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget ( rev : ĠString ? Ġ= Ġnull , Ġet ag : ĠString ? Ġ= Ġnull ): ĠTrip le < Attachment ?, ĠString ?, ĠSTATUS > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġheaders Ġ= Ġconfigure Headers ( etag Ġ= Ġet ag ) ĊĠĠĠĠĠĠĠ Ġval Ġparameters Ġ= Ġconfigure Parameters ( rev Ġ= Ġrev ) ĊĊĠĠĠĠĠĠĠ Ġval Ġ( request , Ġresponse , Ġ_) Ġ= Ġattachment URI . http Get ( parameters ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. configure Authentication ( db . server ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. header ( headers ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. response () ĊĠĠĠĠĠĠĠ Ġlogger . info ( request . c Url String ()) ĊĠĠĠĠĠĠĠ Ġval Ġresponse E tag Ġ= Ġresponse . getHeader Value < String ? >( ET AG _ HEADER ) ĊĠĠĠĠĠĠĠ Ġval Ġresponse Content Ġ= Ġresponse . getHeader Value < String ? >( CONTENT _ TYPE _ HEADER ) ĊĊĠĠĠĠĠĠĠ Ġval Ġresponse Status Ġ= Ġresponse . to Status () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( response Status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSTATUS . OK Ġ-> ĠTrip le ( Attachment ( response . data , Ġresponse Content !! ), Ġresponse E tag , Ġresponse . to Status ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠTrip le ( null , Ġnull , Ġresponse . to Status ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsave ( data : ĠByteArray , ĠcontentType : ĠString , Ġrev : ĠString ? Ġ= Ġnull ): ĠTrip le < Save Response ?, ĠString ?, ĠSTATUS > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġheaders Ġ= Ġconfigure Headers ( contentType Ġ= ĠcontentType ) ĊĠĠĠĠĠĠĠ Ġval Ġparameters Ġ= Ġconfigure Parameters ( rev Ġ= Ġrev ) ĊĠĠĠĠĠĠĠ Ġval Ġ(_, Ġresponse , Ġresult ) Ġ= Ġattachment URI . http Put ( parameters ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. configure Authentication ( db . server ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. header ( headers ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. body ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. response Object ( C ouch DB . adapter . deserialize ( Save Response :: class . java )) ĊĊĠĠĠĠĠĠĠ Ġval Ġresponse E tag Ġ= Ġresponse . getHeader Value < String ? >( ET AG _ HEADER ) ĊĠĠĠĠĠĠĠ Ġreturn ĠTrip le ( result . get (), Ġresponse E tag , Ġresponse . to Status ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsave ( data : ĠString , ĠcontentType : ĠString , Ġrev : ĠString ? Ġ= Ġnull ): ĠTrip le < Save Response ?, ĠString ?, ĠSTATUS > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġheaders Ġ= Ġconfigure Headers ( contentType Ġ= ĠcontentType ) ĊĠĠĠĠĠĠĠ Ġval ĠqueryString Ġ= Ġconfigure Parameters ( rev Ġ= Ġrev ). encode QueryString () ĊĠĠĠĠĠĠĠ Ġval Ġattachment Uri With Params Ġ= Ġ"$ attachment URI ?$ queryString " ĊĠĠĠĠĠĠĠ Ġval Ġ( request , Ġresponse , Ġresult ) Ġ= Ġattachment Uri With Params . http Put () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. configure Authentication ( db . server ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. header ( headers ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. body ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. response Object ( C ouch DB . adapter . deserialize ( Save Response :: class . java )) ĊĠĠĠĠĠĠĠ Ġlogger . info ( request . c Url String ()) ĊĠĠĠĠĠĠĠ Ġval Ġresponse E tag Ġ= Ġresponse . getHeader Value < String ? >( ET AG _ HEADER ) ĊĠĠĠĠĠĠĠ Ġreturn ĠTrip le ( result . get (), Ġresponse E tag , Ġresponse . to Status ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdelete ( rev : ĠString ? Ġ= Ġnull , Ġbatch : ĠBoolean ? Ġ= Ġnull , Ġfull Commit : ĠBoolean ? Ġ= Ġnull ): ĠTrip le < Save Response ?, ĠString ?, ĠSTATUS > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġheaders Ġ= Ġconfigure Headers ( full Commit Ġ= Ġfull Commit ) ĊĠĠĠĠĠĠĠ Ġval Ġparameters Ġ= Ġconfigure Parameters ( rev Ġ= Ġrev , Ġbatch Ġ= Ġbatch ) ĊĊĠĠĠĠĠĠĠ Ġval Ġ( request , Ġresponse , Ġresult ) Ġ= Ġattachment URI . http Delete ( parameters ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. configure Authentication ( db . server ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. header ( headers ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. response Object ( C ouch DB . adapter . deserialize ( Save Response :: class . java )) ĊĠĠĠĠĠĠĠ Ġlogger . info ( request . c Url String ()) ĊĠĠĠĠĠĠĠ Ġval Ġresponse E tag Ġ= Ġresponse . getHeader Value < String ? >( ET AG _ HEADER ) ĊĠĠĠĠĠĠĠ Ġreturn ĠTrip le ( result . get (), Ġresponse E tag , Ġresponse . to Status ()) ĊĠĠĠ Ġ} Ċ Ċ }