| /******************************************************************************* |
| * Copyright (c) 2010, 2013 Sonatype, 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: |
| * Sonatype, Inc. - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.tea.library.build.tasks.maven; |
| |
| import java.io.PrintStream; |
| import java.text.DecimalFormat; |
| import java.text.DecimalFormatSymbols; |
| import java.util.Locale; |
| |
| import org.eclipse.aether.transfer.AbstractTransferListener; |
| import org.eclipse.aether.transfer.MetadataNotFoundException; |
| import org.eclipse.aether.transfer.TransferEvent; |
| import org.eclipse.aether.transfer.TransferResource; |
| |
| /** |
| * A simplistic transfer listener that logs uploads/downloads to the console. |
| */ |
| public class ConsoleTransferListener extends AbstractTransferListener { |
| |
| private final PrintStream out; |
| |
| public ConsoleTransferListener(PrintStream out) { |
| this.out = (out != null) ? out : System.out; |
| } |
| |
| @Override |
| public void transferInitiated(TransferEvent event) { |
| String message = event.getRequestType() == TransferEvent.RequestType.PUT ? "Uploading" : "Downloading"; |
| |
| out.println(message + ": " + event.getResource().getRepositoryUrl() + event.getResource().getResourceName()); |
| } |
| |
| @Override |
| public void transferProgressed(TransferEvent event) { |
| // not so interesting for debug |
| } |
| |
| @Override |
| public void transferSucceeded(TransferEvent event) { |
| TransferResource resource = event.getResource(); |
| long contentLength = event.getTransferredBytes(); |
| if (contentLength >= 0) { |
| String type = (event.getRequestType() == TransferEvent.RequestType.PUT ? "Uploaded" : "Downloaded"); |
| String len = contentLength >= 1024 ? toKB(contentLength) + " KB" : contentLength + " B"; |
| |
| String throughput = ""; |
| long duration = System.currentTimeMillis() - resource.getTransferStartTime(); |
| if (duration > 0) { |
| long bytes = contentLength - resource.getResumeOffset(); |
| DecimalFormat format = new DecimalFormat("0.0", new DecimalFormatSymbols(Locale.ENGLISH)); |
| double kbPerSec = (bytes / 1024.0) / (duration / 1000.0); |
| throughput = " at " + format.format(kbPerSec) + " KB/sec"; |
| } |
| |
| out.println(type + ": " + resource.getRepositoryUrl() + resource.getResourceName() + " (" + len + throughput + ")"); |
| } |
| } |
| |
| @Override |
| public void transferFailed(TransferEvent event) { |
| TransferResource resource = event.getResource(); |
| String type = (event.getRequestType() == TransferEvent.RequestType.PUT ? "Failed Upload" : "Failed Download"); |
| out.println(type + ": " + resource.getRepositoryUrl() + resource.getResourceName()); |
| if (!(event.getException() instanceof MetadataNotFoundException)) { |
| event.getException().printStackTrace(out); |
| } |
| } |
| |
| @Override |
| public void transferCorrupted(TransferEvent event) { |
| event.getException().printStackTrace(out); |
| } |
| |
| protected long toKB(long bytes) { |
| return (bytes + 1023) / 1024; |
| } |
| |
| } |