### Eclipse Workspace Patch 1.0 #P org.eclipse.ecf.provider.filetransfer Index: src/org/eclipse/ecf/internal/provider/filetransfer/Messages.java =================================================================== RCS file: /cvsroot/technology/org.eclipse.ecf/plugins/org.eclipse.ecf.provider.filetransfer/src/org/eclipse/ecf/internal/provider/filetransfer/Messages.java,v retrieving revision 1.11 diff -u -r1.11 Messages.java --- src/org/eclipse/ecf/internal/provider/filetransfer/Messages.java 26 Feb 2008 00:46:53 -0000 1.11 +++ src/org/eclipse/ecf/internal/provider/filetransfer/Messages.java 28 Feb 2008 22:13:30 -0000 @@ -20,11 +20,17 @@ private static final String BUNDLE_NAME = "org.eclipse.ecf.internal.provider.filetransfer.messages"; //$NON-NLS-1$ public static String AbstractOutgoingFileTransfer_EXCEPTION_FILE_TRANSFER_INFO_NOT_NULL; public static String AbstractOutgoingFileTransfer_EXCEPTION_IN_FINALLY; + public static String AbstractRetrieveFileTransfer_DownloadRateFormat; public static String AbstractRetrieveFileTransfer_MalformedURLException; public static String AbstractRetrieveFileTransfer_Progress_Data; public static String AbstractRetrieveFileTransfer_EXCEPTION_IN_FINALLY; public static String AbstractRetrieveFileTransfer_Exception_User_Cancelled; + public static String AbstractRetrieveFileTransfer_InfoDownloadRate; public static String AbstractRetrieveFileTransfer_RemoteFileID_Not_Null; + public static String AbstractRetrieveFileTransfer_SizeUnitBytes; + public static String AbstractRetrieveFileTransfer_SizeUnitGB; + public static String AbstractRetrieveFileTransfer_SizeUnitKB; + public static String AbstractRetrieveFileTransfer_SizeUnitMB; public static String AbstractRetrieveFileTransfer_Status_Transfer_Completed_OK; public static String AbstractRetrieveFileTransfer_Status_Transfer_Exception; public static String AbstractRetrieveFileTransfer_TransferListener_Not_Null; Index: src/org/eclipse/ecf/internal/provider/filetransfer/messages.properties =================================================================== RCS file: /cvsroot/technology/org.eclipse.ecf/plugins/org.eclipse.ecf.provider.filetransfer/src/org/eclipse/ecf/internal/provider/filetransfer/messages.properties,v retrieving revision 1.13 diff -u -r1.13 messages.properties --- src/org/eclipse/ecf/internal/provider/filetransfer/messages.properties 26 Feb 2008 00:46:53 -0000 1.13 +++ src/org/eclipse/ecf/internal/provider/filetransfer/messages.properties 28 Feb 2008 22:13:30 -0000 @@ -11,9 +11,11 @@ AbstractOutgoingFileTransfer_EXCEPTION_FILE_TRANSFER_INFO_NOT_NULL=File transfer info cannot be null. AbstractOutgoingFileTransfer_EXCEPTION_IN_FINALLY=Exception in send done event handler. +AbstractRetrieveFileTransfer_DownloadRateFormat=0.00 {0} AbstractRetrieveFileTransfer_Progress_Data=\ - data AbstractRetrieveFileTransfer_EXCEPTION_IN_FINALLY=Exception in receive done/paused event handler. AbstractRetrieveFileTransfer_Exception_User_Cancelled=Cancelled by user +AbstractRetrieveFileTransfer_InfoDownloadRate=({0}/s) AbstractRetrieveFileTransfer_Status_Transfer_Completed_OK=Transfer Completed OK UrlConnectionRetrieveFileTransfer_CONNECT_EXCEPTION_NOT_CONNECTED=not connected UrlConnectionRetrieveFileTransfer_EXCEPTION_FILE_MODIFIED_SINCE_LAST_ACCESS=file modified since last access @@ -42,6 +44,10 @@ HttpClientRetrieveFileTransfer_Unauthorized=Unauthorized HttpClientRetrieveFileTransfer_Proxy_Auth_Required=Proxy Authentication Required AbstractRetrieveFileTransfer_MalformedURLException=Exception creating URL for {0} +AbstractRetrieveFileTransfer_SizeUnitBytes=bytes +AbstractRetrieveFileTransfer_SizeUnitGB=GB +AbstractRetrieveFileTransfer_SizeUnitKB=KB +AbstractRetrieveFileTransfer_SizeUnitMB=MB FileSystemBrowser_EXCEPTION_DIRECTORY_DOES_NOT_EXIST=Directory {0} does not exist. FileSystemBrowser_EXCEPTION_NOT_DIRECTORY={0} is not a directory. FileTransferNamespace_Namespace_Protocol=ecf.provider.filetransfer Index: src/org/eclipse/ecf/provider/filetransfer/retrieve/AbstractRetrieveFileTransfer.java =================================================================== RCS file: /cvsroot/technology/org.eclipse.ecf/plugins/org.eclipse.ecf.provider.filetransfer/src/org/eclipse/ecf/provider/filetransfer/retrieve/AbstractRetrieveFileTransfer.java,v retrieving revision 1.29 diff -u -r1.29 AbstractRetrieveFileTransfer.java --- src/org/eclipse/ecf/provider/filetransfer/retrieve/AbstractRetrieveFileTransfer.java 26 Feb 2008 00:46:53 -0000 1.29 +++ src/org/eclipse/ecf/provider/filetransfer/retrieve/AbstractRetrieveFileTransfer.java 28 Feb 2008 22:13:30 -0000 @@ -1,16 +1,18 @@ /******************************************************************************* - * Copyright (c) 2004, 2007 Composent, Inc. All rights reserved. This + * Copyright (c) 2004, 2008 Composent, Inc. 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: Composent, Inc. - initial API and implementation + * Benjamin Cabe - bug 220258 ******************************************************************************/ package org.eclipse.ecf.provider.filetransfer.retrieve; import java.io.*; import java.net.MalformedURLException; import java.net.URL; +import java.text.DecimalFormat; import java.util.Map; import org.eclipse.core.net.proxy.IProxyData; import org.eclipse.core.net.proxy.IProxyService; @@ -69,6 +71,8 @@ protected IConnectContext connectContext; + protected long jobStartTime; + public void setConnectContextForAuthentication(IConnectContext connectContext) { this.connectContext = connectContext; } @@ -113,11 +117,35 @@ bytesReceived += bytes; localFileContents.write(buf, 0, bytes); fireTransferReceiveDataEvent(); + double downloadRateBps = (bytesReceived / ((System.currentTimeMillis() + 1 - jobStartTime) / 1000.0)); + monitor.setTaskName(getRemoteFileURL().toString() + Messages.AbstractRetrieveFileTransfer_Progress_Data + NLS.bind(Messages.AbstractRetrieveFileTransfer_InfoDownloadRate, toHumanReadableBytes(downloadRateBps))); monitor.worked((int) Math.round(factor * bytes)); } else done = true; } + public static String toHumanReadableBytes(double size) { + double convertedSize; + String unit; + + if (size / (1024 * 1024 * 1024) >= 1) { + convertedSize = size / (1024 * 1024 * 1024); + unit = Messages.AbstractRetrieveFileTransfer_SizeUnitGB; + } else if (size / (1024 * 1024) >= 1) { + convertedSize = size / (1024 * 1024); + unit = Messages.AbstractRetrieveFileTransfer_SizeUnitMB; + } else if (size / 1024 >= 1) { + convertedSize = size / 1024; + unit = Messages.AbstractRetrieveFileTransfer_SizeUnitKB; + } else { + convertedSize = size; + unit = Messages.AbstractRetrieveFileTransfer_SizeUnitBytes; + } + + DecimalFormat df = new DecimalFormat(NLS.bind(Messages.AbstractRetrieveFileTransfer_DownloadRateFormat, unit)); + return df.format(convertedSize); + } + public class FileTransferJob extends Job { public FileTransferJob(String name) { @@ -125,6 +153,7 @@ } protected IStatus run(IProgressMonitor monitor) { + jobStartTime = System.currentTimeMillis(); final byte[] buf = new byte[buff_length]; final long totalWork = ((fileLength == -1) ? 100 : fileLength); double factor = (totalWork > Integer.MAX_VALUE) ? (((double) Integer.MAX_VALUE) / ((double) totalWork)) : 1.0;