import java.io.* ;
import java.util.HashMap ;
import java.util.Map ;
interface Command {
}
class RuntimeExecCommand implements Command {
public RuntimeExecCommand
( String command
) { this .command = command;
}
@Override
Runtime .
getRuntime ( ) .
exec ( command
) ; }
}
class PrintCommand implements Command {
private final String printString
;
public PrintCommand
( String printString
) { this .printString = printString;
}
@Override
System .
out .
println ( printString
) ; }
}
class Jarvis {
private static final Map
< String , Command
> COMMANDS
= new HashMap
< String , Command
> ( ) ; static {
COMMANDS.put ( "jarvis you there?" , new PrintCommand( "at your service sir" ) ) ;
COMMANDS.put ( "run command prompt" , new RuntimeExecCommand( "cmd.exe /c start" ) ) ;
COMMANDS.put ( "run notepad" , new RuntimeExecCommand( "notepad.exe" ) ) ;
// ...
}
for ( ;; ) {
System .
out .
println ( "Command me: " ) ; if ( line == null || line.isEmpty ( ) )
break ;
Command command = COMMANDS.get ( line) ;
if ( command != null ) {
try {
command.execute ( ) ;
System .
out .
println ( "Failed to execute command because of:" + e
) ; }
} else {
System .
out .
println ( "Unknown Command." ) ; }
}
System .
out .
println ( "Goodbye." ) ; }
}
aW1wb3J0IGphdmEuaW8uKjsKaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwppbXBvcnQgamF2YS51dGlsLk1hcDsKCmludGVyZmFjZSBDb21tYW5kIHsKICAgIHZvaWQgZXhlY3V0ZSgpIHRocm93cyBFeGNlcHRpb247Cn0KCmNsYXNzIFJ1bnRpbWVFeGVjQ29tbWFuZCBpbXBsZW1lbnRzIENvbW1hbmQgewogICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgY29tbWFuZDsKCiAgICBwdWJsaWMgUnVudGltZUV4ZWNDb21tYW5kKFN0cmluZyBjb21tYW5kKSB7CiAgICAgICAgdGhpcy5jb21tYW5kID0gY29tbWFuZDsKICAgIH0KCiAgICBAT3ZlcnJpZGUKICAgIHB1YmxpYyB2b2lkIGV4ZWN1dGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICBSdW50aW1lLmdldFJ1bnRpbWUoKS5leGVjKGNvbW1hbmQpOwogICAgfQp9CgpjbGFzcyBQcmludENvbW1hbmQgaW1wbGVtZW50cyBDb21tYW5kIHsKICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIHByaW50U3RyaW5nOwoKICAgIHB1YmxpYyBQcmludENvbW1hbmQoU3RyaW5nIHByaW50U3RyaW5nKSB7CiAgICAgICAgdGhpcy5wcmludFN0cmluZyA9IHByaW50U3RyaW5nOwogICAgfQoKICAgIEBPdmVycmlkZQogICAgcHVibGljIHZvaWQgZXhlY3V0ZSgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihwcmludFN0cmluZyk7CiAgICB9Cn0KCmNsYXNzIEphcnZpcyB7CgogICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTWFwPFN0cmluZywgQ29tbWFuZD4gQ09NTUFORFMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIENvbW1hbmQ+KCk7CiAgICBzdGF0aWMgewogICAgICAgIENPTU1BTkRTLnB1dCgiamFydmlzIHlvdSB0aGVyZT8iLCBuZXcgUHJpbnRDb21tYW5kKCJhdCB5b3VyIHNlcnZpY2Ugc2lyIikpOwogICAgICAgIENPTU1BTkRTLnB1dCgicnVuIGNvbW1hbmQgcHJvbXB0IiwgbmV3IFJ1bnRpbWVFeGVjQ29tbWFuZCgiY21kLmV4ZSAvYyBzdGFydCIpKTsKICAgICAgICBDT01NQU5EUy5wdXQoInJ1biBub3RlcGFkIiwgbmV3IFJ1bnRpbWVFeGVjQ29tbWFuZCgibm90ZXBhZC5leGUiKSk7CiAgICAgICAgLy8gLi4uCiAgICB9CgogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKICAgICAgICBCdWZmZXJlZFJlYWRlciBiciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoU3lzdGVtLmluKSk7CiAgICAgICAgZm9yICg7OykgewogICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbW1hbmQgbWU6ICIpOwogICAgICAgICAgICBTdHJpbmcgbGluZSA9IGJyLnJlYWRMaW5lKCk7CiAgICAgICAgICAgIGlmIChsaW5lID09IG51bGwgfHwgbGluZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgQ29tbWFuZCBjb21tYW5kID0gQ09NTUFORFMuZ2V0KGxpbmUpOwogICAgICAgICAgICBpZiAoY29tbWFuZCAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgIGNvbW1hbmQuZXhlY3V0ZSgpOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZhaWxlZCB0byBleGVjdXRlIGNvbW1hbmQgYmVjYXVzZSBvZjoiICsgZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVua25vd24gQ29tbWFuZC4iKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvb2RieWUuIik7CiAgICB9Cn0K