MCPcopy Create free account
hub / github.com/cschanck/single-file-java / dumpFSM

Method dumpFSM

src/main/java/org/sfj/SimpleFSM.java:305–328  ·  view source on GitHub ↗

Useful dump of FSM definitions. @return multiline string

()

Source from the content-addressed store, hash-verified

303 * @return multiline string
304 */
305 public String dumpFSM() {
306 StringWriter writer = new StringWriter();
307 PrintWriter pw = new PrintWriter(writer);
308
309 List<State<E>> statesInOrder = states.values().stream().sorted().collect(Collectors.toList());
310 int stateWidth = statesInOrder.stream().mapToInt(s -> s.name.length()).max().orElse(1);
311 int maxEventWidth = Arrays.stream(eventClass.getEnumConstants()).mapToInt(e -> e.name().length()).max().orElse("N/A".length());
312 pw.println("SimpleFSM: " + name + " EventClass: " + eventClass.getCanonicalName());
313 pw.println();
314 pw.print(" " + String.format("%-" + (stateWidth + "State: ".length()) + "s ", ""));
315 for (E e : events) {
316 pw.print(center(e.name(), maxEventWidth) + " ");
317 }
318 pw.println();
319 statesInOrder.forEach(st -> {
320 pw.print(" " + String.format("State: %" + stateWidth + "s ", st.name));
321 for (E e : events) {
322 pw.print(center(st.dispatch[e.ordinal()] != null ? "X" : "", maxEventWidth) + " ");
323 }
324 pw.println();
325 });
326 pw.flush();
327 return writer.toString();
328 }
329
330 private static String center(String text, int total) {
331 int skip = (total - text.length()) / 2;

Callers 2

testTurnStileMethod · 0.95
testTrafficLightMethod · 0.95

Calls 5

centerMethod · 0.95
valuesMethod · 0.80
printMethod · 0.65
flushMethod · 0.45
toStringMethod · 0.45

Tested by 2

testTurnStileMethod · 0.76
testTrafficLightMethod · 0.76