001: /* CVS ID: $Id: URLHandlerTree.java,v 1.1.1.1 2002/10/02 18:42:51 wastl Exp $ */
002: package net.wastl.webmail.server;
003:
004: import java.util.*;
005:
006: /*
007: * URLHandlerTree.java
008: *
009: * Created: Thu Sep 2 13:20:23 199
010: *
011: * Copyright (C) 1999-2000 Sebastian Schaffert
012: *
013: * This program is free software; you can redistribute it and/or
014: * modify it under the terms of the GNU General Public License
015: * as published by the Free Software Foundation; either version 2
016: * of the License, or (at your option) any later version.
017: *
018: * This program is distributed in the hope that it will be useful,
019: * but WITHOUT ANY WARRANTY; without even the implied warranty of
020: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
021: * GNU General Public License for more details.
022: *
023: * You should have received a copy of the GNU General Public License
024: * along with this program; if not, write to the Free Software
025: * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
026: */
027: /**
028: * A tree structure to improve (speed up) access to URLs
029: *
030: * @author Sebastian Schaffert
031: * @version
032: */
033:
034: public class URLHandlerTree implements URLHandlerTreeNode {
035:
036: URLHandler handler;
037:
038: String url;
039:
040: Hashtable nodes;
041:
042: StringTokenizer t;
043:
044: public URLHandlerTree(String url) {
045: nodes = new Hashtable();
046: this .url = url;
047: }
048:
049: public String getURL() {
050: return url;
051: }
052:
053: public void addHandler(String url, URLHandler h) {
054: if (url.equals("/") || url.equals("") || url == null) {
055: handler = h;
056: } else {
057: t = new StringTokenizer(url, "/");
058: String subtree_name = t.nextToken();
059: URLHandlerTree subtree = (URLHandlerTree) nodes
060: .get(subtree_name);
061: if (subtree == null) {
062: if (this .url.endsWith("/")) {
063: subtree = new URLHandlerTree(this .url
064: + subtree_name);
065: } else {
066: subtree = new URLHandlerTree(this .url + "/"
067: + subtree_name);
068: }
069: nodes.put(subtree_name, subtree);
070: }
071: subtree.addHandler(url.substring(subtree_name.length() + 1,
072: url.length()), h);
073: }
074: }
075:
076: public URLHandler getHandler(String url) {
077: if (url.equals("/") || url.equals("") || url == null) {
078: /* We are the handler */
079: return handler;
080: } else {
081: t = new StringTokenizer(url, "/");
082: String subtree_name = t.nextToken();
083: URLHandlerTree subtree = (URLHandlerTree) nodes
084: .get(subtree_name);
085: if (subtree == null) {
086: /* If there is no subtree, we are the handler! */
087: return handler;
088: } else {
089: /* Else there is a subtree*/
090: URLHandler uh = subtree.getHandler(url.substring(
091: subtree_name.length() + 1, url.length()));
092: if (uh != null) {
093: /* It has a handler */
094: return uh;
095: } else {
096: /* It has no handler, we are handler */
097: return handler;
098: }
099: }
100: }
101: }
102:
103: public String toString() {
104: return nodes.toString();
105: }
106:
107: } // URLHandlerTree
|