View Javadoc

1   package com.atlassian.httpclient.apache.httpcomponents;
2   
3   import com.atlassian.httpclient.api.EntityBuilder;
4   import com.google.common.collect.Maps;
5   import org.apache.http.Header;
6   import org.apache.http.HttpEntity;
7   import org.apache.http.entity.mime.MultipartEntity;
8   
9   import java.io.ByteArrayInputStream;
10  import java.io.ByteArrayOutputStream;
11  import java.io.IOException;
12  import java.io.InputStream;
13  import java.util.Map;
14  
15  /**
16   * Builder for HttpEntities with multipart/form data.
17   */
18  public class MultiPartEntityBuilder implements EntityBuilder {
19      private final HttpEntity apacheMultipartEntity;
20  
21      /**
22       * @deprecated since 0.22. Use {@link #MultiPartEntityBuilder(org.apache.http.HttpEntity)} instead.
23       */
24      @Deprecated
25      public MultiPartEntityBuilder(final MultipartEntity multipartEntity) {
26          this.apacheMultipartEntity = multipartEntity;
27      }
28  
29      /**
30       * @since 0.22
31       */
32      public MultiPartEntityBuilder(final HttpEntity multipartEntity) {
33          this.apacheMultipartEntity = multipartEntity;
34      }
35  
36      private static class MultiPartEntity implements Entity {
37          private final Map<String, String> headers;
38          private final InputStream inputStream;
39  
40          public MultiPartEntity(Map<String, String> headers, InputStream inputStream) {
41              this.headers = headers;
42              this.inputStream = inputStream;
43          }
44  
45          @Override
46          public Map<String, String> getHeaders() {
47              return this.headers;
48          }
49  
50          @Override
51          public InputStream getInputStream() {
52              return this.inputStream;
53          }
54      }
55  
56      @Override
57      public Entity build() {
58          try {
59              final ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
60              apacheMultipartEntity.writeTo(outputStream);
61              final InputStream inputStream = new ByteArrayInputStream(outputStream.toByteArray());
62              final Header header = apacheMultipartEntity.getContentType();
63              final Map<String, String> headers = Maps.newHashMap();
64              headers.put(header.getName(), header.getValue());
65              return new MultiPartEntity(headers, inputStream);
66          } catch (IOException e) {
67              throw new RuntimeException(e);
68          }
69      }
70  }