1 /*
2 * $Header: /home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/methods/OptionsMethod.java,v 1.12.2.1 2003/08/09 19:36:39 olegk Exp $
3 * $Revision: 1.12.2.1 $
4 * $Date: 2003/08/09 19:36:39 $
5 *
6 * ====================================================================
7 *
8 * The Apache Software License, Version 1.1
9 *
10 * Copyright (c) 1999-2003 The Apache Software Foundation. All rights
11 * reserved.
12 *
13 * Redistribution and use in source and binary forms, with or without
14 * modification, are permitted provided that the following conditions
15 * are met:
16 *
17 * 1. Redistributions of source code must retain the above copyright
18 * notice, this list of conditions and the following disclaimer.
19 *
20 * 2. Redistributions in binary form must reproduce the above copyright
21 * notice, this list of conditions and the following disclaimer in
22 * the documentation and/or other materials provided with the
23 * distribution.
24 *
25 * 3. The end-user documentation included with the redistribution, if
26 * any, must include the following acknowlegement:
27 * "This product includes software developed by the
28 * Apache Software Foundation (http://www.apache.org/)."
29 * Alternately, this acknowlegement may appear in the software itself,
30 * if and wherever such third-party acknowlegements normally appear.
31 *
32 * 4. The names "The Jakarta Project", "Commons", and "Apache Software
33 * Foundation" must not be used to endorse or promote products derived
34 * from this software without prior written permission. For written
35 * permission, please contact apache@apache.org.
36 *
37 * 5. Products derived from this software may not be called "Apache"
38 * nor may "Apache" appear in their names without prior written
39 * permission of the Apache Group.
40 *
41 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
42 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
43 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
44 * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
45 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
46 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
47 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
48 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
49 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
50 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
51 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
52 * SUCH DAMAGE.
53 * ====================================================================
54 *
55 * This software consists of voluntary contributions made by many
56 * individuals on behalf of the Apache Software Foundation. For more
57 * information on the Apache Software Foundation, please see
58 * <http://www.apache.org/>.
59 *
60 * [Additional notices, if required by prior licensing conditions]
61 *
62 */
63
64 package org.apache.commons.httpclient.methods;
65
66 import org.apache.commons.httpclient.Header;
67 import org.apache.commons.httpclient.HttpConnection;
68 import org.apache.commons.httpclient.HttpMethodBase;
69 import org.apache.commons.httpclient.HttpState;
70
71 import org.apache.commons.logging.LogFactory;
72 import org.apache.commons.logging.Log;
73 import java.util.Enumeration;
74 import java.util.StringTokenizer;
75 import java.util.Vector;
76
77
78 /***
79 * Implements the HTTP OPTIONS method.
80 * <p>
81 * The HTTP OPTIONS method is defined in section 9.2 of
82 * <a href="http://www.ietf.org/rfc/rfc2616.txt">RFC2616</a>:
83 * <blockquote>
84 * The OPTIONS method represents a request for information about the
85 * communication options available on the request/response chain
86 * identified by the Request-URI. This method allows the client to
87 * determine the options and/or requirements associated with a resource,
88 * or the capabilities of a server, without implying a resource action
89 * or initiating a resource retrieval.
90 * </blockquote>
91 * </p>
92 *
93 * @author <a href="mailto:remm@apache.org">Remy Maucherat</a>
94 * @author <a href="mailto:mbowler@GargoyleSoftware.com">Mike Bowler</a>
95 * @author <a href="mailto:jsdever@apache.org">Jeff Dever</a>
96 *
97 * @version $Revision: 1.12.2.1 $
98 * @since 1.0
99 */
100 public class OptionsMethod
101 extends HttpMethodBase {
102
103
104 // --------------------------------------------------------- Class Variables
105
106 /*** Log object for this class. */
107 private static final Log LOG = LogFactory.getLog(OptionsMethod.class);
108
109 // ----------------------------------------------------------- Constructors
110
111
112 /***
113 * Method constructor.
114 *
115 * @since 1.0
116 */
117 public OptionsMethod() {
118 }
119
120
121 /***
122 * Constructor specifying a URI.
123 *
124 * @param uri either an absolute or relative URI
125 *
126 * @since 1.0
127 */
128 public OptionsMethod(String uri) {
129 super(uri);
130 }
131
132
133 // ----------------------------------------------------- Instance Variables
134
135
136 /***
137 * Methods allowed.
138 */
139 private Vector methodsAllowed = new Vector();
140
141
142 // --------------------------------------------------------- Public Methods
143
144 /***
145 * Get the name.
146 * @return "OPTIONS"
147 * @since 2.0
148 */
149 public String getName() {
150 return "OPTIONS";
151 }
152
153
154 /***
155 * Is the specified method allowed ?
156 *
157 * @param method The method to check.
158 * @return true if the specified method is allowed.
159 * @since 1.0
160 */
161 public boolean isAllowed(String method) {
162 checkUsed();
163 return methodsAllowed.contains(method);
164 }
165
166
167 /***
168 * Get a list of allowed methods.
169 * @return An enumeration of all the allowed methods.
170 *
171 * @since 1.0
172 */
173 public Enumeration getAllowedMethods() {
174 checkUsed();
175 return methodsAllowed.elements();
176 }
177
178
179 // ----------------------------------------------------- HttpMethod Methods
180
181 /***
182 * <p>
183 * This implementation will parse the <tt>Allow</tt> header to obtain
184 * the set of methods supported by the resource identified by the Request-URI.
185 * </p>
186 *
187 * @param state the {@link HttpState state} information associated with this method
188 * @param conn the {@link HttpConnection connection} used to execute
189 * this HTTP method
190 *
191 * @see #readResponse
192 * @see #readResponseHeaders
193 * @since 2.0
194 */
195 protected void processResponseHeaders(HttpState state, HttpConnection conn) {
196 LOG.trace("enter OptionsMethod.processResponseHeaders(HttpState, HttpConnection)");
197
198 Header allowHeader = getResponseHeader("allow");
199 if (allowHeader != null) {
200 String allowHeaderValue = allowHeader.getValue();
201 StringTokenizer tokenizer =
202 new StringTokenizer(allowHeaderValue, ",");
203 while (tokenizer.hasMoreElements()) {
204 String methodAllowed =
205 tokenizer.nextToken().trim().toUpperCase();
206 methodsAllowed.addElement(methodAllowed);
207 }
208 }
209 }
210
211 /***
212 * Return true if the method needs a content-length header in the request.
213 *
214 * @return true if a content-length header will be expected by the server
215 *
216 * @since 1.0
217 */
218 public boolean needContentLength() {
219 return false;
220 }
221
222
223 }
This page was automatically generated by Maven