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 package org.apache.hc.core5.http.nio.support;
28
29 import java.io.IOException;
30
31 import org.apache.hc.core5.http.ContentType;
32 import org.apache.hc.core5.http.HttpException;
33 import org.apache.hc.core5.http.HttpResponse;
34 import org.apache.hc.core5.http.HttpStatus;
35 import org.apache.hc.core5.http.message.BasicHttpResponse;
36 import org.apache.hc.core5.http.nio.AsyncEntityProducer;
37 import org.apache.hc.core5.http.nio.AsyncResponseProducer;
38 import org.apache.hc.core5.http.nio.DataStreamChannel;
39 import org.apache.hc.core5.http.nio.ResponseChannel;
40 import org.apache.hc.core5.http.nio.entity.AsyncEntityProducers;
41 import org.apache.hc.core5.http.protocol.HttpContext;
42 import org.apache.hc.core5.util.Args;
43
44
45
46
47
48
49
50 public class BasicResponseProducer implements AsyncResponseProducer {
51
52 private final HttpResponse response;
53 private final AsyncEntityProducer dataProducer;
54
55 public BasicResponseProducer(final HttpResponse response, final AsyncEntityProducer dataProducer) {
56 this.response = Args.notNull(response, "Response");
57 this.dataProducer = dataProducer;
58 }
59
60 public BasicResponseProducer(final HttpResponse response) {
61 this.response = Args.notNull(response, "Response");
62 this.dataProducer = null;
63 }
64
65 public BasicResponseProducer(final int code, final AsyncEntityProducer dataProducer) {
66 this(new BasicHttpResponse(code), dataProducer);
67 }
68
69 public BasicResponseProducer(final HttpResponse response, final String message, final ContentType contentType) {
70 this(response, AsyncEntityProducers.create(message, contentType));
71 }
72
73 public BasicResponseProducer(final HttpResponse response, final String message) {
74 this(response, message, ContentType.TEXT_PLAIN);
75 }
76
77 public BasicResponseProducer(final int code, final String message, final ContentType contentType) {
78 this(new BasicHttpResponse(code), message, contentType);
79 }
80
81 public BasicResponseProducer(final int code, final String message) {
82 this(new BasicHttpResponse(code), message);
83 }
84
85 public BasicResponseProducer(final AsyncEntityProducer dataProducer) {
86 this(HttpStatus.SC_OK, dataProducer);
87 }
88
89 @Override
90 public void sendResponse(final ResponseChannel responseChannel, final HttpContext httpContext) throws HttpException, IOException {
91 responseChannel.sendResponse(response, dataProducer, httpContext);
92 }
93
94 @Override
95 public int available() {
96 return dataProducer != null ? dataProducer.available() : 0;
97 }
98
99 @Override
100 public void produce(final DataStreamChannel channel) throws IOException {
101 if (dataProducer != null) {
102 dataProducer.produce(channel);
103 }
104 }
105
106 @Override
107 public void failed(final Exception cause) {
108 if (dataProducer != null) {
109 dataProducer.failed(cause);
110 }
111 releaseResources();
112 }
113
114 @Override
115 public void releaseResources() {
116 if (dataProducer != null) {
117 dataProducer.releaseResources();
118 }
119 }
120
121 }