package Ġnet . mi lo sv asic . factory . remote . ssh Ċ Ċ import Ġnet . mi lo sv asic . factory . common . Notify ing Ċ import Ġnet . mi lo sv asic . factory . common . busy . Busy Exception Ċ import Ġnet . mi lo sv asic . factory . operation . Operation Result Ċ import Ġnet . mi lo sv asic . factory . operation . Operation Result Listener Ċ import Ġnet . mi lo sv asic . factory . operation . command . Command Configuration Ċ import Ġnet . mi lo sv asic . factory . platform . Operating System Ċ import Ġnet . mi lo sv asic . factory . remote . Connection Ċ import Ġnet . mi lo sv asic . factory . remote . Remote Ċ import Ġnet . mi lo sv asic . factory . terminal . Terminal Ċ import Ġnet . mi lo sv asic . factory . terminal . Terminal Command Ċ import Ġnet . mi lo sv asic . factory . terminal . Wrapped Terminal Command Ċ import Ġjava . util . concurrent . Concurrent Linked Queue Ċ Ċ open Ġclass ĠSSH ( private Ġval Ġremote : ĠRemote ) Ġ: ĊĠĠĠĠĠĠĠ ĠConnection , ĊĠĠĠĠĠĠĠ ĠNot ifying < Operation Result > Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġterminal Ġ= ĠTerminal () ĊĊĠĠĠ Ġprivate Ġvar Ġoperating System Ġ= ĠOperating System () ĊĠĠĠ Ġprivate Ġval Ġsubscribers Ġ= ĠConcurrent Linked Queue < Operation Result Listener >() ĊĊĠĠĠ Ġprivate Ġval Ġlistener Ġ= Ġobject Ġ: ĠOperation Result Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Operation Performed ( result : ĠOperation Result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result . operation Ġis ĠSSH Command ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġremote Command Ġ= Ġresult . operation . remote Command ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġssh Result Ġ= Ġif Ġ( remote Command Ġis ĠWr apped Terminal Command ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOperation Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremote Command . wrapped Command , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . success , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . data , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . exception ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOperation Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremote Command , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . success , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . data , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . exception ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify ( ssh Result ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġterminal . subscribe ( listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Terminal () Ġ= Ġterminal ĊĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġ@ Throws ( Busy Exception :: class , ĠIllegalArgumentException :: class ) ĊĠĠĠ Ġoverride Ġfun Ġexecute ( what : ĠTerminal Command ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġcommand Ġ= ĠSSH Command ( remote , Ġfilter Command ( what ), Ġwhat . configuration ) ĊĠĠĠĠĠĠĠ Ġterminal . execute ( command ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġ@ Throws ( IllegalStateException :: class , ĠIllegalArgumentException :: class ) ĊĠĠĠ Ġopen Ġfun Ġexecute ( data : ĠTerminal Command , Ġobtain Output : ĠBoolean ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġcommand Ġ= ĠSSH Command ( remote , Ġfilter Command ( data )) ĊĠĠĠĠĠĠĠ Ġcommand . configuration [ Command Configuration . OB TAIN _ RESULT ] Ġ= Ġobtain Output ĊĠĠĠĠĠĠĠ Ġterminal . execute ( command ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsubscribe ( what : ĠOperation Result Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsubscribers . add ( what ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġunsubscribe ( what : ĠOperation Result Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsubscribers . remove ( what ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġoverride Ġfun Ġnotify ( data : ĠOperation Result ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġiterator Ġ= Ġsubscribers . iterator () ĊĠĠĠĠĠĠĠ Ġwhile Ġ( iterator . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlistener Ġ= Ġiterator . next () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . on Operation Performed ( data ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Remote (): ĠRemote Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġremote ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Remote OS (): ĠOperating System Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġoperating System ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġopen Ġfun Ġfilter Command ( command : ĠTerminal Command ) Ġ= Ġcommand Ċ }