1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.jdiagnose.library.web.breadcrumb;
17
18 import java.util.ArrayList;
19 import java.util.HashSet;
20 import java.util.List;
21 import java.util.Set;
22 import java.util.StringTokenizer;
23
24 import javax.servlet.http.HttpServletRequest;
25
26 /***
27 * @author jmccrindle
28 */
29 public class UriCrumbStrategy implements CrumbStrategy {
30
31 private Set prefixes = new HashSet();
32 private String suffix = ".htm";
33
34
35
36
37 public List getUrls(HttpServletRequest request) {
38 String requestURI = request.getRequestURI().substring(request.getContextPath().length());
39 int indexOfSecondSlash = requestURI.indexOf('/', 1);
40 String prefix = "";
41 if(indexOfSecondSlash >= 0) {
42 prefix = requestURI.substring(0, indexOfSecondSlash);
43 if(!prefixes.contains(prefix)) {
44 prefix = "";
45 }
46 }
47 return pathToUrls(prefix, requestURI, suffix);
48 }
49
50 /***
51 * e.g. /remote/hosts/agents/remotediagnostics.htm becomes:
52 *
53 * /remote/hosts.htm
54 * /remote/hosts/agents.htm?host=${host}
55 *
56 * @param path
57 * @return
58 */
59 public List pathToUrls(String prefix, String path, String suffix) {
60 int lastIndexOfSlash = path.lastIndexOf("/");
61 List result = new ArrayList();
62 if(lastIndexOfSlash > 0) {
63 String dirs = path.substring(0, lastIndexOfSlash);
64 StringTokenizer st = new StringTokenizer(dirs.substring(prefix.length()), "/");
65 StringBuffer root = new StringBuffer(prefix);
66 while(st.hasMoreTokens()) {
67 String token = st.nextToken();
68 root.append("/" + token);
69 result.add(root.toString() + suffix);
70 }
71 }
72 result.add(path);
73 return result;
74 }
75
76 public void setPrefixes(Set prefixes) {
77 this.prefixes = prefixes;
78 }
79 public void setSuffix(String suffix) {
80 this.suffix = suffix;
81 }
82 }