package Ġorg . wild aid . of ish . data Ċ Ċ import Ġandroid . net . Uri Ċ import Ġio . realm . Sort Ċ import Ġio . realm . mongodb . App Exception Ċ import Ġio . realm . mongodb . User Ċ import Ġorg . bson . types . ObjectId Ċ import Ġorg . wild aid . of ish . data . report . Duty Change Ċ import Ġorg . wild aid . of ish . data . report . Photo Ċ import Ġorg . wild aid . of ish . data . report . Report Ċ import Ġjava . util .* Ċ Ċ class ĠRepository Impl ( ĊĠĠĠ Ġprivate Ġval Ġrealm DataSource : ĠRealm DataSource , ĊĠĠĠ Ġprivate Ġval Ġlocal DataSource : ĠLocal DataSource , ĊĠĠĠ Ġprivate Ġval Ġandroid DataSource : ĠAndroid DataSource Ċ ) Ġ: ĠRepository Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġlogin ( ĊĠĠĠĠĠĠĠ ĠuserName : ĠString , ĊĠĠĠĠĠĠĠ Ġpassword : ĠString , ĊĠĠĠĠĠĠĠ Ġlogin Success : Ġ( User ) Ġ-> ĠUnit , ĊĠĠĠĠĠĠĠ Ġlogin Error : Ġ( App Exception ?) Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ= ĊĠĠĠĠĠĠĠ Ġrealm DataSource . login ( userName , Ġpassword , Ġlogin Success , Ġlogin Error ) ĊĊĠĠĠ Ġoverride Ġfun Ġlog Out ( logout Success : Ġ() Ġ-> ĠUnit , Ġlogout Error : Ġ( Throwable ?) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrealm DataSource . log Out ( logout Success , Ġlogout Error ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrestore Logged User () Ġ= Ġrealm DataSource . restore Logged User () ĊĊĠĠĠ Ġoverride Ġfun Ġsave On Duty Change ( on Duty : ĠBoolean , Ġdate : ĠDate ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrealm DataSource . save On Duty Change ( on Duty , Ġdate ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsave Report ( ĊĠĠĠĠĠĠĠ Ġreport : ĠReport , ĊĠĠĠĠĠĠĠ Ġis Draft : ĠBoolean ?, ĊĠĠĠĠĠĠĠ Ġreport Photos : ĠList < Pair < Photo , ĠUri ? >>, ĊĠĠĠĠĠĠĠ Ġlistener : ĠOn Save Listener ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠRemove Ġempty Ġitems Ġbefore Ġsave ĊĠĠĠĠĠĠĠ Ġreport . ves sel ?. ems ?. removeAll Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . ems Type . isBlank () Ġ&& Ġit . registry Number . isBlank () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreport . cre w . removeAll Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . name . isBlank () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreport . inspection ?. actual Catch ?. removeAll Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . fish . isBlank () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreport . inspection ?. summary ?. vi olations ?. removeAll Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . off ence Ġ== Ġnull Ġ|| Ġit . off ence ?. code ?. isBlank () Ġ== Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreport . notes . removeAll Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . note . isBlank () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġdelivery Ġ= Ġreport . ves sel ?. last Delivery ĊĠĠĠĠĠĠĠ Ġval Ġdelivery IsEmpty Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelivery ?. business . isNull Or Blank () Ġ&& Ġreport . ves sel ?. last Delivery ?. location . isNull Or Blank () ĊĠĠĠĠĠĠĠ Ġif Ġ( delivery IsEmpty ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreport . ves sel ?. last Delivery Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġphoto Iterator Ġ= Ġobject Ġ: ĠIterator < Photo > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoriginal Iterator Ġ= Ġreport Photos . iterator () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhas Next () Ġ= Ġoriginal Iterator . hasNext () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġnext (): ĠPhoto Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpair Ġ= Ġoriginal Iterator . next () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimage Uri Ġ= Ġpair . second ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġpair . first . also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( image Uri Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . picture Ġ= Ġandroid DataSource . read Compressed Bytes ( image Uri ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . thumb N ail Ġ= Ġandroid DataSource . generate Image Preview ( image Uri ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( report . draft Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrealm DataSource . save Draft With Transaction ( report , Ġlistener , Ġphoto Iterator ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreport . draft Ġ= Ġis Draft ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrealm DataSource . save Report With Transaction ( report , Ġlistener , Ġphoto Iterator ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetCurrent Off icer () Ġ= Ġrealm DataSource . getCurrent Off icer () ĊĊĠĠĠ Ġoverride Ġfun Ġis LoggedIn () Ġ= Ġrealm DataSource . is LoggedIn () ĊĊĠĠĠ Ġoverride Ġfun Ġfind Reports Group edBy V essel ( sort : ĠSort ) Ġ= ĊĠĠĠĠĠĠĠ Ġrealm DataSource . find Reports Group edBy V essel Name And Permit Number ( sort ) ĊĊĠĠĠ Ġoverride Ġfun Ġfind Draft s Group edBy Off icer Name And Email ( sort : ĠSort ): ĠList < Report > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoff icer Data Ġ= ĠgetCurrent Off icer () ĊĠĠĠĠĠĠĠ Ġreturn Ġrealm DataSource . find Draft s Group edBy Off icer Email ( sort , Ġoff icer Data . email ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠfindAll Reports ( sort : ĠSort ) Ġ= Ġrealm DataSource . findAll Reports ( sort ) ĊĊĠĠĠ Ġoverride Ġfun Ġfind Report ( report Id : ĠObjectId ) Ġ= Ġrealm DataSource . find Report ( report Id ) ĊĊĠĠĠ Ġoverride Ġfun Ġfind Draft ( draft Id : ĠObjectId ) Ġ= Ġrealm DataSource . find Draft ( draft Id ) ĊĊĠĠĠ Ġoverride Ġfun Ġfind Reports For Bo at ( boat Permit Number : ĠString , Ġv essel Name : ĠString ) Ġ= ĊĠĠĠĠĠĠĠ Ġrealm DataSource . find Reports For Bo at ( boat Permit Number , Ġv essel Name ) ĊĊĠĠĠ Ġoverride Ġfun Ġdelete Draft ( draft : ĠReport ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġphotos ToRemove Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠ Ġphotos ToRemove . addAll ( draft . ves sel ?. attachments ?. photo IDs . or Empty ()) ĊĠĠĠĠĠĠĠ Ġphotos ToRemove . addAll ( draft . ves sel ?. last Delivery ?. attachments ?. photo IDs . or Empty ()) ĊĠĠĠĠĠĠĠ Ġphotos ToRemove . addAll ( draft . capt ain ?. attachments ?. photo IDs . or Empty ()) ĊĊĠĠĠĠĠĠĠ Ġphotos ToRemove . addAll ( draft . cre w . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . attachments ?. photo IDs . or Empty () ĊĠĠĠĠĠĠĠ Ġ}. flatten ()) ĊĊĠĠĠĠĠĠĠ Ġphotos ToRemove . addAll ( draft . notes . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit ?. photo IDs . or Empty () ĊĠĠĠĠĠĠĠ Ġ}. flatten ()) ĊĊĠĠĠĠĠĠĠ Ġphotos ToRemove . addAll ( draft . inspection ?. attachments ?. photo IDs . or Empty ()) ĊĠĠĠĠĠĠĠ Ġphotos ToRemove . addAll ( draft . inspection ?. activity ?. attachments ?. photo IDs . or Empty ()) ĊĠĠĠĠĠĠĠ Ġphotos ToRemove . addAll ( draft . inspection ?. fish ery ?. attachments ?. photo IDs . or Empty ()) ĊĠĠĠĠĠĠĠ Ġphotos ToRemove . addAll ( draft . inspection ?. gear Type ?. attachments ?. photo IDs . or Empty ()) ĊĠĠĠĠĠĠĠ Ġphotos ToRemove . addAll ( draft . inspection ?. summary ?. se iz ures ?. attachments ?. photo IDs . or Empty ()) ĊĠĠĠĠĠĠĠ Ġphotos ToRemove . addAll ( draft . inspection ?. summary ?. safety Level ?. attachments ?. photo IDs . or Empty ()) ĊĊĠĠĠĠĠĠĠ Ġphotos ToRemove . addAll ( draft . inspection ?. summary ?. vi olations . or Empty (). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit ?. attachments ?. photo IDs . or Empty () ĊĠĠĠĠĠĠĠ Ġ}. flatten ()) ĊĊĠĠĠĠĠĠĠ Ġphotos ToRemove . addAll ( draft . inspection ?. actual Catch . or Empty (). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit ?. attachments ?. photo IDs . or Empty () ĊĠĠĠĠĠĠĠ Ġ}. flatten ()) ĊĊĠĠĠĠĠĠĠ Ġrealm DataSource . delete Draft ( draft , Ġphotos ToRemove ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Amount Of Draft sBy Email (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoff icer Data Ġ= ĠgetCurrent Off icer () ĊĠĠĠĠĠĠĠ Ġreturn Ġrealm DataSource . get Amount Of Draft sBy Off icer Email ( officer Data . email ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Amount Of Draft s For Current Duty (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġrealm DataSource . get Amount Of Draft s For Current Duty () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfind Reports For Current Duty (): ĠList < Report > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġrealm DataSource . find Reports For Current Duty () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠfindAll Bo ats () Ġ= Ġrealm DataSource . findAll Bo ats () ĊĊĠĠĠ Ġoverride Ġfun Ġfind Bo at ( boat Permit Number : ĠString , Ġv essel Name : ĠString ) Ġ= ĊĠĠĠĠĠĠĠ Ġrealm DataSource . find Bo at ( boat Permit Number , Ġv essel Name ) ĊĊĠĠĠ Ġoverride Ġfun Ġget Menu Data () Ġ= Ġrealm DataSource . get Menu Data () ĊĊĠĠĠ Ġoverride Ġfun Ġget Photos With Ids ( ids : ĠList < String >) Ġ= Ġrealm DataSource . get Photos With Ids ( ids ) ĊĊĠĠĠ Ġoverride Ġfun Ġget Photo ById ( id : ĠString ) Ġ= Ġrealm DataSource . get Photo ById ( id ) ĊĊĠĠĠ Ġoverride Ġfun Ġget Off ences (): ĠList < Off ence Data > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoff ences Ġ= Ġmutable ListOf < Off ence Data >() ĊĠĠĠĠĠĠĠ Ġget Menu Data ()?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . violation Codes . size Ġ== Ġit . violation Descriptions . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . violation Codes . forEach Indexed Ġ{ Ġindex , Ġcode Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoff ences . add ( Off ence Data ( code , Ġit . violation Descriptions [ index ] Ġ?: Ġ"")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġoff ences ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Business And Location (): ĠList < Pair < String , ĠString >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġrealm DataSource . getAll Delivery Business (). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( it . business , Ġit . location ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Flag States (): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstates Ġ= Ġlocal DataSource . get Flag States (). to Mutable List () ĊĠĠĠĠĠĠĠ Ġval Ġprior Ġ= Ġget Menu Data ()?. country Picker Priority List ?. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocale Ġ= ĠLocale ("", Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocale . display Country ĊĠĠĠĠĠĠĠ Ġ} ?. toList () ĊĠĠĠĠĠĠĠ Ġif Ġ( prior Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstates . removeAll ( prior ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstates . addAll ( 0 , Ġprior ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġstates ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Recent On Duty Change (): ĠD uty Change ? Ġ= Ġrealm DataSource . get Recent On Duty Change () ĊĊĠĠĠ Ġoverride Ġfun Ġget Recent Start Current Duty (): ĠD uty Change ? Ġ= ĊĠĠĠĠĠĠĠ Ġrealm DataSource . get Recent Start Current Duty () ĊĊĠĠĠ Ġoverride Ġfun Ġupdate StartDate For Current Duty ( date : ĠDate ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrealm DataSource . update StartDate For Current Duty ( date ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate Current Off icer Photo ( uri : ĠUri ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpicture Id Ġ= ĠgetCurrent Off icer (). picture Id ĊĠĠĠĠĠĠĠ Ġval Ġphoto Ġ= ĠPhoto (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ id Ġ= ĠObjectId ( picture Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpicture Ġ= Ġandroid DataSource . read Compressed Bytes ( uri ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthumb N ail Ġ= Ġandroid DataSource . generate Image Preview ( uri ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrealm DataSource . save Photo ( photo ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetCurrent Off icer Photo (): ĠPhoto ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpicture Id Ġ= ĠgetCurrent Off icer (). picture Id ĊĠĠĠĠĠĠĠ Ġreturn Ġget Photo ById ( picture Id ) ĊĠĠĠ Ġ} Ċ }