blob: b722575a0d68056ee7703220f85895778d803df1 [file] [log] [blame]
/*******************************************************************************
* 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);
}
}