michael@0: /* michael@0: * ==================================================================== michael@0: * Licensed to the Apache Software Foundation (ASF) under one michael@0: * or more contributor license agreements. See the NOTICE file michael@0: * distributed with this work for additional information michael@0: * regarding copyright ownership. The ASF licenses this file michael@0: * to you under the Apache License, Version 2.0 (the michael@0: * "License"); you may not use this file except in compliance michael@0: * with the License. You may obtain a copy of the License at michael@0: * michael@0: * http://www.apache.org/licenses/LICENSE-2.0 michael@0: * michael@0: * Unless required by applicable law or agreed to in writing, michael@0: * software distributed under the License is distributed on an michael@0: * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY michael@0: * KIND, either express or implied. See the License for the michael@0: * specific language governing permissions and limitations michael@0: * under the License. michael@0: * ==================================================================== michael@0: * michael@0: * This software consists of voluntary contributions made by many michael@0: * individuals on behalf of the Apache Software Foundation. For more michael@0: * information on the Apache Software Foundation, please see michael@0: * . michael@0: * michael@0: */ michael@0: michael@0: package ch.boye.httpclientandroidlib.impl; michael@0: michael@0: import ch.boye.httpclientandroidlib.HttpRequest; michael@0: import ch.boye.httpclientandroidlib.HttpRequestFactory; michael@0: import ch.boye.httpclientandroidlib.MethodNotSupportedException; michael@0: import ch.boye.httpclientandroidlib.RequestLine; michael@0: import ch.boye.httpclientandroidlib.message.BasicHttpEntityEnclosingRequest; michael@0: import ch.boye.httpclientandroidlib.message.BasicHttpRequest; michael@0: michael@0: /** michael@0: * Default factory for creating {@link HttpRequest} objects. michael@0: * michael@0: * @since 4.0 michael@0: */ michael@0: public class DefaultHttpRequestFactory implements HttpRequestFactory { michael@0: michael@0: private static final String[] RFC2616_COMMON_METHODS = { michael@0: "GET" michael@0: }; michael@0: michael@0: private static final String[] RFC2616_ENTITY_ENC_METHODS = { michael@0: "POST", michael@0: "PUT" michael@0: }; michael@0: michael@0: private static final String[] RFC2616_SPECIAL_METHODS = { michael@0: "HEAD", michael@0: "OPTIONS", michael@0: "DELETE", michael@0: "TRACE", michael@0: "CONNECT" michael@0: }; michael@0: michael@0: michael@0: public DefaultHttpRequestFactory() { michael@0: super(); michael@0: } michael@0: michael@0: private static boolean isOneOf(final String[] methods, final String method) { michael@0: for (int i = 0; i < methods.length; i++) { michael@0: if (methods[i].equalsIgnoreCase(method)) { michael@0: return true; michael@0: } michael@0: } michael@0: return false; michael@0: } michael@0: michael@0: public HttpRequest newHttpRequest(final RequestLine requestline) michael@0: throws MethodNotSupportedException { michael@0: if (requestline == null) { michael@0: throw new IllegalArgumentException("Request line may not be null"); michael@0: } michael@0: String method = requestline.getMethod(); michael@0: if (isOneOf(RFC2616_COMMON_METHODS, method)) { michael@0: return new BasicHttpRequest(requestline); michael@0: } else if (isOneOf(RFC2616_ENTITY_ENC_METHODS, method)) { michael@0: return new BasicHttpEntityEnclosingRequest(requestline); michael@0: } else if (isOneOf(RFC2616_SPECIAL_METHODS, method)) { michael@0: return new BasicHttpRequest(requestline); michael@0: } else { michael@0: throw new MethodNotSupportedException(method + " method not supported"); michael@0: } michael@0: } michael@0: michael@0: public HttpRequest newHttpRequest(final String method, final String uri) michael@0: throws MethodNotSupportedException { michael@0: if (isOneOf(RFC2616_COMMON_METHODS, method)) { michael@0: return new BasicHttpRequest(method, uri); michael@0: } else if (isOneOf(RFC2616_ENTITY_ENC_METHODS, method)) { michael@0: return new BasicHttpEntityEnclosingRequest(method, uri); michael@0: } else if (isOneOf(RFC2616_SPECIAL_METHODS, method)) { michael@0: return new BasicHttpRequest(method, uri); michael@0: } else { michael@0: throw new MethodNotSupportedException(method michael@0: + " method not supported"); michael@0: } michael@0: } michael@0: michael@0: }