команда по выводу значений System.properties
This commit is contained in:
@@ -1,19 +1,48 @@
|
||||
package mc.server;
|
||||
|
||||
import org.jline.reader.LineReader;
|
||||
import org.jline.reader.LineReaderBuilder;
|
||||
import org.jline.reader.UserInterruptException;
|
||||
import mc.server.shell.CommandStore;
|
||||
import org.jline.builtins.Builtins;
|
||||
import org.jline.builtins.CommandRegistry;
|
||||
import org.jline.reader.*;
|
||||
import org.jline.reader.impl.completer.NullCompleter;
|
||||
|
||||
import java.io.PrintWriter;
|
||||
import java.util.Collections;
|
||||
|
||||
public class Main {
|
||||
|
||||
public static void main(String[] args) {
|
||||
LineReader reader = LineReaderBuilder.builder().build();
|
||||
CommandStore commandStore = new CommandStore();
|
||||
commandStore.register("system-properties", new Builtins.CommandMethods(
|
||||
commandInput -> {
|
||||
final PrintWriter writer = commandInput.terminal().writer();
|
||||
System.getProperties().forEach((key, value) ->
|
||||
writer.println(String.format("%s = %s", key, value.toString())));
|
||||
},
|
||||
commandName -> Collections.singletonList(NullCompleter.INSTANCE)
|
||||
));
|
||||
|
||||
final Completer completer = CommandRegistry.compileCompleters(commandStore);
|
||||
|
||||
final LineReader reader = LineReaderBuilder.builder()
|
||||
.completer(completer)
|
||||
.build();
|
||||
|
||||
try {
|
||||
final CommandRegistry.CommandSession session = new CommandRegistry.CommandSession(reader.getTerminal());
|
||||
final PrintWriter terminalWriter = reader.getTerminal().writer();
|
||||
//noinspection InfiniteLoopStatement
|
||||
while (true) {
|
||||
String line = reader.readLine();
|
||||
System.out.println("line = '" + line + "'");
|
||||
final String line = reader.readLine().trim();
|
||||
|
||||
final ParsedLine parsedLine = reader.getParser().parse(line, 0);
|
||||
final String commandName = parsedLine.word();
|
||||
|
||||
if (commandStore.hasCommand(commandName)) {
|
||||
commandStore.execute(session, commandName);
|
||||
}
|
||||
|
||||
terminalWriter.println("line = " + String.join(", ", parsedLine.words()));
|
||||
}
|
||||
} catch (UserInterruptException ignore) {
|
||||
// ignore
|
||||
|
||||
50
src/main/java/mc/server/shell/CommandStore.java
Normal file
50
src/main/java/mc/server/shell/CommandStore.java
Normal file
@@ -0,0 +1,50 @@
|
||||
package mc.server.shell;
|
||||
|
||||
import org.jline.builtins.Builtins.CommandInput;
|
||||
import org.jline.builtins.Builtins.CommandMethods;
|
||||
import org.jline.builtins.CommandRegistry;
|
||||
import org.jline.builtins.Completers.SystemCompleter;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
public class CommandStore implements CommandRegistry {
|
||||
|
||||
private final Map<String, CommandMethods> commandExecutors = new HashMap<>();
|
||||
|
||||
public void register(String name, CommandMethods commandMethods) {
|
||||
commandExecutors.put(name, commandMethods);
|
||||
}
|
||||
|
||||
public void execute(CommandSession session, String command) {
|
||||
commandExecutors.get(command).execute().accept(new CommandInput(command, new Object[0], session));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<String> commandNames() {
|
||||
return commandExecutors.keySet();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, String> commandAliases() {
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasCommand(String command) {
|
||||
return commandExecutors.containsKey(command);
|
||||
}
|
||||
|
||||
@Override
|
||||
public SystemCompleter compileCompleters() {
|
||||
SystemCompleter systemCompleter = new SystemCompleter();
|
||||
|
||||
commandExecutors.forEach((name, commandMethods) ->
|
||||
systemCompleter.add(name, commandMethods.compileCompleter().apply(name)));
|
||||
systemCompleter.addAliases(commandAliases());
|
||||
|
||||
return systemCompleter;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user