@Override public void init() { try { ListBasedValidationIssueAcceptor acceptor = new ListBasedValidationIssueAcceptor(); ExecutionFlow flow = sequencer.transform(statechart, acceptor); if (acceptor.getTraces(Severity.ERROR).size() > 0) { Status errorStatus = new Status(Status.ERROR, SimulationCoreActivator.PLUGIN_ID, ERROR_DURING_SIMULATION, acceptor.getTraces(Severity.ERROR).iterator().next().toString(), null); IStatusHandler statusHandler = DebugPlugin.getDefault().getStatusHandler(errorStatus); try { statusHandler.handleStatus(errorStatus, getDebugTarget()); } catch (CoreException e) { e.printStackTrace(); } } if (!context.isSnapshot()) { contextInitializer.initialize(context, flow); } interpreter.initialize(flow, context, useInternalEventQueue()); } catch (Exception ex) { handleException(ex); throw new InitializationException(ex.getMessage()); } }
protected void handleException(Throwable t) { if (t instanceof WrappedException) { t = ((WrappedException) t).getCause(); } String statusMessage = t.getMessage() == null ? ERROR_MSG : t.getMessage(); Status errorStatus = new Status(Status.ERROR, SimulationCoreActivator.PLUGIN_ID, ERROR_DURING_SIMULATION, statusMessage, t); SimulationCoreActivator.getDefault().getLog().log(errorStatus); IStatusHandler statusHandler = DebugPlugin.getDefault().getStatusHandler(errorStatus); try { statusHandler.handleStatus(errorStatus, getDebugTarget()); } catch (CoreException e) { e.printStackTrace(); } finally { terminate(); } }
/** * Issues an user prompt using the status handler registered for the given * status. * * @param status * IStatus object to find prompter for * @param info * additional information passed to the handler * @return boolean result returned by the status handler * @throws CoreException * if the status has severity error and no handler is available */ private boolean showPrompt(IStatus status, Object info) throws CoreException { IStatusHandler prompter = DebugPlugin.getDefault().getStatusHandler( PROMPT_STATUS); if (prompter == null) { if (status.getSeverity() == IStatus.ERROR) { throw new CoreException(status); } else { return true; } } else { return ((Boolean) prompter.handleStatus(status, info)).booleanValue(); } }
@Override public boolean finalLaunchCheck(ILaunchConfiguration configuration, String mode, IProgressMonitor monitor) throws CoreException { SubMonitor progress = SubMonitor.convert(monitor, 40); if (!super.finalLaunchCheck(configuration, mode, progress.newChild(20))) { return false; } // If we're auto-publishing before launch, check if there may be stale // resources not yet published. See // https://github.com/GoogleCloudPlatform/google-cloud-eclipse/issues/1832 if (ServerCore.isAutoPublishing() && ResourcesPlugin.getWorkspace().isAutoBuilding()) { // Must wait for any current autobuild to complete so resource changes are triggered // and WTP will kick off ResourceChangeJobs. Note that there may be builds // pending that are unrelated to our resource changes, so simply checking // <code>JobManager.find(FAMILY_AUTO_BUILD).length > 0</code> produces too many // false positives. try { Job.getJobManager().join(ResourcesPlugin.FAMILY_AUTO_BUILD, progress.newChild(20)); } catch (InterruptedException ex) { /* ignore */ } IServer server = ServerUtil.getServer(configuration); if (server.shouldPublish() || hasPendingChangesToPublish()) { IStatusHandler prompter = DebugPlugin.getDefault().getStatusHandler(promptStatus); if (prompter != null) { Object continueLaunch = prompter .handleStatus(StaleResourcesStatusHandler.CONTINUE_LAUNCH_REQUEST, configuration); if (!(Boolean) continueLaunch) { // cancel the launch so Server.StartJob won't raise an error dialog, since the // server won't have been started monitor.setCanceled(true); return false; } return true; } } } return true; }