All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.soundcloud.api.CountingMultipartEntity Maven / Gradle / Ivy

package com.soundcloud.api;

import java.io.FilterOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import org.apache.http.Header;
import org.apache.http.HttpEntity;

class CountingMultipartEntity implements HttpEntity {
    private HttpEntity mDelegate;
    private Request.TransferProgressListener mListener;

    public CountingMultipartEntity(HttpEntity delegate,
                                   Request.TransferProgressListener listener) {
        super();
        mDelegate = delegate;
        mListener = listener;
    }

    public void consumeContent() throws IOException {
        mDelegate.consumeContent();
    }

    public InputStream getContent() throws IOException, IllegalStateException {
        return mDelegate.getContent();
    }

    public Header getContentEncoding() {
        return mDelegate.getContentEncoding();
    }

    public long getContentLength() {
        return mDelegate.getContentLength();
    }

    public Header getContentType() {
        return mDelegate.getContentType();
    }

    public boolean isChunked() {
        return mDelegate.isChunked();
    }

    public boolean isRepeatable() {
        return mDelegate.isRepeatable();
    }

    public boolean isStreaming() {
        return mDelegate.isStreaming();
    }

    public void writeTo(OutputStream outstream) throws IOException {
        mDelegate.writeTo(new CountingOutputStream(outstream, mListener));
    }

    private static class CountingOutputStream extends FilterOutputStream {
        private final Request.TransferProgressListener mListener;
        private long mTransferred = 0;

        public CountingOutputStream(final OutputStream out, final Request.TransferProgressListener listener) {
            super(out);
            mListener = listener;
        }

        @Override
        public void write(byte[] b, int off, int len) throws IOException {
            out.write(b, off, len);
            mTransferred += len;
            if (mListener != null) mListener.transferred(mTransferred);
        }

        @Override
        public void write(int b) throws IOException {
            out.write(b);
            mTransferred++;
            if (mListener != null) mListener.transferred(mTransferred);
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy