Author: lukaszlenart
Date: Tue Jul 31 20:38:52 2012
New Revision: 1367763

URL: http://svn.apache.org/viewvc?rev=1367763&view=rev
Log:
Solves problem with rest-showcase app and adds additional test to proof how 
excludePackages works
Added:
    struts/struts2/trunk/apps/rest-showcase/src/main/java/org/demo/
    struts/struts2/trunk/apps/rest-showcase/src/main/java/org/demo/rest/
    struts/struts2/trunk/apps/rest-showcase/src/main/java/org/demo/rest/example/
      - copied from r1364910, 
struts/struts2/trunk/apps/rest-showcase/src/main/java/org/apache/struts2/rest/example/
    
struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/actions/exclude/
    
struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/actions/exclude/ExcludeAction.java
      - copied, changed from r1364910, 
struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/actions/action/ActionNameAction.java
Removed:
    struts/struts2/trunk/apps/rest-showcase/src/main/java/org/apache/
Modified:
    
struts/struts2/trunk/apps/rest-showcase/src/main/java/org/demo/rest/example/Order.java
    
struts/struts2/trunk/apps/rest-showcase/src/main/java/org/demo/rest/example/OrdersController.java
    
struts/struts2/trunk/apps/rest-showcase/src/main/java/org/demo/rest/example/OrdersService.java
    
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/apps/rest-showcase/src/main/java/org/demo/rest/example/Order.java
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/apps/rest-showcase/src/main/java/org/demo/rest/example/Order.java?rev=1367763&r1=1364910&r2=1367763&view=diff
==============================================================================
--- 
struts/struts2/trunk/apps/rest-showcase/src/main/java/org/demo/rest/example/Order.java
 (original)
+++ 
struts/struts2/trunk/apps/rest-showcase/src/main/java/org/demo/rest/example/Order.java
 Tue Jul 31 20:38:52 2012
@@ -1,4 +1,4 @@
-package org.apache.struts2.rest.example;
+package org.demo.rest.example;
 
 public class Order {
     String id;

Modified: 
struts/struts2/trunk/apps/rest-showcase/src/main/java/org/demo/rest/example/OrdersController.java
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/apps/rest-showcase/src/main/java/org/demo/rest/example/OrdersController.java?rev=1367763&r1=1364910&r2=1367763&view=diff
==============================================================================
--- 
struts/struts2/trunk/apps/rest-showcase/src/main/java/org/demo/rest/example/OrdersController.java
 (original)
+++ 
struts/struts2/trunk/apps/rest-showcase/src/main/java/org/demo/rest/example/OrdersController.java
 Tue Jul 31 20:38:52 2012
@@ -1,16 +1,11 @@
-package org.apache.struts2.rest.example;
+package org.demo.rest.example;
 
 import java.util.Collection;
 
-import org.apache.struts2.dispatcher.ServletActionRedirectResult;
 import org.apache.struts2.rest.DefaultHttpHeaders;
 import org.apache.struts2.rest.HttpHeaders;
 import org.apache.struts2.convention.annotation.Results;
 import org.apache.struts2.convention.annotation.Result;
-import org.apache.struts2.convention.annotation.ParentPackage;
-import org.apache.struts2.convention.annotation.Namespaces;
-import org.apache.struts2.convention.annotation.Namespace;
-import org.apache.struts2.convention.annotation.InterceptorRef;
 
 import com.opensymphony.xwork2.ModelDriven;
 import com.opensymphony.xwork2.Validateable;

Modified: 
struts/struts2/trunk/apps/rest-showcase/src/main/java/org/demo/rest/example/OrdersService.java
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/apps/rest-showcase/src/main/java/org/demo/rest/example/OrdersService.java?rev=1367763&r1=1364910&r2=1367763&view=diff
==============================================================================
--- 
struts/struts2/trunk/apps/rest-showcase/src/main/java/org/demo/rest/example/OrdersService.java
 (original)
+++ 
struts/struts2/trunk/apps/rest-showcase/src/main/java/org/demo/rest/example/OrdersService.java
 Tue Jul 31 20:38:52 2012
@@ -1,4 +1,4 @@
-package org.apache.struts2.rest.example;
+package org.demo.rest.example;
 
 import java.util.*;
 

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=1367763&r1=1367762&r2=1367763&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 Jul 31 20:38:52 2012
@@ -492,9 +492,17 @@ public class PackageBasedActionConfigBui
      *         package-based action scan
      */
     protected boolean includeClassNameInActionScan(String className) {
-
         String classPackageName = StringUtils.substringBeforeLast(className, 
".");
+        return (checkActionPackages(classPackageName) || 
checkPackageLocators(classPackageName)) && 
checkExcludePackages(classPackageName);
+    }
 
+    /**
+     * Checks if provided class package is on the exclude list
+     *
+     * @param classPackageName name of class package
+     * @return false if class package is on the {@link #excludePackages} list
+     */
+    protected boolean checkExcludePackages(String classPackageName) {
         if(excludePackages != null && excludePackages.length > 0) {
             WildcardHelper wildcardHelper = new WildcardHelper();
 
@@ -508,7 +516,16 @@ public class PackageBasedActionConfigBui
                 }
             }
         }
