| /******************************************************************************* |
| * Copyright (c) 2000, 2010 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.update.core; |
| |
| import java.util.Stack; |
| |
| import org.eclipse.core.runtime.*; |
| import org.eclipse.osgi.util.NLS; |
| import org.eclipse.update.internal.core.Messages; |
| |
| /** |
| * Install progress monitor |
| * Delegating wrapper for IProgressMonitor used for installation handling. |
| * |
| * <p> |
| * <b>Note:</b> This class/interface is part of an interim API that is still under development and expected to |
| * change significantly before reaching stability. It is being made available at this early stage to solicit feedback |
| * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken |
| * (repeatedly) as the API evolves. |
| * </p> |
| * @since 2.0 |
| * @deprecated The org.eclipse.update component has been replaced by Equinox p2. |
| * This API will be deleted in a future release. See bug 311590 for details. |
| */ |
| public class InstallMonitor implements IProgressMonitor { |
| |
| protected IProgressMonitor monitor; |
| protected Stack tasks; |
| |
| protected String taskString; |
| protected String subTaskString; |
| protected boolean showDetails; |
| protected long totalCopyCount; |
| protected long currentCount = 0; |
| |
| protected class MonitorState { |
| |
| private String taskString; |
| private String subTaskString; |
| private boolean showDetails; |
| private long totalCopyCount; |
| private long currentCount; |
| |
| private MonitorState( |
| String taskString, |
| String subTaskString, |
| boolean showDetails, |
| long currentCount, |
| long totalCopyCount) { |
| this.taskString = taskString; |
| this.subTaskString = subTaskString; |
| this.showDetails = showDetails; |
| this.currentCount = currentCount; |
| this.totalCopyCount = totalCopyCount; |
| } |
| |
| private String getTaskString() { |
| return this.taskString; |
| } |
| |
| private String getSubTaskString() { |
| return this.subTaskString; |
| } |
| |
| private boolean getShowDetails() { |
| return this.showDetails; |
| } |
| |
| private long getCurrentCount() { |
| return this.currentCount; |
| } |
| |
| private long getTotalCopyCount() { |
| return this.totalCopyCount; |
| } |
| } |
| |
| protected InstallMonitor() { |
| } |
| |
| /** |
| * Install monitor constructor |
| * |
| * @param monitor base install monitor |
| * @since 2.0 |
| */ |
| public InstallMonitor(IProgressMonitor monitor) { |
| this.monitor = monitor; |
| this.tasks = new Stack(); |
| this.taskString = ""; //$NON-NLS-1$ |
| this.subTaskString = ""; //$NON-NLS-1$ |
| this.showDetails = false; |
| this.totalCopyCount = 0; |
| } |
| |
| /** |
| * Begin new monitor task. |
| * |
| * @see IProgressMonitor#beginTask(String, int) |
| * @since 2.0 |
| */ |
| public void beginTask(String name, int totalWork) { |
| taskString = name; |
| monitor.beginTask(name, totalWork); |
| } |
| |
| /** |
| * Indicate completion of monitor activity. |
| * |
| * @see IProgressMonitor#done() |
| * @since 2.0 |
| */ |
| public void done() { |
| monitor.done(); |
| } |
| |
| /** |
| * Indicate monitor progress. |
| * |
| * @see IProgressMonitor#internalWorked(double) |
| * @since 2.0 |
| */ |
| public void internalWorked(double work) { |
| monitor.internalWorked(work); |
| } |
| |
| /** |
| * Check is use indicated that the operation be cancelled. |
| * |
| * @see IProgressMonitor#isCanceled() |
| * @since 2.0 |
| */ |
| public boolean isCanceled() { |
| return monitor.isCanceled(); |
| } |
| |
| /** |
| * Set the cancellation state. |
| * |
| * @see IProgressMonitor#setCanceled(boolean) |
| * @since 2.0 |
| */ |
| public void setCanceled(boolean value) { |
| monitor.setCanceled(value); |
| } |
| |
| /** |
| * Set task name. |
| * |
| * @see IProgressMonitor#setTaskName(String) |
| * @since 2.0 |
| */ |
| public void setTaskName(String name) { |
| this.taskString = name; |
| this.subTaskString = ""; //$NON-NLS-1$ |
| this.showDetails = false; |
| this.totalCopyCount = 0; |
| monitor.subTask(""); //$NON-NLS-1$ |
| monitor.setTaskName(name); |
| } |
| |
| /** |
| * Set subtask name. |
| * |
| * @see IProgressMonitor#subTask(String) |
| * @since 2.0 |
| */ |
| public void subTask(String name) { |
| this.subTaskString = name; |
| this.showDetails = false; |
| this.totalCopyCount = 0; |
| monitor.subTask(name); |
| } |
| |
| /** |
| * Indicate monitor progress. |
| * |
| * @see IProgressMonitor#worked(int) |
| * @since 2.0 |
| */ |
| public void worked(int work) { |
| monitor.worked(work); |
| } |
| |
| /** |
| * Save the current monitor state. |
| * The states are saved on a push-down stack. Prior states |
| * can be restored by calling restorState() |
| * |
| * @see #restoreState() |
| * @since 2.0 |
| */ |
| public void saveState() { |
| tasks.push( |
| new MonitorState(taskString, subTaskString, showDetails, currentCount, totalCopyCount)); |
| } |
| |
| /** |
| * Restore the monitor state. |
| * |
| * @see #saveState() |
| * @since 2.0 |
| */ |
| public void restoreState() { |
| if (tasks.size() > 0) { |
| MonitorState state = (MonitorState) tasks.pop(); |
| setTaskName(state.getTaskString()); |
| subTask(state.getSubTaskString()); |
| this.showDetails = state.getShowDetails(); |
| this.currentCount = state.getCurrentCount(); |
| this.totalCopyCount = state.getTotalCopyCount(); |
| } |
| } |
| |
| /** |
| * Indicate whether the monitor subtask message should include |
| * copy progress counts. |
| * |
| * @see #setCopyCount(long) |
| * @see #setTotalCount(long) |
| * @param setting <code>true</code> to show the copy count, |
| * <code>false</code> otherwise |
| * @since 2.0 |
| */ |
| public void showCopyDetails(boolean setting) { |
| this.showDetails = setting; |
| } |
| |
| /** |
| * Sets the total number of bytes to copy. |
| * |
| * @see #showCopyDetails(boolean) |
| * @see #setCopyCount(long) |
| * @param count total number of bytes to copy. |
| * @since 2.0 |
| */ |
| public void setTotalCount(long count) { |
| this.totalCopyCount = count; |
| } |
| |
| /** |
| * Sets the number of bytes already copied. |
| * |
| * @see #showCopyDetails(boolean) |
| * @see #setTotalCount(long) |
| * @param count number of bytes already copied. |
| * @since 2.0 |
| */ |
| public void setCopyCount(long count) { |
| if (showDetails && count > 0) { |
| currentCount = count; |
| long countK = count / 1024; |
| long totalK = totalCopyCount / 1024; |
| String msg = |
| (totalK <= 0) |
| ? NLS.bind(Messages.InstallMonitor_DownloadSize, (new String[] { Long.toString(countK) })) |
| : NLS.bind(Messages.InstallMonitor_DownloadSizeLong, (new String[] { Long.toString(countK), Long.toString(totalK) })); |
| monitor.subTask(subTaskString + msg); |
| } |
| } |
| |
| /** |
| * Increments the number of bytes copied. |
| * |
| * @param increment number of new bytes copied. |
| * @since 3.0 |
| */ |
| public void incrementCount(long increment) { |
| setCopyCount(currentCount + increment); |
| } |
| } |