/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 0 - 2 0 2 1 , ĠNull Non ame Ċ Ġ* ĠKotlin Ġconverted Ġand Ġmodified Ġby ĠV en om = N hel v Ċ Ġ* ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* ĠRedistribution Ġand Ġuse Ġin Ġsource Ġand Ġbinary Ġforms , Ġwith Ġor Ġwithout Ċ Ġ* Ġmodification , Ġare Ġpermitted Ġprovided Ġthat Ġthe Ġfollowing Ġconditions Ġare Ġmet : Ċ Ġ* ĠĠĠĠ Ġ* ĠRedistributions Ġof Ġsource Ġcode Ġmust Ġretain Ġthe Ġabove Ġcopyright Ċ Ġ* ĠĠĠĠĠĠ Ġnotice , Ġthis Ġlist Ġof Ġconditions Ġand Ġthe Ġfollowing Ġdisclaimer . Ċ Ġ* ĠĠĠĠ Ġ* ĠRedistributions Ġin Ġbinary Ġform Ġmust Ġreproduce Ġthe Ġabove Ġcopyright Ċ Ġ* ĠĠĠĠĠĠ Ġnotice , Ġthis Ġlist Ġof Ġconditions Ġand Ġthe Ġfollowing Ġdisclaimer Ġin Ġthe Ċ Ġ* ĠĠĠĠĠĠ Ġdocumentation Ġand / or Ġother Ġmaterials Ġprovided Ġwith Ġthe Ġdistribution . Ċ Ġ* ĠĠĠĠ Ġ* ĠNeither Ġthe Ġname Ġof ĠNull Non ame Ġnor Ġthe Ġnames Ġof Ġits Ċ Ġ* ĠĠĠĠĠĠ Ġcontributors Ġmay Ġbe Ġused Ġto Ġendorse Ġor Ġpromote Ġproducts Ġderived Ġfrom Ċ Ġ* ĠĠĠĠĠĠ Ġthis Ġsoftware Ġwithout Ġspecific Ġprior Ġwritten Ġpermission . Ċ Ġ* Ċ Ġ* ĠTHIS ĠSOFTWARE ĠIS ĠPROVIDED ĠBY ĠTHE ĠCOPYRIGHT ĠHOLDERS ĠAND ĠCONTRIBUTORS Ġ" AS ĠIS " Ċ Ġ* ĠAND ĠANY ĠEXPRESS ĠOR ĠIMPLIED ĠWARRANTIES , ĠINCLUDING , ĠBUT ĠNOT ĠLIMITED ĠTO , ĠTHE Ċ Ġ* ĠIMPLIED ĠWARRANTIES ĠOF ĠMERCHANTABILITY ĠAND ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE Ċ Ġ* ĠARE ĠDISCLAIMED . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE ĠCOPYRIGHT ĠOWNER ĠOR ĠCONTRIBUTORS ĠBE Ċ Ġ* ĠLIABLE ĠFOR ĠANY ĠDIRECT , ĠINDIRECT , ĠINCIDENTAL , ĠSPECIAL , ĠEXEMPLARY , ĠOR Ċ Ġ* ĠCONSEQUENTIAL ĠDAMAGES Ġ( INCLUDING , ĠBUT ĠNOT ĠLIMITED ĠTO , ĠPROCUREMENT ĠOF Ċ Ġ* ĠSUBSTITUTE ĠGOODS ĠOR ĠSERVICES ; ĠLOSS ĠOF ĠUSE , ĠDATA , ĠOR ĠPROFITS ; ĠOR ĠBUSINESS Ċ Ġ* ĠINTERRUPTION ) ĠHOWEVER ĠCAUSED ĠAND ĠON ĠANY ĠTHEORY ĠOF ĠLIABILITY , ĠWHETHER ĠIN Ċ Ġ* ĠCONTRACT , ĠSTRICT ĠLIABILITY , ĠOR ĠTORT Ġ( INCLUDING ĠNEGLIGENCE ĠOR ĠOTHERWISE ) Ċ Ġ* ĠARISING ĠIN ĠANY ĠWAY ĠOUT ĠOF ĠTHE ĠUSE ĠOF ĠTHIS ĠSOFTWARE , ĠEVEN ĠIF ĠADVISED ĠOF ĠTHE Ċ Ġ* ĠPOSSIBILITY ĠOF ĠSUCH ĠDAMAGE . Ċ Ġ*/ Ċ package Ġmu . nu . null po . util Ċ Ċ import Ġjava . io . ByteArray InputStream Ċ import Ġjava . io . ByteArray OutputStream Ċ import Ġjava . io . Unsupported EncodingException Ċ import Ġjava . net . URL Decoder Ċ import Ġjava . net . URL Encoder Ċ import Ġjava . nio . charset . StandardCharsets Ċ import Ġjava . util . Enumeration Ċ import Ġjava . util . Properties Ċ import Ġjava . util . Vector Ċ Ċ /** ĠString ä»¥ å¤ĸ ãĤĤ æł¼ ç´ į ãģ§ãģįãĤĭ ãĥĹãĥŃ ãĥĳ ãĥĨãĤ£ ãĤ»ãĥĥãĥĪ Ġ*/ Ċ class ĠCustom Properties : Properties () Ġ{ ĊĊ ĉ @ Synchron ized Ċ ĉ override Ġfun Ġkeys (): Enumeration < Any > Ġ{ Ċĉ ĉ val Ġkeys Enum Ġ= Ġsuper . keys () Ċĉ ĉ val Ġkey List Ġ= ĠVector < String >() Ċĉ ĉ while ( keys Enum . hasMore Elements ()) Ġ{ Ċĉĉ ĉ key List . add ( keys Enum . nextElement (). toString ()) Ċĉ ĉ } Ċĉ ĉ key List . sort () Ċĉ ĉ return Ġelements () Ċ ĉ } ĊĊ ĉ /** Ġ ãĥĹãĥŃ ãĥĳ ãĥĨãĤ£ ãĤĴè¨Ńå®ļ Ċĉ Ġ* Ġ@ param Ġkey ĠãĤ Ń ãĥ¼ Ċĉ Ġ* Ġ@ param Ġvalue Ġkey ãģ«å¯¾ å¿ľ ãģĻãĤĭ å¤īæķ° Ċĉ Ġ* Ġ@ return Ġ ãĥĹãĥŃ ãĥĳ ãĥĨãĤ£ ãĥªãĤ¹ãĥĪ ãģ® æĮĩå®ļ ãģķãĤĮãģŁ ãĤŃ ãĥ¼ãģ® åīį ãģ® åĢ¤ ãĢĤ ãģĿãĤĮ ãģĮ ãģªãģĦ åł´åĲĪãģ¯ Ġnull Ċĉ Ġ*/ Ċ ĉ @ Synchron ized Ċ ĉ fun Ġ< T : Comparable < T >> Ġset Property ( key : String , Ġvalue : Comparable < T >): Any ? Ġ= Ġwhen ( value ) Ġ{ Ċĉ ĉ is ĠByte Ġ-> Ġset Property ( key , Ġ"$ value ") Ċĉ ĉ is ĠInt Ġ-> Ġset Property ( key , Ġ"$ value ") Ċĉ ĉ is ĠLong Ġ-> Ġset Property ( key , Ġ"$ value ") Ċĉ ĉ is ĠFloat Ġ-> Ġset Property ( key , Ġ"$ value ") Ċĉ ĉ is ĠDouble Ġ-> Ġset Property ( key , Ġ"$ value ") Ċĉ ĉ is ĠChar Ġ-> Ġset Property ( key , Ġ"$ value ") Ċĉ ĉ is ĠBoolean Ġ-> Ġset Property ( key , Ġ"$ value ") Ċĉ ĉ else Ġ-> Ġset Property ( key , Ġ"$ value ") Ċ ĉ } ĊĊ ĉ /** Ġbyte åŀĭ ãģ® ãĥĹãĥŃ ãĥĳ ãĥĨãĤ£ ãĤĴåıĸå¾Ĺ Ċĉ Ġ* Ġ@ param Ġkey ĠãĤ Ń ãĥ¼ Ċĉ Ġ* Ġ@ param ĠdefaultValue Ġkey ãģĮ è¦ĭ ãģ¤ ãģĭãĤī ãģªãģĦ åł´åĲĪ ãģ« è¿Ķ ãģĻ å¤īæķ° Ċĉ Ġ* Ġ@ return ĠæĮĩå®ļ ãģķãĤĮãģŁ ãĤŃ ãĥ¼ ãģ«å¯¾ å¿ľ ãģĻãĤĭ æķ´æķ° Ġ( è¦ĭ ãģ¤ ãģĭãĤī ãģª ãģĭ ãģ£ãģŁ ãĤī defaultValue ï¼ī Ċĉ Ġ*/ Ċ ĉ fun ĠgetProperty ( key : String , ĠdefaultValue : Byte ): Byte Ġ= Ġtry Ġ{ Ċĉ ĉ getProperty ( key , Ġ"$ defaultValue "). to Byte () Ċ ĉ } Ġcatch ( e : Number FormatException ) Ġ{ Ċĉ ĉ defaultValue Ċ ĉ } ĊĊ ĉ /** Ġshort åŀĭ ãģ® ãĥĹãĥŃ ãĥĳ ãĥĨãĤ£ ãĤĴåıĸå¾Ĺ Ċĉ Ġ* Ġ@ param Ġkey ĠãĤ Ń ãĥ¼ Ċĉ Ġ* Ġ@ param ĠdefaultValue Ġkey ãģĮ è¦ĭ ãģ¤ ãģĭãĤī ãģªãģĦ åł´åĲĪ ãģ« è¿Ķ ãģĻ å¤īæķ° Ċĉ Ġ* Ġ@ return ĠæĮĩå®ļ ãģķãĤĮãģŁ ãĤŃ ãĥ¼ ãģ«å¯¾ å¿ľ ãģĻãĤĭ æķ´æķ° Ġ( è¦ĭ ãģ¤ ãģĭãĤī ãģª ãģĭ ãģ£ãģŁ ãĤī defaultValue ï¼ī Ċĉ Ġ*/ Ċ ĉ fun ĠgetProperty ( key : String , ĠdefaultValue : Short ): Short Ġ= Ġtry Ġ{ Ċĉ ĉ getProperty ( key , Ġ"$ defaultValue "). to Short () Ċ ĉ } Ġcatch ( e : Number FormatException ) Ġ{ Ċĉ ĉ defaultValue Ċ ĉ } ĊĊ ĉ /** Ġint åŀĭ ãģ® ãĥĹãĥŃ ãĥĳ ãĥĨãĤ£ ãĤĴåıĸå¾Ĺ Ċĉ Ġ* Ġ@ param Ġkey ĠãĤ Ń ãĥ¼ Ċĉ Ġ* Ġ@ param ĠdefaultValue Ġkey ãģĮ è¦ĭ ãģ¤ ãģĭãĤī ãģªãģĦ åł´åĲĪ ãģ« è¿Ķ ãģĻ å¤īæķ° Ċĉ Ġ* Ġ@ return ĠæĮĩå®ļ ãģķãĤĮãģŁ ãĤŃ ãĥ¼ ãģ«å¯¾ å¿ľ ãģĻãĤĭ æķ´æķ° Ġ( è¦ĭ ãģ¤ ãģĭãĤī ãģª ãģĭ ãģ£ãģŁ ãĤī defaultValue ï¼ī Ċĉ Ġ*/ Ċ ĉ fun ĠgetProperty ( key : String , ĠdefaultValue : Int ): Int Ġ= Ġtry Ġ{ Ċĉ ĉ getProperty ( key , Ġ"$ defaultValue "). toInt () Ċ ĉ } Ġcatch ( e : Number FormatException ) Ġ{ Ċĉ ĉ defaultValue Ċ ĉ } ĊĊ ĉ /** ĠintArray åŀĭ ãģ® ãĥĹãĥŃ ãĥĳ ãĥĨãĤ£ ãĤĴåıĸå¾Ĺ Ċĉ Ġ* Ġ@ param Ġkey ĠãĤ Ń ãĥ¼ Ċĉ Ġ* Ġ@ param ĠdefaultValue Ġkey ãģĮ è¦ĭ ãģ¤ ãģĭãĤī ãģªãģĦ åł´åĲĪ ãģ« è¿Ķ ãģĻ å¤īæķ° Ċĉ Ġ* Ġ@ return ĠæĮĩå®ļ ãģķãĤĮãģŁ ãĤŃ ãĥ¼ ãģ«å¯¾ å¿ľ ãģĻãĤĭ æķ´æķ° Ġ( è¦ĭ ãģ¤ ãģĭãĤī ãģª ãģĭ ãģ£ãģŁ ãĤī defaultValue ï¼ī Ċĉ Ġ*/ Ċ ĉ fun ĠgetProperty ( key : String , ĠdefaultValue : IntArray ): IntArray Ġ= Ġtry Ġ{ Ċĉ ĉ getProperty ( key , Ġ"$ defaultValue "). split (',' ). map Ġ{ it . toInt ()}. to IntArray () Ċ ĉ } Ġcatch ( e : Number FormatException ) Ġ{ Ċĉ ĉ defaultValue Ċ ĉ } ĊĊ ĉ fun Ġset Property ( key : String , Ġvalue : IntArray ): Any Ġ= Ċĉ ĉ setProperty ( key , Ġvalue . join ToString ( separator Ġ= Ġ", ")) ĊĊ ĉ /** Ġlong åŀĭ ãģ® ãĥĹãĥŃ ãĥĳ ãĥĨãĤ£ ãĤĴåıĸå¾Ĺ Ċĉ Ġ* Ġ@ param Ġkey ĠãĤ Ń ãĥ¼ Ċĉ Ġ* Ġ@ param ĠdefaultValue Ġkey ãģĮ è¦ĭ ãģ¤ ãģĭãĤī ãģªãģĦ åł´åĲĪ ãģ« è¿Ķ ãģĻ å¤īæķ° Ċĉ Ġ* Ġ@ return ĠæĮĩå®ļ ãģķãĤĮãģŁ ãĤŃ ãĥ¼ ãģ«å¯¾ å¿ľ ãģĻãĤĭ æķ´æķ° Ġ( è¦ĭ ãģ¤ ãģĭãĤī ãģª ãģĭ ãģ£ãģŁ ãĤī defaultValue ï¼ī Ċĉ Ġ*/ Ċ ĉ fun ĠgetProperty ( key : String , ĠdefaultValue : Long ): Long Ġ= Ġtry Ġ{ Ċĉ ĉ getProperty ( key , Ġ"$ defaultValue "). to Long () Ċ ĉ } Ġcatch ( e : Number FormatException ) Ġ{ Ċĉ ĉ defaultValue Ċ ĉ } ĊĊ ĉ /** Ġfloat åŀĭ ãģ® ãĥĹãĥŃ ãĥĳ ãĥĨãĤ£ ãĤĴåıĸå¾Ĺ Ċĉ Ġ* Ġ@ param Ġkey ĠãĤ Ń ãĥ¼ Ċĉ Ġ* Ġ@ param ĠdefaultValue Ġkey ãģĮ è¦ĭ ãģ¤ ãģĭãĤī ãģªãģĦ åł´åĲĪ ãģ« è¿Ķ ãģĻ å¤īæķ° Ċĉ Ġ* Ġ@ return ĠæĮĩå®ļ ãģķãĤĮãģŁ ãĤŃ ãĥ¼ ãģ«å¯¾ å¿ľ ãģĻãĤĭ æķ´æķ° Ġ( è¦ĭ ãģ¤ ãģĭãĤī ãģª ãģĭ ãģ£ãģŁ ãĤī defaultValue ï¼ī Ċĉ Ġ*/ Ċ ĉ fun ĠgetProperty ( key : String , ĠdefaultValue : Float ): Float Ġ= Ġtry Ġ{ Ċĉ ĉ getProperty ( key , Ġ"$ defaultValue "). toFloat () Ċ ĉ } Ġcatch ( e : Number FormatException ) Ġ{ Ċĉ ĉ defaultValue Ċ ĉ } ĊĊ ĉ /** Ġdouble åŀĭ ãģ® ãĥĹãĥŃ ãĥĳ ãĥĨãĤ£ ãĤĴåıĸå¾Ĺ Ċĉ Ġ* Ġ@ param Ġkey ĠãĤ Ń ãĥ¼ Ċĉ Ġ* Ġ@ param ĠdefaultValue Ġkey ãģĮ è¦ĭ ãģ¤ ãģĭãĤī ãģªãģĦ åł´åĲĪ ãģ« è¿Ķ ãģĻ å¤īæķ° Ċĉ Ġ* Ġ@ return ĠæĮĩå®ļ ãģķãĤĮãģŁ ãĤŃ ãĥ¼ ãģ«å¯¾ å¿ľ ãģĻãĤĭ æķ´æķ° Ġ( è¦ĭ ãģ¤ ãģĭãĤī ãģª ãģĭ ãģ£ãģŁ ãĤī defaultValue ï¼ī Ċĉ Ġ*/ Ċ ĉ fun ĠgetProperty ( key : String , ĠdefaultValue : Double ): Double Ġ= Ġtry Ġ{ Ċĉ ĉ getProperty ( key , Ġ"$ defaultValue "). toDouble () Ċ ĉ } Ġcatch ( e : Number FormatException ) Ġ{ Ċĉ ĉ defaultValue Ċ ĉ } ĊĊ ĉ /** Ġchar åŀĭ ãģ® ãĥĹãĥŃ ãĥĳ ãĥĨãĤ£ ãĤĴåıĸå¾Ĺ Ċĉ Ġ* Ġ@ param Ġkey ĠãĤ Ń ãĥ¼ Ċĉ Ġ* Ġ@ param ĠdefaultValue Ġkey ãģĮ è¦ĭ ãģ¤ ãģĭãĤī ãģªãģĦ åł´åĲĪ ãģ« è¿Ķ ãģĻ å¤īæķ° Ċĉ Ġ* Ġ@ return ĠæĮĩå®ļ ãģķãĤĮãģŁ ãĤŃ ãĥ¼ ãģ«å¯¾ å¿ľ ãģĻãĤĭ æķ´æķ° Ġ( è¦ĭ ãģ¤ ãģĭãĤī ãģª ãģĭ ãģ£ãģŁ ãĤī defaultValue ï¼ī Ċĉ Ġ*/ Ċ ĉ fun ĠgetProperty ( key : String , ĠdefaultValue : Char ): Char Ġ= Ġtry Ġ{ Ċĉ ĉ getProperty ( key , Ġ"$ defaultValue ")[ 0 ] Ċ ĉ } Ġcatch ( e : Exception ) Ġ{ Ċĉ ĉ defaultValue Ċ ĉ } ĊĊ ĉ /** Ġboolean åŀĭ ãģ® ãĥĹãĥŃ ãĥĳ ãĥĨãĤ£ ãĤĴåıĸå¾Ĺ Ċĉ Ġ* Ġ@ param Ġkey ĠãĤ Ń ãĥ¼ Ċĉ Ġ* Ġ@ param ĠdefaultValue Ġkey ãģĮ è¦ĭ ãģ¤ ãģĭãĤī ãģªãģĦ åł´åĲĪ ãģ« è¿Ķ ãģĻ å¤īæķ° Ċĉ Ġ* Ġ@ return ĠæĮĩå®ļ ãģķãĤĮãģŁ ãĤŃ ãĥ¼ ãģ«å¯¾ å¿ľ ãģĻãĤĭ boolean åŀĭ å¤īæķ° Ġ( è¦ĭ ãģ¤ ãģĭãĤī ãģª ãģĭ ãģ£ãģŁ ãĤī defaultValue ï¼ī Ċĉ Ġ*/ Ċ ĉ fun ĠgetProperty ( key : String , ĠdefaultValue : Boolean ): Boolean Ġ= Ċĉ ĉ getProperty ( key , Ġ"$ defaultValue "). to Boolean () ĊĊ ĉ /** Ġãģĵãģ® ãĥĹãĥŃ ãĥĳ ãĥĨãĤ£ ãĤ»ãĥĥãĥĪ ãĤĴ æĸĩåŃĹåĪĹ ãģ« å¤ī æıĽ ãģĻãĤĭ ( URL Encoder ãģ§ ãĤ¨ ãĥ³ ãĤ³ãĥ¼ãĥī ) Ċĉ Ġ* Ġ@ param Ġcomments Ġ èŃ ĺ åĪ¥ ãĤ³ ãĥ¡ãĥ³ãĥĪ Ċĉ Ġ* Ġ@ return ĠURL Encoder ãģ§ ãĤ¨ ãĥ³ ãĤ³ãĥ¼ãĥī ãģķãĤĮãģŁ ãĥĹãĥŃ ãĥĳ ãĥĨãĤ£ ãĤ»ãĥĥãĥĪ æĸĩåŃĹåĪĹ Ċĉ Ġ*/ Ċ ĉ fun Ġencode ( comments : String ): String ? Ġ= Ġtry Ġ{ Ċĉ ĉ val Ġout Ġ= ĠByteArrayOutputStream () Ċĉ ĉ store ( out , Ġcomments ) Ċĉ ĉ URL Encoder . encode ( out . toString ( code . name ()), Ġcode . name ()) Ċ ĉ } Ġcatch ( e : Unsupported EncodingException ) Ġ{ Ċĉ ĉ throw ĠError (" UTF - 8 Ġnot Ġsupported ", Ġe ) Ċ ĉ } Ġcatch ( e : Exception ) Ġ{ Ċĉ ĉ e . printStackTrace () Ċĉ ĉ null Ċ ĉ } ĊĊ ĉ /** Ġencode ( String ) ãģ§ ãĤ¨ ãĥ³ ãĤ³ãĥ¼ãĥī ãģĹãģŁ String ãģĭãĤī ãĥĹãĥŃ ãĥĳ ãĥĨãĤ£ ãĤ»ãĥĥãĥĪ ãĤĴ å¾ © åħĥ Ċĉ Ġ* Ġ@ param Ġsource Ġencode ( String ) ãģ§ ãĤ¨ ãĥ³ ãĤ³ãĥ¼ãĥī ãģĹãģŁ String Ċĉ Ġ* Ġ@ return Ġ æĪĲåĬŁ ãģĻãĤĭãģ¨ true Ċĉ Ġ*/ Ċ ĉ fun Ġdecode ( source : String ): Boolean Ġ= Ġtry Ġ{ Ċĉ ĉ val Ġdecoded String Ġ= ĠURL Decoder . decode ( source , Ġcode . name ()) Ċĉ ĉ val Ġprop Ġ= ĠByteArrayInputStream ( decoded String . toByteArray ( code )) Ċĉ ĉ load ( prop ) Ċĉ ĉ true Ċ ĉ } Ġcatch ( e : Unsupported EncodingException ) Ġ{ Ċĉ ĉ throw ĠError (" UTF - 8 Ġnot Ġsupported ", Ġe ) Ċ ĉ } Ġcatch ( e : Exception ) Ġ{ Ċĉ ĉ e . printStackTrace () Ċĉ ĉ false Ċ ĉ } ĊĊ ĉ comp anion Ġobject Ġ{ ĊĊĉ ĉ /** ĠSerial Ġversion Ġ*/ Ċĉ ĉ private Ġconst Ġval ĠserialVersionUID Ġ= Ġ 2 L ĊĊĉ ĉ private Ġval Ġcode Ġ= ĠStandard Charsets . UTF _ 8 Ċ ĉ } Ċ } Ċ