package org.absmodels.abs.plugin.actions;
import static org.absmodels.abs.plugin.actions.ActionUtils.showErrorMessage;
import static org.absmodels.abs.plugin.util.Constants.ABSUNIT_TEST_ERROR;
import static org.absmodels.abs.plugin.util.Constants.ABSUNIT_TEST_OK;
import static org.absmodels.abs.plugin.util.Constants.ABSUNIT_TEST_USER_ABORT;
import static org.absmodels.abs.plugin.util.UtilityFunctions.getAbsNature;
import static org.absmodels.abs.plugin.util.UtilityFunctions.showErrorMessage;
import org.absmodels.abs.plugin.console.MsgConsole;
import org.absmodels.abs.plugin.console.ConsoleManager.MessageType;
import org.absmodels.abs.plugin.exceptions.ParseException;
import org.absmodels.abs.plugin.exceptions.TypeCheckerException;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.jobs.IJobChangeEvent;
import org.eclipse.core.runtime.jobs.IJobChangeListener;
import org.eclipse.swt.widgets.Display;
public class ABSUnitTestExecutionJobListener implements IJobChangeListener {
private IProject project;
private MsgConsole console;
public ABSUnitTestExecutionJobListener(IProject project){
this.project = project;
}
@Override
public void sleeping(IJobChangeEvent event) {}
@Override
public void scheduled(IJobChangeEvent event) {}
@Override
public void running(IJobChangeEvent event) {}
@Override
public void done(IJobChangeEvent event) {
//When the Job is done get the IStatus and print messages on console
final IStatus status = event.getResult();
switch(status.getCode()){
case ABSUNIT_TEST_OK:
initializeConsole();
console.println(status.getMessage(), MessageType.MESSAGE_INFO); break;
case ABSUNIT_TEST_ERROR:
//encountered an exception during execution
Display.getDefault().asyncExec(new Runnable() {
@Override
public void run() {
if(status.getException() instanceof ParseException || status.getException() instanceof TypeCheckerException){
showErrorMessage(status.getMessage(), status);
} else{
showErrorMessage(status.getMessage());
}
}
}); break;
case ABSUNIT_TEST_USER_ABORT:
initializeConsole();
console.println("Aborted Maude Job.", MessageType.MESSAGE_ERROR); break;
default:
//This should never happen... just in case...
showErrorMessage("reached an unspecified status");
}
}
private void initializeConsole() {
console = getAbsNature(project).getABSUnitTestExecutionConsole();
console.clearConsole();
}
@Override
public void awake(IJobChangeEvent event) {}
@Override
public void aboutToRun(IJobChangeEvent event) {}
}