/******************************************************************************* * Copyright (c) 2007, 2010 Association for Decentralized Information Management * in Industry THTH ry. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * VTT Technical Research Centre of Finland - initial API and implementation *******************************************************************************/ package org.simantics.simulation.ui.handlers; import java.lang.reflect.InvocationTargetException; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.SubMonitor; import org.eclipse.jface.dialogs.ProgressMonitorDialog; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.ui.handlers.HandlerUtil; import org.simantics.Simantics; import org.simantics.project.IProject; import org.simantics.simulation.experiment.IExperiment; import org.simantics.simulation.project.IExperimentManager; import org.simantics.utils.ui.ExceptionUtils; public class Dispose extends AbstractHandler { @Override public Object execute(ExecutionEvent event) throws ExecutionException { IProject project = Simantics.getProject(); IExperimentManager manager = project.getHint(IExperimentManager.KEY_EXPERIMENT_MANAGER); final IExperiment experiment = manager.getActiveExperiment(); if (experiment == null) return null; try { new ProgressMonitorDialog(HandlerUtil.getActiveShell(event)).run(true, false, new IRunnableWithProgress() { @Override public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { SubMonitor mon = SubMonitor.convert(monitor, "Shutdown experiment...", 10000); try { experiment.shutdown(mon.newChild(10000)); } finally { monitor.done(); } } }); } catch (InvocationTargetException e) { ExceptionUtils.logAndShowError(e.getCause()); } catch (InterruptedException e) { ExceptionUtils.logAndShowError(e.getCause()); } return null; } }