01: /*
02: * Resource.java February 2001
03: *
04: * Copyright (C) 2001, Niall Gallagher <niallg@users.sf.net>
05: *
06: * This library is free software; you can redistribute it and/or
07: * modify it under the terms of the GNU Lesser General Public
08: * License as published by the Free Software Foundation.
09: *
10: * This library 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 Lesser General Public License for more details.
14: *
15: * You should have received a copy of the GNU Lesser General
16: * Public License along with this library; if not, write to the
17: * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
18: * Boston, MA 02111-1307 USA
19: */
20:
21: package simple.http.serve;
22:
23: import simple.http.Response;
24: import simple.http.Request;
25:
26: /**
27: * A <code>Resource</code> provides an abstraction of any given
28: * object that can be retrieved using a HTTP request. The reason
29: * for having this abstraction is to simplify the interface with
30: * any given <code>Resource</code>.
31: * <p>
32: * This is a <code>ProtocolHandler</code> and as such handles
33: * the entire transaction. This means that the HTTP response
34: * message is entirely managed by the <code>Resource</code>.
35: *
36: * @author Niall Gallagher
37: */
38: public interface Resource {
39:
40: /**
41: * This acts as the main processing method for the resources.
42: * Implementations are required to provide the functions that
43: * will process the <code>Request</code> and generate a suitable
44: * response for that request. This method is also responsible
45: * for closing and comitting the <code>Response</code> unless
46: * handed (chained) to another <code>Resource</code>.
47: *
48: * @param req the <code>Request</code> to be processed
49: * @param resp the <code>Response</code> to be processed
50: */
51: public void handle(Request req, Response resp);
52:
53: /**
54: * When an error occurs while processing the HTTP request then
55: * this method will handle the error according to the suggested
56: * code. The code represents the HTTP response code that caused
57: * the error. Any implementation of the <code>Resource</code>
58: * must be able to handle a valid HTTP response message.
59: *
60: * @param req the <code>Request</code> to be processed
61: * @param resp the <code>Response</code> to be processed
62: * @param code this is the HTTP status code of the response
63: */
64: public void handle(Request req, Response resp, int code);
65:
66: /**
67: * This is used to generate a formatted message using a report to
68: * describe the change in status. This uses the <code>Report</code>
69: * object to prepare a formatted message that can be presented to
70: * the client. This message will describe the status using the
71: * issued <code>Report</code> object. This is provided so that
72: * implementations have an convinient means to report errors.
73: *
74: * @param req the <code>Request</code> object to be processed
75: * @param resp the <code>Response</code> object to be processed
76: * @param report this is used to describe the change in status
77: */
78: public void handle(Request req, Response resp, Report report);
79: }
|