You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by lu...@apache.org on 2013/10/23 14:36:22 UTC
svn commit: r1535002 - in /struts/struts2/trunk/core/src/main:
java/org/apache/struts2/ java/org/apache/struts2/components/template/
java/org/apache/struts2/interceptor/ resources/
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