43 lines
1.3 KiB
Java
43 lines
1.3 KiB
Java
package org.gcube.portlets.widgets.fileupload.server;
|
|
|
|
|
|
import org.apache.commons.fileupload.ProgressListener;
|
|
import org.gcube.portlets.widgets.fileupload.shared.event.UploadProgressChangeEvent;
|
|
|
|
public final class UploadProgressListener implements ProgressListener {
|
|
|
|
private static final double COMPLETE_PERECENTAGE = 100d;
|
|
private int percentage = -1;
|
|
private String fileName;
|
|
private String absolutePath;
|
|
private UploadProgress uploadProgress;
|
|
|
|
public UploadProgressListener(final String fileName, final UploadProgress uploadProgress, final String absolutePath) {
|
|
this.fileName = fileName;
|
|
this.uploadProgress = uploadProgress;
|
|
this.absolutePath = absolutePath;
|
|
}
|
|
|
|
@Override
|
|
public void update(final long bytesRead, final long totalBytes, final int items) {
|
|
|
|
int percentage = (int) Math.floor(((double) bytesRead / (double) totalBytes) * COMPLETE_PERECENTAGE);
|
|
|
|
if (this.percentage == percentage) {
|
|
return;
|
|
}
|
|
|
|
this.percentage = percentage;
|
|
|
|
UploadProgressChangeEvent event = new UploadProgressChangeEvent();
|
|
event.setFilename(this.fileName);
|
|
event.setPercentage(percentage);
|
|
event.setAbsolutePath(this.absolutePath);
|
|
|
|
synchronized (this.uploadProgress) {
|
|
this.uploadProgress.add(event);
|
|
this.uploadProgress.notifyAll();
|
|
}
|
|
}
|
|
}
|