// GraphTea Project: http://github.com/graphtheorysoftware/GraphTea
// Copyright (C) 2012 Graph Theory Software Foundation: http://GraphTheorySoftware.com
// Copyright (C) 2008 Mathematical Science Department of Sharif University of Technology
// Distributed under the terms of the GNU General Public License (GPL): http://www.gnu.org/licenses/
package graphtea.plugins.commandline;
import bsh.Interpreter;
import bsh.util.NameCompletion;
import graphtea.plugins.commandline.util.codecompletionutils.CodeCompletionUtils;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Vector;
/**
* @author Mohammad Ali Rostami
* @email rostamiev@gmail.com
*/
public class ShellCodeCompletion implements NameCompletion {
public HashMap<String, Method> commands;
public HashMap<String, String> abbrs;
Interpreter interpreter;
private HashMap<String, Class> ext_commands;
public ShellCodeCompletion(Interpreter interpreter
, HashMap<String, Method> commands,
HashMap<String, String> abbrs,
HashMap<String, Class> ext_commands) {
this.commands = commands;
this.abbrs = abbrs;
this.ext_commands = ext_commands;
this.interpreter = interpreter;
}
public String[] completeName(String part) {
Vector<String> ret = new Vector<>();
if (part.startsWith("_")) {
ret = CodeCompletionUtils.complete(abbrs, part);
} else if (part.endsWith("(")) {
ret = CodeCompletionUtils.complete(part, interpreter, commands, ext_commands);
} else if (part.contains(".")) {
ret = CodeCompletionUtils.complete(part, interpreter);
} else {
for (String temp : commands.keySet())
if (temp.startsWith(part))
ret.add(temp);
for (String temp : ext_commands.keySet())
if (temp.startsWith(part))
ret.add(temp);
}
String[] res = new String[ret.size()];
for (int i = 0; i < ret.size(); i++)
res[i] = ret.get(i);
return res;
}
}