package Ġgray matter . sec . command . reuse . group Ċ Ċ import Ġgray matter . sec . common . io . Standard OutputStream Ċ import Ġpic oc li . CommandLine . Option Ċ import Ġjava . io . File Ċ import Ġjava . io . OutputStream Ċ Ċ /** Ċ Ġ* ĠRequirement Ġto Ġcapture Ġan Ġoutput Ġtarget Ġfor Ġa Ġspecific Ġcommand . Ċ Ġ*/ Ċ @ Suppress (" unused ", Ġ" Member Visibility Can Be Private ") Ċ class ĠOutput Target Provider Ġ Ġ{ ĊĊĠĠĠ Ġval Ġis File : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġtarget Ġis ĠTarget . File ĊĊĠĠĠ Ġval Ġis Std Out : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġtarget Ġis ĠTarget . Std Out ĊĊĠĠĠ Ġprivate Ġvar Ġtarget : ĠTarget ? Ġ= Ġnull ĊĊĠĠĠ Ġ@ Option ( ĊĠĠĠĠĠĠĠ Ġnames Ġ= Ġ[" -- file - out "], ĊĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ[" Output Ġto Ġa Ġspecific Ġfile ."] ĊĠĠĠ Ġ) ĊĠĠĠ Ġfun Ġset Output ToFile ( file : ĠFile ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtarget Ġ= ĠTarget . File ( file ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Option ( ĊĠĠĠĠĠĠĠ Ġnames Ġ= Ġ[" -- stdout "], ĊĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ[" Output Ġto Ġstandard Ġout Ġinstead Ġof Ġfile ." ], ĊĠĠĠĠĠĠĠ Ġrequired Ġ= Ġtrue , ĊĠĠĠĠĠĠĠ ĠdefaultValue Ġ= Ġ" true " ĊĠĠĠ Ġ) ĊĠĠĠ Ġfun Ġset Output To Std Out ( std Out : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( std Out Ġ&& Ġ! is Available ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Ġ= ĠTarget . Std Out () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Output To Std Out () Ġ= Ġset Output To Std Out ( true ) ĊĊĠĠĠ Ġval Ġuri : ĠString ? Ġget () Ġ= Ġtarget ?. uri ĊĠĠĠ Ġval Ġis Available : ĠBoolean Ġget () Ġ= Ġtarget Ġ!= Ġnull ĊĊĠĠĠ Ġfun Ġopen OutputStream (): ĠOutputStream Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġrequire NotNull ( target ). open () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsealed Ġclass ĠTarget ( val Ġuri : ĠString ?, Ġval Ġopen : Ġ() Ġ-> ĠOutputStream ) Ġ{ ĊĠĠĠĠĠĠĠ Ġclass ĠFile ( file : Ġjava . io . File ) Ġ: ĠTarget ( file . to URI (). toString (), Ġfile :: output Stream ) ĊĠĠĠĠĠĠĠ Ġclass ĠStd Out () Ġ: ĠTarget ( null , Ġ{ ĠStandard OutputStream () Ġ}) ĊĠĠĠ Ġ} Ċ Ċ } Ċ