package Ġorg . sa ig on . stri ker . model Ċ Ċ import Ġcom . fasterxml . jackson . core . Json Parser Ċ import Ġcom . fasterxml . jackson . core . Object Codec Ċ import Ġcom . fasterxml . jackson . databind . Deserialization Context Ċ import Ġcom . fasterxml . jackson . databind . JsonNode Ċ import Ġcom . fasterxml . jackson . databind . annotation . Json Deserialize Ċ import Ġorg . springframework . boot . jackson . JsonObject Deserializer Ċ import Ġjava . io . IOException Ċ Ċ data Ġclass ĠAg oda Parameters ( ĊĠĠĠ Ġval Ġhotel Id : ĠInt , ĊĠĠĠ Ġval Ġcheck In Date : ĠString , ĊĠĠĠ Ġval Ġlength Of St ay : ĠInt , ĊĠĠĠ Ġval Ġrooms : ĠInt , ĊĠĠĠ Ġval Ġad ult s : ĠInt , ĊĠĠĠ Ġval Ġchildren : ĠInt , ĊĠĠĠ Ġval Ġcurrency : ĠString Ċ ) Ċ Ċ @ Json Deserialize ( using Ġ= ĠAg oda Hotel Deserializer :: class ) Ċ data Ġclass ĠAg oda Hotel ( ĊĠĠĠ Ġval Ġid : ĠLong , ĊĠĠĠ Ġval Ġname : ĠString , ĊĠĠĠ Ġval Ġrooms : ĠList < Room > Ċ ) Ċ Ċ @ Json Deserialize ( using Ġ= ĠAg oda SearchResult Deserializer :: class ) Ċ data Ġclass ĠAg oda SearchResult ( ĊĠĠĠ Ġval Ġitems : ĠList < Search Item > Ċ ) Ċ Ċ fun ĠAg oda Hotel . to Hotel () Ġ= ĠHot el ( id , Ġname , Ġrooms ) Ċ Ċ fun ĠAg oda SearchResult . to SearchResult () Ġ= ĠSearch Result ( items ) Ċ Ċ class ĠAg oda Hotel Deserializer Ġ: ĠJsonObject Deserializer < Ag oda Hotel >() Ġ{ ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġoverride Ġfun Ġdeserialize Object ( ĊĠĠĠĠĠĠĠ Ġjson Parser : ĠJson Parser , Ġcontext : ĠDeserial ization Context , Ġcodec : ĠObject Codec , Ġtree : ĠJsonNode ĊĠĠĠ Ġ): ĠAg oda Hotel Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġhotel Id Ġ= Ġget Required Node ( tree , Ġ" hotel Id "). longValue () ĊĠĠĠĠĠĠĠ Ġval Ġhotel Name Ġ= Ġget Required Node ( get Required Node ( tree , Ġ" hotel Info "), Ġ" name "). text Value () ĊĠĠĠĠĠĠĠ Ġval Ġrooms Data Ġ= Ġget Required Node ( get Required Node ( tree , Ġ" room Grid Data "), Ġ" master Rooms ") ĊĊĠĠĠĠĠĠĠ Ġval Ġrooms Ġ= Ġrooms Data . map Ġ{ Ġroom Node Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRoom ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Required Node ( room Node , Ġ" id "). longValue (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Required Node ( room Node , Ġ" name "). text Value (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Room Variants ( get Required Node ( room Node , Ġ" rooms ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠAg oda Hotel ( hotel Id , Ġhotel Name , Ġrooms ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Room Variants ( room Variants Data : ĠJsonNode ): ĠList < Room Variant > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġroom Variants Data . map Ġ{ Ġroom Variant Node Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRoom Variant ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Required Node ( room Variant Node , Ġ" uid "). text Value (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Required Node ( get Required Node ( room Variant Node , Ġ" inclusive Price "), Ġ" display "). doubleValue (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Required Node ( get Required Node ( room Variant Node , Ġ" total Price "), Ġ" display "). doubleValue (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Required Node ( room Variant Node , Ġ" currency "). text Value (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroom Variant Node . get (" pay Later ") ?. let Ġ{ Ġget Required Node ( it , Ġ" is Available "). boolean Value () Ġ} Ġ?: Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroom Variant Node . get (" pay At Hotel ") ?. let Ġ{ Ġget Required Node ( it , Ġ" is Available "). boolean Value () Ġ} Ġ?: Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Required Node ( room Variant Node , Ġ" is Free Cancellation "). boolean Value (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Required Node ( room Variant Node , Ġ" is Break fast Included "). boolean Value () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠAg oda SearchResult Deserializer Ġ: ĠJsonObject Deserializer < Ag oda SearchResult >() Ġ{ ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġoverride Ġfun Ġdeserialize Object ( ĊĠĠĠĠĠĠĠ Ġjson Parser : ĠJson Parser , Ġcontext : ĠDeserial ization Context , Ġcodec : ĠObject Codec , Ġtree : ĠJsonNode ĊĠĠĠ Ġ): ĠAg oda SearchResult Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġitems Ġ= Ġget Required Node ( tree , Ġ" ViewModel List ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . has NonNull (" Display Names ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdisplay Names Ġ= Ġitem . get (" Display Names ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSearch Item ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Required Node ( item , Ġ" ObjectId "). longValue (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Required Node ( display Names , Ġ" Name "). text Value (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Required Node ( display Names , Ġ" Geo Hierarchy Name "). text Value (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Required Node ( display Names , Ġ" Category Name "). text Value () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠAg oda SearchResult ( items ) ĊĠĠĠ Ġ} Ċ } Ċ