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 }