01: /*
02: * $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//httpclient/src/test/org/apache/commons/httpclient/server/HttpRequestHandlerChain.java,v 1.6 2004/11/28 15:44:39 olegk Exp $
03: * $Revision: 480424 $
04: * $Date: 2006-11-29 06:56:49 +0100 (Wed, 29 Nov 2006) $
05: *
06: * ====================================================================
07: *
08: * Licensed to the Apache Software Foundation (ASF) under one or more
09: * contributor license agreements. See the NOTICE file distributed with
10: * this work for additional information regarding copyright ownership.
11: * The ASF licenses this file to You under the Apache License, Version 2.0
12: * (the "License"); you may not use this file except in compliance with
13: * the License. You may obtain a copy of the License at
14: *
15: * http://www.apache.org/licenses/LICENSE-2.0
16: *
17: * Unless required by applicable law or agreed to in writing, software
18: * distributed under the License is distributed on an "AS IS" BASIS,
19: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
20: * See the License for the specific language governing permissions and
21: * limitations under the License.
22: * ====================================================================
23: *
24: * This software consists of voluntary contributions made by many
25: * individuals on behalf of the Apache Software Foundation. For more
26: * information on the Apache Software Foundation, please see
27: * <http://www.apache.org/>.
28: *
29: * [Additional notices, if required by prior licensing conditions]
30: *
31: */
32:
33: package org.apache.commons.httpclient.server;
34:
35: import java.io.IOException;
36: import java.util.ArrayList;
37: import java.util.Iterator;
38: import java.util.List;
39:
40: /**
41: * Maintains a chain of {@link HttpRequestHandler}s where new request-handlers
42: * can be prepended/appended.
43: *
44: * For each call to {@link #processRequest(ResponseWriter,SimpleHttpServerConnection,RequestLine,Header[])}
45: * we iterate over the chain from the start to the end, stopping as soon as a handler
46: * has claimed the output.
47: *
48: * @author Christian Kohlschuetter
49: */
50: public class HttpRequestHandlerChain implements HttpRequestHandler {
51:
52: private List subhandlers = new ArrayList();
53:
54: public HttpRequestHandlerChain(final HttpRequestHandlerChain chain) {
55: super ();
56: if (chain != null) {
57: this .subhandlers.clear();
58: this .subhandlers.addAll(chain.subhandlers);
59: }
60: }
61:
62: public HttpRequestHandlerChain() {
63: super ();
64: }
65:
66: public synchronized void clear() {
67: subhandlers.clear();
68: }
69:
70: public synchronized void prependHandler(HttpRequestHandler handler) {
71: subhandlers.add(0, handler);
72: }
73:
74: public synchronized void appendHandler(HttpRequestHandler handler) {
75: subhandlers.add(handler);
76: }
77:
78: public synchronized boolean processRequest(
79: final SimpleHttpServerConnection conn,
80: final SimpleRequest request) throws IOException {
81: for (Iterator it = subhandlers.iterator(); it.hasNext();) {
82: HttpRequestHandler h = (HttpRequestHandler) it.next();
83: boolean stop = h.processRequest(conn, request);
84: if (stop) {
85: return true;
86: }
87: }
88: return false;
89: }
90: }
|