+        return true;
+    }
 
+    /**
+     * Checks if class package match provided list of action packages
+     *
+     * @param classPackageName name of class package
+     * @return true if class package is on the {@link #actionPackages} list
+     */
+    protected boolean checkActionPackages(String classPackageName) {
         if (actionPackages != null) {
             for (String packageName : actionPackages) {
                 String strictPackageName = packageName + ".";
@@ -517,7 +534,16 @@ public class PackageBasedActionConfigBui
                     return true;
             }
         }
+        return false;
+    }
 
+    /**
+     * Checks if class package match provided list of package locators
+     *
+     * @param classPackageName name of class package
+     * @return true if class package is on the {@link #packageLocators} list
+     */
+    protected boolean checkPackageLocators(String classPackageName) {
         if (packageLocators != null && !disablePackageLocatorsScanning) {
             for (String packageLocator : packageLocators) {
                 if (classPackageName.length() > 0
@@ -530,10 +556,9 @@ public class PackageBasedActionConfigBui
                 }
             }
         }
-
         return false;
     }
-    
+
     /**
      * Construct a {@link Test} object that determines if a specified class 
name
      * should be included in the package scan based on the clazz's package 
name.

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=1367763&r1=1367762&r2=1367763&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 Jul 31 20:38:52 2012
@@ -60,6 +60,7 @@ import org.apache.struts2.convention.act
 import 
org.apache.struts2.convention.actions.defaultinterceptor.SingleActionNameAction2;
 import 
org.apache.struts2.convention.actions.exception.ExceptionsActionLevelAction;
 import 
org.apache.struts2.convention.actions.exception.ExceptionsMethodLevelAction;
+import org.apache.struts2.convention.actions.exclude.ExcludeAction;
 import 
org.apache.struts2.convention.actions.interceptor.ActionLevelInterceptor2Action;
 import 
org.apache.struts2.convention.actions.interceptor.ActionLevelInterceptor3Action;
 import 
org.apache.struts2.convention.actions.interceptor.ActionLevelInterceptorAction;
@@ -133,6 +134,10 @@ public class PackageBasedActionConfigBui
         run(null, "actions", "dontfind");
     }
 
+    public void testJustExcludedPackages() throws MalformedURLException {
+        run("org.apache.struts2.convention.actions", null, 
"org.apache.struts2.convention.actions.exclude");
+    }
+
     private void run(String actionPackages, String packageLocators, String 
excludePackages) throws MalformedURLException {
         //setup interceptors
         List<InterceptorConfig> defaultInterceptors = new 
ArrayList<InterceptorConfig>();
@@ -208,6 +213,8 @@ public class PackageBasedActionConfigBui
             "/chain", strutsDefault, null);
         PackageConfig transPkg = 
makePackageConfig("org.apache.struts2.convention.actions.transactions#struts-default#/transactions",
             "/transactions", strutsDefault, null);
+        PackageConfig excludePkg = 
makePackageConfig("org.apache.struts2.convention.actions.exclude#struts-default#/exclude",
+            "/exclude", strutsDefault, null);
 
         ResultMapBuilder resultMapBuilder = 
createStrictMock(ResultMapBuilder.class);
         checkOrder(resultMapBuilder, false);
@@ -312,6 +319,12 @@ public class PackageBasedActionConfigBui
         expect(resultMapBuilder.build(TransNameAction.class, 
getAnnotation(TransNameAction.class, "trans1", Action.class), "trans1", 
transPkg)).andReturn(results);
         expect(resultMapBuilder.build(TransNameAction.class, 
getAnnotation(TransNameAction.class, "trans2", Action.class), "trans2", 
transPkg)).andReturn(results);
 
+        /* org.apache.struts2.convention.actions.exclude */
+        // this is only expected when excludePackages was specified with 
org.apache.struts2.convention.actions.exclude package
+        if (excludePackages == null || 
!excludePackages.contains("org.apache.struts2.convention.actions.exclude")) {
+            expect(resultMapBuilder.build(ExcludeAction.class, 
getAnnotation(ExcludeAction.class, "run1", Action.class), "exclude1", 
excludePkg)).andReturn(results);
+        }
+
         EasyMock.replay(resultMapBuilder);
 
         final DummyContainer mockContainer = new DummyContainer();
