/src/main/java/com/soundcloud/api/CountingMultipartEntity.java

https://bitbucket.org/derekverlee/soundcould-java-api-wrapper · Java · 81 lines · 64 code · 17 blank · 0 comment · 4 complexity · 9073e86b9ff4c38d93813054fb996c92 MD5 · raw file

  1. package com.soundcloud.api;
  2. import java.io.FilterOutputStream;
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import java.io.OutputStream;
  6. import org.apache.http.Header;
  7. import org.apache.http.HttpEntity;
  8. class CountingMultipartEntity implements HttpEntity {
  9. private HttpEntity mDelegate;
  10. private Request.TransferProgressListener mListener;
  11. public CountingMultipartEntity(HttpEntity delegate,
  12. Request.TransferProgressListener listener) {
  13. super();
  14. mDelegate = delegate;
  15. mListener = listener;
  16. }
  17. public void consumeContent() throws IOException {
  18. mDelegate.consumeContent();
  19. }
  20. public InputStream getContent() throws IOException, IllegalStateException {
  21. return mDelegate.getContent();
  22. }
  23. public Header getContentEncoding() {
  24. return mDelegate.getContentEncoding();
  25. }
  26. public long getContentLength() {
  27. return mDelegate.getContentLength();
  28. }
  29. public Header getContentType() {
  30. return mDelegate.getContentType();
  31. }
  32. public boolean isChunked() {
  33. return mDelegate.isChunked();
  34. }
  35. public boolean isRepeatable() {
  36. return mDelegate.isRepeatable();
  37. }
  38. public boolean isStreaming() {
  39. return mDelegate.isStreaming();
  40. }
  41. public void writeTo(OutputStream outstream) throws IOException {
  42. mDelegate.writeTo(new CountingOutputStream(outstream, mListener));
  43. }
  44. private static class CountingOutputStream extends FilterOutputStream {
  45. private final Request.TransferProgressListener mListener;
  46. private long mTransferred = 0;
  47. public CountingOutputStream(final OutputStream out, final Request.TransferProgressListener listener) {
  48. super(out);
  49. mListener = listener;
  50. }
  51. @Override
  52. public void write(byte[] b, int off, int len) throws IOException {
  53. out.write(b, off, len);
  54. mTransferred += len;
  55. if (mListener != null) mListener.transferred(mTransferred);
  56. }
  57. @Override
  58. public void write(int b) throws IOException {
  59. out.write(b);
  60. mTransferred++;
  61. if (mListener != null) mListener.transferred(mTransferred);
  62. }
  63. }
  64. }