TransfertListener.java
package org.docascode.api.listener;
import org.docascode.api.event.Event;
import org.eclipse.aether.transfer.AbstractTransferListener;
import org.eclipse.aether.transfer.TransferCancelledException;
import org.eclipse.aether.transfer.TransferEvent;
import org.eclipse.aether.transfer.TransferResource;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
public class TransfertListener extends AbstractTransferListener implements EventListener {
@Override
public void transferInitiated( TransferEvent event )
throws TransferCancelledException
{
String msg = event.getRequestType() == TransferEvent.RequestType.PUT ? "Uploading" : "Downloading";
msg += " " + event.getResource().getRepositoryUrl() + event.getResource().getResourceName();
Event e = new Event(this);
e.setMessage(msg);
fireEvent(e);
}
@Override
public void transferCorrupted( TransferEvent event )
throws TransferCancelledException
{
TransferResource resource = event.getResource();
String msg = event.getException().getMessage() + " for " + resource.getRepositoryUrl()
+ resource.getResourceName();
Event e = new Event(this);
e.setMessage(msg);
fireEvent(e);
}
@Override
public void transferSucceeded( TransferEvent event )
{
String msg = event.getRequestType() == TransferEvent.RequestType.PUT ? "Uploaded" : "Downloaded";
msg += " " + event.getResource().getRepositoryUrl() + event.getResource().getResourceName();
long contentLength = event.getTransferredBytes();
if ( contentLength >= 0 )
{
String len = contentLength >= 1024 ? ( ( contentLength + 1023 ) / 1024 ) + " KB" : contentLength + " B";
String throughput = "";
long duration = System.currentTimeMillis() - event.getResource().getTransferStartTime();
if ( duration > 0 )
{
DecimalFormat format = new DecimalFormat( "0.0", new DecimalFormatSymbols( Locale.ENGLISH ) );
double kbPerSec = ( contentLength / 1024.0 ) / ( duration / 1000.0 );
throughput = " at " + format.format( kbPerSec ) + " KB/sec";
}
msg += " (" + len + throughput + ")";
}
Event e = new Event(this);
e.setMessage(msg);
fireEvent(e);
}
private List<EventListener> listeners = new ArrayList<>();
public TransfertListener addListener(EventListener listener){
if (!this.listeners.contains(listener)) {
this.listeners.add(listener);
}
return this;
}
@Override
public void fireEvent(Event e){
for (EventListener l : this.listeners){
l.fireEvent(e);
}
}
}