/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 ĠSer ge ĠMer z li ak ov Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttps :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġorg . install m ation . model . binary Ċ Ċ import Ġcom . google . gson .* Ċ import Ġorg . apache . logging . log 4 j . Log Manager Ċ import Ġorg . apache . logging . log 4 j . Logger Ċ import Ġorg . install m ation . core . Operating System Ċ import Ġjava . io . File Ċ import Ġjava . lang . reflect . Type Ċ import Ġkotlin . random . Random Ċ Ċ private Ġval Ġlog : ĠLogger Ġ= ĠLog Manager . getLogger ( JDK Serializer :: class . java ) Ċ Ċ private Ġconst Ġval ĠJDK _ OS Ġ= Ġ" operating - system " Ċ private Ġconst Ġval ĠJDK _ PATH Ġ= Ġ" jdk - path " Ċ private Ġconst Ġval ĠJDK _ NAME Ġ= Ġ" jdk - name " Ċ Ċ /** Ċ Ġ* ĠCustom Ġserializer Ċ Ġ*/ Ċ class ĠJDK Serializer Ġ: ĠJsonSerializer < JDK >, ĠJson Deserializer < JDK > Ġ{ ĊĊĠĠ Ġoverride Ġfun Ġserialize ( jdk : ĠJDK ?, ĠtypeOf Src : ĠType ?, Ġcontext : ĠJson Serialization Context ?): ĠJson Element Ġ{ ĊĠĠĠĠĠ Ġval Ġjson Ġ= ĠJsonObject () ĊĠĠĠĠĠ Ġjson . addProperty ( JDK _ NAME , Ġj dk ?. name ) ĊĠĠĠĠĠ Ġjson . addProperty ( JDK _ PATH , Ġj dk ?. path ?. absolute Path ) ĊĠĠĠĠĠ Ġwhen Ġ( jdk ) Ġ{ ĊĠĠĠĠĠĠĠĠ Ġis ĠMac JDK Ġ-> Ġjson . addProperty ( JDK _ OS , ĠOperating System . Type . OSX . name ) ĊĠĠĠĠĠĠĠĠ Ġis ĠWindows JDK Ġ-> Ġjson . addProperty ( JDK _ OS , ĠOperating System . Type . Windows . name ) ĊĠĠĠĠĠĠĠĠ Ġis ĠLinux JDK Ġ-> Ġjson . addProperty ( JDK _ OS , ĠOperating System . Type . Linux . name ) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġreturn Ġjson ĊĠĠ Ġ} ĊĊĠĠ Ġoverride Ġfun Ġdeserialize ( json : ĠJson Element ?, ĠtypeOf T : ĠType ?, Ġcontext : ĠJson Deserialization Context ?): ĠJDK Ġ{ ĊĠĠĠĠĠ Ġval Ġobj Ġ= Ġjson ?. as JsonObject ĊĠĠĠĠĠ Ġvar Ġj dk Name Ġ= Ġobj ?. get ( JDK _ NAME )?. as Json Primitive ?. asString ĊĠĠĠĠĠ Ġif Ġ( jdk Name . isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠ Ġj dk Name Ġ= Ġ" JDK -" Ġ+ ĠRandom . nextInt ( 0 , Ġ 9 9 9 9 ) ĊĠĠĠĠĠĠĠĠ Ġlog . warn (" Deserial ized ĠJDK Ġhad Ġno Ġname . ĠNot Ġfatal , Ġbut Ġrandom Ġname Ġ${ jdk Name } Ġassigned .") ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġval Ġos String Ġ= Ġobj ?. get ( JDK _ OS )?. as Json Primitive ?. asString ĊĠĠĠĠĠ Ġval Ġos : ĠOperating System . Type ; ĊĠĠĠĠĠ Ġif Ġ( os String . isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠ Ġos Ġ= ĠOperating System . os () ĊĠĠĠĠĠĠĠĠ Ġlog . warn (" Deserial ized ĠJDK Ġhad Ġno Ġoperating Ġsystem . ĠNot Ġfatal , Ġbut Ġoperating Ġsystem Ġdetermined Ġdynamically ") ĊĠĠĠĠĠ Ġ} Ġelse ĊĠĠĠĠĠĠĠĠ Ġos Ġ= ĠOperating System . Type . valueOf ( os String ) ĊĊĠĠĠĠĠ Ġval Ġj dk Path Ġ= Ġobj ?. get ( JDK _ PATH )?. as Json Primitive ?. asString ĊĠĠĠĠĠ Ġreturn Ġwhen Ġ( os ) Ġ{ ĊĠĠĠĠĠĠĠĠ ĠOperating System . Type . OSX Ġ-> ĠMac JDK ( jdk Name , ĠFile ( jdk Path )) ĊĠĠĠĠĠĠĠĠ ĠOperating System . Type . Windows Ġ-> ĠWindows JDK ( jdk Name , ĠFile ( jdk Path )) ĊĠĠĠĠĠĠĠĠ ĠOperating System . Type . Linux Ġ-> ĠLinux JDK ( jdk Name , ĠFile ( jdk Path )) ĊĠĠĠĠĠ Ġ} ĊĠĠ Ġ} Ċ }