blob: 2576ee5c80082bb7a73913067f25f2b00009d508 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
package bjc.utils.cli.fds;
import bjc.utils.ioutils.Block;
import java.util.List;
import java.util.Map;
import java.util.function.Consumer;
/**
* A implementation of FDS mode that invokes macros bound into a map.
*
* @author EVE
*
* @param <S>
* The FDS state type.
*/
public class MacroFDSMode<S> implements FDSMode<S> {
private final class MacroFDSCommand implements FDSCommand<S> {
private String macroName;
public MacroFDSCommand(String c) {
macroName = c;
}
@Override
public void run(FDSState<S> state) {
macros.get(macroName).forEach(dest);
}
}
/*
* The available macros.
*/
private Map<String, List<Block>> macros;
/*
* Where to send blocks from macros.
*/
private Consumer<Block> dest;
/**
* Create a new FDS mode for macros.
*
* @param macros
* The macros to use.
*
* @param dest
* The destination for blocks from the macros.
*/
public MacroFDSMode(Map<String, List<Block>> macros, Consumer<Block> dest) {
this.macros = macros;
this.dest = dest;
}
@Override
public String[] registeredChars() {
return macros.keySet().toArray(new String[0]);
}
@Override
public boolean hasCommand(String comName) {
return macros.containsKey(comName);
}
@Override
public boolean hasSubmode(String submodeName) {
return false;
}
@Override
public FDSCommand<S> getCommand(String comName) throws FDSException {
return new MacroFDSCommand(comName);
}
@Override
public FDSMode<S> getSubmode(String submodeName) throws FDSException {
throw new FDSException("Submodes aren't available in macroName modes");
}
}
|