1 |
|
|
2 |
|
|
3 |
|
|
4 |
|
|
5 |
|
|
6 |
|
|
7 |
|
|
8 |
|
|
9 |
|
|
10 |
|
|
11 |
|
|
12 |
|
|
13 |
|
|
14 |
|
|
15 |
|
|
16 |
|
|
17 |
|
package org.apache.jetspeed.profiler.rules.impl; |
18 |
|
|
19 |
|
import java.util.Iterator; |
20 |
|
import java.util.StringTokenizer; |
21 |
|
|
22 |
|
import org.apache.commons.logging.Log; |
23 |
|
import org.apache.commons.logging.LogFactory; |
24 |
|
import org.apache.jetspeed.profiler.ProfileLocator; |
25 |
|
import org.apache.jetspeed.profiler.Profiler; |
26 |
|
import org.apache.jetspeed.profiler.rules.ProfileResolvers; |
27 |
|
import org.apache.jetspeed.profiler.rules.ProfilingRule; |
28 |
|
import org.apache.jetspeed.profiler.rules.RuleCriterion; |
29 |
|
import org.apache.jetspeed.profiler.rules.RuleCriterionResolver; |
30 |
|
import org.apache.jetspeed.request.RequestContext; |
31 |
|
|
32 |
|
|
33 |
|
|
34 |
|
|
35 |
|
|
36 |
|
|
37 |
|
|
38 |
|
public class RoleFallbackProfilingRule |
39 |
|
extends AbstractProfilingRule |
40 |
|
implements ProfilingRule |
41 |
|
{ |
42 |
0 |
protected final static Log log = LogFactory.getLog(RoleFallbackProfilingRule.class); |
43 |
|
private final static long serialVersionUID = 1L; |
44 |
|
|
45 |
|
public RoleFallbackProfilingRule() |
46 |
0 |
{ |
47 |
0 |
this.setClassname(class="keyword">this.getClass().getName()); |
48 |
|
|
49 |
0 |
} |
50 |
|
|
51 |
|
public RoleFallbackProfilingRule(ProfileResolvers resolvers) |
52 |
|
{ |
53 |
0 |
super(resolvers); |
54 |
0 |
this.setClassname(class="keyword">this.getClass().getName()); |
55 |
0 |
} |
56 |
|
|
57 |
|
|
58 |
|
|
59 |
|
|
60 |
|
|
61 |
|
public ProfileLocator apply(RequestContext context, Profiler service) |
62 |
|
{ |
63 |
0 |
StringBuffer key = new StringBuffer(); |
64 |
0 |
int count = 0; |
65 |
|
|
66 |
|
|
67 |
0 |
Iterator criteria = this.getRuleCriteria().iterator(); |
68 |
0 |
while (criteria.hasNext()) |
69 |
|
{ |
70 |
0 |
RuleCriterion criterion = (RuleCriterion)criteria.next(); |
71 |
0 |
if (criterion.getType() == null) |
72 |
|
{ |
73 |
0 |
log.warn("Invalid criterion provided - type null on rule " + this); |
74 |
|
} |
75 |
0 |
RuleCriterionResolver resolver = getResolver(criterion.getType()); |
76 |
0 |
if (resolver == null) |
77 |
|
{ |
78 |
0 |
resolver = getDefaultResolver(); |
79 |
|
} |
80 |
0 |
String value = resolver.resolve(context, criterion); |
81 |
0 |
if (value != null && (resolver instanceof RoleCriterionResolver || |
82 |
|
resolver instanceof GroupCriterionResolver)) |
83 |
|
{ |
84 |
0 |
StringTokenizer tokenizer = new StringTokenizer(value, StandardResolver.VALUE_DELIMITER); |
85 |
0 |
while (tokenizer.hasMoreTokens()) |
86 |
|
{ |
87 |
0 |
String token = tokenizer.nextToken(); |
88 |
0 |
key.append(criterion.getName()); |
89 |
0 |
key.append(ProfileLocator.PATH_SEPARATOR); |
90 |
0 |
key.append(token); |
91 |
0 |
if (tokenizer.hasMoreTokens()) |
92 |
|
{ |
93 |
0 |
key.append(ProfileLocator.PATH_SEPARATOR); |
94 |
|
} |
95 |
0 |
} |
96 |
0 |
} |
97 |
|
else |
98 |
|
{ |
99 |
0 |
key.append(criterion.getName()); |
100 |
0 |
key.append(ProfileLocator.PATH_SEPARATOR); |
101 |
0 |
key.append(value); |
102 |
|
} |
103 |
0 |
if (criteria.hasNext()) |
104 |
|
{ |
105 |
0 |
key.append(ProfileLocator.PATH_SEPARATOR); |
106 |
|
} |
107 |
0 |
count++; |
108 |
0 |
} |
109 |
|
|
110 |
|
|
111 |
0 |
String requestPath = context.getPath(); |
112 |
0 |
String locatorKey = ((requestPath != null) ? requestPath : "/") + ProfileLocator.PATH_SEPARATOR + key.toString(); |
113 |
0 |
ProfileLocator locator = getLocatorFromCache(locatorKey); |
114 |
0 |
if (locator != null) |
115 |
|
{ |
116 |
0 |
return locator; |
117 |
|
} |
118 |
|
|
119 |
|
|
120 |
0 |
locator = service.createLocator(context); |
121 |
0 |
criteria = this.getRuleCriteria().iterator(); |
122 |
0 |
while (criteria.hasNext()) |
123 |
|
{ |
124 |
0 |
RuleCriterion criterion = (RuleCriterion)criteria.next(); |
125 |
0 |
if (criterion.getType() == null) |
126 |
|
{ |
127 |
0 |
log.warn("Invalid criterion provided - name or type null on rule " + this); |
128 |
|
} |
129 |
0 |
RuleCriterionResolver resolver = getResolver(criterion.getType()); |
130 |
0 |
if (resolver != null) |
131 |
|
{ |
132 |
0 |
String value = resolver.resolve(context, criterion); |
133 |
0 |
boolean isControl = resolver.isControl(criterion); |
134 |
0 |
boolean isNavigation = resolver.isNavigation(criterion); |
135 |
0 |
if (value != null && (resolver instanceof RoleCriterionResolver || |
136 |
|
resolver instanceof GroupCriterionResolver)) |
137 |
|
{ |
138 |
0 |
StringTokenizer tokenizer = new StringTokenizer(value, StandardResolver.VALUE_DELIMITER); |
139 |
0 |
while (tokenizer.hasMoreTokens()) |
140 |
|
{ |
141 |
0 |
String token = tokenizer.nextToken(); |
142 |
0 |
locator.add(criterion, isControl, isNavigation, token); |
143 |
0 |
} |
144 |
0 |
} |
145 |
|
else |
146 |
|
{ |
147 |
0 |
locator.add(criterion, isControl, isNavigation, value); |
148 |
|
} |
149 |
|
} |
150 |
0 |
} |
151 |
|
|
152 |
0 |
addLocatorToCache(locatorKey, locator); |
153 |
0 |
return locator; |
154 |
|
|
155 |
|
} |
156 |
|
} |