/*******************************************************************************
* Copyright (c) 2012-2017 Codenvy, S.A.
* 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:
* Codenvy, S.A. - initial API and implementation
*******************************************************************************/
package org.eclipse.che.maven.server;
import org.eclipse.aether.transfer.TransferCancelledException;
import org.eclipse.aether.transfer.TransferEvent;
import org.eclipse.aether.transfer.TransferListener;
import org.eclipse.aether.transfer.TransferResource;
import org.eclipse.che.commons.lang.Size;
import java.io.File;
import java.rmi.RemoteException;
/**
* @author Evgen Vidolob
*/
public class ArtifactTransferListener implements TransferListener {
private MavenServerProgressNotifierImpl notifier;
public ArtifactTransferListener(MavenServerProgressNotifierImpl notifier) {
this.notifier = notifier;
}
private String getMassage(TransferEvent event) {
TransferResource resource = event.getResource();
File file = resource.getFile();
String repo = " [" + resource.getRepositoryUrl() + "]";
if (file == null) {
return resource.getResourceName() + repo;
} else {
return file.getName() + repo;
}
}
@Override
public void transferInitiated(TransferEvent transferEvent) throws TransferCancelledException {
try {
notifier.setPercentUndefined(true);
notifier.setText(getMassage(transferEvent));
} catch (RemoteException e) {
throw new RuntimeRemoteException(e);
}
}
@Override
public void transferStarted(TransferEvent transferEvent) throws TransferCancelledException {
transferProgressed(transferEvent);
}
@Override
public void transferProgressed(TransferEvent transferEvent) throws TransferCancelledException {
TransferResource resource = transferEvent.getResource();
long contentLength = resource.getContentLength();
String sizeString;
if (contentLength <= 0) {
sizeString = Size.toHumanSize(transferEvent.getTransferredBytes()) + "/ ?";
} else {
sizeString = Size.toHumanSize(transferEvent.getTransferredBytes()) + " / " + Size.toHumanSize(contentLength);
}
try {
notifier.setText(sizeString);
if (contentLength <= 0) {
notifier.setPercentUndefined(true);
} else {
notifier.setPercentUndefined(false);
notifier.setPercent((double)transferEvent.getTransferredBytes() / (double)contentLength);
}
} catch (RemoteException e) {
throw new RuntimeRemoteException(e);
}
}
@Override
public void transferCorrupted(TransferEvent transferEvent) throws TransferCancelledException {
transferFailed(transferEvent);
}
@Override
public void transferSucceeded(TransferEvent transferEvent) {
try {
notifier.setText("Downloaded: " + getMassage(transferEvent));
notifier.setPercentUndefined(true);
} catch (RemoteException e) {
throw new RuntimeRemoteException(e);
}
}
@Override
public void transferFailed(TransferEvent transferEvent) {
try {
notifier.setText("Download failed: " + getMassage(transferEvent));
notifier.setPercentUndefined(true);
} catch (RemoteException e) {
throw new RuntimeRemoteException(e);
}
}
}