blob: 6566b06afa41c3d56d40e157857fd761b6b9279c [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2003, 2006 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.ui.internal.progress;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.osgi.util.NLS;
/**
* The TaskInfo is the info on a task with a job. It is assumed that there is
* only one task running at a time - any previous tasks in a Job will be
* deleted.
*/
public class TaskInfo extends SubTaskInfo {
double preWork = 0;
int totalWork = 0;
/**
* Create a new instance of the receiver with the supplied total work and
* task name.
*
* @param parentJobInfo
* @param infoName
* @param total
*/
TaskInfo(JobInfo parentJobInfo, String infoName, int total) {
super(parentJobInfo, infoName);
totalWork = total;
}
/**
* Add the work increment to the total.
*
* @param workIncrement
*/
void addWork(double workIncrement) {
// Don't bother if we are indeterminate
if (totalWork == IProgressMonitor.UNKNOWN) {
return;
}
preWork += workIncrement;
}
/**
* Add the amount of work to the recevier. Update a parent monitor by the
* increment scaled to the amount of ticks this represents.
*
* @param workIncrement
* int the amount of work in the receiver
* @param parentMonitor
* The IProgressMonitor that is also listening
* @param parentTicks
* the number of ticks this monitor represents
*/
void addWork(double workIncrement, IProgressMonitor parentMonitor,
int parentTicks) {
// Don't bother if we are indeterminate
if (totalWork == IProgressMonitor.UNKNOWN) {
return;
}
addWork(workIncrement);
parentMonitor.internalWorked(workIncrement * parentTicks / totalWork);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.internal.progress.JobTreeElement#getDisplayString(boolean)
*/
String getDisplayString(boolean showProgress) {
if (totalWork == IProgressMonitor.UNKNOWN) {
return unknownProgress();
}
if (taskName == null) {
return getDisplayStringWithoutTask(showProgress);
}
if (showProgress) {
String[] messageValues = new String[3];
messageValues[0] = String.valueOf(getPercentDone());
messageValues[1] = jobInfo.getJob().getName();
messageValues[2] = taskName;
return NLS
.bind(ProgressMessages.JobInfo_DoneMessage, messageValues);
}
String[] messageValues = new String[2];
messageValues[0] = jobInfo.getJob().getName();
messageValues[1] = taskName;
return NLS.bind(ProgressMessages.JobInfo_DoneNoProgressMessage,
messageValues);
}
/**
* Get the display String without the task name.
*
* @param showProgress
* Whether or not we are showing progress
*
* @return String
*/
String getDisplayStringWithoutTask(boolean showProgress) {
if (!showProgress || totalWork == IProgressMonitor.UNKNOWN) {
return jobInfo.getJob().getName();
}
return NLS.bind(ProgressMessages.JobInfo_NoTaskNameDoneMessage, jobInfo
.getJob().getName(), String.valueOf(getPercentDone()));
}
/**
* Return an integer representing the amount of work completed. If progress
* is indeterminate return IProgressMonitor.UNKNOWN.
*
* @return int IProgressMonitor.UNKNOWN or a value between 0 and 100.
*/
int getPercentDone() {
if (totalWork == IProgressMonitor.UNKNOWN) {
return IProgressMonitor.UNKNOWN;
}
return Math.min((int) (preWork * 100 / totalWork), 100);
}
/**
* Return the progress for a monitor whose totalWork is
* <code>IProgressMonitor.UNKNOWN</code>.
*
* @return String
*/
private String unknownProgress() {
if (taskName == null) {
return jobInfo.getJob().getName();
}
String[] messageValues = new String[2];
messageValues[0] = jobInfo.getJob().getName();
messageValues[1] = taskName;
return NLS
.bind(ProgressMessages.JobInfo_UnknownProgress, messageValues);
}
}