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