| /* |
| * Copyright (c) 2007-2009, 2011, 2012, 2015 Eike Stepper (Berlin, Germany) and others. |
| * 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: |
| * Eike Stepper - initial API and implementation |
| */ |
| package org.eclipse.net4j.util.om.monitor; |
| |
| import org.eclipse.net4j.util.StringUtil; |
| |
| import org.eclipse.core.runtime.IProgressMonitor; |
| import org.eclipse.core.runtime.IStatus; |
| import org.eclipse.core.runtime.SubProgressMonitor; |
| |
| /** |
| * @author Eike Stepper |
| * @since 2.0 |
| */ |
| public class EclipseMonitor extends Monitor |
| { |
| private IProgressMonitor progressMonitor; |
| |
| private String taskName; |
| |
| public EclipseMonitor(IProgressMonitor progressMonitor, String taskName) |
| { |
| this.progressMonitor = progressMonitor; |
| this.taskName = taskName; |
| } |
| |
| public EclipseMonitor(IProgressMonitor progressMonitor) |
| { |
| this(progressMonitor, StringUtil.EMPTY); |
| } |
| |
| public String getTaskName() |
| { |
| return taskName; |
| } |
| |
| @Override |
| public boolean isCanceled() |
| { |
| if (super.isCanceled()) |
| { |
| return true; |
| } |
| |
| return progressMonitor.isCanceled(); |
| } |
| |
| @Override |
| public OMMonitor begin(double totalWork) throws MonitorCanceledException |
| { |
| super.begin(totalWork); |
| int eclipseWork = totalWork > Integer.MAX_VALUE ? Integer.MAX_VALUE : (int)totalWork; |
| progressMonitor.beginTask(taskName, eclipseWork); |
| return this; |
| } |
| |
| @Override |
| public void worked(double work) throws MonitorCanceledException |
| { |
| super.worked(work); |
| progressMonitor.internalWorked(work); |
| } |
| |
| @Override |
| public void done() |
| { |
| super.done(); |
| progressMonitor.done(); |
| } |
| |
| /** |
| * A sub progress monitor that synchronizes all methods on the parent monitor instance. |
| * |
| * @author Eike Stepper |
| * @since 3.0 |
| */ |
| public static class SynchronizedSubProgressMonitor extends SubProgressMonitor |
| { |
| public SynchronizedSubProgressMonitor(IProgressMonitor monitor, int ticks) |
| { |
| super(monitor, ticks); |
| } |
| |
| @Override |
| public void beginTask(String name, int totalWork) |
| { |
| synchronized (getWrappedProgressMonitor()) |
| { |
| super.beginTask(name, totalWork); |
| } |
| } |
| |
| @Override |
| public void clearBlocked() |
| { |
| synchronized (getWrappedProgressMonitor()) |
| { |
| super.clearBlocked(); |
| } |
| } |
| |
| @Override |
| public void done() |
| { |
| synchronized (getWrappedProgressMonitor()) |
| { |
| super.done(); |
| } |
| } |
| |
| @Override |
| public void internalWorked(double work) |
| { |
| synchronized (getWrappedProgressMonitor()) |
| { |
| super.internalWorked(work); |
| } |
| } |
| |
| @Override |
| public boolean isCanceled() |
| { |
| synchronized (getWrappedProgressMonitor()) |
| { |
| return super.isCanceled(); |
| } |
| } |
| |
| @Override |
| public void setBlocked(IStatus reason) |
| { |
| synchronized (getWrappedProgressMonitor()) |
| { |
| super.setBlocked(reason); |
| } |
| } |
| |
| @Override |
| public void setCanceled(boolean b) |
| { |
| synchronized (getWrappedProgressMonitor()) |
| { |
| super.setCanceled(b); |
| } |
| } |
| |
| @Override |
| public void setTaskName(String name) |
| { |
| synchronized (getWrappedProgressMonitor()) |
| { |
| super.setTaskName(name); |
| } |
| } |
| |
| @Override |
| public void subTask(String name) |
| { |
| synchronized (getWrappedProgressMonitor()) |
| { |
| super.subTask(name); |
| } |
| } |
| |
| @Override |
| public void worked(int work) |
| { |
| synchronized (getWrappedProgressMonitor()) |
| { |
| super.worked(work); |
| } |
| } |
| } |
| } |