1 /*
2 * $Id: ProfilingActivationInterceptor.java 478625 2006-11-23 17:31:52Z wsmoak $
3 *
4 * Licensed to the Apache Software Foundation (ASF) under one
5 * or more contributor license agreements. See the NOTICE file
6 * distributed with this work for additional information
7 * regarding copyright ownership. The ASF licenses this file
8 * to you under the Apache License, Version 2.0 (the
9 * "License"); you may not use this file except in compliance
10 * with the License. You may obtain a copy of the License at
11 *
12 * http://www.apache.org/licenses/LICENSE-2.0
13 *
14 * Unless required by applicable law or agreed to in writing,
15 * software distributed under the License is distributed on an
16 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17 * KIND, either express or implied. See the License for the
18 * specific language governing permissions and limitations
19 * under the License.
20 */
21 package org.apache.struts2.interceptor;
22
23 import org.apache.struts2.dispatcher.Dispatcher;
24
25 import com.opensymphony.xwork2.ActionInvocation;
26 import com.opensymphony.xwork2.inject.Inject;
27 import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
28 import com.opensymphony.xwork2.util.profiling.UtilTimerStack;
29
30 import org.apache.struts2.StrutsConstants;
31
32 /**
33 * <!-- START SNIPPET: description -->
34 *
35 * Allows profiling to be enabled or disabled via request parameters, when
36 * devMode is enabled.
37 *
38 * <!-- END SNIPPET: description -->
39 *
40 *
41 * <!-- START SNIPPET: parameters -->
42 *
43 * <ul>
44 * <li>profilingKey</li>
45 * </ul>
46 *
47 * <!-- END SNIPPET: parameters -->
48 *
49 * <!-- START SNIPPET: extending -->
50 *
51 * none
52 *
53 * <!-- END SNIPPET: extending -->
54 *
55 * <pre>
56 * <!-- START SNIPPET: example -->
57 *
58 * // to change the profiling key
59 * <action ...>
60 * ...
61 * <interceptor-ref name="profiling">
62 * <param name="profilingKey">profilingKey</param>
63 * </interceptor-ref>
64 * ...
65 * </action>
66 *
67 * <!-- END SNIPPET: example -->
68 * </pre>
69 *
70 * @version $Date: 2006-11-23 18:31:52 +0100 (Do, 23 Nov 2006) $ $Id: ProfilingActivationInterceptor.java 478625 2006-11-23 17:31:52Z wsmoak $
71 */
72 public class ProfilingActivationInterceptor extends AbstractInterceptor {
73
74 private String profilingKey = "profiling";
75 private boolean devMode;
76
77 /**
78 * @return the profilingKey
79 */
80 public String getProfilingKey() {
81 return profilingKey;
82 }
83
84 /**
85 * @param profilingKey the profilingKey to set
86 */
87 public void setProfilingKey(String profilingKey) {
88 this.profilingKey = profilingKey;
89 }
90
91 @Inject(StrutsConstants.STRUTS_DEVMODE)
92 public void setDevMode(String mode) {
93 this.devMode = "true".equals(mode);
94 }
95
96 @Override
97 public String intercept(ActionInvocation invocation) throws Exception {
98 if (devMode) {
99 Object val = invocation.getInvocationContext().getParameters().get(profilingKey);
100 if (val != null) {
101 String sval = (val instanceof String ? (String)val : ((String[])val)[0]);
102 boolean enable = "yes".equalsIgnoreCase(sval) || "true".equalsIgnoreCase(sval);
103 UtilTimerStack.setActive(enable);
104 invocation.getInvocationContext().getParameters().remove(profilingKey);
105 }
106 }
107 return invocation.invoke();
108
109 }
110
111 }