All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.eclipse.jface.viewers.deferred.FastProgressReporter Maven / Gradle / Ivy

The newest version!
/*******************************************************************************
 * Copyright (c) 2004, 2005 IBM Corporation 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:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.jface.viewers.deferred;

import org.eclipse.core.runtime.IProgressMonitor;

/**
 * A more efficient alternative to an IProgressMonitor. In particular, the implementation
 * is designed to make isCanceled() run as efficiently as possible. Currently package-visible
 * because the implementation is incomplete.
 * 
 * @since 3.1
 */
final class FastProgressReporter {
    private IProgressMonitor monitor;
    private volatile boolean canceled = false;
    private int cancelCheck = 0;
//    private String taskName;
//    
//    private int taskDepth = 0;
//    private int subTaskSize = 1;
//    private int totalWork = 1;
//    private int parentWork = 1;
//    private int monitorUnitsRemaining;
    
    private static int CANCEL_CHECK_PERIOD = 40;
    
    /**
     * Constructs a null FastProgressReporter
     */
    public FastProgressReporter() {
    }
    
    /**
     * Constructs a FastProgressReporter that wraps the given progress monitor
     * 
     * @param monitor the monitor to wrap
     * @param totalProgress the total progress to be reported
     */
    public FastProgressReporter(IProgressMonitor monitor, int totalProgress) {
        this.monitor = monitor;
        //monitorUnitsRemaining = totalProgress;
        canceled = monitor.isCanceled();
    }
    
//    /**
//     * Every call to beginTask must have a corresponding call to endTask, with the
//     * same argument.
//     * 
//     * @param totalWork
//     * @since 3.1
//     */
//    public void beginTask(int totalWork) {
//        
//        if (monitor == null) {
//            return;
//        }
//        
//        taskDepth++;
//
//        if (totalWork == 0) {
//            return;
//        }
//        
//        this.totalWork *= totalWork;
//    }
//    
//    public void beginSubTask(int subTaskWork) {
//        subTaskSize *= subTaskWork;
//    }
//    
//    public void endSubTask(int subTaskWork) {
//        subTaskSize /= subTaskWork;
//    }
//    
//    public void worked(int amount) {
//        amount *= subTaskSize;
//        
//        if (amount > totalWork) {
//            amount = totalWork;
//        }
//        
//        int consumed = monitorUnitsRemaining * amount / totalWork;
//        
//        if (consumed > 0) {
//            monitor.worked(consumed);
//            monitorUnitsRemaining -= consumed;
//        }
//        totalWork -= amount;
//    }
//    
//    public void endTask(int totalWork) {        
//        taskDepth--;
//        
//        if (taskDepth == 0) {
//            if (monitor != null && monitorUnitsRemaining > 0) {
//                monitor.worked(monitorUnitsRemaining);
//            }
//        }
//        
//        if (totalWork == 0) {
//            return;
//        }
//        
//        this.totalWork /= totalWork;
//
//    }
    
    /**
     * Return whether the progress monitor has been canceled.
     * 
     * @return true if the monitor has been cancelled, false otherwise.
     */
    public boolean isCanceled() {
        if (monitor == null) {
            return canceled;
        }
        
        cancelCheck++;
        if (cancelCheck > CANCEL_CHECK_PERIOD) {
            canceled = monitor.isCanceled();
            cancelCheck = 0;
        }
        return canceled;
    }
    
    /**
     * Cancel the progress monitor.
     */
    public void cancel() {        
        canceled = true;
        
        if (monitor == null) {
            return;
        }
        monitor.setCanceled(true);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy