Author: lukaszlenart
Date: Tue Apr 10 19:04:57 2012
New Revision: 1311931
URL: http://svn.apache.org/viewvc?rev=1311931&view=rev
Log:
WW-3418 solves problem with excludePackages
Modified:
struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/PackageBasedActionConfigBuilder.java
struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java
Modified:
struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/PackageBasedActionConfigBuilder.java
URL:
http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/PackageBasedActionConfigBuilder.java?rev=1311931&r1=1311930&r2=1311931&view=diff
==============================================================================
---
struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/PackageBasedActionConfigBuilder.java
(original)
+++
struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/PackageBasedActionConfigBuilder.java
Tue Apr 10 19:04:57 2012
@@ -33,6 +33,7 @@ import com.opensymphony.xwork2.inject.Co
import com.opensymphony.xwork2.inject.Inject;
import com.opensymphony.xwork2.util.FileManager;
import com.opensymphony.xwork2.util.TextParseUtil;
+import com.opensymphony.xwork2.util.WildcardHelper;
import com.opensymphony.xwork2.util.classloader.ReloadingClassLoader;
import com.opensymphony.xwork2.util.finder.ClassFinder;
import com.opensymphony.xwork2.util.finder.ClassFinder.ClassInfo;
@@ -486,6 +487,20 @@ public class PackageBasedActionConfigBui
String classPackageName = StringUtils.substringBeforeLast(className,
".");
+ if(excludePackages != null && excludePackages.length > 0) {
+ WildcardHelper wildcardHelper = new WildcardHelper();
+
+ //we really don't care about the results, just the boolean
+ Map<String, String> matchMap = new HashMap<String, String>();
+
+ for(String packageExclude : excludePackages) {
+ int[] packagePattern =
wildcardHelper.compilePattern(packageExclude);
+ if(wildcardHelper.match(matchMap, classPackageName,
packagePattern)) {
+ return false;
+ }
+ }
+ }
+
if (actionPackages != null) {
for (String packageName : actionPackages) {
String strictPackageName = packageName + ".";
Modified:
struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java
URL:
http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java?rev=1311931&r1=1311930&r2=1311931&view=diff
==============================================================================
---
struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java
(original)
+++
struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java
Tue Apr 10 19:04:57 2012
@@ -82,6 +82,7 @@ import org.apache.struts2.convention.act
import org.apache.struts2.convention.actions.skip.Index;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Actions;
+import org.apache.struts2.convention.dontfind.DontFindMeAction;
import org.apache.struts2.dispatcher.ServletDispatcherResult;
import org.easymock.EasyMock;
@@ -115,6 +116,10 @@ public class PackageBasedActionConfigBui
run(null, "actions,dontfind", null);
}
+ public void testExcludedPackages() throws MalformedURLException {
+ run(null, "actions", "dontfind");
+ }
+
private void run(String actionPackages, String packageLocators, String
excludePackages) throws MalformedURLException {
//setup interceptors
List<InterceptorConfig> defaultInterceptors = new
ArrayList<InterceptorConfig>();
@@ -337,6 +342,7 @@ public class PackageBasedActionConfigBui
assertEquals(14, pkgConfig.getActionConfigs().size());
verifyActionConfig(pkgConfig, "action1", ActionNameAction.class,
"run1", pkgConfig.getName());
verifyActionConfig(pkgConfig, "action2", ActionNameAction.class,
"run2", pkgConfig.getName());
+ verifyMissingActionConfig(pkgConfig, "foo", DontFindMeAction.class,
"foo", pkgConfig.getName());
verifyActionConfig(pkgConfig, "action3", "someClassName", "run1",
pkgConfig.getName());
verifyActionConfig(pkgConfig, "actions1", ActionNamesAction.class,
"run", pkgConfig.getName());
verifyActionConfig(pkgConfig, "actions2", ActionNamesAction.class,
"run", pkgConfig.getName());
@@ -350,6 +356,7 @@ public class PackageBasedActionConfigBui
verifyActionConfig(pkgConfig, "class4",
ClassLevelAnnotationsDefaultMethodAction.class, "execute", pkgConfig.getName());
verifyActionConfig(pkgConfig, "class5",
ClassLevelAnnotationAction.class, null, pkgConfig.getName());
verifyActionConfig(pkgConfig, "class6",
ClassLevelAnnotationDefaultMethodAction.class, "execute", pkgConfig.getName());
+ verifyActionConfig(pkgConfig, "class6",
ClassLevelAnnotationDefaultMethodAction.class, "execute", pkgConfig.getName());
/* org.apache.struts2.convention.actions.namespace3 */
//action on namespace1 (action level)
@@ -571,6 +578,12 @@ public class PackageBasedActionConfigBui
assertEquals(packageName, ac.getPackageName());
}
+ private void verifyMissingActionConfig(PackageConfig pkgConfig, String
actionName, Class<?> actionClass,
+ String methodName, String packageName) {
+ ActionConfig ac = pkgConfig.getAllActionConfigs().get(actionName);
+ assertNull(ac);
+ }
+
private void verifyActionConfig(PackageConfig pkgConfig, String
actionName, String actionClass, String methodName, String packageName) {
ActionConfig ac = pkgConfig.getAllActionConfigs().get(actionName);
assertNotNull(ac);