diff --git a/src/main/java/de/prob2/jupyter/commands/BrowseCommand.java b/src/main/java/de/prob2/jupyter/commands/BrowseCommand.java index d7b7448d45b3aa85569ab87dda81742fc361ba46..c95f78d9c3dc17e9c8ba4e593afd234ce411fd28 100644 --- a/src/main/java/de/prob2/jupyter/commands/BrowseCommand.java +++ b/src/main/java/de/prob2/jupyter/commands/BrowseCommand.java @@ -3,17 +3,12 @@ package de.prob2.jupyter.commands; import java.util.ArrayList; import java.util.Comparator; import java.util.List; -import java.util.function.Function; -import java.util.stream.Collectors; import com.google.inject.Inject; import de.prob.animator.domainobjects.FormulaExpand; -import de.prob.model.representation.AbstractElement; -import de.prob.model.representation.Constant; -import de.prob.model.representation.Set; -import de.prob.model.representation.Variable; import de.prob.statespace.AnimationSelector; +import de.prob.statespace.LoadedMachine; import de.prob.statespace.Trace; import de.prob.statespace.Transition; @@ -52,13 +47,8 @@ public final class BrowseCommand implements Command { return "The output shows the names of all sets, constants, and variables defined by the current machine, as well as a list of transitions that are available in the current state. Each transition has a numeric ID, which can be passed to `:exec` to execute that transition."; } - private static <T extends AbstractElement> @NotNull String elementsToString( - final @NotNull AbstractElement element, - final @NotNull Class<T> clazz, - final @NotNull Function<@NotNull T, @NotNull String> func - ) { - final String elements = element.getChildrenOfType(clazz).stream().map(func).collect(Collectors.joining(", ")); - return elements.isEmpty() ? "(none)" : elements; + private static @NotNull String listToString(final List<String> list) { + return list.isEmpty() ? "(none)" : String.join(", ", list); } @Override @@ -69,14 +59,14 @@ public final class BrowseCommand implements Command { final Trace trace = this.animationSelector.getCurrentTrace(); final StringBuilder sb = new StringBuilder("Machine: "); - final AbstractElement mainComponent = trace.getStateSpace().getMainComponent(); - sb.append(mainComponent); + sb.append(trace.getStateSpace().getMainComponent()); + final LoadedMachine lm = trace.getStateSpace().getLoadedMachine(); sb.append("\nSets: "); - sb.append(elementsToString(mainComponent, Set.class, Set::getName)); + sb.append(listToString(lm.getSetNames())); sb.append("\nConstants: "); - sb.append(elementsToString(mainComponent, Constant.class, Object::toString)); + sb.append(listToString(lm.getConstantNames())); sb.append("\nVariables: "); - sb.append(elementsToString(mainComponent, Variable.class, Variable::getName)); + sb.append(listToString(lm.getVariableNames())); sb.append("\nOperations: "); final List<Transition> sortedTransitions = new ArrayList<>(trace.getNextTransitions(true, FormulaExpand.TRUNCATE)); // Transition IDs are strings, but they almost always contain numbers.