/** Ċ Ġ* Ċ Ġ* ĠCopyright Ġ 2 0 1 6 - 2 0 1 7 , ĠOptim iz ely Ġand Ġcontributors Ċ Ġ* Ċ Ġ* Ġ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 Ġcom . optim iz ely . ab . config . parser Ċ Ċ import Ġcom . google . gson . Gson Ċ import Ġcom . google . gson . Json Deserialization Context Ċ import Ġcom . google . gson . Json Deserializer Ċ import Ġcom . google . gson . Json Element Ċ import Ġcom . google . gson . JsonObject Ċ import Ġcom . google . gson . Json Parser Ċ import Ġcom . google . gson . Json ParseException Ċ Ċ import Ġcom . google . gson . internal . Linked TreeMap Ċ import Ġcom . google . gson . reflect . Type Token Ċ Ċ import Ġcom . optim iz ely . ab . config . audience . And Condition Ċ import Ġcom . optim iz ely . ab . config . audience . Audience Ċ import Ġcom . optim iz ely . ab . config . audience . Condition Ċ import Ġcom . optim iz ely . ab . config . audience . Not Condition Ċ import Ġcom . optim iz ely . ab . config . audience . Or Condition Ċ import Ġcom . optim iz ely . ab . config . audience . User Attribute Ċ Ċ import Ġjava . lang . reflect . Type Ċ Ċ import Ġjava . util . ArrayList Ċ Ċ class ĠAud ience Gson Deserializer Ġ: ĠJson Deserializer < Audience > Ġ{ ĊĊĠĠĠ Ġ@ Throws ( Json ParseException :: class ) ĊĠĠĠ Ġoverride Ġfun Ġdeserialize ( json : ĠJson Element , ĠtypeOf T : ĠType , Ġcontext : ĠJson Deserialization Context ): ĠAud ience Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgson Ġ= ĠGson () ĊĠĠĠĠĠĠĠ Ġval Ġparser Ġ= ĠJson Parser () ĊĠĠĠĠĠĠĠ Ġval ĠjsonObject Ġ= Ġjson . as JsonObject ĊĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= ĠjsonObject . get (" id "). asString ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= ĠjsonObject . get (" name "). asString ĊĊĠĠĠĠĠĠĠ Ġval Ġconditions Element Ġ= Ġparser . parse ( jsonObject . get (" conditions "). asString ) ĊĊĠĠĠĠĠĠĠ Ġval Ġraw Object List Ġ= Ġgson . fromJson < List < Condition >>( conditions Element , ĠList :: class . java ) ĊĠĠĠĠĠĠĠ Ġval Ġconditions Ġ= Ġparse Conditions ( raw Object List ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠAud ience ( id , Ġname , Ġconditions ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġparse Conditions ( raw Object List : ĠList < *> ): ĠCondition Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconditions Ġ= ĠArrayList < Condition >() ĊĠĠĠĠĠĠĠ Ġval Ġoperand Ġ= Ġraw Object List [ 0 ] Ġas ĠString ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 .. raw Object List . size Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġobj Ġ= Ġraw Object List [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( obj Ġis ĠList <* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġobject List Ġ= Ġraw Object List [ i ] Ġas ĠList < *> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconditions . add ( parse Conditions ( object List )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcondition Map Ġ= Ġraw Object List [ i ] Ġas ĠLinked TreeMap < String , ĠString > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( condition Map [" name "] Ġ!= Ġnull Ġ Ġ&& Ġcondition Map [" type "] Ġ!= Ġnull Ġ&& Ġcondition Map [" value "] Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconditions . add ( User Attribute ( condition Map [" name "] !! , Ġcondition Map [" type "] !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcondition Map [" value "] !! )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġcondition : ĠCondition ĊĠĠĠĠĠĠĠ Ġif Ġ( operand Ġ== Ġ" and ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcondition Ġ= ĠAnd Condition ( conditions ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( operand Ġ== Ġ" or ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcondition Ġ= ĠOr Condition ( conditions ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcondition Ġ= ĠNot Condition ( conditions [ 0 ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcondition ĊĠĠĠ Ġ} Ċ } Ċ