URLHandlerTree.java
上传用户:huihesys
上传日期:2007-01-04
资源大小:3877k
文件大小:3k
源码类别:

WEB邮件程序

开发平台:

C/C++

  1. /* CVS ID: $Id: URLHandlerTree.java,v 1.2 2000/04/06 08:02:02 wastl Exp $ */
  2. package net.wastl.webmail.server;
  3. import java.util.*;
  4. /*
  5.  * URLHandlerTree.java
  6.  *
  7.  * Created: Thu Sep  2 13:20:23 199
  8.  *
  9.  * Copyright (C) 1999-2000 Sebastian Schaffert
  10.  * 
  11.  * This program is free software; you can redistribute it and/or
  12.  * modify it under the terms of the GNU General Public License
  13.  * as published by the Free Software Foundation; either version 2
  14.  * of the License, or (at your option) any later version.
  15.  * 
  16.  * This program is distributed in the hope that it will be useful,
  17.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  18.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  19.  * GNU General Public License for more details.
  20.  * 
  21.  * You should have received a copy of the GNU General Public License
  22.  * along with this program; if not, write to the Free Software
  23.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  24.  */
  25. /**
  26.  * A tree structure to improve (speed up) access to URLs
  27.  *
  28.  * @author Sebastian Schaffert
  29.  * @version
  30.  */
  31. public class URLHandlerTree implements URLHandlerTreeNode {
  32.     
  33.     URLHandler handler;
  34.     String url;
  35.     Hashtable nodes;
  36.     
  37.     StringTokenizer t;
  38.     public URLHandlerTree(String url) {
  39. nodes=new Hashtable();
  40. this.url=url; 
  41.    }
  42.    
  43.     public String getURL() {
  44. return url;
  45.     }
  46.     public void addHandler(String url, URLHandler h) {
  47. if(url.equals("/") || url.equals("") || url==null) {
  48.     handler=h;
  49. } else {
  50.     t=new StringTokenizer(url,"/");
  51.       String subtree_name=t.nextToken();
  52.     URLHandlerTree subtree=(URLHandlerTree)nodes.get(subtree_name);
  53.     if(subtree == null) {
  54. if(this.url.endsWith("/")) {
  55.     subtree=new URLHandlerTree(this.url+subtree_name);
  56. } else {
  57.     subtree=new URLHandlerTree(this.url+"/"+subtree_name);
  58. }
  59. nodes.put(subtree_name,subtree);
  60.     }
  61.     subtree.addHandler(url.substring(subtree_name.length()+1,url.length()),h);
  62. }
  63.     }
  64.     
  65.     public URLHandler getHandler(String url) {
  66. if(url.equals("/") || url.equals("") || url==null) {
  67.     /* We are the handler */
  68.     return handler;
  69. } else {     
  70.     t=new StringTokenizer(url,"/");
  71.       String subtree_name=t.nextToken();
  72.     URLHandlerTree subtree=(URLHandlerTree)nodes.get(subtree_name);
  73.     if(subtree == null) {
  74. /* If there is no subtree, we are the handler! */
  75. return handler;
  76.     } else {
  77. /* Else there is a subtree*/
  78. URLHandler uh=subtree.getHandler(url.substring(subtree_name.length()+1,url.length()));
  79. if(uh != null) {
  80.     /* It has a handler */
  81.     return uh;
  82. } else {
  83.     /* It has no handler, we are handler */
  84.     return handler;
  85. }
  86.     }     
  87. }
  88.     }
  89.  
  90.     public String toString() {
  91. return nodes.toString();
  92.     }
  93. } // URLHandlerTree