01: /*
02: * PropertiesHandler.java
03: *
04: * Brazil project web application Framework,
05: * export version: 1.1
06: * Copyright (c) 2000 Sun Microsystems, Inc.
07: *
08: * Sun Public License Notice
09: *
10: * The contents of this file are subject to the Sun Public License Version
11: * 1.0 (the "License"). You may not use this file except in compliance with
12: * the License. A copy of the License is included as the file "license.terms",
13: * and also available at http://www.sun.com/
14: *
15: * The Original Code is from:
16: * Brazil project web application Framework release 1.1.
17: * The Initial Developer of the Original Code is: suhler.
18: * Portions created by suhler are Copyright (C) Sun Microsystems, Inc.
19: * All Rights Reserved.
20: *
21: * Contributor(s): suhler.
22: *
23: * Version: 1.3
24: * Created by suhler on 00/08/28
25: * Last modified by suhler on 00/12/11 13:29:05
26: */
27:
28: package sunlabs.brazil.handler;
29:
30: import java.io.ByteArrayOutputStream;
31: import java.io.IOException;
32: import java.util.Enumeration;
33: import java.util.Properties;
34: import sunlabs.brazil.server.Handler;
35: import sunlabs.brazil.server.Request;
36: import sunlabs.brazil.server.Server;
37: import sunlabs.brazil.util.Glob;
38:
39: /**
40: * Handler for returning selected request properties as a text/plain document
41: * in java properties format. (See {@link ProxyPropertiesHandler}).
42: * <p>
43: * Properties:
44: * <dl class=props>
45: * <dt>match <dd>Glob pattern to match urls used by this handler
46: * (Defaults to /*). Examined at init time.
47: * <dt>select <dd>Glob pattern to match properties selected
48: * (Defaults to *). This is re-examined at every request.
49: * <dt>type <dd>Type of output to generate (defaults to text/plain).
50: * <dt>comment <dd>Comment to put on output (defaults to <i>select</i>).
51: * </dl>
52: */
53:
54: public class PropertiesHandler implements Handler {
55: String prefix; // our handler name
56: String match; // glob pattern to match url
57: String select; // glob pattern to select props
58: String type;
59:
60: public boolean init(Server server, String prefix) {
61: this .prefix = prefix;
62: match = server.props.getProperty(prefix + "match", "*");
63: type = server.props.getProperty(prefix + "type", "text/plain");
64: return true;
65: }
66:
67: /**
68: * If this is one of our URL's, look through each
69: * request property, and selct those that match the <i>Select</i>
70: * property. Then emit them all as text/plain.
71: */
72:
73: public boolean
74: respond(Request request) throws IOException {
75: if (!Glob.match(match, request.url)) {
76: return false;
77: }
78: String select = request.props.getProperty(prefix + "select", "*");
79:
80: Properties p = new Properties();
81: Enumeration enum = request.props.propertyNames();
82: while(enum.hasMoreElements()) {
83: String key = (String) enum.nextElement();
84: if (Glob.match(select, key)) {
85: p.put(key, request.props.getProperty(key));
86: }
87: }
88: String comment = request.props.getProperty(prefix + "comment");
89: if (comment == null) {
90: comment = prefix + this.getClass() + " selecting: " + select;
91: }
92: ByteArrayOutputStream out = new ByteArrayOutputStream();
93: p.save(out,comment);
94: request.sendResponse(out.toByteArray(), type);
95: return true;
96: }
97: }
|