/******************************************************************************* * Copyright (c) 2011 Tasktop Technologies 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: * Tasktop Technologies - initial API and implementation *******************************************************************************/ package org.eclipse.mylyn.internal.commons.core.operations; import java.util.EnumSet; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.SubMonitor; import org.eclipse.mylyn.commons.core.operations.IOperationMonitor; public class OperationMonitor implements IOperationMonitor { private EnumSet<OperationFlag> flags; private final SubMonitor monitor; private final IOperationMonitor root; public OperationMonitor(IOperationMonitor root, IProgressMonitor monitor) { this.root = root; this.monitor = SubMonitor.convert(monitor); } public OperationMonitor(IOperationMonitor root, IProgressMonitor monitor, String taskName, int work) { this.root = root; this.monitor = SubMonitor.convert(monitor, taskName, work); } public synchronized void addFlag(OperationFlag flag) { if (root != null) { root.addFlag(flag); } else if (flags == null) { flags = EnumSet.of(flag); } else { flags.add(flag); } } public void beginTask(String name, int totalWork) { monitor.beginTask(name, totalWork); } public void clearBlocked() { monitor.clearBlocked(); } public void done() { monitor.done(); } @Override public boolean equals(Object obj) { return monitor.equals(obj); } public synchronized boolean hasFlag(OperationFlag flag) { if (root != null) { return root.hasFlag(flag); } else if (flags != null) { return flags.contains(flag); } return false; } @Override public int hashCode() { return monitor.hashCode(); } public void internalWorked(double work) { monitor.internalWorked(work); } public boolean isCanceled() { return monitor.isCanceled(); } public IOperationMonitor newChild(int totalWork) { return new OperationMonitor((root == null) ? this : root, monitor.newChild(totalWork)); } public IOperationMonitor newChild(int totalWork, int suppressFlags) { return new OperationMonitor((root == null) ? this : root, monitor.newChild(totalWork, suppressFlags)); } public synchronized void removeFlag(OperationFlag flag) { if (root != null) { root.removeFlag(flag); } else if (flags != null) { flags.remove(flag); } } public void setBlocked(IStatus reason) { monitor.setBlocked(reason); } public void setCanceled(boolean b) { monitor.setCanceled(b); } public void setTaskName(String name) { monitor.setTaskName(name); } public IOperationMonitor setWorkRemaining(int workRemaining) { monitor.setWorkRemaining(workRemaining); return this; } public void subTask(String name) { monitor.subTask(name); } @Override public String toString() { return monitor.toString(); } public void worked(int work) { monitor.worked(work); } }