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