Package org.w3c.jigsaw.filters

Source Code of org.w3c.jigsaw.filters.RequestedHeaderFilter

// RequestedHeaderFilter.java
// $Id: RequestedHeaderFilter.java,v 1.2 2007/02/09 10:20:38 ylafon Exp $
// (c) COPYRIGHT MIT and INRIA, 1996.
// Please first read the full copyright statement in file COPYRIGHT.html

package org.w3c.jigsaw.filters;

import org.w3c.tools.resources.Attribute;
import org.w3c.tools.resources.AttributeHolder;
import org.w3c.tools.resources.AttributeRegistry;
import org.w3c.tools.resources.BooleanAttribute;
import org.w3c.tools.resources.FilterInterface;
import org.w3c.tools.resources.ProtocolException;
import org.w3c.tools.resources.ReplyInterface;
import org.w3c.tools.resources.RequestInterface;
import org.w3c.tools.resources.ResourceFilter;
import org.w3c.tools.resources.StringArrayAttribute;

import org.w3c.tools.resources.ProtocolException;

import org.w3c.www.http.HTTP;
import org.w3c.www.http.HttpMessage;

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

import org.w3c.jigsaw.html.HtmlGenerator;

/**
* Enforces a specific header value on all replies.
* Usefull for testing.
*/

public class RequestedHeaderFilter extends ResourceFilter {
    /**
     * Attribute index - The header name to add to replies.
     */
    protected static int ATTR_HEADER_NAMES = -1;
    /**
     * Attribute index - Are we sending the list of headers in HTML.
     */
    protected static int ATTR_SEND_HEADER_LIST = -1;

    static {
  Class c = null;
  Attribute a = null;
  try {
      c = Class.forName("org.w3c.jigsaw.filters.RequestedHeaderFilter");
  } catch (Exception ex) {
      ex.printStackTrace();
      System.exit(1);
  }
  // Register the header names attribute:
  a = new StringArrayAttribute("header-names"
        , null
        , Attribute.EDITABLE);
  ATTR_HEADER_NAMES = AttributeRegistry.registerAttribute(c, a);
  // Declare the day_repeat attribute
  a = new BooleanAttribute("send-header-list"
         , Boolean.FALSE
         , Attribute.EDITABLE) ;
  ATTR_SEND_HEADER_LIST = AttributeRegistry.registerAttribute(c, a) ;
    }

    private String headerNames[] = null;
    private boolean sendHeaderList = false;

    /**
     * We override setValues to compute locally everything we need
     8 As the purpose here is to bail out fast when needed
     * @param idx The index of the attribute to modify.
     * @param value The new attribute value.
     */
    public void setValue(int idx, Object value) {
  super.setValue(idx, value);
  if (idx == ATTR_HEADER_NAMES) {
    headerNames = (String [])value;
  } else if (idx == ATTR_SEND_HEADER_LIST) {
      sendHeaderList = ((Boolean)value).booleanValue();
  }
    }

    /**
     * Initialize the filter.
     */

    public void initialize(Object values[]) {
  super.initialize(values);
  headerNames = (String []) getValue(ATTR_HEADER_NAMES, null);
  sendHeaderList = getBoolean(ATTR_SEND_HEADER_LIST, false);
    }

    /**
     * Get the header to set, if any.
     * @return A String encoded header name, or <strong>null</strong>.
     */

    protected String[] getHeaderNames() {
  String value[] = (String []) getValue(ATTR_HEADER_NAMES, null);
  return value;
    }

    protected boolean getSendHeaderList() {
  return getBoolean(ATTR_SEND_HEADER_LIST, false);
    }

    /**
     * @return A boolean, <strong>true</strong> if all headers are present
     */
    private boolean checkHeaders(Request request) {
  if (headerNames != null) {
      int nlength = headerNames.length;
      for (int i=0; i<nlength; i++) {
    if (!request.hasHeader(headerNames[i])) {
        return false;
    }
      }
  }
  return true;
    }

    /**
     * @return A Reply instance, if the filter did know how to answer
     * the request without further processing, <strong>null</strong>
     * otherwise.
     * @exception ProtocolException If processing should be interrupted,
     * because an abnormal situation occured.
     */
    public ReplyInterface ingoingFilter(RequestInterface request)
  throws ProtocolException
    {
  Request req = (Request) request;
  Reply   rep = null;
  if (checkHeaders(req)) {
      return null;
  }
  rep = req.makeReply(HTTP.FORBIDDEN);
  HtmlGenerator g = new HtmlGenerator("Forbidden - Headers missing");
  g.append("Some Headers, mandatory for this resource, are missing.");
  if (sendHeaderList && (headerNames != null)) {
      g.append("<ul>");
      for (int i=0; i<headerNames.length; i++) {
    g.append("<li>");
    g.appendAndEscape(headerNames[i]);
    g.append("</li>");
      }
      g.append("</ul>");
  }
  rep.setStream(g);
  return rep;
    }

    /**
     * The outgoing filter decorates the reply appropriately.
     * @param request The original request.
     * @param reply The originial reply.
     * @return Always <strong>null</strong>.
     * @exception ProtocolException If processing should be interrupted,
     * because an abnormal situation occured.
     */

    public ReplyInterface outgoingFilter(RequestInterface req,
           ReplyInterface rep)
  throws ProtocolException
    {
  return null;
    }

    public ReplyInterface exceptionFilter(RequestInterface request,
            ProtocolException ex,
            FilterInterface filters[],
            int i) {
  return null;
    }
}
TOP

Related Classes of org.w3c.jigsaw.filters.RequestedHeaderFilter

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.