Package org.eclipse.wst.wsi.internal.core.util

Source Code of org.eclipse.wst.wsi.internal.core.util.HTTPUtils

/*******************************************************************************
* Copyright (c) 2002-2005 IBM Corporation and others.
* All rights reserved.   This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
*   IBM - Initial API and implementation
*******************************************************************************/
package org.eclipse.wst.wsi.internal.core.util;

import java.util.HashMap;
import java.util.Map;
import com.ibm.icu.util.StringTokenizer;

import org.eclipse.wst.wsi.internal.core.WSIException;

/**
* Set of HTTPL related utilities.
*
* @version 1.0.1
* @author Peter Brittenham
*/

public final class HTTPUtils
{

  /**
   * Find the URL string in a HTTP POST header.
   * @param httpPostHeader  a HTTP POST header.
   * @return the URL string in a HTTP POST header.
   */
  public static String getURLString(String httpPostHeader)
  {
    String urlString = null;
    int start, end;

    // If POST, then continue
    if (httpPostHeader.startsWith("POST") || httpPostHeader.startsWith("GET"))
    {
      // Start after first space
      start = httpPostHeader.indexOf(' ') + 1;

      // Look for next non-space character
      while (httpPostHeader.charAt(start) == ' ')
        start++;

      // Find next space character
      end = httpPostHeader.indexOf(' ', start);

      // Get URL string which is located in between start and end
      urlString = httpPostHeader.substring(start, end);
    }

    // Else throw exception
    else
    {
      throw new IllegalArgumentException(
        "HTTP header does not contain POST data (was: " + httpPostHeader + ")");
    }

    // Return URL string
    return urlString;
  }
  /**
   * Utility to present HTTP header information as attribute-value pairs,
   * based on ':' as attribute-value separator.
   * @param httpHeaderString an HTTP header string.
   * @param separators attribute-value separator list.
   * @return HTTP header information as attribute-value pairs.
   * @throws WSIException if unable to create HTTP header information
   *         as attribute-value pairs.
   */
  public static Map getHttpHeaderTokens(String httpHeaderString, String separators)
    throws WSIException
  {
    StringTokenizer tokenizer = new StringTokenizer(httpHeaderString, "\n\r\f");
    Map map = new HashMap();
    String name = null;
    while (tokenizer.hasMoreTokens())
    {
      String line = tokenizer.nextToken();
      int index = line.indexOf(separators);
      if (index > 0 && index < line.length() - 1)
      {
        name = line.substring(0, index).toUpperCase();
        map.put(name, line.substring(index + 1).trim());
      }
      else
      {
        if ((name != null) && (line.length()>0) && Character.isWhitespace(line.charAt(0)))
           map.put(name, map.get(name) + " " + line.trim());
      }
    }
    return map;
  }
 
  /**
   * Utility to take sub attribute value from HTTP header
   * @param httpHeaderString an HTTP header string.
   * @param attributeName attribute name.
   * @param subAttributeName sub attribute name.
   * @return sub attribute value from HTTP header.
   * @throws WSIException if unable to get sub attribute value from HTTP header.
   */
  public static String getHttpHeaderSubAttribute(String httpHeaderString,
      String attributeName, String subAttributeName)
    throws WSIException
  {
    // get attribute value
    String value =
      (String) getHttpHeaderTokens(httpHeaderString,":").get(attributeName.toUpperCase());
    if(value != null)
    {
      // search sub attribute token
      int idxQ = value.toUpperCase().indexOf(subAttributeName.toUpperCase()+"=\"");
      int idx = value.toUpperCase().indexOf(subAttributeName.toUpperCase()+"=");
      // if attribute is quoted
      if (idxQ != -1)
      {
        idxQ += (subAttributeName+"=\"").length();
        int eIdxQ = value.indexOf("\"", idxQ);
        if (eIdxQ != -1)
        {
          return value.substring(idxQ, eIdxQ);
        }
        else
        {
          return null;
        }
      }
      // if attribute do not quoted
      else if (idx != -1)
      {
        idx += (subAttributeName+"=").length();
        int eIdx = -1;
        // find end space separator
        if ((eIdx = value.indexOf(" ", idx)) != -1)
        {
          return value.substring(idx, eIdx);
        }
        // find coma separator
        else if ((eIdx = value.indexOf(";", idx)) != -1)
        {
          return value.substring(idx, eIdx);
        }
        // this is last attribute
        else
        {
          return value.substring(idx);
        }
      }
      // if attribute do not found
      else
      {
        return null;
      }
    }
    return value;
  }

  /**
   * Utility to take attribute value from HTTP header
   * @param httpHeaderString an HTTP header string.
   * @param attributeName attribute name.
   * @return attribute value from HTTP header.
   * @throws WSIException if unable to get attribute value from HTTP header.
   */
  public static String getHttpHeaderAttribute(String httpHeaderString,
      String attributeName)
    throws WSIException
  {
    String attributeValue =
        (String) getHttpHeaderTokens(httpHeaderString,":").get(attributeName.toUpperCase());
    // get first token
    if((attributeValue != null) && (attributeValue.indexOf(";") != -1)) {
      attributeValue = attributeValue.substring(0, attributeValue.indexOf(";"));
    }
    return attributeValue;
  }
}
TOP

Related Classes of org.eclipse.wst.wsi.internal.core.util.HTTPUtils

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.