1 /*******************************************************************************
2 * Copyright (c) 2011 Michael Mimo Moratti.
3 *
4 * Michael Mimo Moratti licenses this file to you under the Apache License, version 2.0
5 * (the "License"); you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at:
7 * http://www.apache.org/licenses/LICENSE-2.0
8 * Unless required by applicable law or agreed to in writing, software
9 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
10 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
11 * License for the specific language governing permissions and limitations
12 * under the License.
13 *******************************************************************************/
14 package ch.mimo.netty.handler.codec.icap;
15
16 import java.util.List;
17 import java.util.Map;
18 import java.util.Set;
19
20 import org.jboss.netty.handler.codec.http.HttpRequest;
21 import org.jboss.netty.handler.codec.http.HttpResponse;
22
23 /**
24 * An ICAP message that contains common operations for @see {@link IcapRequest} and @see {@link IcapResponse}.
25 *
26 * @author Michael Mimo Moratti (mimo@mimo.ch)
27 *
28 */
29 public interface IcapMessage {
30
31 /**
32 * Returns the header value with the specified header name. If there are
33 * more than one header value for the specified header name, the first
34 * value is returned.
35 *
36 * @return the header value or {@code null} if there is no such header
37 *
38 */
39 String getHeader(String name);
40
41 /**
42 * Returns the header values with the specified header name.
43 *
44 * @return the {@link List} of header values. An empty list if there is no
45 * such header.
46 */
47 Set<String> getHeaders(String name);
48
49 /**
50 * Returns the all header names and values that this message contains.
51 *
52 * @return the {@link List} of the header name-value pairs. An empty list
53 * if there is no header in this message.
54 */
55 Set<Map.Entry<String, String>> getHeaders();
56
57 /**
58 * @param name header name
59 * @return {@code true} if and only if there is a header with the specified
60 * header name.
61 */
62 boolean containsHeader(String name);
63
64 /**
65 * @return {@link Set} of all header names that this message contains.
66 */
67 Set<String> getHeaderNames();
68
69 /**
70 * Adds a new header with the specified name and value.
71 * @param name header name
72 * @param value for the given name
73 * @return self in order to chain the method calls
74 */
75 IcapMessage addHeader(String name, Object value);
76
77 /**
78 * Sets a new header with the specified name and value. If there is an
79 * existing header with the same name, the existing header is removed.
80 * @param name header name
81 * @param value for the given name
82 * @return self in order to chain the method calls
83 */
84 IcapMessage setHeader(String name, Object value);
85
86 /**
87 * Sets a new header with the specified name and values. If there is an
88 * existing header with the same name, the existing header is removed.
89 * @param name header name
90 * @param values for the given name
91 * @return self in order to chain the method calls
92 */
93 IcapMessage setHeader(String name, Iterable<?> values);
94
95 /**
96 * Removes the header with the specified name.
97 * @return self in order to chain the method calls
98 */
99 IcapMessage removeHeader(String name);
100
101 /**
102 * @return the @see {@link Integer} preview header value.
103 */
104 int getPreviewAmount();
105
106 /**
107 * Removes all headers from this message.
108 * @return self in order to chain the method calls
109 */
110 IcapMessage clearHeaders();
111
112 /**
113 * @return the protocol version of this message.
114 */
115 IcapVersion getProtocolVersion();
116
117 /**
118 * Sets the protocol version of this message.
119 * @param version @see {@link IcapVersion}
120 * @return self in order to chain the method calls
121 */
122 IcapMessage setProtocolVersion(IcapVersion version);
123
124 /**
125 * @return whether this message is a preview of the actual message.
126 */
127 boolean isPreviewMessage();
128
129 /**
130 * @return true if a http request was delivered.
131 */
132 boolean containsHttpRequest();
133
134 /**
135 * @return the actual http request instance @see {@link HttpRequest}
136 */
137 HttpRequest getHttpRequest();
138
139 /**
140 * @param httpRequest
141 * @return self in order to chain the method calls
142 */
143 IcapMessage setHttpRequest(HttpRequest httpRequest);
144
145 /**
146 * @return true if a http response was delivered.
147 */
148 boolean containsHttpResponse();
149
150 /**
151 * @return the actual http response instance @see {@link HttpResponse}
152 */
153 HttpResponse getHttpResponse();
154
155 /**
156 * Adds a @see {@link HttpResponse} to the Icap message.
157 *
158 * @param response the @see {@link HttpResponse}
159 * @return self in order to chain the method calls
160 */
161 IcapMessage setHttpResponse(HttpResponse response);
162
163 /**
164 * Sets the @see {@link Encapsulated} Encapsulation header for this message
165 * @param encapsulated @see {@link Encapsulated} instance
166 * @return self in order to chain the method calls
167 */
168 IcapMessage setEncapsulatedHeader(Encapsulated encapsulated);
169
170 /**
171 * @return @see {@link Encapsulated} Encapsulated header value
172 */
173 Encapsulated getEncapsulatedHeader();
174
175 /**
176 * Sets the indication that this icap message contains a body of some kind.
177 * @param body @see {@link IcapMessageElementEnum}
178 * @return self in order to chain the method calls
179 */
180 IcapMessage setBody(IcapMessageElementEnum body);
181
182 /**
183 * @return @see {@link IcapMessageElementEnum} message body indicator.
184 */
185 IcapMessageElementEnum getBodyType();
186 }