01: /*
02: * <copyright>
03: *
04: * Copyright 2000-2004 BBNT Solutions, LLC
05: * under sponsorship of the Defense Advanced Research Projects
06: * Agency (DARPA).
07: *
08: * You can redistribute this software and/or modify it under the
09: * terms of the Cougaar Open Source License as published on the
10: * Cougaar Open Source Website (www.cougaar.org).
11: *
12: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
13: * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
14: * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
15: * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
16: * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
17: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
18: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
19: * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
20: * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
21: * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
22: * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23: *
24: * </copyright>
25: */
26: package org.cougaar.lib.web.arch.util;
27:
28: import java.util.List;
29:
30: /**
31: * A table of (prefix --> object) entries, suitable for
32: * Servlet PATH_INFO lookups.
33: * <p>
34: * Each prefix <code>match(input)</code> lookup supports either an
35: * exact match or a prefix match + "/" + optional additional text.
36: * (I.e. the regular expression: <code>prefix(/.*)?</code>).
37: * <p>
38: * The table maintains the insertion ordering.
39: * <p>
40: * For example, the table could contain:<ol>
41: * <li>add("/foo/x", xObj)</li>
42: * <li>add("/bar", barObj)</li>
43: * <li>add("/foo", fooObj)</li>
44: * </ol>
45: * where:<ul>
46: * <li>match("/foo") --> fooObj</li>
47: * <li>match("/foo/") --> {fooObj, "/"}</li>
48: * <li>match("/foo/abc") --> {fooObj, "/abc"}</li>
49: * <li>match("/fooblah") --> null</li>
50: * <li>match("/foo/x") --> xObj</li>
51: * <li>match("/foo/x/") --> {xObj, "/"}</li>
52: * <li>match("/foo/x/y") --> {xObj, "/y"}</li>
53: * <li>match("/foo/xyz") --> {fooObj, "/xyz"}</li>
54: * <li>match("/bar") --> barObj</li>
55: * <li>match("/bark") --> null</li>
56: * <li>match("/junk") --> null</li>
57: * </ul>
58: */
59: public interface PrefixTable {
60:
61: /**
62: * @return null if no match, PrefixMatch if input contains the
63: * prefix + "/" + optional additional text, or Object if the
64: * input exactly matches a registered prefix.
65: */
66: Object match(String input);
67:
68: /**
69: * @return List of prefix entries
70: */
71: List list();
72:
73: /**
74: * @return true if added
75: */
76: boolean add(String prefix, Object value);
77:
78: /**
79: * @return non-null value if prefix was listed
80: */
81: Object remove(String prefix);
82:
83: /**
84: * @return List of values
85: */
86: List removeAll();
87:
88: }
|