package Ġru . i andre ys he v . feature D ream s . use Case . impl Ċ Ċ import Ġio . reactivex . Single Ċ import Ġru . i andre ys he v . feature Account Api . api . I User Api Ċ import Ġru . i andre ys he v . feature D ream s . storage . ID ream s Storage Ċ import Ġru . i andre ys he v . feature D ream s . network . ID ream s Server Api Ċ import Ġru . i andre ys he v . feature D ream s . use Case . IS ave D ream UseCase Ċ import Ġru . i andre ys he v . feature D ream s Api . domain . D ream Properties Ċ import Ġru . i andre ys he v . feature D ream s . domain . Save D ream Result Ċ import Ġru . i andre ys he v . feature D ream s . mapping . to Entity Ċ import Ġru . i andre ys he v . feature D ream s . mapping . to Request Ċ import Ġru . i andre ys he v . feature D ream s . mapping . to Result Ċ import Ġru . i andre ys he v . feature D ream s . network . response . Edit Response Ċ import Ġru . i andre ys he v . feature D ream s Api . domain . D ream Key Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠSave D ream UseCase Ċ @ Inject Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġstorage : ĠID ream s Storage , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġserver Api : ĠID ream s Server Api , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġuser Api : ĠI User Api Ċ ) Ġ: ĠIS ave D ream UseCase Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġinvoke ( properties : ĠD ream Properties , Ġkey : ĠD ream Key ?): ĠSingle < Save D ream Result > Ġ= ĠSingle . create Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdream Ġ= Ġproperties . clear () ĊĊĠĠĠĠĠĠĠ Ġdream . getProperties Error ()?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Success ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ create ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġif Ġ( key Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsave ( dream ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġedit ( dream , Ġkey ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit . on Success ( result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsave ( dream Properties : ĠD ream Properties ): ĠSave D ream Result Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġuser Api . user Ġ?: Ġreturn ĠSave D ream Result . ERROR _ UNDEFINED ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġdream Properties . to Request ( user ) ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġserver Api . save ( request ) ĊĠĠĠĠĠĠĠ Ġval Ġresult From Server Ġ= Ġresponse . result Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresponse . error . to Result () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġentity Ġ= Ġdream Properties . to Entity ( result From Server ) ĊĠĠĠĠĠĠĠ Ġstorage . save ( entity ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠSave D ream Result . SUCCESS ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġedit ( dream Properties : ĠD ream Properties , Ġkey : ĠD ream Key ): ĠSave D ream Result Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġuser Api . user Ġ?: Ġreturn ĠSave D ream Result . ERROR _ UNDEFINED ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġdream Properties . to Request ( key , Ġuser ) ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġserver Api . edit ( request ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( response Ġ!= ĠEdit Response . SUCCESS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresponse . to Result () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġentity Ġ= Ġdream Properties . to Entity ( key ) ĊĠĠĠĠĠĠĠ Ġstorage . save ( entity ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠSave D ream Result . SUCCESS ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠD ream Properties . getProperties Error (): ĠSave D ream Result ? Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġdescription . isEmpty () Ġ-> ĠSave D ream Result . ERROR _ EMPTY _ D REAM ĊĠĠĠĠĠĠĠ Ġdescription . isBlank () Ġ-> ĠSave D ream Result . ERROR _ BLANK _ D REAM ĊĠĠĠĠĠĠĠ Ġdescription . length Ġ> ĠMAX _ D REAM _ DESCRIPTION _ LENGTH Ġ-> ĠSave D ream Result . ERROR _ LARGE _ D REAM ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠD ream Properties . clear (): ĠD ream Properties Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcopy ( description Ġ= Ġdescription . trim ()) ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠMAX _ D REAM _ DESCRIPTION _ LENGTH Ġ= Ġ 1 0 0 ĊĠĠĠ Ġ} Ċ Ċ }