01: /*
02: * Copyright 2005-2007 Noelios Consulting.
03: *
04: * The contents of this file are subject to the terms of the Common Development
05: * and Distribution License (the "License"). You may not use this file except in
06: * compliance with the License.
07: *
08: * You can obtain a copy of the license at
09: * http://www.opensource.org/licenses/cddl1.txt See the License for the specific
10: * language governing permissions and limitations under the License.
11: *
12: * When distributing Covered Code, include this CDDL HEADER in each file and
13: * include the License file at http://www.opensource.org/licenses/cddl1.txt If
14: * applicable, add the following below this CDDL HEADER, with the fields
15: * enclosed by brackets "[]" replaced with your own identifying information:
16: * Portions Copyright [yyyy] [name of copyright owner]
17: */
18:
19: package com.noelios.restlet;
20:
21: import org.restlet.Context;
22: import org.restlet.Uniform;
23: import org.restlet.data.Protocol;
24: import org.restlet.data.Request;
25: import org.restlet.data.Response;
26: import org.restlet.util.Template;
27:
28: /**
29: * Default call dispatcher.
30: *
31: * @author Jerome Louvel (contact@noelios.com)
32: */
33: public class TemplateDispatcher extends Uniform {
34: /** The helper dispatcher. */
35: private Uniform helper;
36:
37: /** The parent context. */
38: private Context context;
39:
40: /**
41: * Constructor.
42: *
43: * @param context
44: * The parent context.
45: * @param helper
46: * The helper dispatcher.
47: */
48: public TemplateDispatcher(Context context, Uniform helper) {
49: this .context = context;
50: this .helper = helper;
51: }
52:
53: /**
54: * Returns the parent context.
55: *
56: * @return The parent context.
57: */
58: public Context getContext() {
59: return this .context;
60: }
61:
62: /**
63: * Handles a call.
64: *
65: * @param request
66: * The request to handle.
67: * @param response
68: * The response to update.
69: */
70: public void handle(Request request, Response response) {
71: Protocol protocol = request.getProtocol();
72:
73: if (protocol == null) {
74: throw new UnsupportedOperationException(
75: "Unable to determine the protocol to use for this call.");
76: } else {
77: String targetUri = request.getResourceRef().toString(true,
78: false);
79:
80: if (targetUri.contains("{")) {
81: // Template URI detected, create the template
82: Template template = new Template(getContext()
83: .getLogger(), targetUri);
84:
85: // Set the formatted target URI
86: request.setResourceRef(template.format(request,
87: response));
88: }
89:
90: // Actually dispatch the formatted URI
91: this.helper.handle(request, response);
92: }
93: }
94: }
|