@@ -567,7 +580,7 @@ public class PackageBasedActionConfigBui
         /* org.apache.struts2.convention.actions */
         pkgConfig = 
configuration.getPackageConfig("org.apache.struts2.convention.actions#struts-default#");
         assertNotNull(pkgConfig);
-        System.out.println("actions " + pkgConfig.getActionConfigs());
+
         assertEquals(4, pkgConfig.getActionConfigs().size());
         verifyActionConfig(pkgConfig, "no-annotation", 
NoAnnotationAction.class, "execute", pkgConfig.getName());
         verifyActionConfig(pkgConfig, "default-result-path", 
DefaultResultPathAction.class, "execute", pkgConfig.getName());
@@ -580,6 +593,14 @@ public class PackageBasedActionConfigBui
         verifyActionConfig(pkgConfig, "trans1", TransNameAction.class, 
"trans1", pkgConfig.getName());
         verifyActionConfig(pkgConfig, "trans2", TransNameAction.class, 
"trans2", pkgConfig.getName());
 
+        /* org.apache.struts2.convention.actions.exclude */
+        pkgConfig = 
configuration.getPackageConfig("org.apache.struts2.convention.actions.exclude#struts-default#/exclude");
+        if (excludePackages != null && 
excludePackages.contains("org.apache.struts2.convention.actions.exclude")) {
+            verifyMissingActionConfig(configuration, "exclude1", 
ExcludeAction.class, "run1", 
"org.apache.struts2.convention.actions.exclude#struts-default#/exclude");
+        } else {
+            verifyActionConfig(pkgConfig, "exclude1", ExcludeAction.class, 
"run1", pkgConfig.getName());
+        }
+
         //test unknown handler automatic chaining
         pkgConfig = 
configuration.getPackageConfig("org.apache.struts2.convention.actions.chain#struts-default#/chain");
         ServletContext context = EasyMock.createNiceMock(ServletContext.class);
@@ -606,6 +627,12 @@ public class PackageBasedActionConfigBui
         assertEquals(packageName, ac.getPackageName());
     }
 
+    private void verifyMissingActionConfig(Configuration configuration, String 
actionName, Class<?> actionClass,
+                                           String methodName, String 
packageName) {
+        assertNull(configuration.getPackageConfig(packageName));
+        
assertFalse(configuration.getPackageConfigNames().contains(packageName));
+    }
+
     private void verifyMissingActionConfig(PackageConfig pkgConfig, String 
actionName, Class<?> actionClass,
             String methodName, String packageName) {
         ActionConfig ac = pkgConfig.getAllActionConfigs().get(actionName);

Copied: 
struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/actions/exclude/ExcludeAction.java
 (from r1364910, 
struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/actions/action/ActionNameAction.java)
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/actions/exclude/ExcludeAction.java?p2=struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/actions/exclude/ExcludeAction.java&p1=struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/actions/action/ActionNameAction.java&r1=1364910&r2=1367763&rev=1367763&view=diff
==============================================================================
--- 
struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/actions/action/ActionNameAction.java
 (original)
+++ 
struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/actions/exclude/ExcludeAction.java
 Tue Jul 31 20:38:52 2012
@@ -18,7 +18,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.struts2.convention.actions.action;
+package org.apache.struts2.convention.actions.exclude;
 
 import org.apache.struts2.convention.annotation.Action;
 
@@ -27,14 +27,9 @@ import org.apache.struts2.convention.ann
  * This is a test action.
  * </p>
  */
-public class ActionNameAction {
-    @Action("action1")
+public class ExcludeAction {
+    @Action("exclude1")
     public String run1() {
         return null;
     }
-
-    @Action("action2")
-    public String run2() {
-        return null;
-    }
 }
\ No newline at end of file


Reply via email to