All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.joseki.http.HttpUtils Maven / Gradle / Ivy

/*
 * (c) Copyright 2004, 2005, 2006, 2007, 2008, 2009 Hewlett-Packard Development Company, LP
 * All rights reserved.
 * [See end of file]
 */

package org.joseki.http;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.joseki.util.Convert;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/** org.joseki.server.http.HttpUtils
 * 
 * @author Andy Seaborne
 * @version $Id: HttpUtils.java,v 1.8 2009/04/24 14:30:44 andy_seaborne Exp $
 */

public class HttpUtils
{
    private static Logger log = LoggerFactory.getLogger(HttpUtils.class) ;

    /// Relevant headers:
    //  "Accept", "Accept-Encoding", "Accept-Charset"
    // Setting: Content-type, Content-Encoding
    
    // More complex preferences matching would be to weight the prefs and maximze
    // accept q * pref q.  No need to be that complicated at the moment.
    
    public static AcceptItem chooseCharset(HttpServletRequest httpRequest,
                                           AcceptList myPrefs,
                                           AcceptItem defaultAcceptItem)
    {
        String a = httpRequest.getHeader("Accept-Charset") ;
        if ( log.isDebugEnabled() )
            log.debug("Accept-Charset request: "+a) ;
        
        AcceptItem item = choose(a, myPrefs, defaultAcceptItem) ;
        
        if ( log.isDebugEnabled() )
            log.debug("Charset chosen: "+item) ;

        return item ;
    }
    
    public static AcceptItem chooseContentType(HttpServletRequest httpRequest,
                                               AcceptList myPrefs,
                                               AcceptItem defaultAcceptItem)
    {
        String a = httpRequest.getHeader("Accept") ;
        if ( log.isDebugEnabled() )
            log.debug("Accept request: "+a) ;
        
        AcceptItem item = choose(a, myPrefs, defaultAcceptItem) ;

        if ( log.isDebugEnabled() )
            log.debug("Content type chosen: "+item) ;

        return item ;
    }
        
    public static AcceptItem choose(String headerString, AcceptList myPrefs,
                                    AcceptItem defaultAcceptItem)
    {
        if ( headerString == null )
            return defaultAcceptItem ;
        
        AcceptList headerList = new AcceptList(headerString) ;
        
        if ( myPrefs == null )
            return headerList.first() ;

        AcceptItem i = AcceptList.match(headerList, myPrefs) ;
        if ( i == null )
            return defaultAcceptItem ;
        return i ;
    }
    
    
    public static String match(String headerString, String str)
    {
        AcceptList l = new AcceptList(headerString) ;
        AcceptItem aItem = new AcceptItem(str) ;
        AcceptItem m = l.match(aItem) ;
        if ( m == null )
            return null ;
        return m.toHeaderString() ;
    }
    
    public static boolean accept(String headerString, String str)
    {
        AcceptList l = new AcceptList(headerString) ;
        AcceptItem aItem = new AcceptItem(str) ;
        return l.accepts(aItem) ;
    }
    
    static String fmtRequest(HttpServletRequest request)
    {
        StringBuffer sbuff = new StringBuffer() ;
        sbuff.append(request.getMethod()) ;
        sbuff.append(" ") ;
        sbuff.append(Convert.decWWWForm(request.getRequestURL()));
        
        String qs = request.getQueryString();
        if (qs != null)
        {
            String tmp = request.getQueryString() ;
            tmp = Convert.decWWWForm(tmp) ;
            tmp = tmp.replace('\n', ' ') ;
            tmp = tmp.replace('\r', ' ') ;
            // You may need to split this - Eclipse bug means it wants the AbstractStringBuffer class 
            sbuff.append("?").append(tmp);
        }
        return sbuff.toString() ;
    }

