Package org.w3c.jigsaw.ccpp

Source Code of org.w3c.jigsaw.ccpp.CCPPRequest

// CCPPRequest.java
// $Id: CCPPRequest.java,v 1.4 2000/08/16 21:37:34 ylafon Exp $
// (c) COPYRIGHT MIT, INRIA and Keio, 2000.
// Please first read the full copyright statement in file COPYRIGHT.html

package org.w3c.jigsaw.ccpp;

import org.w3c.jigsaw.http.Reply;
import org.w3c.jigsaw.http.Request;

import org.w3c.www.http.HttpExtList;
import org.w3c.www.http.HttpExt;
import org.w3c.www.http.HttpFactory;
import org.w3c.www.http.HttpTokenList;

/**
* @version $Revision: 1.4 $
* @author  Beno�t Mah� (bmahe@w3.org)
*/
public class CCPPRequest implements CCPP {

    Request     request      = null;
    ProfileRef  references[] = null;
    HttpExtList httpextlist  = null;

    /**
     * Get the HTTP Request
     * @return a Request
     */
    public Request getHTTPRequest() {
  return request;
    }

    /**
     * Get the standard CCPP reason phrase for the given warning code.
     * @param warning The given warning code.
     * @return A String giving the standard reason phrase, or
     * <strong>null</strong> if the status doesn't match any knowned error.
     */
    public static String getStandardWarning(int warning) {
  int category = warning / 100;
  int catcode  = warning % 100;
  switch(category)
      {
      case 1:
    if ((catcode >= 0) && (catcode < msg_100.length))
        return msg_100[catcode];
    break;
      case 2:
    if ((catcode >= 0) && (catcode < msg_200.length))
        return msg_200[catcode];
    break;
      }
  return UNKNOWN_WARNING_MESSAGE;
    }

    /**
     * Get a header value (relative to the CC/PP Extension protocol)
     * @param request the HTTP Request
     * @param header the header name (ie "Profile")
     * @return a String.
     */
    public String getCCPPHeaderValue(String header) {
  return request.getExtHeader(HTTP_EXT_ID, header);
    }

    /**
     * Get the profile diff header relative to the given profile diff number.
     * @param request the HTTP Request
     * @param diffnumber the diff number
     */
    public String getProfileDiff(int diffnumber)
    {
  String diffname = PROFILE_DIFF_HEADER+"-"+diffnumber;
  return getCCPPHeaderValue(diffname);
    }

    /**
     * Get the Profile references (absolute URI or Profile-diff-name)
     * ordered by priority (the last one has the highest priority).
     * @return a ProfileRef array (or null)
     * @see ProfileRef
     */
    public ProfileRef[] getProfileReferences() {
  if (references == null) {
      String profile = getCCPPHeaderValue(PROFILE_HEADER);
      if (profile != null) {
    String profiles[] =
        (String[]) HttpFactory.parseTokenList(profile).getValue();
    references = new ProfileRef[profiles.length];
    for (int i = 0 ; i < references.length ; i++) {
        references[i] = new ProfileRef(profiles[i]);
    }
      } else {
    return null;
      }
  }
  return references;
    }

    /**
     * Get the CC/PP Request associated to the given HTTP Request
     * @param request the HTTP Request
     * @return a CCPPRequest instance
     */
    public static CCPPRequest getCCPPRequest(Request request) {
  if (request.hasState(CCPP_REQUEST_STATE)) {
      return (CCPPRequest) request.getState(CCPP_REQUEST_STATE);
  } else {
      CCPPRequest ccpprequest = new CCPPRequest(request);
      request.setState(CCPP_REQUEST_STATE, ccpprequest);
      return ccpprequest;
  }
    }

    /**
     * Set the Acknowledgement Headers if it's appropriate.
     * @param reply the reply
     * @return the aknowledged reply
     */
    protected Reply acknowledge(Reply reply) {
  HttpExtList man = request.getHttpManExtDecl();
  if ((man != null) &&
      (man.getLength() == 1) &&
      (man.getHttpExt(HTTP_EXT_ID) != null)) {
      reply.setEnd2EndExtensionAcknowledgmentHeader();
  }

  HttpExtList cman = request.getHttpCManExtDecl();
  if ((cman != null) &&
      (cman.getLength() == 1) &&
      (cman.getHttpExt(HTTP_EXT_ID) != null)) {
      reply.setHopByHopExtensionAcknowledgmentHeader();
  }

  return reply;
    }

    /**
     * Add a CC/PP Warning to the given reply.
     * @param reply the HTTP Reply
     * @param warning the CC/PP Warning code
     * @param reference the Profile reference
     */
    public void addWarning(Reply reply, int warning, String reference) {
  CCPPWarning ccppwarning = (CCPPWarning)
      reply.getState(CCPPWarning.CCPPWARNING_STATE);
  if (ccppwarning == null) {
      ccppwarning = new CCPPWarning();
      reply.setState(CCPPWarning.CCPPWARNING_STATE, ccppwarning);
  }
  ccppwarning.addWarning(warning, reference);
  // is the extension declared?
  HttpExtList list = reply.getExtList(HTTP_EXT_ID);
  if (list == null) {
      list = new  HttpExtList(httpextlist);
      reply.setHttpExtDecl(list);
  }
  HttpExt ext = list.getHttpExt(HTTP_EXT_ID);
  reply.setExtensionHeader(ext,
         PROFILE_WARNING_HEADER,
         ccppwarning.toString());
    }

    private CCPPRequest(Request request) {
  this.request     = request;
  this.httpextlist = request.getExtList(HTTP_EXT_ID);
    }
}
TOP

Related Classes of org.w3c.jigsaw.ccpp.CCPPRequest

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.