package Ġcom . app . mood track _ android . util Ċ Ċ import Ġandroid . util . Log Ċ import Ġcom . app . mood track _ android . model . notification question naire . NQ Condition Ċ import Ġcom . app . mood track _ android . model . notification question naire . NQ Edge Ċ import Ġcom . app . mood track _ android . model . notification question naire . NQ Node Ċ import Ġcom . app . mood track _ android . model . notification question naire . query _ objects . Notification Questionnaire By Time OfDay Ċ import Ġcom . app . mood track _ android . model . notification question naire . question . NQ Question Choice Ċ Ċ class ĠNotification Questionnaire Util Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠTAG Ġ= Ġ" Not if Questionnaire Util " ĊĠĠĠĠĠĠĠ Ġfun Ġget Initial Question ( notification Questionnaire : ĠNotification Questionnaire By Time OfDay ): ĠN Q Node ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnodes Ġ= Ġnotification Questionnaire . nodes ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnodes . find Ġ{ Ġn Ġ-> Ġn . is Source Node Ġ} ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġevaluate Condition ( received Choice : ĠN Q Question Choice , Ġcondition : ĠN Q Condition ) Ġ: ĠBoolean ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult : ĠBoolean ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchoice ValueType Ġ= Ġreceived Choice . choice ValueType ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchoice Value Ġ= Ġreceived Choice . choice Value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcondition String Ġ= Ġcondition . condition ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcondition Value Ġ= Ġcondition . condition Value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġwhen ( choice ValueType ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNotification Choice Type . TEXT . condition Type Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" evaluate Condition : Ġevaluating Ġtext Ġcondition .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNotification Condition Util . evaluate ( choice Value , Ġcondition String ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNotification Choice Type . NUMBER . condition Type Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" evaluate Condition : Ġevaluating Ġnumber Ġcondition .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchoice Value As Int Ġ= Ġchoice Value . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcondition Value As Int Ġ= Ġcondition Value . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNotification Condition Util . evaluate ( condition String , Ġchoice Value As Int , Ġcondition Value As Int ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNotification Choice Type . BOOLEAN . condition Type Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" evaluate Condition : Ġevaluating Ġboolean Ġcondition .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchoice Value As Bool Ġ= Ġchoice Value . to Boolean () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNotification Condition Util . evaluate ( choice Value As Bool , Ġcondition String ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" evaluate Condition : Ġevaluating Ġreturned Ġ$ result .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch ( e : ĠThrowable ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġe . stack Trace ToString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Outgoing Edges For Node ( currentNode : ĠN Q Node , Ġnotification Questionnaire : ĠNotification Questionnaire By Time OfDay ): ĠList < NQ Edge > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnotification Questionnaire . edges . filter Ġ{ Ġe Ġ-> Ġe . source Ġ== ĠcurrentNode ._ id Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġevaluate Edge Conditions ( received Choice : ĠN Q Question Choice , Ġedges : ĠList < NQ Edge >): ĠN Q Edge ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" evaluate Edge Conditions : ĠInv oked Ġwith Ġ${ edges . size } Ġargument Ġedges .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġedges . forEach Ġ{ Ġedge Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġeval Res Ġ= Ġevaluate Condition ( received Choice , Ġedge . condition ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( eval Res Ġ== Ġtrue ) Ġreturn Ġedge ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun ĠgetNext Node ( edge To Next Node : ĠN Q Edge , Ġnotification Questionnaire : ĠNotification Questionnaire By Time OfDay ): ĠN Q Node ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnotification Questionnaire . nodes . find Ġ{ Ġn Ġ-> Ġn ._ id Ġ== Ġedge To Next Node . target Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }