package Ġcom . cube . arc . d ms dk . manager Ċ Ċ import Ġcom . cube . arc . d ms dk . model . Directory Ċ import Ġcom . google . gson . Gson Ċ import Ġcom . google . gson . Json Element Ċ import Ġcom . google . gson . reflect . Type Token Ċ import Ġjava . io . InputStream Ċ import Ġjava . io . InputStream Reader Ċ Ċ /** Ċ Ġ* ĠManager Ġclass Ġfor Ġloading Ġdata Ġsource Ġinto Ġusable Ġlist Ġof Ġ[ Directory ] Ġfor Ġeasy Ġaccess Ċ Ġ*/ Ċ object ĠDirectory Manager Ċ { Ċ ĉ /** Ċĉ Ġ* ĠInternal Ġlist Ġof Ġ[ Directory ] Ġloaded Ġvia Ġ[ init ]. ĠDo Ġnot Ġset Ġthis Ġvia Ġassign , Ġdo Ġso Ġvia Ġany Ġ[ init ] Ġmethod Ċĉ Ġ*/ Ċ ĉ var Ġdirectories : ĠArrayList < Directory > Ġ= Ġarray ListOf () Ċĉ ĉ set ( value ){} ĊĊ ĉ /** Ċĉ Ġ* ĠInitial ises Ġthe Ġmanager Ġinstance Ġwith Ġa Ġstream Ġto Ġa Ġfile Ġto Ġdecode Ġinto Ġ[ directories ] Ċĉ Ġ*/ Ċ ĉ public Ġfun Ġinit ( dataSource : ĠInputStream ) Ċ ĉ { Ċĉ ĉ directories . clear () Ċĉ ĉ directories . addAll ( Gson (). fromJson ( InputStream Reader ( dataSource ), Ġobject Ġ: ĠType Token < ArrayList < Directory > ?> () {}. type ) Ġ?: Ġarray ListOf < Directory >()) Ċ ĉ } ĊĊ ĉ /** Ċĉ Ġ* ĠInitial ises Ġthe Ġmanager Ġinstance Ġwith Ġa ĠString Ġrepresentation Ġof Ġ[ directories ] Ċĉ Ġ*/ Ċ ĉ public Ġfun Ġinit ( dataSource : ĠString ) Ċ ĉ { Ċĉ ĉ directories . clear () Ċĉ ĉ directories . addAll ( Gson (). fromJson ( dataSource , Ġobject Ġ: ĠType Token < ArrayList < Directory > ?> () {}. type ) Ġ?: Ġarray ListOf < Directory >()) Ċ ĉ } ĊĊ ĉ /** Ċĉ Ġ* ĠInitial ises Ġthe Ġmanager Ġinstance Ġwith Ġa Ġ[ Json Element ] Ġobject Ċĉ Ġ*/ Ċ ĉ public Ġfun Ġinit ( dataSource : ĠJson Element ) Ċ ĉ { Ċĉ ĉ directories . clear () Ċĉ ĉ directories . addAll ( Gson (). fromJson ( dataSource , Ġobject Ġ: ĠType Token < ArrayList < Directory > ?> () {}. type ) Ġ?: Ġarray ListOf < Directory >()) Ċ ĉ } ĊĊ ĉ /** Ċĉ Ġ* ĠInitial ises Ġthe Ġmanager Ġinstance Ġwith Ġa Ġlist Ġof Ġ[ Directory ] Ġmodels Ċĉ Ġ*/ Ċ ĉ public Ġfun Ġinit ( dataSource : ĠList < Directory >) Ċ ĉ { Ċĉ ĉ directories . clear () Ċĉ ĉ directories . addAll ( dataSource ) Ċ ĉ } ĊĊ ĉ /** Ċĉ Ġ* ĠGets Ġa Ġdirectory Ġfor Ġa Ġgiven Ġ[ id ], Ġor Ġ` null ` Ġif Ġone Ġwas Ġnot Ġfound Ċĉ Ġ*/ Ċ ĉ public Ġfun Ġdirectory ( id : ĠInt ?, Ġsub List : ĠList < Directory > Ġ= Ġdirectories ): ĠDirectory ? Ċ ĉ { Ċĉ ĉ sub List . forEach Ġ{ Ġsub Directory Ġ-> Ċĉĉ ĉ if Ġ( sub Directory . id Ġ== Ġid ) Ġreturn Ġsub Directory ĊĊĉĉ ĉ directory ( id , Ġsub Directory . directories )?. let Ġ{ Ċĉĉĉ ĉ return Ġit Ċĉĉ ĉ } Ċĉ ĉ } ĊĊĉ ĉ return Ġnull Ċ ĉ } ĊĊ ĉ /** Ċĉ Ġ* ĠGets Ġthe Ġparent Ġ[ Directory ] Ġobject , Ġor Ġnull Ġif Ġthe Ġobject Ġis Ġa Ġroot Ġobject , Ġor Ġcould Ġnot Ġbe Ġfound Ċĉ Ġ*/ Ċ ĉ public Ġfun Ġparent ( directory : ĠDirectory ): ĠDirectory ? Ġ= Ġdirectory ( directory . parentId ) Ċ } Ċ