package vnet.sms.common.shell.springshell.internal; import vnet.sms.common.shell.springshell.ExecutionStrategy; import vnet.sms.common.shell.springshell.ParseResult; import vnet.sms.common.shell.springshell.internal.util.Assert; import vnet.sms.common.shell.springshell.internal.util.ReflectionUtils; public class SimpleExecutionStrategy implements ExecutionStrategy { private final Class<?> mutex = SimpleExecutionStrategy.class; @Override public Object execute(final ParseResult parseResult) throws RuntimeException { Assert.notNull(parseResult, "Parse result required"); synchronized (this.mutex) { Assert.isTrue(isReadyForCommands(), "SimpleExecutionStrategy not yet ready for commands"); return ReflectionUtils.invokeMethod(parseResult.getMethod(), parseResult.getInstance(), parseResult.getArguments()); } } @Override public boolean isReadyForCommands() { return true; } @Override public void terminate() { } }