    public static String httpResponseCode(int responseCode)
    {
        switch (responseCode)
        {
        case HttpServletResponse.SC_CONTINUE: return "SC_CONTINUE" ;
        case HttpServletResponse.SC_SWITCHING_PROTOCOLS: return "SC_SWITCHING_PROTOCOLS" ;
        case HttpServletResponse.SC_OK: return "SC_OK" ;
        case HttpServletResponse.SC_CREATED: return "SC_CREATED" ;
        case HttpServletResponse.SC_ACCEPTED: return "SC_ACCEPTED" ;
        case HttpServletResponse.SC_NON_AUTHORITATIVE_INFORMATION: return "SC_NON_AUTHORITATIVE_INFORMATION" ;
        case HttpServletResponse.SC_NO_CONTENT: return "SC_NO_CONTENT" ;
        case HttpServletResponse.SC_RESET_CONTENT: return "SC_RESET_CONTENT" ;
        case HttpServletResponse.SC_PARTIAL_CONTENT: return "SC_PARTIAL_CONTENT" ;
        case HttpServletResponse.SC_MULTIPLE_CHOICES: return "SC_MULTIPLE_CHOICES" ;
        case HttpServletResponse.SC_MOVED_PERMANENTLY: return "SC_MOVED_PERMANENTLY" ;
        case HttpServletResponse.SC_MOVED_TEMPORARILY: return "SC_MOVED_TEMPORARILY" ;
        case HttpServletResponse.SC_SEE_OTHER: return "SC_SEE_OTHER" ;
        case HttpServletResponse.SC_NOT_MODIFIED: return "SC_NOT_MODIFIED" ;
        case HttpServletResponse.SC_USE_PROXY: return "SC_USE_PROXY" ;
        case HttpServletResponse.SC_TEMPORARY_REDIRECT: return "SC_TEMPORARY_REDIRECT" ;
        case HttpServletResponse.SC_BAD_REQUEST: return "SC_BAD_REQUEST" ;
        case HttpServletResponse.SC_UNAUTHORIZED: return "SC_UNAUTHORIZED" ;
        case HttpServletResponse.SC_PAYMENT_REQUIRED: return "SC_PAYMENT_REQUIRED" ;
        case HttpServletResponse.SC_FORBIDDEN: return "SC_FORBIDDEN" ;
        case HttpServletResponse.SC_NOT_FOUND: return "SC_NOT_FOUND" ;
        case HttpServletResponse.SC_METHOD_NOT_ALLOWED: return "SC_METHOD_NOT_ALLOWED" ;
        case HttpServletResponse.SC_NOT_ACCEPTABLE: return "SC_NOT_ACCEPTABLE" ;
        case HttpServletResponse.SC_PROXY_AUTHENTICATION_REQUIRED: return "SC_PROXY_AUTHENTICATION_REQUIRED" ;
        case HttpServletResponse.SC_REQUEST_TIMEOUT: return "SC_REQUEST_TIMEOUT" ;
        case HttpServletResponse.SC_CONFLICT: return "SC_CONFLICT" ;
        case HttpServletResponse.SC_GONE: return "SC_GONE" ;
        case HttpServletResponse.SC_LENGTH_REQUIRED: return "SC_LENGTH_REQUIRED" ;
        case HttpServletResponse.SC_PRECONDITION_FAILED: return "SC_PRECONDITION_FAILED" ;
        case HttpServletResponse.SC_REQUEST_ENTITY_TOO_LARGE: return "SC_REQUEST_ENTITY_TOO_LARGE" ;
        case HttpServletResponse.SC_REQUEST_URI_TOO_LONG: return "SC_REQUEST_URI_TOO_LONG" ;
        case HttpServletResponse.SC_UNSUPPORTED_MEDIA_TYPE: return "SC_UNSUPPORTED_MEDIA_TYPE" ;
        case HttpServletResponse.SC_REQUESTED_RANGE_NOT_SATISFIABLE: return "SC_REQUESTED_RANGE_NOT_SATISFIABLE" ;
        case HttpServletResponse.SC_EXPECTATION_FAILED: return "SC_EXPECTATION_FAILED" ;
        case HttpServletResponse.SC_INTERNAL_SERVER_ERROR: return "SC_INTERNAL_SERVER_ERROR" ;
        case HttpServletResponse.SC_NOT_IMPLEMENTED: return "SC_NOT_IMPLEMENTED" ;
        case HttpServletResponse.SC_BAD_GATEWAY: return "SC_BAD_GATEWAY" ;
        case HttpServletResponse.SC_SERVICE_UNAVAILABLE: return "SC_SERVICE_UNAVAILABLE" ;
        case HttpServletResponse.SC_GATEWAY_TIMEOUT: return "SC_GATEWAY_TIMEOUT" ;
        case HttpServletResponse.SC_HTTP_VERSION_NOT_SUPPORTED: return "SC_HTTP_VERSION_NOT_SUPPORTED" ;
        default: return "Unknown HTTP response code: "+responseCode ;
        }        
    }
}

/*
 * (c) Copyright 2004, 2005, 2006, 2007, 2008, 2009 Hewlett-Packard Development Company, LP
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. The name of the author may not be used to endorse or promote products
 *    derived from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */




© 2015 - 2025 Weber Informatics LLC | Privacy Policy