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
17
18 public class MultiPartEntityBuilder implements EntityBuilder {
19 private final HttpEntity apacheMultipartEntity;
20
21
22
23
24 @Deprecated
25 public MultiPartEntityBuilder(final MultipartEntity multipartEntity) {
26 this.apacheMultipartEntity = multipartEntity;
27 }
28
29
30
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 }