-
Notifications
You must be signed in to change notification settings - Fork 180
/
HttpServiceContext.java
94 lines (85 loc) · 3.74 KB
/
HttpServiceContext.java
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
/*
* Copyright © 2018-2019 Apple Inc. and the ServiceTalk project authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.servicetalk.http.api;
import io.servicetalk.transport.api.ServerListenContext;
import static java.util.Objects.requireNonNull;
/**
* A {@link HttpConnectionContext} for use in the {@link HttpService} context.
*/
public abstract class HttpServiceContext implements HttpConnectionContext, ServerListenContext {
private final HttpHeadersFactory headersFactory;
private final HttpResponseFactory factory;
private final StreamingHttpResponseFactory streamingFactory;
private final BlockingStreamingHttpResponseFactory blockingFactory;
/**
* Create a new instance.
*
* @param headersFactory The {@link HttpHeadersFactory} used for API conversions
* @param factory The {@link HttpResponseFactory} used for API conversions
* @param streamingFactory The {@link StreamingHttpResponseFactory} used for API conversions
* @param blockingFactory The {@link BlockingStreamingHttpResponseFactory} used for API conversions
*/
protected HttpServiceContext(final HttpHeadersFactory headersFactory,
final HttpResponseFactory factory,
final StreamingHttpResponseFactory streamingFactory,
final BlockingStreamingHttpResponseFactory blockingFactory) {
this.headersFactory = requireNonNull(headersFactory);
this.factory = requireNonNull(factory);
this.streamingFactory = requireNonNull(streamingFactory);
this.blockingFactory = requireNonNull(blockingFactory);
}
/**
* Copy constructor.
*
* @param other {@link HttpServiceContext} to copy from.
*/
protected HttpServiceContext(final HttpServiceContext other) {
this(other.headersFactory(), other.responseFactory(), other.streamingResponseFactory(),
other.blockingStreamingResponseFactory());
}
/**
* Returns the {@link HttpHeadersFactory} associated with this {@link HttpServiceContext}.
*
* @return {@link HttpHeadersFactory} associated with this {@link HttpServiceContext}.
*/
protected HttpHeadersFactory headersFactory() {
return headersFactory;
}
/**
* Returns the {@link HttpResponseFactory} associated with this {@link HttpServiceContext}.
*
* @return {@link HttpResponseFactory} associated with this {@link HttpServiceContext}.
*/
protected HttpResponseFactory responseFactory() {
return factory;
}
/**
* Returns the {@link StreamingHttpResponseFactory} associated with this {@link HttpServiceContext}.
*
* @return {@link StreamingHttpResponseFactory} associated with this {@link HttpServiceContext}.
*/
protected StreamingHttpResponseFactory streamingResponseFactory() {
return streamingFactory;
}
/**
* Returns the {@link BlockingStreamingHttpResponseFactory} associated with this {@link HttpServiceContext}.
*
* @return {@link BlockingStreamingHttpResponseFactory} associated with this {@link HttpServiceContext}.
*/
protected BlockingStreamingHttpResponseFactory blockingStreamingResponseFactory() {
return blockingFactory;
}
}