Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
commands.put("?", new HelpCommand(this));
commands.put("set", new SetCommand());
commands.put("register", new RegisterCommand(this));
commands.put("unregister", new UnregisterCommand(this));
}
}
Как видите – ничего сложного. В контексте создаются описанные выше специальные переменные, а в системе команд регистрируются несколько команд, о реализации которых мы и поговорим ниже.
Самая простая команда – команда завершения интерпретации ExitCommand (здесь и далее я называю команды по именам классов, их реализующих). Эта команда просто меняет значение контекстной переменной $QUIT:
package simplecli.command;
import java.util.*;
import simplecli.error.*;
public class ExitCommand implements Command {
public String run(Properties context,
ArrayList parameters) throws SyntaxError {
if (parameters.size() > 0) {
throw new SyntaxError();
}
context.setProperty("$QUIT", "yes");
return null;
}
public String getDescription(String name) {
return "Exits current interpreter session.";
}
public String getHelp(String name) {
return "Exits current interpreter session."
+ CRLF + "Syntax: " + name;
}
private final static String CRLF =
System.getProperty("line.separator");
}
Управление контекстом выполнения
Управляя контекстом выполнения, команды могут изменять состояние программы, в которую встроен интерпретатор, или влиять на выполнение других команд.
Для управления контекстом мы реализуем команду SetCommand, интерфейс которой схож с интерфейсом команды SET командных процессоров bash и CMD.EXE.
Вызов SetCommand без параметров будет возвращать список пар «переменная=значение» для всех переменных, определенных в контексте.
Вызов с одним параметром удалит из контекста переменную, заданную параметром.
Вызов с двумя параметрами установит переменную, указанную первым параметром, в значение, заданное вторым параметром.
package simplecli.command;
import java.util.*;
import simplecli.error.*;
public class SetCommand implements Command {
public String run(Properties context,
ArrayList parameters) throws SyntaxError {
switch (parameters.size()) {