/** * Copyright (c) Red Hat, Inc., contributors and others 2013 - 2014. All rights reserved * * Licensed under the Eclipse Public License version 1.0, available at * http://www.eclipse.org/legal/epl-v10.html */ package org.jboss.tools.forge.ui.internal.ext.dialog; import org.eclipse.core.runtime.IProgressMonitor; /** * @author <a href="lincolnbaxter@gmail.com">Lincoln Baxter, III</a> */ public class InterruptableProgressMonitor implements IProgressMonitor { private IProgressMonitor wrapped; private Thread thread; private boolean previouslyCancelled; public InterruptableProgressMonitor(IProgressMonitor wrapped) { this.wrapped = wrapped; } @Override public void beginTask(String name, int totalWork) { wrapped.beginTask(name, totalWork); } @Override public void done() { wrapped.done(); } @Override public void internalWorked(double work) { wrapped.internalWorked(work); } @Override public boolean isCanceled() { return wrapped.isCanceled(); } public boolean isPreviouslyCancelled() { return previouslyCancelled; } @Override public void setCanceled(boolean value) { if (value == true) { if (previouslyCancelled && thread != null) { thread.interrupt(); } previouslyCancelled = true; } wrapped.setCanceled(value); } @Override public void setTaskName(String name) { wrapped.setTaskName(name); } @Override public void subTask(String name) { wrapped.subTask(name); } @Override public void worked(int work) { wrapped.worked(work); } public void setRunnableThread(Thread thread) { this.thread = thread; } }