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);


Reply via email to