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 package name.angoca.zemucan.ui.impl.jline;
30
31 import name.angoca.zemucan.AbstractZemucanException;
32 import name.angoca.zemucan.core.graph.model.AboutNode;
33 import name.angoca.zemucan.executer.api.ExecutingCommandException;
34 import name.angoca.zemucan.executer.api.ExecutionState;
35 import name.angoca.zemucan.executer.impl.ImplementationExecuter;
36 import name.angoca.zemucan.tools.configurator.Configurator;
37 import name.angoca.zemucan.tools.messages.jline.Messages;
38 import name.angoca.zemucan.ui.api.AbstractInterfaceController;
39 import name.angoca.zemucan.ui.api.InputReader;
40 import name.angoca.zemucan.ui.api.InputReaderException;
41 import name.angoca.zemucan.ui.api.OutputWriter;
42 import name.angoca.zemucan.ui.api.SynchronizedLoad;
43 import name.angoca.zemucan.ui.impl.system.SystemOutputWriter;
44
45 import org.slf4j.Logger;
46 import org.slf4j.LoggerFactory;
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
80 public final class ImplementationJlineInterfaceController extends
81 AbstractInterfaceController {
82
83
84
85
86 static final String AUTO_PRINT_THRESHOLD_KEY = "AutoPrintThreshold";
87
88
89
90 static final int AUTO_PRINT_THRESHOLD_VALUE = 50;
91
92
93
94 private static final Logger LOGGER = LoggerFactory
95 .getLogger(ImplementationJlineInterfaceController.class);
96
97
98
99 private final InputReader input;
100
101
102
103 private final OutputWriter output;
104
105
106
107
108
109
110
111
112
113
114
115 public ImplementationJlineInterfaceController(final String
116 throws InputReaderException {
117 super();
118 assert prompt != null;
119
120 this.output = new SystemOutputWriter();
121 this.input = new JlineInputReader(prompt);
122 }
123
124
125
126
127
128
129
130
131 @Override
132 public void start(final Thread
133 final SynchronizedLoad
134 throws AbstractZemucanException {
135 String phrase = null;
136
137
138 if (Boolean.parseBoolean(Configurator.getInstance().getProperty(
139 AbstractInterfaceController.SHOW_LICENSE))) {
140 this.output.writeLine(AboutNode.readAboutInformation());
141 }
142
143
144 if (Boolean.parseBoolean(Configurator.getInstance().getProperty(
145 AbstractInterfaceController.SHOW_INTRO_PROPERTY))) {
146 this.output.writeLine(Messages
147 .getString("ImplementationJlineInterfaceController"
148 + ".Instructions"));
149 }
150 ExecutionState execState = ExecutionState.INITIATED;
151
152 ImplementationJlineInterfaceController.LOGGER
153 .debug("User interaction start");
154
155 if (synchro != null) {
156 synchronized (synchro) {
157 synchronizedLoad.alreadyLoaded();
158 synchro.notifyAll();
159 }
160 }
161
162 while (execState != ExecutionState.APPLICATION_EXIT) {
163 phrase = this.input.readString();
164 try {
165 execState = ImplementationExecuter.getInstance().execute(
166 phrase, this.output);
167 } catch (final ExecutingCommandException e) {
168 ImplementationJlineInterfaceController.LOGGER.error(e
169 .getMessage());
170 ImplementationJlineInterfaceController.LOGGER.error(e
171 .getCause().getMessage());
172 }
173 }
174 }
175 }