package tw.com.providers; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.amazonaws.event.ProgressEvent; import com.amazonaws.event.ProgressEventType; import com.amazonaws.event.ProgressListener; public class UploadProgressListener implements ProgressListener { private static final Logger logger = LoggerFactory.getLogger(UploadProgressListener.class); private static final long CHUNK = 10; private long total; private long done; private long chunk; @Override public void progressChanged(ProgressEvent progressEvent) { try { processReceivedEvent(progressEvent); } catch(Exception exception) { logger.error("Error handling S3 progress event ", exception); } } private void processReceivedEvent(ProgressEvent progressEvent) { ProgressEventType eventType = progressEvent.getEventType(); long bytesTransferred = progressEvent.getBytesTransferred(); switch(eventType) { case REQUEST_BYTE_TRANSFER_EVENT: done += bytesTransferred; chunk -= bytesTransferred; if (chunk<=0) { logger.info(String.format("Sent %s of %s bytes", done, total)); chunk = total / CHUNK; } break; case TRANSFER_COMPLETED_EVENT: logger.info("Transfer finished"); break; case TRANSFER_FAILED_EVENT: logger.error("Transfer failed"); break; case TRANSFER_STARTED_EVENT: done = 0; logger.info("Transfer started"); break; case REQUEST_CONTENT_LENGTH_EVENT: total = progressEvent.getBytes(); chunk = total / CHUNK; logger.info("Length is " + progressEvent.getBytes()); break; case CLIENT_REQUEST_STARTED_EVENT: case HTTP_REQUEST_STARTED_EVENT: case HTTP_REQUEST_COMPLETED_EVENT: case HTTP_RESPONSE_STARTED_EVENT: case HTTP_RESPONSE_COMPLETED_EVENT: case CLIENT_REQUEST_SUCCESS_EVENT: // no-op break; default: logger.debug("Transfer event " + progressEvent.getEventType() + " transfered bytes was " + bytesTransferred); break; } } }