/******************************************************************************* * Copyright (c) 2007 IBM Corporation. * 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: * IBM Corporation - initial API and implementation *******************************************************************************/ package com.ibm.wala.util; /** * Simple utilities for Eclipse progress monitors */ public class MonitorUtil { /** * Use this interface to decouple core utilities from the Eclipse layer */ public interface IProgressMonitor { /** Constant indicating an unknown amount of work. */ public static final int UNKNOWN = -1; void beginTask(String task, int totalWork); /** BEGIN Custom change: subtasks and canceling */ void subTask(String subTask); void cancel(); /** END Custom change: subtasks and canceling */ boolean isCanceled(); void done(); void worked(int units); String getCancelMessage(); } public static void beginTask(IProgressMonitor monitor, String task, int totalWork) throws CancelException { if (monitor != null) { monitor.beginTask(task, totalWork); if (monitor.isCanceled()) { throw CancelException.make("cancelled in " + task); } } } public static void done(IProgressMonitor monitor) throws CancelException { if (monitor != null) { monitor.done(); if (monitor.isCanceled()) { throw CancelException.make("cancelled in " + monitor.toString()); } } } public static void worked(IProgressMonitor monitor, int units) throws CancelException { if (monitor != null) { monitor.worked(units); if (monitor.isCanceled()) { throw CancelException.make("cancelled in " + monitor.toString()); } } } public static void throwExceptionIfCanceled(IProgressMonitor progressMonitor) throws CancelException { if (progressMonitor != null) { if (progressMonitor.isCanceled()) { throw CancelException.make(progressMonitor.getCancelMessage()); } } } /** BEGIN Custom change: more on subtasks */ public static void subTask(IProgressMonitor progressMonitor, String subTask) throws CancelException { if (progressMonitor != null) { progressMonitor.subTask(subTask); if (progressMonitor.isCanceled()) { throw CancelException.make("cancelled in " + subTask); } } } public static boolean isCanceled(IProgressMonitor progressMonitor) { if (progressMonitor == null) { return false; } else { return progressMonitor.isCanceled(); } } public static void cancel(IProgressMonitor progress) { if (progress != null) { progress.cancel(); } } /** END Custom change: more on subtasks */ // public static IProgressMonitor subProgress(ProgressMaster progress, int i) { // if (progress == null) { // return null; // } else { // return new SubProgressMonitor(progress, i); // } // } }