001: /*
002: * Copyright 2005-2007 Noelios Consulting.
003: *
004: * The contents of this file are subject to the terms of the Common Development
005: * and Distribution License (the "License"). You may not use this file except in
006: * compliance with the License.
007: *
008: * You can obtain a copy of the license at
009: * http://www.opensource.org/licenses/cddl1.txt See the License for the specific
010: * language governing permissions and limitations under the License.
011: *
012: * When distributing Covered Code, include this CDDL HEADER in each file and
013: * include the License file at http://www.opensource.org/licenses/cddl1.txt If
014: * applicable, add the following below this CDDL HEADER, with the fields
015: * enclosed by brackets "[]" replaced with your own identifying information:
016: * Portions Copyright [yyyy] [name of copyright owner]
017: */
018:
019: package org.restlet.example.tutorial;
020:
021: import org.restlet.Application;
022: import org.restlet.Component;
023: import org.restlet.Directory;
024: import org.restlet.Guard;
025: import org.restlet.Restlet;
026: import org.restlet.Router;
027: import org.restlet.data.ChallengeScheme;
028: import org.restlet.data.MediaType;
029: import org.restlet.data.Protocol;
030: import org.restlet.data.Request;
031: import org.restlet.data.Response;
032: import static org.restlet.example.tutorial.Constants.*;
033:
034: /**
035: * Routers and hierarchical URIs
036: *
037: * @author Jerome Louvel (contact@noelios.com)
038: */
039: public class Part11 {
040: public static void main(String[] args) throws Exception {
041: // Create a component
042: Component component = new Component();
043: component.getServers().add(Protocol.HTTP, 8182);
044: component.getClients().add(Protocol.FILE);
045:
046: // Create an application
047: Application application = new Application(component
048: .getContext()) {
049: @Override
050: public Restlet createRoot() {
051: // Create a root router
052: Router router = new Router(getContext());
053:
054: // Attach a guard to secure access to the directory
055: Guard guard = new Guard(getContext(),
056: ChallengeScheme.HTTP_BASIC, "Restlet tutorial");
057: guard.getSecrets().put("scott", "tiger".toCharArray());
058: router.attach("/docs/", guard);
059:
060: // Create a directory able to expose a hierarchy of files
061: Directory directory = new Directory(getContext(),
062: ROOT_URI);
063: guard.setNext(directory);
064:
065: // Create the account handler
066: Restlet account = new Restlet() {
067: @Override
068: public void handle(Request request,
069: Response response) {
070: // Print the requested URI path
071: String message = "Account of user \""
072: + request.getAttributes().get("user")
073: + "\"";
074: response.setEntity(message,
075: MediaType.TEXT_PLAIN);
076: }
077: };
078:
079: // Create the orders handler
080: Restlet orders = new Restlet(getContext()) {
081: @Override
082: public void handle(Request request,
083: Response response) {
084: // Print the user name of the requested orders
085: String message = "Orders of user \""
086: + request.getAttributes().get("user")
087: + "\"";
088: response.setEntity(message,
089: MediaType.TEXT_PLAIN);
090: }
091: };
092:
093: // Create the order handler
094: Restlet order = new Restlet(getContext()) {
095: @Override
096: public void handle(Request request,
097: Response response) {
098: // Print the user name of the requested orders
099: String message = "Order \""
100: + request.getAttributes().get("order")
101: + "\" for user \""
102: + request.getAttributes().get("user")
103: + "\"";
104: response.setEntity(message,
105: MediaType.TEXT_PLAIN);
106: }
107: };
108:
109: // Attach the handlers to the root router
110: router.attach("/users/{user}", account);
111: router.attach("/users/{user}/orders", orders);
112: router.attach("/users/{user}/orders/{order}", order);
113:
114: // Return the root router
115: return router;
116: }
117: };
118:
119: // Attach the application to the component and start it
120: component.getDefaultHost().attach(application);
121: component.start();
122: }
123:
124: }
|