| /******************************************************************************* |
| * 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); |
| |
| } |
| } |