package Ġcom . te zos . client Ċ Ċ import Ġcom . intellij . execution . configurations . Path EnvironmentVariable Util Ċ import Ġcom . intellij . openapi . diagnostic . Logger Ċ import Ġcom . te zos . client . stack .* Ċ import Ġorg . antlr . v 4 . runtime . Char Streams Ċ import Ġorg . antlr . v 4 . runtime . Common Token Stream Ċ import Ġjava . nio . charset . StandardCharsets Ċ import Ġjava . nio . file . Files Ċ import Ġjava . nio . file . Path Ċ Ċ /** Ċ Ġ* ĠAn Ġerror Ġwhich Ġoccurred Ġwhen Ġrunning Ġthe ĠTe zos Ġclient . Ċ Ġ*/ Ċ abstract Ġclass ĠTe zos Client Error ( message : ĠString , Ġcause : ĠThrowable ?) Ġ: ĠException ( message , Ġcause ) Ċ Ċ /** Ċ Ġ* ĠA ĠTe zos Ġclient Ġerror Ġto Ġsignal Ġthat Ġthe Ġclient Ġreturned Ġa Ġ" Node Ġis Ġnot Ġrunning " Ġerror Ċ Ġ*/ Ċ class ĠTe zos Client Node Unavailable Error ( message : ĠString , Ġcause : ĠThrowable ?) Ġ: ĠTe zos Client Error ( message , Ġcause ) Ċ Ċ /** Ċ Ġ* ĠA ĠTe zos Ġclient Ġerror Ġto Ġsignal Ġthat Ġthe Ġclient Ġreturned Ġa Ġ" Node Ġis Ġnot Ġrunning " Ġerror Ċ Ġ*/ Ċ class ĠTe zos Client Unsupported Output Error ( output : ĠString ?, Ġcause : ĠThrowable ?) Ġ: ĠTe zos Client Error (" Invalid Ġoutput Ġof Ġte zos - client Ġdetected : Ġ$ output ", Ġcause ) Ċ Ċ /** Ċ Ġ* ĠA ĠTe zos Ġclient Ġerror Ġto Ġsignal Ġthat Ġthe Ġclient Ġreturned Ġa Ġ" Node Ġis Ġnot Ġrunning " Ġerror Ċ Ġ*/ Ċ class ĠTe zos Client Exit Error ( exit Code : ĠInt , Ġcause : ĠThrowable ? Ġ= Ġnull ) Ġ: ĠTe zos Client Error (" Te zos Ġclient Ġexited Ġwith Ġnon - zero Ġexit Ġcode : Ġ$ exit Code ", Ġcause ) ĊĊ Ċ private Ġfun ĠM ic hel son Stack Parser . Stack Frame Context . transform (): ĠM ic hel son Stack Frame Ġ{ ĊĠĠĠ Ġreturn ĠM ic hel son Stack Frame ( this . type (). transform ()) Ċ } Ċ Ċ private Ġfun ĠM ic hel son Stack Parser . Type Context . transform (): ĠM ic hel son Stack Type Ġ{ ĊĠĠĠ Ġval Ġname : ĠString ĊĠĠĠ Ġval Ġarguments Ġ= Ġmutable ListOf < Mic hel son Stack Type >() ĊĠĠĠ Ġval Ġannotations Ġ= Ġmutable ListOf < Mic hel son Stack Annotation >() ĊĊĠĠĠ Ġif Ġ( this . simple Type () Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġname Ġ= Ġthis . simple Type (). typename . text ĊĠĠĠĠĠĠĠ Ġannotations . addAll ( this . simple Type (). AN NOT ATION (). map Ġ{ ĠM ic hel son Stack Annotation ( it . text ) Ġ}) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġ// fix me Ġhandle Ġsingle Ġnested Ġtype ĊĠĠĠĠĠĠĠ Ġname Ġ= Ġthis . nested Type (). typename ?. text Ġ?: Ġ"" ĊĠĠĠĠĠĠĠ Ġarguments . addAll ( this . nested Type (). type (). map Ġ{ Ġit . transform () Ġ}) ĊĠĠĠĠĠĠĠ Ġannotations . addAll ( this . nested Type (). AN NOT ATION (). map Ġ{ ĠM ic hel son Stack Annotation ( it . text ) Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn ĠM ic hel son Stack Type ( name , Ġarguments , Ġannotations ) Ċ } Ċ Ċ open Ġclass ĠStand alone Te zos Client ( private Ġval Ġexecutable : ĠPath ) Ġ: ĠTe zos Client Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠLOG Ġ= ĠLogger . getInstance ("# te zos . client ") ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠClean Ġup Ġoutput Ġof ĠTe zos Ġclients . ĊĠĠĠĠĠĠĠĠ Ġ* ĠThis Ġremoves Ġthe Ġdisclaimer Ġwhich Ġis Ġprinted Ġbefore Ġthe Ġregular Ġcontent . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ throws ĠTe zos Client Error ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġfix Te zos Client Stdout ( content : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġcontent . indexOf (" (( types ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ== Ġ 0 Ġ-> Ġcontent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ> Ġ 0 Ġ-> Ġcontent . substring ( index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent . contains (" Node Ġis Ġnot Ġrunning ") Ġ-> Ġthrow ĠTe zos Client Node Unavailable Error (" The ĠTe zos Ġclient 's Ġnot Ġis Ġnot Ġrunning .", Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠTe zos Client Unsupported Output Error ( content , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġparse Stdout ( stdout : ĠString ): ĠM ic hel son Stack Transform ations Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparser Ġ= ĠM ic hel son Stack Parser ( Common Token Stream ( Mic hel son Stack Lexer ( Char Streams . fromString ( stdout )))) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġall Ġ= Ġparser . all () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// fix me Ġhandle Ġparser Ġerrors ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġall . types (). stack Transformation (). map Ġ{ Ġc Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠM ic hel son Stack Transformation ( c . instruction Start . text . toInt (), Ġc . instruction End . text . toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠM ic hel son Stack ( c . stack ( 0 ) !!. stack Frame (). map Ġ{ Ġit . transform () Ġ}), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠM ic hel son Stack ( c . stack ( 1 ) !!. stack Frame (). map Ġ{ Ġit . transform () Ġ})) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġerrors Ġ= Ġall . errors (). error (). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠM ic hel son Stack Error ( it . start Offset . text . toInt (), Ġit . end Offset . text . toInt (), Ġit . message . text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠM ic hel son Stack Transform ations ( list , Ġerrors ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġtype check ( content : ĠString ): ĠM ic hel son Stack Transform ations Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġwe Ġstill Ġneed Ġto Ġfix Ġthe Ġstdout Ġbecause Ġolder Ġversions Ġof Ġal phan et . sh Ġdon 't Ġpass ĠTE Z OS _ CLIENT _ UN SAFE _ DISABLE _ DIS CL AIM ER Ġto Ġthe Ġdocker ized Ġclients ĊĠĠĠĠĠĠĠ Ġval Ġstdout Ġ= Ġexec Client ( content ) ĊĠĠĠĠĠĠĠ Ġval Ġfixed Stdout Ġ= Ġfix Te zos Client Stdout ( stdout ) ĊĠĠĠĠĠĠĠ Ġreturn Ġparse Stdout ( fixed Stdout ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠExec utes Ġthe Ġtype check Ġoperation Ġwith Ġthe Ġcurrent Ġclient . ĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġstdout Ġas Ġoutput Ġby Ġthe Ġte zos Ġclient . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġexec Client ( content : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġout File Ġ= ĠFiles . create TempFile (" te zos - intellij -", Ġ". txt ") ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcommand Ġ= ĠTe zos Command line . type check Script Content ( content , Ġexecutable ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠProcess Builder (). redirect Output ( out File . to File ()). command ( command ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Client Env ( builder . environment ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( LOG . isDebugEnabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOG . debug (" starting Ġte zos Ġclient Ġcommand : Ġ${ builder . command (). join ToString (" Ġ") }, Ġenv : Ġ${ builder . environment () }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġp Ġ= Ġbuilder . start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfix me Ġadd Ġtimeout ĊĠĠĠĠĠĠĠĠĠĠĠ Ġp . waitFor () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp . exit Value () Ġ== Ġ 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġout Ġ= ĠFiles . read All Bytes ( out File ). toString ( StandardCharsets . UTF _ 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( LOG . isDebugEnabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOG . debug (" te zos - client Ġfinished Ġwith Ġexit Ġcode Ġ${ p . exit Value ()} Ġand Ġstdout Ġ'$ out '") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġout Ġ= ĠFiles . read All Bytes ( out File ). toString ( StandardCharsets . UTF _ 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( LOG . isDebugEnabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOG . debug (" te zos - client Ġterminated Ġwith Ġexit Ġcode Ġ${ p . exit Value ()} Ġand Ġoutput Ġ'$ out '") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠTe zos Client Exit Error ( p . exit Value ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFiles . delete IfExists ( out File ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSetup Ġenvironment Ġof Ġthe Ġte zos Ġclient Ġcommand . ĊĠĠĠĠ Ġ* ĠThis Ġmir rors Ġthe Ġimplementation Ġof Ġthe Ġem acs Ġmode , Ġsee Ġhttps :// gitlab . com / te zos / te zos / blob / master / emacs / mic hel son - mode . el ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġsetup Client Env ( env : ĠMutable Map < String , ĠString >) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenv . put All ( Te zos Command line . Default Env ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠUnsupportedOperationException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLOG . debug (" error Ġsetting Ġup Ġenvironment Ġfor Ġte zos - client ", Ġe ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