1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 package org.apache.hc.core5.http.io.entity;
29
30 import java.io.IOException;
31 import java.io.InputStream;
32
33 import org.apache.hc.core5.annotation.Contract;
34 import org.apache.hc.core5.annotation.ThreadingBehavior;
35 import org.apache.hc.core5.http.ContentType;
36 import org.apache.hc.core5.http.impl.io.EmptyInputStream;
37 import org.apache.hc.core5.io.Closer;
38 import org.apache.hc.core5.util.Args;
39
40
41
42
43
44
45 @Contract(threading = ThreadingBehavior.IMMUTABLE_CONDITIONAL)
46 public class BasicHttpEntity extends AbstractHttpEntity {
47
48 private final InputStream content;
49 private final long length;
50
51 public BasicHttpEntity(
52 final InputStream content, final long length, final ContentType contentType, final String contentEncoding,
53 final boolean chunked) {
54 super(contentType, contentEncoding, chunked);
55 this.content = Args.notNull(content, "Content stream");
56 this.length = length;
57 }
58
59 public BasicHttpEntity(
60 final InputStream content, final long length, final ContentType contentType, final String contentEncoding) {
61 this(content, length, contentType, contentEncoding, false);
62 }
63
64 public BasicHttpEntity(final InputStream content, final long length, final ContentType contentType) {
65 this(content, length, contentType, null);
66 }
67
68 public BasicHttpEntity(final InputStream content, final ContentType contentType, final String contentEncoding) {
69 this(content, -1, contentType, contentEncoding);
70 }
71
72 public BasicHttpEntity(final InputStream content, final ContentType contentType) {
73 this(content, -1, contentType, null);
74 }
75
76 public BasicHttpEntity(final InputStream content, final ContentType contentType, final boolean chunked) {
77 this(content, -1, contentType, null, chunked);
78 }
79
80 @Override
81 public final long getContentLength() {
82 return this.length;
83 }
84
85 @Override
86 public final InputStream getContent() throws IllegalStateException {
87 return this.content;
88 }
89
90 @Override
91 public final boolean isRepeatable() {
92 return false;
93 }
94
95 @Override
96 public final boolean isStreaming() {
97 return this.content != null && this.content != EmptyInputStream.INSTANCE;
98 }
99
100 @Override
101 public final void close() throws IOException {
102 Closer.close(content);
103 }
104
105 }