package org.geogebra.common.main.error;
import org.geogebra.common.kernel.CircularDefinitionException;
import org.geogebra.common.kernel.parser.ParseException;
import org.geogebra.common.main.App;
import org.geogebra.common.main.Localization;
import org.geogebra.common.main.MyError;
import org.geogebra.common.util.AsyncOperation;
import org.geogebra.common.util.debug.Log;
public class ErrorHelper {
public static void handleException(Exception e, App app,
ErrorHandler handler) {
if (e instanceof ParseException) {
Log.error(e.getMessage());
} else {
e.printStackTrace();
}
Localization loc = app.getLocalization();
app.initTranslatedCommands();
if (e instanceof CircularDefinitionException) {
handler.showError(loc.getError("CircularDefinition"));
} else if (e.getCause() instanceof MyError) {
handleError((MyError) e.getCause(), null, loc, handler);
} else if (loc.getReverseCommand(handler.getCurrentCommand()) != null) {
handleCommandError(loc, handler.getCurrentCommand(), handler);
} else {
Log.debug("NO COMMAND FOR ERROR" + handler.getCurrentCommand());
handler.showError(loc.getError("InvalidInput"));
}
}
public static void handleCommandError(Localization loc, String localCommand,
ErrorHandler handler) {
String cmd = loc.getReverseCommand(localCommand);
handler.showCommandError(cmd,
loc.getError("InvalidInput") + ":\n" + localCommand + "\n\n"
+ loc.getPlain("Syntax") + ":\n"
+ loc.getCommandSyntax(cmd));
}
public static void handleError(MyError e, String cmd, Localization loc,
ErrorHandler handler) {
if (e.getcommandName() != null) {
String internal = loc
.getReverseCommand(e.getcommandName());
handler.showCommandError(internal, e.getLocalizedMessage());
} else {
handler.showError(e.getLocalizedMessage());
}
}
public static void handleInvalidInput(String str, Localization loc,
ErrorHandler handler) {
if (loc != null) {
handler.showError(loc.getError("InvalidInput") + ":\n" + str);
} else {
handler.showError("InvalidInput:\n" + str);
}
}
public static ErrorHandler silent() {
return new ErrorHandler() {
@Override
public void showError(String msg) {
Log.printStacktrace(msg);
}
@Override
public void resetError() {
// do nothing
}
@Override
public void showCommandError(String command, String message) {
Log.warn(command + ":" + message);
}
@Override
public String getCurrentCommand() {
// TODO Auto-generated method stub
return null;
}
@Override
public boolean onUndefinedVariables(String string,
AsyncOperation<String[]> callback) {
return false;
}
};
}
}