1 /* 2 * $HeadURL: http://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/client/methods/HttpOptions.java $ 3 * $Revision: 664505 $ 4 * $Date: 2008-06-08 06:21:20 -0700 (Sun, 08 Jun 2008) $ 5 * 6 * ==================================================================== 7 * Licensed to the Apache Software Foundation (ASF) under one 8 * or more contributor license agreements. See the NOTICE file 9 * distributed with this work for additional information 10 * regarding copyright ownership. The ASF licenses this file 11 * to you under the Apache License, Version 2.0 (the 12 * "License"); you may not use this file except in compliance 13 * with the License. You may obtain a copy of the License at 14 * 15 * http://www.apache.org/licenses/LICENSE-2.0 16 * 17 * Unless required by applicable law or agreed to in writing, 18 * software distributed under the License is distributed on an 19 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 20 * KIND, either express or implied. See the License for the 21 * specific language governing permissions and limitations 22 * under the License. 23 * ==================================================================== 24 * 25 * This software consists of voluntary contributions made by many 26 * individuals on behalf of the Apache Software Foundation. For more 27 * information on the Apache Software Foundation, please see 28 * <http://www.apache.org/>. 29 * 30 */ 31 32 package org.apache.http.client.methods; 33 34 import java.net.URI; 35 import java.util.HashSet; 36 import java.util.Set; 37 38 import org.apache.http.Header; 39 import org.apache.http.HeaderElement; 40 import org.apache.http.HeaderIterator; 41 import org.apache.http.HttpResponse; 42 43 /** 44 * HTTP OPTIONS method. 45 * <p> 46 * The HTTP OPTIONS method is defined in section 9.2 of 47 * <a href="http://www.ietf.org/rfc/rfc2616.txt">RFC2616</a>: 48 * <blockquote> 49 * The OPTIONS method represents a request for information about the 50 * communication options available on the request/response chain 51 * identified by the Request-URI. This method allows the client to 52 * determine the options and/or requirements associated with a resource, 53 * or the capabilities of a server, without implying a resource action 54 * or initiating a resource retrieval. 55 * </blockquote> 56 * </p> 57 * 58 * @version $Revision: 664505 $ 59 * 60 * @since 4.0 61 */ 62 public class HttpOptions extends HttpRequestBase { 63 64 public final static String METHOD_NAME = "OPTIONS"; 65 HttpOptions()66 public HttpOptions() { 67 super(); 68 } 69 HttpOptions(final URI uri)70 public HttpOptions(final URI uri) { 71 super(); 72 setURI(uri); 73 } 74 75 /** 76 * @throws IllegalArgumentException if the uri is invalid. 77 */ HttpOptions(final String uri)78 public HttpOptions(final String uri) { 79 super(); 80 setURI(URI.create(uri)); 81 } 82 83 @Override getMethod()84 public String getMethod() { 85 return METHOD_NAME; 86 } 87 getAllowedMethods(final HttpResponse response)88 public Set<String> getAllowedMethods(final HttpResponse response) { 89 if (response == null) { 90 throw new IllegalArgumentException("HTTP response may not be null"); 91 } 92 93 HeaderIterator it = response.headerIterator("Allow"); 94 Set<String> methods = new HashSet<String>(); 95 while (it.hasNext()) { 96 Header header = it.nextHeader(); 97 HeaderElement[] elements = header.getElements(); 98 for (HeaderElement element : elements) { 99 methods.add(element.getName()); 100 } 101 } 102 return methods; 103 } 104 105 } 106