/** * Copyright (c) 2009-2011, The HATS Consortium. All rights reserved. * This file is licensed under the terms of the Modified BSD License. */ package org.absmodels.abs.plugin.actions; import static org.absmodels.abs.plugin.util.Constants.PLUGIN_ID; import java.io.IOException; import java.io.PrintStream; import org.absmodels.abs.plugin.actions.JavaJob.SDEditProcess; import org.absmodels.abs.plugin.console.ConsoleManager; import org.absmodels.abs.plugin.console.MsgConsole; import org.absmodels.abs.plugin.console.ConsoleManager.MessageType; import org.absmodels.abs.plugin.util.UtilityFunctions; import org.eclipse.core.resources.WorkspaceJob; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.IJobChangeEvent; import org.eclipse.core.runtime.jobs.IJobChangeListener; final class SDEditWatchdog extends WorkspaceJob { private final SDEditProcess process; SDEditWatchdog(SDEditProcess process) { super("SDEdit running..."); this.process = process; this.addJobChangeListener(new SDEditWatchdogListener()); } @Override public IStatus runInWorkspace(IProgressMonitor monitor) throws CoreException { try { ConsoleManager.addConsole(process.getConsole()); PrintStream out = process.getConsole().getPrintStream(MessageType.MESSAGE_INFO); PrintStream err = process.getConsole().getPrintStream(MessageType.MESSAGE_ERROR); UtilityFunctions.getProcessOutput(process.getProcess(), out, err); int exitValue = process.getProcess().waitFor(); if(exitValue == 0){ return new Status(Status.OK, PLUGIN_ID, "SDEdit finished successfully."); } else { return new Status(Status.ERROR, PLUGIN_ID, "SDEdit finished with errors!!"); } } catch (InterruptedException e) { return handleException(e); } catch (IOException e) { return handleException(e); } } private IStatus handleException(Exception e) { e.printStackTrace(); return new Status(Status.ERROR, PLUGIN_ID,"Fatal Error!", e); } public final class SDEditWatchdogListener implements IJobChangeListener { @Override public void sleeping(IJobChangeEvent event) { } @Override public void scheduled(IJobChangeEvent event) { } @Override public void running(IJobChangeEvent event) { } @Override public void done(IJobChangeEvent event) { IStatus jobstatus = event.getResult(); switch(jobstatus.getSeverity()){ case Status.OK: break; case Status.ERROR: Throwable exception = jobstatus.getException(); if(exception!= null){ exception.printStackTrace(process.getConsole().getPrintStream(MessageType.MESSAGE_ERROR)); } break; default: // How do we end up here??? assert false; break; } } @Override public void awake(IJobChangeEvent event) { } @Override public void aboutToRun(IJobChangeEvent event) { } } }