/*
* Copyright (c) 2008-2012, Hazel Bilisim Ltd. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.hazelcast.impl.management;
import com.hazelcast.core.HazelcastInstance;
import com.hazelcast.examples.TestApp;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class ConsoleCommandHandler {
private final ConsoleApp app;
private final Lock lock = new ReentrantLock();
private final StringBuilder buffer = new StringBuilder();
public ConsoleCommandHandler(HazelcastInstance instance) {
super();
this.app = new ConsoleApp(instance);
}
public String handleCommand(final String command) throws InterruptedException {
if ("exit".equals(command) || "quit".equals(command)) {
return "'" + command + "' is not allowed!";
}
if (lock.tryLock(1, TimeUnit.SECONDS)) {
try {
return doHandleCommand(command);
} finally {
lock.unlock();
}
}
return "'" + command + "' execution is timed out!";
}
String doHandleCommand(final String command) {
app.handleCommand(command);
final String output = buffer.toString();
buffer.setLength(0);
return output;
}
private class ConsoleApp extends TestApp {
public ConsoleApp(HazelcastInstance hazelcast) {
super(hazelcast);
}
protected void handleCommand(String command) {
super.handleCommand(command);
}
protected void handleAddListener(String[] args) {
println("Listener commands are not allowed!");
}
protected void handleRemoveListener(String[] args) {
println("Listener commands are not allowed!");
}
public void println(Object obj) {
print(obj);
print('\n');
}
public void print(Object obj) {
buffer.append(String.valueOf(obj));
}
}
}