blob: f900ec984260dd79775758d313db8eb4de86231b [file] [log] [blame]
/*******************************************************************************
* 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);
}
}