package Ġcom . github . han se ter . json . editor . util Ċ Ċ import Ġorg . json . JSONArray Ċ import Ġorg . json . JSONObject Ċ import Ġorg . json . JSON Pointer Ċ Ċ fun ĠgetAll Json Pointer Strings ( obj : ĠJSONObject , Ġprefix : ĠString ): ĠList < String > Ġ{ ĊĠĠĠ Ġval Ġpointers Ġ= Ġmutable ListOf < String >() ĊĊĠĠĠ Ġval Ġqueue Ġ= Ġmutable ListOf ( Queue Element ("", Ġobj )) ĊĊĠĠĠ Ġfun Ġsimilar To Prefix ( s : ĠString ) Ġ= Ġs . startsWith ( prefix ) Ġ|| Ġ( s . length Ġ< Ġprefix . length Ġ&& Ġprefix . startsWith ( s )) ĊĊĠĠĠ Ġwhile Ġ( queue . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġelement Ġ= Ġqueue . remove First () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( element . obj Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( key Ġin Ġelement . obj . keySet ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġthis Pointer Ġ= Ġ"${ element . parent Pointer }/${ escape Json Pointer Element ( key )}" ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( similar To Prefix ( this Pointer )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this Pointer . startsWith ( prefix )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpointers . add ( this Pointer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement . obj . opt JSONObject ( key )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqueue . add ( 0 , ĠQueue Element ( this Pointer , Ġit )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement . obj . opt JSONArray ( key )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqueue . add ( 0 , ĠQueue Element ( this Pointer , Ġit )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( element . arr Ġ!= Ġnull Ġ&& Ġelement . arr . length () Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( index Ġin Ġ 0 Ġuntil Ġelement . arr . length ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġthis Pointer Ġ= Ġ"${ element . parent Pointer }/ $ index " ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( similar To Prefix ( this Pointer )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this Pointer . startsWith ( prefix )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpointers . add ( this Pointer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement . arr . opt JSONObject ( index )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqueue . add ( 0 , ĠQueue Element ( this Pointer , Ġit )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement . arr . opt JSONArray ( index )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqueue . add ( 0 , ĠQueue Element ( this Pointer , Ġit )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġpointers Ċ } Ċ Ċ fun ĠisValid Json Pointer ( obj : ĠJSONObject , Ġpointer : ĠString ): ĠBoolean Ġ{ ĊĠĠĠ Ġif Ġ(! pointer . startsWith ('/ ')) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġpointer Elements Ġ= Ġpointer . substring ( 1 ). split ('/') ĊĊĠĠĠ Ġvar Ġcurrent El : ĠAny ? Ġ= Ġobj ĊĊĠĠĠ Ġfor Ġ( value Ġin Ġpointer Elements ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġcurrent El Ġ= Ġwhen Ġ( current El ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠJSONObject Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! current El . has ( un escape Json Pointer Element ( value ))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent El . opt ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠJSONArray Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue As Int Ġ= Ġvalue . toInt OrNull () Ġ?: Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current El . length () Ġ<= Ġvalue As Int ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent El . opt ( value As Int ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġtrue Ċ } Ċ Ċ /** Ċ Ġ* ĠRes olves Ġa ĠJSON ĠPointer Ġagainst Ġan Ġobject . Ċ Ġ* Ċ Ġ* Ġ@ throws ĠIllegalArgumentException Ġif Ġ` pointer ` Ġis Ġnot Ġa Ġvalid ĠJSON ĠPointer Ċ Ġ* Ġ@ throws Ġorg . json . JSON PointerException Ġif Ġevaluation Ġfails Ċ Ġ*/ Ċ fun Ġresolve Json Pointer ( obj : ĠJSONObject , Ġpointer : ĠString ): ĠAny ? Ġ{ ĊĠĠĠ Ġval Ġjson Pointer Ġ= ĠJSON Pointer ( pointer ) ĊĊĠĠĠ Ġreturn Ġjson Pointer . query From ( obj ) Ċ } Ċ Ċ fun Ġescape Json Pointer Element ( element : ĠString ): ĠString Ġ{ ĊĠĠĠ Ġreturn Ġelement . replace (" ~ ", Ġ"~ 0 "). replace ("/", Ġ"~ 1 ") Ċ } Ċ Ċ fun Ġun escape Json Pointer Element ( element : ĠString ): ĠString Ġ{ ĊĠĠĠ Ġreturn Ġelement . replace (" ~ 1 ", Ġ"/ "). replace (" ~ 0 ", Ġ"~ ") Ċ } ĊĊ Ċ private Ġclass ĠQueue Element Ġprivate Ġconstructor ( val Ġparent Pointer : ĠString , Ġval Ġobj : ĠJSONObject ?, Ġval Ġarr : ĠJSONArray ?) Ġ{ ĊĊĊĠĠĠ Ġconstructor ( parent Pointer : ĠString , Ġobj : ĠJSONObject ) Ġ: Ġthis ( parent Pointer , Ġobj , Ġnull ) ĊĊĠĠĠ Ġconstructor ( parent Pointer : ĠString , Ġarr : ĠJSONArray ) Ġ: Ġthis ( parent Pointer , Ġnull , Ġarr ) Ċ }