package Ġcom . fre tron . vehicle Manager . repository Ċ Ċ import Ġcom . fre tron . vehicle Manager . App Constants . ERROR _ IN _ DB Ċ import Ġcom . fre tron . vehicle Manager . App Constants . KEY _ VE H IC LE _ COLLECTION _ NAME Ċ import Ġcom . fre tron . vehicle Manager . exceptions . Mongo Db Exception Ċ import Ġcom . fre tron . vehicle Manager . model . Vehicle Ċ import Ġcom . mongodb . Basic DB Object Ċ import Ġcom . mongodb . client . Mongo Collection Ċ import Ġcom . mongodb . client . Mongo Database Ċ import Ġcom . mongodb . client . model . Filters Ċ import Ġcom . mongodb . client . model . Find One AndUpdate Options Ċ import Ġcom . mongodb . client . model . Return Document Ċ import Ġcom . mongodb . util . JSON Ċ import Ġorg . apache . logging . log 4 j . Log Manager Ċ import Ġorg . bson . Document Ċ import Ġorg . bson . conversions . B son Ċ import Ġorg . codehaus . jackson . map . ObjectMapper Ċ import Ġjava . util .* Ċ import Ġjavax . inject . Inject Ċ import Ġjavax . inject . Named Ċ Ċ class ĠVehicle Repository Impl Ċ @ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval ĠobjectMapper : ĠObjectMapper , ĊĠĠĠ Ġprivate Ġval Ġdatabase : ĠMongo Database , ĊĠĠĠ Ġ@ Named ( KEY _ VE H IC LE _ COLLECTION _ NAME ) Ġprivate Ġval Ġvehicle Collection Name : ĠString Ċ ) Ġ: ĠVehicle Repository Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġcollection : ĠMongo Collection < Document > ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġcollection Ġ= Ġdatabase . get Collection ( vehicle Collection Name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( Mongo Db Exception :: class ) ĊĠĠĠ Ġoverride Ġfun Ġcreate Vehicle ( vehicle : ĠVehicle ): ĠVehicle Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdocument Ġ= ĠDocument . parse ( vehicle . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdocument [" _ id "] Ġ= Ġvehicle . uuid ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( document Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠMongo Db Exception (" Vehicle Ġnot Ġcreated Ġat Ġid Ġ${ vehicle . uuid }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcollection . insert One ( document ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġvehicle ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" Error Ġwhile Ġadding Ġvehicle Ġwith Ġid Ġ: Ġ${ vehicle . uuid } Ġ${ e . message }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠMongo Db Exception ( ERROR _ IN _ DB ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( Mongo Db Exception :: class ) ĊĠĠĠ Ġoverride Ġfun Ġget Vehicle ( id : ĠString ): ĠVehicle ? Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquery Ġ= ĠBasic DB Object () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery [" _ id "] Ġ= Ġid ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmongo Cursor Ġ= Ġcollection . find ( query ). limit ( 1 ). iterator () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mongo Cursor . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdocument Ġ= Ġmongo Cursor . next () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdocument . remove ("_ id ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= ĠJSON . serialize ( document ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠobjectMapper . readValue ( json , ĠVehicle :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" Error Ġwhile Ġadding Ġvehicle Ġwith Ġid Ġ: Ġ$ id Ġ${ ex . message }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠMongo Db Exception (" Vehicle Ġnot Ġfound Ġid Ġ:: Ġ$ id ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( Mongo Db Exception :: class ) ĊĠĠĠ Ġoverride Ġfun ĠgetAll Veh icles (): ĠList < Vehicle > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvehicles : ĠArrayList < Vehicle > Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmongo Cursor Ġ= Ġcollection . find (). iterator () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( mongo Cursor . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdocument Ġ= Ġmongo Cursor . next () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdocument . remove ("_ id ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= ĠJSON . serialize ( document ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvehicle Ġ= ĠobjectMapper . readValue ( json , ĠVehicle :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvehicles . add ( vehicle ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġvehicles ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" Error Ġwhile Ġfetching Ġall Ġvehicles Ġ${ ex . message }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠMongo Db Exception (" Unable Ġto Ġget Ġall Ġvehicles Ġfrom ĠDB ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( Mongo Db Exception :: class ) ĊĠĠĠ Ġoverride Ġfun Ġupdate Vehicle ( id : ĠString , Ġvehicle : ĠVehicle ): ĠVehicle Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquery Ġ= ĠBasic DB Object () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery [" _ id "] Ġ= Ġid ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġperson Document Ġ= ĠDocument . parse ( vehicle . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġupdate : ĠB son Ġ= ĠDocument ("\ $ set ", Ġperson Document ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġupdated Vehicle Document Ġ= Ġcollection . findOne AndUpdate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFind One AndUpdate Options (). return Document ( Return Document . AFTER ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdated Vehicle Document Ġ?: Ġthrow ĠMongo Db Exception (" Vehicle ĠNot ĠUpdated ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= ĠJSON . serialize ( updated Vehicle Document ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠobjectMapper . readValue ( json , ĠVehicle :: class . java ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" Error Ġwhile Ġfetching Ġall Ġvehicles Ġ${ ex . message }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠMongo Db Exception (" Unable Ġto Ġupdate Ġvehicle Ġat Ġid Ġ$ id ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( Mongo Db Exception :: class ) ĊĠĠĠ Ġoverride Ġfun Ġdelete Vehicle ( id : ĠString ): ĠVehicle Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdeleted Vehicle Document Ġ= Ġcollection . findOne And Delete ( Filters . eq ("_ id ", Ġid )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdeleted Vehicle Document Ġ?: Ġthrow ĠMongo Db Exception (" Vehicle ĠNot ĠDeleted ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdeleted Vehicle Document . remove ("_ id ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= ĠJSON . serialize ( deleted Vehicle Document ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠobjectMapper . readValue ( json , ĠVehicle :: class . java ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" Error Ġwhile Ġdeleting Ġvehicle Ġwith Ġid Ġ$ id Ġ${ ex . message }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠMongo Db Exception (" Unable Ġto Ġdelete Ġvehicle Ġat Ġid Ġ$ id ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠLog Manager . getLogger () ĊĠĠĠ Ġ} Ċ Ċ }