Skip to content
Snippets Groups Projects
Commit 731b8867 authored by dgelessus's avatar dgelessus
Browse files

Move displayDataForEvalResult into CommandUtils

parent 6ff3e0df
Branches
Tags
No related merge requests found
...@@ -6,11 +6,25 @@ import java.util.HashMap; ...@@ -6,11 +6,25 @@ import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import de.prob.animator.domainobjects.AbstractEvalResult;
import de.prob.animator.domainobjects.ComputationNotCompletedResult;
import de.prob.animator.domainobjects.EnumerationWarning;
import de.prob.animator.domainobjects.EvalResult;
import de.prob.animator.domainobjects.EvaluationErrorResult;
import de.prob.unicode.UnicodeTranslator;
import de.prob2.jupyter.UserErrorException; import de.prob2.jupyter.UserErrorException;
import io.github.spencerpark.jupyter.messages.DisplayData;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public final class CommandUtils { public final class CommandUtils {
private static final Logger LOGGER = LoggerFactory.getLogger(CommandUtils.class);
public static @NotNull List<@NotNull String> splitArgs(final @NotNull String args) { public static @NotNull List<@NotNull String> splitArgs(final @NotNull String args) {
final String[] split = args.split("\\h+"); final String[] split = args.split("\\h+");
if (split.length == 1 && split[0].isEmpty()) { if (split.length == 1 && split[0].isEmpty()) {
...@@ -31,4 +45,52 @@ public final class CommandUtils { ...@@ -31,4 +45,52 @@ public final class CommandUtils {
} }
return preferences; return preferences;
} }
public static @NotNull DisplayData displayDataForEvalResult(final @NotNull AbstractEvalResult aer) {
final StringBuilder sb = new StringBuilder();
final boolean error;
if (aer instanceof EvalResult) {
final EvalResult result = (EvalResult)aer;
sb.append(UnicodeTranslator.toUnicode(result.getValue()));
if (!result.getSolutions().isEmpty()) {
sb.append("\n\nSolution:");
result.getSolutions().forEach((k, v) -> {
sb.append("\n\t");
sb.append(UnicodeTranslator.toUnicode(k));
sb.append(" = ");
sb.append(UnicodeTranslator.toUnicode(v));
});
}
error = false;
} else if (aer instanceof ComputationNotCompletedResult) {
final ComputationNotCompletedResult result = (ComputationNotCompletedResult)aer;
sb.append("Computation not completed: ");
sb.append(result.getReason());
error = true;
} else if (aer instanceof EnumerationWarning) {
sb.append("UNKNOWN (FALSE with enumeration warning)");
error = true;
} else if (aer instanceof EvaluationErrorResult) {
final EvaluationErrorResult result = (EvaluationErrorResult)aer;
sb.append(result.getResult());
if (!result.getErrors().isEmpty()) {
sb.append(": ");
result.getErrors().forEach(s -> {
sb.append('\n');
sb.append(s);
});
}
error = true;
} else {
LOGGER.info("Unhandled eval result type, falling back to toString(): {}", aer.getClass());
sb.append(aer);
error = false;
}
if (error) {
throw new UserErrorException(sb.toString());
} else {
return new DisplayData(sb.toString());
}
}
} }
...@@ -2,28 +2,16 @@ package de.prob2.jupyter.commands; ...@@ -2,28 +2,16 @@ package de.prob2.jupyter.commands;
import com.google.inject.Inject; import com.google.inject.Inject;
import de.prob.animator.domainobjects.AbstractEvalResult;
import de.prob.animator.domainobjects.ComputationNotCompletedResult;
import de.prob.animator.domainobjects.EnumerationWarning;
import de.prob.animator.domainobjects.EvalResult;
import de.prob.animator.domainobjects.EvaluationErrorResult;
import de.prob.animator.domainobjects.FormulaExpand; import de.prob.animator.domainobjects.FormulaExpand;
import de.prob.statespace.AnimationSelector; import de.prob.statespace.AnimationSelector;
import de.prob.unicode.UnicodeTranslator;
import de.prob2.jupyter.ProBKernel; import de.prob2.jupyter.ProBKernel;
import de.prob2.jupyter.UserErrorException;
import io.github.spencerpark.jupyter.messages.DisplayData; import io.github.spencerpark.jupyter.messages.DisplayData;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public final class EvalCommand implements LineCommand { public final class EvalCommand implements LineCommand {
private static final Logger LOGGER = LoggerFactory.getLogger(EvalCommand.class);
private final @NotNull AnimationSelector animationSelector; private final @NotNull AnimationSelector animationSelector;
@Inject @Inject
...@@ -43,56 +31,8 @@ public final class EvalCommand implements LineCommand { ...@@ -43,56 +31,8 @@ public final class EvalCommand implements LineCommand {
return "Evaluate an expression."; return "Evaluate an expression.";
} }
private static @NotNull DisplayData displayDataForEvalResult(final @NotNull AbstractEvalResult aer) {
final StringBuilder sb = new StringBuilder();
final boolean error;
if (aer instanceof EvalResult) {
final EvalResult result = (EvalResult)aer;
sb.append(UnicodeTranslator.toUnicode(result.getValue()));
if (!result.getSolutions().isEmpty()) {
sb.append("\n\nSolution:");
result.getSolutions().forEach((k, v) -> {
sb.append("\n\t");
sb.append(UnicodeTranslator.toUnicode(k));
sb.append(" = ");
sb.append(UnicodeTranslator.toUnicode(v));
});
}
error = false;
} else if (aer instanceof ComputationNotCompletedResult) {
final ComputationNotCompletedResult result = (ComputationNotCompletedResult)aer;
sb.append("Computation not completed: ");
sb.append(result.getReason());
error = true;
} else if (aer instanceof EnumerationWarning) {
sb.append("UNKNOWN (FALSE with enumeration warning)");
error = true;
} else if (aer instanceof EvaluationErrorResult) {
final EvaluationErrorResult result = (EvaluationErrorResult)aer;
sb.append(result.getResult());
if (!result.getErrors().isEmpty()) {
sb.append(": ");
result.getErrors().forEach(s -> {
sb.append('\n');
sb.append(s);
});
}
error = true;
} else {
LOGGER.info("Unhandled eval result type, falling back to toString(): {}", aer.getClass());
sb.append(aer);
error = false;
}
if (error) {
throw new UserErrorException(sb.toString());
} else {
return new DisplayData(sb.toString());
}
}
@Override @Override
public @NotNull DisplayData run(final @NotNull ProBKernel kernel, final @NotNull String argString) { public @NotNull DisplayData run(final @NotNull ProBKernel kernel, final @NotNull String argString) {
return EvalCommand.displayDataForEvalResult(this.animationSelector.getCurrentTrace().evalCurrent(argString, FormulaExpand.EXPAND)); return CommandUtils.displayDataForEvalResult(this.animationSelector.getCurrentTrace().evalCurrent(argString, FormulaExpand.EXPAND));
} }
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment