Author: musachy
Date: Mon Dec  1 12:41:26 2008
New Revision: 722219

URL: http://svn.apache.org/viewvc?rev=722219&view=rev
Log:
WW-2576 Add config setting packageLocatorBase, so only packages that start with 
that name will be scanned.

Thanks to Piero Sartini for patch

Modified:
    
struts/sandbox/trunk/struts2-convention-plugin/src/main/java/org/apache/struts2/convention/PackageBasedActionConfigBuilder.java
    
struts/sandbox/trunk/struts2-convention-plugin/src/main/resources/struts-plugin.xml
    
struts/sandbox/trunk/struts2-convention-plugin/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java

Modified: 
struts/sandbox/trunk/struts2-convention-plugin/src/main/java/org/apache/struts2/convention/PackageBasedActionConfigBuilder.java
URL: 
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-convention-plugin/src/main/java/org/apache/struts2/convention/PackageBasedActionConfigBuilder.java?rev=722219&r1=722218&r2=722219&view=diff
==============================================================================
--- 
struts/sandbox/trunk/struts2-convention-plugin/src/main/java/org/apache/struts2/convention/PackageBasedActionConfigBuilder.java
 (original)
+++ 
struts/sandbox/trunk/struts2-convention-plugin/src/main/java/org/apache/struts2/convention/PackageBasedActionConfigBuilder.java
 Mon Dec  1 12:41:26 2008
@@ -75,6 +75,7 @@
     private String[] excludePackages;
     private String[] packageLocators;
     private String[] excludeJars;
+    private String packageLocatorsBasePackage;
     private boolean disableJarScanning = true;
     private boolean disableActionScanning = false;
     private boolean disablePackageLocatorsScanning = false;
@@ -205,7 +206,16 @@
     }
 
     /**
-     * @param   packageLocators (Optional) Map actions that match the 
"*${Suffix}" pattern
+     * @param   packageLocatorsBasePackage (Optional) If set, only packages 
that start with this
+     * name will be scanned for actions.
+     */
+    @Inject(value = "struts.convention.package.locators.basePackage", required 
= false)
+    public void setPackageLocatorsBase(String packageLocatorsBasePackage) {
+        this.packageLocatorsBasePackage = packageLocatorsBasePackage;
+    }        
+
+    /**
+     * @param   mapAllMatches (Optional) Map actions that match the 
"*${Suffix}" pattern
      *                          even if they don't have a default method. The 
mapping from
      *                          the url to the action will be delegated the 
action mapper.
      */
@@ -330,7 +340,7 @@
         return new Test<ClassFinder.ClassInfo>() {
             public boolean test(ClassFinder.ClassInfo classInfo) {
                 String packageName = classInfo.getPackageName();
-                if (packageName.length() > 0) {
+                if (packageName.length() > 0 && (packageLocatorsBasePackage == 
null || packageName.startsWith(packageLocatorsBasePackage))) {
                     String[] splitted = packageName.split("\\.");
 
                     boolean packageMatches = StringTools.contains(splitted, 
packageLocator, false);
@@ -775,4 +785,4 @@
             }
         }
     }
-}
\ No newline at end of file
+}

Modified: 
struts/sandbox/trunk/struts2-convention-plugin/src/main/resources/struts-plugin.xml
URL: 
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-convention-plugin/src/main/resources/struts-plugin.xml?rev=722219&r1=722218&r2=722219&view=diff
==============================================================================
--- 
struts/sandbox/trunk/struts2-convention-plugin/src/main/resources/struts-plugin.xml
 (original)
+++ 
struts/sandbox/trunk/struts2-convention-plugin/src/main/resources/struts-plugin.xml
 Mon Dec  1 12:41:26 2008
@@ -31,28 +31,29 @@
 
   <bean type="org.apache.struts2.convention.ActionConfigBuilder" 
class="org.apache.struts2.convention.PackageBasedActionConfigBuilder"/>
   <bean type="org.apache.struts2.convention.ActionNameBuilder" 
