package Ġcom . github . jk 1 . y tpl ugin . rest Ċ Ċ import Ġcom . github . jk 1 . y tpl ugin . logger Ċ import Ġcom . github . jk 1 . y tpl ugin . rest . Mult ic atch Exception . Companion . mult ic atch Exception Ċ import Ġcom . github . jk 1 . y tpl ugin . tasks . You Track Server Ċ import Ġcom . github . jk 1 . y tpl ugin . time Tracker . Tracker Notification Ċ import Ġcom . intellij . notification . Notification Type Ċ import Ġorg . apache . http . client . methods . HttpGet Ċ import Ġorg . apache . http . client . methods . HttpPost Ċ import Ġorg . apache . http . client . utils . URI Builder Ċ import Ġjava . net . Socket Exception Ċ import Ġjava . net . Socket TimeoutException Ċ import Ġjava . net . URL Ċ import Ġjava . net . Unknown Host Exception ĊĊ Ċ class ĠTime Tracker RestClient ( override Ġval Ġrepository : ĠYou Track Server ) Ġ: ĠRest Client Trait , ĠResponse Logger Trait Ġ{ ĊĊĠĠĠ Ġfun Ġpost New WorkItem ( issue Id : ĠString , Ġtime : ĠString , Ġtype : ĠString , Ġcomment : ĠString , Ġdate : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtypes Ġ= Ġget Available WorkItem Types () ĊĊĠĠĠĠĠĠĠ Ġval Ġmethod Ġ= ĠHttp Post ("${ repository . url }/ api / issues /${ issue Id }/ time Tracking / work Items ") ĊĠĠĠĠĠĠĠ Ġval Ġres : ĠURL ? Ġ= Ġthis :: class . java . class Loader . getResource (" post _ work _ item _ body . json ") ĊĠĠĠĠĠĠĠ Ġval Ġjson Body Ġ= Ġres ?. read Text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . replace ("\" { minutes } \"", Ġtime , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . replace ("\" { date } \"", Ġdate , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . replace ("{ author Id }", Ġget My Id As Author (), Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . replace ("{ type }", Ġtype , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . replace ("{ type Id }", Ġtypes [ type ] Ġ?: Ġthrow ĠIllegalArgumentException (" No Ġwork Ġitem Ġtype Ġby Ġname Ġ'$ type ' "), Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . replace ("{ comment }", Ġcomment , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġmethod . entity Ġ= Ġjson Body ?. json Entity ĊĠĠĠĠĠĠĠ Ġmethod . execute Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug (" Successfully Ġposted Ġwork Ġitem Ġ${ types [ type ]} Ġfor Ġissue Ġ$ issue Id ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget My Id As Author (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠHttp Get ("${ repository . url }/ api / admin / users / me ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. execute Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . as JsonObject . get (" id "). asString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Available WorkItem Types (): ĠMap < String , ĠString > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠURI Builder ("${ repository . url }/ api / admin / time Tracking Settings / work Item Types ") ĊĠĠĠĠĠĠĠ Ġbuilder . add Parameter (" fields ", Ġ" name , id ") ĊĠĠĠĠĠĠĠ Ġval Ġmethod Ġ= ĠHttp Get ( builder . build ()) ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmethod . execute Ġ{ Ġelement Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement . as JsonArray . associate Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( it . as JsonObject . get (" name "). asString , Ġit . as JsonObject . get (" id "). asString ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . mult ic atch Exception ( Socket Exception :: class . java , ĠUnknown Host Exception :: class . java , ĠSocket TimeoutException :: class . java ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtracker Note Ġ= ĠTracker Notification () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtracker Note . notify (" Connection Ġto ĠYou Track Ġserver Ġis Ġlost , Ġplease Ġcheck Ġyour Ġnetwork Ġconnection ", ĠNotification Type . WARNING ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn (" Connection Ġto Ġnetwork Ġlost : Ġ${ e . message }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }