package Ġorg . el k oser ver . json Ċ Ċ import Ġorg . el k oser ver . json . Encode Control . For Client Encode Control Ċ Ċ /** Ċ Ġ* ĠA Ġliteral ĠJSON Ġstring , Ġrepresenting Ġan Ġarray , Ġunder going Ġincremental Ċ Ġ* Ġconstruction . Ċ Ġ* Ċ Ġ* ĠUsers Ġof Ġthis Ġclass Ġshould Ġcall Ġthe Ġconstructor Ġto Ġbegin Ġcreation Ġof Ġthe Ċ Ġ* Ġliteral , Ġincrement ally Ġadd Ġto Ġit Ġusing Ġthe Ġvarious Ċ Ġ* Ġ[ addElement ] Ġmethods , Ġthen Ġfinally Ġcomplete Ġit Ġby Ċ Ġ* Ġcalling Ġthe Ġ[ finish ] Ġmethod . Ġ ĠAfter Ġthe Ġliteral Ġis Ġcompleted , Ġit Ġmay Ċ Ġ* Ġbe Ġused Ġas Ġanother Ġliteral 's Ġparameter Ġvalue . Ċ Ġ* Ċ Ġ* Ġ@ param ĠstringBuilder Ġ ĠThe Ġbuffer Ġinto Ġwhich Ġto Ġbuild Ġthe Ġliteral Ġstring . Ċ Ġ* Ġ@ param Ġcontrol Ġ ĠEncode Ġcontrol Ġdetermining Ġwhat Ġflavor Ġof Ġencoding Ċ Ġ* ĠĠĠ Ġis Ġbeing Ġdone . Ċ Ġ*/ Ċ class ĠJson Literal Array Ġinternal Ġconstructor ( internal Ġval ĠstringBuilder : ĠStringBuilder , Ġprivate Ġval Ġcontrol : ĠEncode Control ) Ġ{ ĊĊĠĠĠ Ġ/** ĠStart Ġof Ġthis Ġliteral 's Ġportion Ġof Ġbuffer . Ġ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġmy Start Pos Ġ= ĠstringBuilder . length ĊĊĠĠĠ Ġ/** ĠEnd Ġof Ġthis Ġliteral 's Ġportion Ġof Ġbuffer . Ġ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġmy End Pos Ġ= Ġmy Start Pos ĊĊĠĠĠ Ġ/** ĠState Ġof Ġconstruction . Ġ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġmy State Ġ= ĠJson Literal Array State . INITIAL ĊĊĠĠĠ Ġ/** ĠNumber Ġof Ġelements Ġsuccessfully Ġadded . Ġ Ġ*/ ĊĠĠĠ Ġvar Ġsize : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠBegin Ġa Ġnew Ġarray Ġliteral Ġthat Ġwill Ġbe Ġfilled Ġin Ġincrement ally . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcontrol Ġ ĠEncode Ġcontrol Ġdetermining Ġwhat Ġflavor Ġof Ġencoding ĊĠĠĠĠ Ġ* Ġis Ġbeing Ġdone . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġconstructor ( control : ĠEncode Control Ġ= ĠFor Client Encode Control ) Ġ: Ġthis ( StringBuilder ( 5 0 0 ), Ġcontrol ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdd Ġan Ġelement Ġto Ġthe Ġincomplete Ġarray Ġliteral . ĠNote Ġthat Ġany Ġelement ĊĠĠĠĠ Ġ* Ġvalue Ġthat Ġen codes Ġto Ġthe ĠJava Ġvalue Ġnull Ġwill Ġbe Ġignored Ġ( i . e ., Ġnot ĊĠĠĠĠ Ġ* Ġadded Ġto Ġthe Ġliteral ). ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġvalue Ġ ĠThe Ġelement Ġvalue . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ throws ĠError Ġif Ġyou Ġtry Ġto Ġadd Ġan Ġelement Ġto Ġliteral Ġthat Ġis Ġalready ĊĠĠĠĠ Ġ* Ġcomplete . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd Element ( value : ĠAny ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( value Ġis ĠArray <* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbegin Element () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarr Ġ= ĠJson Literal Array ( string Builder , Ġcontrol ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( o Ġin Ġvalue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarr . addElement ( o ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarr . finish () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( value Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart Ġ= ĠstringBuilder . length ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstarting Ġ= Ġmy State Ġ== ĠJson Literal Array State . INITIAL ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbegin Element () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( append Value String ( string Builder , Ġvalue , Ġcontrol )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstringBuilder . set Length ( start ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( starting ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy State Ġ= ĠJson Literal Array State . INITIAL ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsize Ġ+= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Element ( json Literal : ĠJson Literal ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Element ( json Literal Ġas ĠAny ?) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Element ( json Literal Array : ĠJson Literal Array ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Element ( json Literal Array Ġas ĠAny ?) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Element ( bool : ĠBoolean ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Element ( bool Ġas ĠAny ?) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Element ( number : ĠNumber ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Element ( number Ġas ĠAny ?) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Element ( string : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Element ( string Ġas ĠAny ?) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdd Ġa Ġreference Ġelement Ġto Ġan Ġincomplete Ġarray . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġvalue Ġ ĠThe Ġ([ Reference able ]) Ġelement Ġvalue . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd Element ( value : ĠReference able ) Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Element ( value . ref ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPre pend Ġany Ġnecessary Ġpunctuation Ġupon Ġstarting Ġa Ġnew Ġelement , Ġand ĊĠĠĠĠ Ġ* Ġupdate Ġthe Ġstate Ġof Ġconstruction Ġaccordingly . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġbegin Element () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( my State Ġ!= ĠJson Literal Array State . COMPLETE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( my State Ġ== ĠJson Literal Array State . INITIAL ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠHave Ġadded Ġfirst Ġelement Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy State Ġ= ĠJson Literal Array State . STARTED ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstringBuilder . append (", Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠError (" attempt Ġto Ġadd Ġelement Ġto Ġcompleted Ġarray ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFinish Ġconstruction Ġof Ġthe Ġliteral . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ throws ĠError Ġif Ġyou Ġtry Ġto Ġfinish Ġa Ġliteral Ġthat Ġis Ġalready Ġcomplete . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġfinish () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( my State Ġ!= ĠJson Literal Array State . COMPLETE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstringBuilder . append (' ]') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmy State Ġ= ĠJson Literal Array State . COMPLETE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmy End Pos Ġ= ĠstringBuilder . length ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠError (" attempt Ġto Ġfinish Ġalready Ġcompleted Ġarray ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠObtain Ġa Ġstring Ġrepresentation Ġof Ġthis Ġliteral Ġsuitable Ġfor Ġoutput Ġto Ġa ĊĠĠĠĠ Ġ* Ġconnection . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġa Ġsend able Ġstring Ġrepresentation Ġof Ġthis Ġliteral . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ throws ĠError Ġif Ġthe Ġliteral Ġis Ġnot Ġfinished . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġsend able String (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( my State Ġ!= ĠJson Literal Array State . COMPLETE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠstringBuilder . substring ( my Start Pos , Ġmy End Pos ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠObtain Ġa Ġprint able ĠString Ġrepresentation Ġof Ġthis Ġliteral , Ġin Ġwhatever ĊĠĠĠĠ Ġ* Ġits Ġcurrent Ġstate Ġis . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġa Ġprint able Ġrepresentation Ġof Ġthis Ġliteral . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġend Ġ= Ġmy End Pos ĊĠĠĠĠĠĠĠ Ġif Ġ( my State Ġ!= ĠJson Literal Array State . COMPLETE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġend Ġ= ĠstringBuilder . length ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠstringBuilder . substring ( my Start Pos , Ġend ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠstringBuilder . append ("[ ") ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġenum Ġclass ĠJson Literal Array State Ġ{ ĊĠĠĠ ĠINITIAL , ĊĠĠĠ ĠSTART ED , ĊĠĠĠ ĠCOMP LETE Ċ } Ċ