Mercurial > hg > digilib-old
diff servlet/src/digilib/auth/HashTree.java @ 1:0ff3ede32060
Initial revision
author | robcast |
---|---|
date | Thu, 17 Jan 2002 15:25:46 +0100 |
parents | |
children | 398d39ee1014 9cedd170b581 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/servlet/src/digilib/auth/HashTree.java Thu Jan 17 15:25:46 2002 +0100 @@ -0,0 +1,80 @@ +/* HashTree -- Tree in a Hashtable + + Digital Image Library servlet components + + Copyright (C) 2001, 2002 Robert Casties (robcast@mail.berlios.de) + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + Please read license.txt for the full details. A copy of the GPL + may be found at http://www.gnu.org/copyleft/lgpl.html + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*/ + +package digilib.auth; + +import java.util.*; + +public class HashTree { + + private Hashtable table; + private String twigSep = "/"; + private String leafSep = ","; + + public HashTree() { + table = new Hashtable(); + } + + public HashTree(Hashtable t, String twig_separator, String leaf_separator) { + table = t; + twigSep = twig_separator; + leafSep = leaf_separator; + optimizeTable(); + } + + void optimizeTable() { + } + + List match(String branch) { + String b = ""; + String m; + LinkedList matches = new LinkedList(); + + // split branch + StringTokenizer twig = new StringTokenizer(branch, twigSep); + // walk branch and check with tree + while (twig.hasMoreTokens()) { + if (b.length() == 0) { + b = twig.nextToken(); + } else { + b += twigSep + twig.nextToken(); + } + m = (String)table.get(b); + //System.out.println("CHECK: "+b+" = "+m); + if (m != null) { + if (m.indexOf(leafSep) < 0) { + // single leaf + matches.add(m); + } else { + // split leaves + StringTokenizer leaf = new StringTokenizer(m, leafSep); + while (leaf.hasMoreTokens()) { + matches.add(leaf.nextToken()); + } + } + } + } + if (matches.size() > 0) { + return matches; + } else { + return null; + } + } +}