class="org.apache.struts2.convention.SEOActionNameBuilder"/>
-  <bean type="org.apache.struts2.convention.ResultMapBuilder" 
class="org.apache.struts2.convention.DefaultResultMapBuilder"/>
+  <bean type="org.apache.struts2.convention.ResultMapBuilder" 
class="org.apache.struts2.convention.DefaultResultMapBuilder"/>
   <bean type="org.apache.struts2.convention.InterceptorMapBuilder" 
class="org.apache.struts2.convention.DefaultInterceptorMapBuilder"/>
   <bean type="org.apache.struts2.convention.ConventionsService" 
class="org.apache.struts2.convention.ConventionsServiceImpl"/>
 
   <bean type="com.opensymphony.xwork2.config.PackageProvider" 
class="org.apache.struts2.convention.ClasspathConfigurationProvider"/>
 
-  <constant name="struts.convention.result.path" value="/WEB-INF/content/"/>
-  <constant name="struts.convention.result.flatLayout" value="true"/>
-  <constant name="struts.convention.action.suffix" value="Action"/>
-  <constant name="struts.convention.action.disableScanning" value="false"/>
-  <constant name="struts.convention.action.disableJarScanning" value="true"/>
-  <constant name="struts.convention.action.mapAllMatches" value="false"/>
+  <constant name="struts.convention.result.path" value="/WEB-INF/content/"/>
+  <constant name="struts.convention.result.flatLayout" value="true"/>
+  <constant name="struts.convention.action.suffix" value="Action"/>
+  <constant name="struts.convention.action.disableScanning" value="false"/>
+  <constant name="struts.convention.action.disableJarScanning" value="true"/>
+  <constant name="struts.convention.action.mapAllMatches" value="false"/>
   <constant name="struts.convention.action.checkImplementsAction" 
value="true"/>
   <constant name="struts.convention.default.parent.package" 
value="convention-default"/>
   <constant name="struts.convention.action.name.lowercase" value="true"/>
   <constant name="struts.convention.action.name.separator" value="-"/>
-  <constant name="struts.convention.package.locators" 
value="action,actions,struts,struts2"/>
+  <constant name="struts.convention.package.locators" 
value="action,actions,struts,struts2"/>
   <constant name="struts.convention.package.locators.disable" value="false"/>
+  <constant name="struts.convention.package.locators.basePackage" value=""/>
   <constant name="struts.convention.exclude.packages" 
value="org.apache.struts.*,org.apache.struts2.*,org.springframework.web.struts.*,org.springframework.web.struts2.*,org.hibernate.*"/>
   <constant name="struts.convention.relative.result.types" 
value="dispatcher,velocity,freemarker"/>
   <constant name="struts.convention.redirect.to.slash" value="true"/>
-  <constant name="struts.mapper.alwaysSelectFullNamespace" value="true"/>
+  <constant name="struts.mapper.alwaysSelectFullNamespace" value="true"/>
 
   <package name="convention-default" extends="struts-default">
   </package>

Modified: 
struts/sandbox/trunk/struts2-convention-plugin/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java
URL: 
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-convention-plugin/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java?rev=722219&r1=722218&r2=722219&view=diff
==============================================================================
--- 
struts/sandbox/trunk/struts2-convention-plugin/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java
 (original)
+++ 
struts/sandbox/trunk/struts2-convention-plugin/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java
 Mon Dec  1 12:41:26 2008
@@ -102,7 +102,7 @@
     }
 
     public void testPackageLocators() throws MalformedURLException {
-        run(null, "actions", null);
+        run(null, "actions,dontfind", null);
     }
 
     private void run(String actionPackages, String packageLocators, String 
excludePackages) throws MalformedURLException {
@@ -289,6 +289,7 @@
         if (excludePackages != null) {
             builder.setExcludePackages(excludePackages);
         }
+        
builder.setPackageLocatorsBase("org.apache.struts2.convention.actions");
         builder.buildActionConfigs();
         verify(resultMapBuilder);
 


Reply via email to