1 /* Reattore HTTP Server
2
3 Copyright (C) 2002 Michael Hope <michaelh@juju.net.nz>
4
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18
19 $Id: ErrorInterceptor.java,v 1.10 2003/03/05 04:31:57 michaelh Exp $
20 */
21
22 package juju.reattore.server.intercept.impl;
23
24 import org.apache.commons.logging.Log;
25 import org.apache.commons.logging.LogFactory;
26
27 import juju.reattore.protocol.http.*;
28 import juju.reattore.server.intercept.Interceptor;
29
30 /*** Interceptor that serves an error document if the main path can't
31 find anything.
32
33 The main path will be given the first chance to handle the
34 request. If the main path cannot then the error path is given a
35 chance.
36
37 @tag error
38 @group Interceptor
39 @children Interceptor
40 */
41 public class ErrorInterceptor
42 implements Interceptor {
43
44 private static Log log = LogFactory.getLog(ErrorInterceptor.class);
45
46 private Interceptor main;
47 private Interceptor error;
48
49 /*** Accessor to help Digester configuration. First sets the main
50 path, then the error path.
51
52 @param child Path to use.
53 */
54 public void addChild(Interceptor child) {
55 if (main == null) {
56 main = child;
57 }
58 else if (error == null) {
59 error = child;
60 }
61 else {
62 log.warn("An ErrorInterceptor only accepts two children");
63 }
64 }
65
66 /*** Sets the root of the main path to go through.
67
68 @param path The root of the main path.
69 */
70 public void setMainPath(Interceptor path) {
71 main = path;
72 }
73
74 /*** Sets the root of the error path to go through.
75
76 @param path The root of the main path.
77 */
78 public void setErrorPath(Interceptor path) {
79 error = path;
80 }
81
82 /*** @see Interceptor */
83 public boolean process(HttpRequest req, HttpResponse resp) {
84
85 if (main.process(req, resp) == true
86 && resp.getBody() != null) {
87
88 /* Done */
89 return true;
90 }
91 else {
92 /* We need to remember the error code as the display
93 interceptor will override it. */
94 int err = resp.getStatus();
95
96 try {
97 if (error.process(req, resp) == true) {
98 /* Error handlers took it */
99 return true;
100 }
101 else {
102 /* Neither handled it - perhaps something further up
103 will. */
104 return false;
105 }
106 }
107 finally {
108 resp.setStatus(err);
109 }
110 }
111 }
112 }
This page was automatically generated by Maven