Author: lukaszlenart
Date: Wed Oct 23 12:36:22 2013
New Revision: 1535002
URL: http://svn.apache.org/r1535002
Log:
WW-4232 Implements new DeprecationInterceptor and adds it to basicStack and
defaultStack
Added:
struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/DeprecationInterceptor.java
Modified:
struts/struts2/trunk/core/src/main/java/org/apache/struts2/StrutsConstants.java
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/template/TemplateEngineManager.java
struts/struts2/trunk/core/src/main/resources/struts-default.xml
Modified:
struts/struts2/trunk/core/src/main/java/org/apache/struts2/StrutsConstants.java
URL:
http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/StrutsConstants.java?rev=1535002&r1=1535001&r2=1535002&view=diff
==============================================================================
---
struts/struts2/trunk/core/src/main/java/org/apache/struts2/StrutsConstants.java
(original)
+++
struts/struts2/trunk/core/src/main/java/org/apache/struts2/StrutsConstants.java
Wed Oct 23 12:36:22 2013
@@ -277,4 +277,6 @@ public final class StrutsConstants {
/** enables access to actions in other namespaces than current with
action: prefix **/
public static final String STRUTS_MAPPER_ACTION_PREFIX_CROSSNAMESPACES =
"struts.mapper.action.prefix.crossNamespaces";
+ public static final String DEFAULT_TEMPLATE_TYPE_CONFIG_KEY =
"struts.ui.templateSuffix";
+
}
Modified:
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/template/TemplateEngineManager.java
URL:
http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/template/TemplateEngineManager.java?rev=1535002&r1=1535001&r2=1535002&view=diff
==============================================================================
---
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/template/TemplateEngineManager.java
(original)
+++
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/template/TemplateEngineManager.java
Wed Oct 23 12:36:22 2013
@@ -21,20 +21,20 @@
package org.apache.struts2.components.template;
+import com.opensymphony.xwork2.config.ConfigurationException;
+import com.opensymphony.xwork2.inject.Container;
+import com.opensymphony.xwork2.inject.Inject;
+import org.apache.struts2.StrutsConstants;
+
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
-import com.opensymphony.xwork2.config.ConfigurationException;
-import com.opensymphony.xwork2.inject.Container;
-import com.opensymphony.xwork2.inject.Inject;
-
/**
* The TemplateEngineManager will return a template engine for the template
*/
public class TemplateEngineManager {
- public static final String DEFAULT_TEMPLATE_TYPE_CONFIG_KEY =
"struts.ui.templateSuffix";
/** The default template extenstion is <code>ftl</code>. */
public static final String DEFAULT_TEMPLATE_TYPE = "ftl";
@@ -44,7 +44,7 @@ public class TemplateEngineManager {
Container container;
String defaultTemplateType;
- @Inject(DEFAULT_TEMPLATE_TYPE_CONFIG_KEY)
+ @Inject(StrutsConstants.DEFAULT_TEMPLATE_TYPE_CONFIG_KEY)
public void setDefaultTemplateType(String type) {
this.defaultTemplateType = type;
}
Added:
struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/DeprecationInterceptor.java
URL:
http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/DeprecationInterceptor.java?rev=1535002&view=auto
==============================================================================
---
struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/DeprecationInterceptor.java
(added)
+++
struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/DeprecationInterceptor.java
Wed Oct 23 12:36:22 2013
@@ -0,0 +1,105 @@
+package org.apache.struts2.interceptor;
+
+import com.opensymphony.xwork2.ActionInvocation;
+import com.opensymphony.xwork2.XWorkConstants;
+import com.opensymphony.xwork2.inject.Container;
+import com.opensymphony.xwork2.inject.Inject;
+import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
+import com.opensymphony.xwork2.util.logging.Logger;
+import com.opensymphony.xwork2.util.logging.LoggerFactory;
+import org.apache.struts2.StrutsConstants;
+
+import java.lang.reflect.Field;
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * <!-- START SNIPPET: description -->
+ * In devMode checks if application uses deprecated or unknown constants and
displays warning
+ * when logging level is set to DEBUG
+ * <!-- END SNIPPET: description -->
+ *
+ * <!-- START SNIPPET: parameters -->
+ * no special parameters yet
+ * <!-- END SNIPPET: parameters -->
+ */
+public class DeprecationInterceptor extends AbstractInterceptor {
+
+ private static final Logger LOG =
LoggerFactory.getLogger(DeprecationInterceptor.class);
+
+ private Container container;
+ private boolean devMode;
+
+ @Override
+ public String intercept(ActionInvocation invocation) throws Exception {
+ if (devMode) {
+ String message = validate();
+ if (message != null) {
+ LOG.debug(message);
+ }
+ }
+ return invocation.invoke();
+ }
+
+ /**
+ * Validates constants. Validation goes on only if devMode is set.
+ *
+ * @throws Exception
+ */
+ private String validate() throws Exception {
+ Set<String> constants = new HashSet<String>();
+
+ readConstants(constants, StrutsConstants.class);
+ readConstants(constants, XWorkConstants.class);
+
+ Set<String> applicationConstants =
container.getInstanceNames(String.class);
+ String message = null;
+ if (!constants.containsAll(applicationConstants)) {
+ Set<String> deprecated = new HashSet<String>(applicationConstants);
+ deprecated.removeAll(constants);
+ message = prepareMessage(deprecated);
+ }
+ return message;
+ }
+
+ private void readConstants(Set<String> constants, Class clazz) throws
IllegalAccessException {
+ for (Field field : clazz.getDeclaredFields()) {
+ if (String.class.equals(field.getType())) {
+ constants.add((String) field.get(clazz));
+ }
+ }
+ }
+
+ /**
+ * Prepares message to display
+ *
+ * @param deprecated A set with deprecated/unknown constants
+ */
+ private String prepareMessage(Set<String> deprecated) {
+ StringBuilder sb = new StringBuilder("\n");
+
sb.append("*******************************************************************************\n");
+ sb.append("**
**\n");
+ sb.append("** WARNING
**\n");
+ sb.append("** YOU USE DEPRECATED / UNKNOWN CONSTANTS
**\n");
+ sb.append("**
**\n");
+
+ for (String dep : deprecated) {
+ sb.append(String.format("** -> %-69s **\n", dep));
+ }
+
+
sb.append("*******************************************************************************\n");
+
+ return sb.toString();
+ }
+
+ @Inject(StrutsConstants.STRUTS_DEVMODE)
+ public void setDevMode(String state) {
+ this.devMode = "true".equals(state);
+ }
+
+ @Inject
+ public void setContainer(Container container) {
+ this.container = container;
+ }
+
+}
Modified: struts/struts2/trunk/core/src/main/resources/struts-default.xml
URL:
http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/resources/struts-default.xml?rev=1535002&r1=1535001&r2=1535002&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/main/resources/struts-default.xml (original)
+++ struts/struts2/trunk/core/src/main/resources/struts-default.xml Wed Oct 23
12:36:22 2013
@@ -187,6 +187,7 @@
<interceptor name="roles"
class="org.apache.struts2.interceptor.RolesInterceptor" />
<interceptor name="annotationWorkflow"
class="com.opensymphony.xwork2.interceptor.annotations.AnnotationWorkflowInterceptor"
/>
<interceptor name="multiselect"
class="org.apache.struts2.interceptor.MultiselectInterceptor" />
+ <interceptor name="deprecation"
class="org.apache.struts2.interceptor.DeprecationInterceptor" />
<!-- Basic stack -->
<interceptor-stack name="basicStack">
@@ -200,6 +201,7 @@
<param
name="excludeParams">dojo\..*,^struts\..*,^session\..*,^request\..*,^application\..*,^servlet(Request|Response)\..*,parameters\...*</param>
</interceptor-ref>
<interceptor-ref name="conversionError"/>
+ <interceptor-ref name="deprecation"/>
</interceptor-stack>
<!-- Sample validation and workflow stack -->
@@ -309,6 +311,7 @@
<param
name="excludeMethods">input,back,cancel,browse</param>
</interceptor-ref>
<interceptor-ref name="debugging"/>
+ <interceptor-ref name="deprecation"/>
</interceptor-stack>
<!-- The completeStack is here for backwards compatibility for