diff options
author | slewis | 2008-03-06 05:45:50 +0000 |
---|---|---|
committer | slewis | 2008-03-06 05:45:50 +0000 |
commit | 3b262a3efb5e28360b07d78419d520af8d635e9b (patch) | |
tree | 4601ebdfd2e5b6bf04f7b5a90c8462e745905add | |
parent | 0e1e5d15792950b7c5a6dd235710d6c3efd84323 (diff) | |
download | org.eclipse.ecf-3b262a3efb5e28360b07d78419d520af8d635e9b.tar.gz org.eclipse.ecf-3b262a3efb5e28360b07d78419d520af8d635e9b.tar.xz org.eclipse.ecf-3b262a3efb5e28360b07d78419d520af8d635e9b.zip |
Additions to FileTransferView to allow launching of local file after retrieved.v20080305-2150
2 files changed, 73 insertions, 36 deletions
diff --git a/framework/bundles/org.eclipse.ecf.filetransfer.ui/src/org/eclipse/ecf/filetransfer/ui/FileTransfersView.java b/framework/bundles/org.eclipse.ecf.filetransfer.ui/src/org/eclipse/ecf/filetransfer/ui/FileTransfersView.java index d22989b6d..caa6043c8 100644 --- a/framework/bundles/org.eclipse.ecf.filetransfer.ui/src/org/eclipse/ecf/filetransfer/ui/FileTransfersView.java +++ b/framework/bundles/org.eclipse.ecf.filetransfer.ui/src/org/eclipse/ecf/filetransfer/ui/FileTransfersView.java @@ -10,11 +10,13 @@ *****************************************************************************/ package org.eclipse.ecf.filetransfer.ui; -import java.util.Iterator; -import java.util.Vector; +import java.text.DecimalFormat; +import java.text.SimpleDateFormat; +import java.util.*; import org.eclipse.ecf.filetransfer.*; import org.eclipse.jface.action.*; import org.eclipse.jface.viewers.*; +import org.eclipse.osgi.util.NLS; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; @@ -25,14 +27,18 @@ import org.eclipse.ui.part.ViewPart; public class FileTransfersView extends ViewPart { - public static final Vector transfers = new Vector(); + public static final Map transfers = new HashMap(); public static final String ID = "org.eclipse.ecf.filetransfer.ui.FileTransfersView"; //$NON-NLS-1$ private static final String[] COLUMNS = {"Name", "Download", "Upload", "Local File", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ - "Done"}; //$NON-NLS-1$ + "Done", "Start", "End", "Rate"}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ - private static final int[] WIDTHS = {250, 100, 100, 350, 40}; + private static final int[] WIDTHS = {225, 70, 70, 325, 50, 90, 90, 75}; + + private static final String DATEFORMAT = "HH:mm:ss"; //$NON-NLS-1$ + + static final SimpleDateFormat SDF = new SimpleDateFormat(DATEFORMAT); static final Object[] EMPTY_ARRAY = new Object[0]; @@ -52,13 +58,21 @@ public class FileTransfersView extends ViewPart { private static final int DONE = FILENAME + 1; + private static final int STARTTIME = DONE + 1; + + private static final int ENDTIME = STARTTIME + 1; + + private static final int RATE = ENDTIME + 1; + static class FileTransferEntry { IFileTransfer fileTransfer; String localFileName; + long startTime; public FileTransferEntry(IFileTransfer fileTransfer, String localFileName) { this.fileTransfer = fileTransfer; this.localFileName = localFileName; + this.startTime = System.currentTimeMillis(); } public FileTransferEntry(IFileTransfer fileTransfer) { @@ -73,31 +87,15 @@ public class FileTransfersView extends ViewPart { return localFileName; } - public boolean equals(Object o) { - if (!(o instanceof FileTransferEntry)) - return false; - FileTransferEntry fte = (FileTransferEntry) o; - // If the other is the same fileTransfer as us - // make sure the localFileName is set - if (fte.fileTransfer.equals(this.fileTransfer)) { - if (localFileName == null) { - localFileName = fte.localFileName; - } else if (fte.localFileName == null) { - fte.localFileName = null; - } - return true; - } - return false; + public long getStartTime() { + return startTime; } - public int hashCode() { - return this.fileTransfer.hashCode(); - } } public static FileTransfersView addTransfer(IFileTransfer transfer) { FileTransferEntry entry = new FileTransferEntry(transfer, null); - transfers.add(entry); + transfers.put(transfer, entry); if (instance != null) { instance.add(entry); } @@ -106,7 +104,7 @@ public class FileTransfersView extends ViewPart { public static FileTransfersView addTransfer(IFileTransfer transfer, String localFileName) { FileTransferEntry entry = new FileTransferEntry(transfer, localFileName); - transfers.add(entry); + transfers.put(transfer, entry); if (instance != null) { instance.add(entry); } @@ -154,19 +152,21 @@ public class FileTransfersView extends ViewPart { viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.VIRTUAL | SWT.FULL_SELECTION); viewer.setContentProvider(new ViewContentProvider()); viewer.setLabelProvider(new ViewLabelProvider()); - viewer.setSorter(new ViewerSorter()); + //viewer.setSorter(new ViewerSorter()); viewer.setInput(getViewSite()); table = viewer.getTable(); for (int i = 0; i < WIDTHS.length; i++) { TableColumn col = new TableColumn(table, SWT.LEFT); col.setText(COLUMNS[i]); + col.setAlignment(SWT.CENTER); col.setWidth(WIDTHS[i]); } - Iterator iterator = transfers.iterator(); + Iterator iterator = transfers.keySet().iterator(); while (iterator.hasNext()) { - add((FileTransferEntry) iterator.next()); + IFileTransfer fileTransfer = (IFileTransfer) iterator.next(); + add((FileTransferEntry) transfers.get(fileTransfer)); } makeActions(); @@ -186,7 +186,8 @@ public class FileTransfersView extends ViewPart { public void update(IFileTransfer transfer) { if (table != null && !table.isDisposed()) { - viewer.update(new FileTransferEntry(transfer), COLUMNS); + FileTransferEntry entry = (FileTransferEntry) transfers.get(transfer); + viewer.update(entry, COLUMNS); } } @@ -221,9 +222,9 @@ public class FileTransfersView extends ViewPart { return; } IStructuredSelection ssel = (IStructuredSelection) sel; - Iterator iterator = ssel.iterator(); - while (iterator.hasNext()) { - FileTransferEntry entry = (FileTransferEntry) iterator.next(); + Object o = ssel.getFirstElement(); + if (o instanceof FileTransferEntry) { + FileTransferEntry entry = (FileTransferEntry) o; IFileTransfer transfer = entry.getFileTransfer(); IFileTransferPausable pausable = (IFileTransferPausable) transfer.getAdapter(IFileTransferPausable.class); if (pausable != null) { @@ -242,9 +243,9 @@ public class FileTransfersView extends ViewPart { return; } IStructuredSelection ssel = (IStructuredSelection) sel; - Iterator iterator = ssel.iterator(); - while (iterator.hasNext()) { - FileTransferEntry entry = (FileTransferEntry) iterator.next(); + Object o = ssel.getFirstElement(); + if (o instanceof FileTransferEntry) { + FileTransferEntry entry = (FileTransferEntry) o; IFileTransfer transfer = entry.getFileTransfer(); IFileTransferPausable pausable = (IFileTransferPausable) transfer.getAdapter(IFileTransferPausable.class); if (pausable != null) { @@ -268,6 +269,7 @@ public class FileTransfersView extends ViewPart { IFileTransfer transfer = entry.getFileTransfer(); transfer.cancel(); viewer.remove(entry); + transfers.remove(entry); } } }; @@ -352,6 +354,17 @@ public class FileTransfersView extends ViewPart { } double percentComplete = transfer.getPercentComplete(); return Double.toString(percentComplete + '%'); + case STARTTIME : + return SDF.format(new Date(entry.getStartTime())); + case ENDTIME : + if (transfer.isDone()) + return SDF.format(new Date()); + return ""; //$NON-NLS-1$ + case RATE : + long fileLength = transfer.getFileLength(); + if (fileLength == -1) + return "N/A"; //$NON-NLS-1$ + return showTransferRate(entry.getStartTime(), fileLength * transfer.getPercentComplete()); } return getText(obj); } @@ -375,4 +388,29 @@ public class FileTransfersView extends ViewPart { return EMPTY_ARRAY; } } + + String showTransferRate(long startTime, double bytesReceived) { + double convertedSize; + String unit; + + double size = (bytesReceived / ((System.currentTimeMillis() + 1 - startTime) / 1000.0)); + + if (size / (1024 * 1024 * 1024) >= 1) { + convertedSize = size / (1024 * 1024 * 1024); + unit = "GB"; //$NON-NLS-1$ + } else if (size / (1024 * 1024) >= 1) { + convertedSize = size / (1024 * 1024); + unit = "MB"; //$NON-NLS-1$ + } else if (size / 1024 >= 1) { + convertedSize = size / 1024; + unit = "KB"; //$NON-NLS-1$ + } else { + convertedSize = size; + unit = "bytes"; //$NON-NLS-1$ + } + + DecimalFormat df = new DecimalFormat(NLS.bind("0.00 {0}/s", unit)); //$NON-NLS-1$ + return df.format(convertedSize); + } + }
\ No newline at end of file diff --git a/framework/bundles/org.eclipse.ecf.filetransfer.ui/src/org/eclipse/ecf/internal/filetransfer/ui/GetFileHandler.java b/framework/bundles/org.eclipse.ecf.filetransfer.ui/src/org/eclipse/ecf/internal/filetransfer/ui/GetFileHandler.java index 977727c44..ef48e0f98 100644 --- a/framework/bundles/org.eclipse.ecf.filetransfer.ui/src/org/eclipse/ecf/internal/filetransfer/ui/GetFileHandler.java +++ b/framework/bundles/org.eclipse.ecf.filetransfer.ui/src/org/eclipse/ecf/internal/filetransfer/ui/GetFileHandler.java @@ -52,7 +52,6 @@ public class GetFileHandler extends AbstractHandler { void completeTransferInView(Shell shell, final IIncomingFileTransfer incoming) { updateTransferInView(shell, incoming); - fileTransfersView = null; } /* (non-Javadoc) |