/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 7 / 2 0 2 0 Ġe - voy age urs Ġtechnologies Ċ Ġ* Ċ Ġ* Ġ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 Ċ Ġ* Ċ Ġ* Ġhttp :// 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 Ġai . to ck . bot . x ray Ċ Ċ import Ġai . to ck . bot . admin . dialog . Action Report Ċ import Ġai . to ck . bot . admin . dialog . Dialog Report Ċ import Ġai . to ck . bot . admin . dialog . Dialog Report DAO Ċ import Ġai . to ck . bot . definition . Bot Definition Base Ċ import Ġai . to ck . bot . engine . Bot Bus Ċ import Ġai . to ck . bot . engine . message . Sentence Ċ import Ġai . to ck . bot . x ray . X ray Keywords . XR AY _ KEYWORD Ċ import Ġai . to ck . bot . x ray . X ray Keywords . XR AY _ UPDATE _ KEYWORD Ċ import Ġai . to ck . shared . error Ċ import Ġai . to ck . shared . injector Ċ import Ġai . to ck . shared . property Ċ import Ġai . to ck . shared . provide Ċ import Ġmu . Kotlin Logging Ċ Ċ class ĠX ray Keyword Handler Ġ{ ĊĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠKotlin Logging . logger Ġ{} ĊĠĠĠ Ġprivate Ġval Ġdialog Report DAO : ĠDialog Report DAO Ġ= Ġinjector . provide () ĊĠĠĠ Ġprivate Ġval Ġj ira Key Project Ġ= Ġproperty (" to ck _ bot _ test _ jira _ project ", Ġ" Set Ġa Ġkey Ġfor Ġthe Ġj ira Ġproject .") ĊĊĠĠĠ Ġinternal Ġfun Ġcreate X ray ( keyword : ĠString , Ġbus : ĠBot Bus ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġkeyword . replace ( XR AY _ KEYWORD , Ġ""). split (",") ĊĊĠĠĠĠĠĠĠ Ġif Ġ( params . size Ġ== Ġ 1 Ġ&& Ġparams [ 0 ]. isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbus . end Raw Text (" Error Ġ: ĠTest Ġtitle Ġis Ġmandatory ") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlabel Plan Map Ġ= Ġempty Map < String , ĠString >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx ray Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdialog Ġ= Ġdialog Report DAO . get Dialog ( bus . dialog . id ) !!. clean Sur rog ates () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlinked J ira Ġ= Ġparams . get OrNull ( 1 )?. trim () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconnector Name Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtest Title Ġ= Ġ{ Ġlabels : ĠList < String > Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġl Ġ= Ġlabels . filter Ġ{ Ġlabel Plan Map . containsKey ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlabel Link Ġ= Ġif Ġ( l . isEmpty ()) Ġ"" Ġelse Ġ"[ ${ l . first ()} ]" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlinked J ira Number Ġ= Ġif Ġ( linked J ira . isNull Or Blank ()) Ġ"" Ġelse Ġlinked J ira . replace ("$ jira Key Project -", Ġ"") Ġ+ Ġ" Ġ- Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ linked J ira Number Ġ[ AUTO ]$ connector Name $ label Link Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( params . get OrNull ( 0 )?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrim () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġ" Test ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠX ray Service (). generate X ray Test ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest Title , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlinked J ira , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf NotNull (""), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlabel Plan Map ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBot Definition Base . end TestContext Keyword Handler ( bus , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbus . next User Action State Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( x ray Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbus . end Raw Text (" X ray Ġissue Ġcreated Ġ: Ġ${ x ray . key }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbus . end Raw Text (" Error Ġduring Ġissue Ġcreation ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġupdate X ray ( keyword : ĠString , Ġbus : ĠBot Bus ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġkeyword . replace ( XR AY _ UPDATE _ KEYWORD , Ġ"") ĊĠĠĠĠĠĠĠ Ġval Ġtest Key Ġ= Ġparams . trim () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( test Key . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbus . end Raw Text (" Error : Ġtest Ġkey Ġis Ġmandatory ") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(! test Key . contains ( jira Key Project )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbus . end Raw Text (" Error : Ġproject Ġkey Ġ(${ params . split ("- ")[ 0 ]. trim () }) Ġdoes Ġnot Ġmatch Ġexpected Ġone Ġ($ jira Key Project )") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx ray Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdialog Ġ= Ġdialog Report DAO . get Dialog ( bus . dialog . id ) !!. clean Sur rog ates () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠX ray Service (). update X ray Test ( dialog , Ġtest Key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBot Definition Base . end TestContext Keyword Handler ( bus , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbus . next User Action State Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( x ray Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbus . end Raw Text (" X ray Ġissue Ġupdated Ġ: Ġ$ test Key ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbus . end Raw Text (" Error Ġduring Ġupdate Ġof Ġissue Ġ$ test Key ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠDialog Report . clean Sur rog ates (): ĠDialog Report Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcleaned Actions : ĠMutable List < Action Report > Ġ= Ġmutable ListOf () ĊĊĠĠĠĠĠĠĠ Ġthis . actions . forEach Indexed Ġ{ Ġindex , Ġcurrent Action Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcurrent Action Message Ġ= Ġcurrent Action . message . to Pretty String () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Action . message . is Simple Message ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Action Message . forEach Ġ{ Ġc Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( c . is Sur rogate ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Action Message Ġ= Ġcurrent Action Message . replace ("$ c ", Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcleaned Actions . add ( current Action . copy ( message Ġ= ĠSentence ( current Action Message ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcleaned Actions . add ( this . actions [ index ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠDialog Report ( cleaned Actions , Ġthis . user Interface , Ġthis . id ) ĊĠĠĠ Ġ} Ċ }