You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by lu...@apache.org on 2013/11/19 18:56:19 UTC
svn commit: r1543527 - in /struts/struts2/trunk:
core/src/main/java/org/apache/struts2/config/
core/src/main/java/org/apache/struts2/dispatcher/ core/src/main/resources/
core/src/test/java/org/apache/struts2/config/
plugins/sitegraph/src/main/java/org/...
Author: lukaszlenart
Date: Tue Nov 19 17:56:18 2013
New Revision: 1543527
URL: http://svn.apache.org/r1543527
Log:
WW-4243 Extracts BeanSelectionProvider interface
Added:
struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/AbstractBeanSelectionProvider.java
struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/DefaultBeanSelectionProvider.java
- copied, changed from r1535515, struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/BeanSelectionProvider.java
struts/struts2/trunk/core/src/test/java/org/apache/struts2/config/DefaultBeanSelectionProviderTest.java
- copied, changed from r1535515, struts/struts2/trunk/core/src/test/java/org/apache/struts2/config/BeanSelectionProviderTest.java
Removed:
struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/BeanSelectionProvider.java
struts/struts2/trunk/core/src/test/java/org/apache/struts2/config/BeanSelectionProviderTest.java
Modified:
struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java
struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/StaticContentLoader.java
struts/struts2/trunk/core/src/main/resources/struts-default.xml
struts/struts2/trunk/plugins/sitegraph/src/main/java/org/apache/struts2/sitegraph/StrutsConfigRetriever.java
Added: struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/AbstractBeanSelectionProvider.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/AbstractBeanSelectionProvider.java?rev=1543527&view=auto
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/AbstractBeanSelectionProvider.java (added)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/AbstractBeanSelectionProvider.java Tue Nov 19 17:56:18 2013
@@ -0,0 +1,114 @@
+package org.apache.struts2.config;
+
+import com.opensymphony.xwork2.ObjectFactory;
+import com.opensymphony.xwork2.config.BeanSelectionProvider;
+import com.opensymphony.xwork2.config.Configuration;
+import com.opensymphony.xwork2.config.ConfigurationException;
+import com.opensymphony.xwork2.inject.Container;
+import com.opensymphony.xwork2.inject.ContainerBuilder;
+import com.opensymphony.xwork2.inject.Context;
+import com.opensymphony.xwork2.inject.Factory;
+import com.opensymphony.xwork2.inject.Scope;
+import com.opensymphony.xwork2.util.ClassLoaderUtil;
+import com.opensymphony.xwork2.util.location.LocatableProperties;
+import com.opensymphony.xwork2.util.logging.Logger;
+import com.opensymphony.xwork2.util.logging.LoggerFactory;
+
+import java.util.Properties;
+
+/**
+ * TODO lukaszlenart: write a JavaDoc
+ */
+public abstract class AbstractBeanSelectionProvider implements BeanSelectionProvider {
+
+ private static final Logger LOG = LoggerFactory.getLogger(AbstractBeanSelectionProvider.class);
+
+ public static final String DEFAULT_BEAN_NAME = "struts";
+
+ public void destroy() {
+ // NO-OP
+ }
+
+ public void loadPackages() throws ConfigurationException {
+ // NO-OP
+ }
+
+ public void init(Configuration configuration) throws ConfigurationException {
+ // NO-OP
+ }
+
+ public boolean needsReload() {
+ return false;
+ }
+
+ protected void alias(Class type, String key, ContainerBuilder builder, Properties props) {
+ alias(type, key, builder, props, Scope.SINGLETON);
+ }
+
+ protected void alias(Class type, String key, ContainerBuilder builder, Properties props, Scope scope) {
+ if (!builder.contains(type)) {
+ String foundName = props.getProperty(key, DEFAULT_BEAN_NAME);
+ if (builder.contains(type, foundName)) {
+ if (LOG.isInfoEnabled()) {
+ LOG.info("Choosing bean (#0) for (#1)", foundName, type.getName());
+ }
+ builder.alias(type, foundName, Container.DEFAULT_NAME);
+ } else {
+ try {
+ Class cls = ClassLoaderUtil.loadClass(foundName, this.getClass());
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Choosing bean (#0) for (#1)", cls.getName(), type.getName());
+ }
+ builder.factory(type, cls, scope);
+ } catch (ClassNotFoundException ex) {
+ // Perhaps a spring bean id, so we'll delegate to the object factory at runtime
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Choosing bean (#0) for (#1) to be loaded from the ObjectFactory", foundName, type.getName());
+ }
+ if (DEFAULT_BEAN_NAME.equals(foundName)) {
+ // Probably an optional bean, will ignore
+ } else {
+ if (ObjectFactory.class != type) {
+ builder.factory(type, new ObjectFactoryDelegateFactory(foundName, type), scope);
+ } else {
+ throw new ConfigurationException("Cannot locate the chosen ObjectFactory implementation: " + foundName);
+ }
+ }
+ }
+ }
+ } else {
+ if (LOG.isWarnEnabled()) {
+ LOG.warn("Unable to alias bean type (#0), default mapping already assigned.", type.getName());
+ }
+ }
+ }
+
+ protected void convertIfExist(LocatableProperties props, String fromKey, String toKey) {
+ if (props.containsKey(fromKey)) {
+ props.setProperty(toKey, props.getProperty(fromKey));
+ }
+ }
+
+
+
+ static class ObjectFactoryDelegateFactory implements Factory {
+
+ String name;
+ Class type;
+
+ ObjectFactoryDelegateFactory(String name, Class type) {
+ this.name = name;
+ this.type = type;
+ }
+
+ public Object create(Context context) throws Exception {
+ ObjectFactory objFactory = context.getContainer().getInstance(ObjectFactory.class);
+ try {
+ return objFactory.buildBean(name, null, true);
+ } catch (ClassNotFoundException ex) {
+ throw new ConfigurationException("Unable to load bean "+type.getName()+" ("+name+")");
+ }
+ }
+
+ }
+}
Copied: struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/DefaultBeanSelectionProvider.java (from r1535515, struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/BeanSelectionProvider.java)
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/DefaultBeanSelectionProvider.java?p2=struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/DefaultBeanSelectionProvider.java&p1=struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/BeanSelectionProvider.java&r1=1535515&r2=1543527&rev=1543527&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/BeanSelectionProvider.java (original)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/DefaultBeanSelectionProvider.java Tue Nov 19 17:56:18 2013
@@ -29,9 +29,6 @@ import com.opensymphony.xwork2.ObjectFac
import com.opensymphony.xwork2.TextProvider;
import com.opensymphony.xwork2.UnknownHandlerManager;
import com.opensymphony.xwork2.XWorkConstants;
-import com.opensymphony.xwork2.config.Configuration;
-import com.opensymphony.xwork2.config.ConfigurationException;
-import com.opensymphony.xwork2.config.ConfigurationProvider;
import com.opensymphony.xwork2.conversion.ConversionAnnotationProcessor;
import com.opensymphony.xwork2.conversion.ConversionFileProcessor;
import com.opensymphony.xwork2.conversion.ConversionPropertiesProcessor;
@@ -49,12 +46,8 @@ import com.opensymphony.xwork2.factory.C
import com.opensymphony.xwork2.factory.InterceptorFactory;
import com.opensymphony.xwork2.factory.ResultFactory;
import com.opensymphony.xwork2.factory.ValidatorFactory;
-import com.opensymphony.xwork2.inject.Container;
import com.opensymphony.xwork2.inject.ContainerBuilder;
-import com.opensymphony.xwork2.inject.Context;
-import com.opensymphony.xwork2.inject.Factory;
import com.opensymphony.xwork2.inject.Scope;
-import com.opensymphony.xwork2.util.ClassLoaderUtil;
import com.opensymphony.xwork2.util.LocalizedTextUtil;
import com.opensymphony.xwork2.util.PatternMatcher;
import com.opensymphony.xwork2.util.TextParser;
@@ -75,7 +68,6 @@ import org.apache.struts2.views.freemark
import org.apache.struts2.views.util.UrlHelper;
import org.apache.struts2.views.velocity.VelocityManager;
-import java.util.Properties;
import java.util.StringTokenizer;
/**
@@ -341,27 +333,9 @@ import java.util.StringTokenizer;
* <li><code>struts.configuration.xml.reload = true</code></li>
* </ul>
*/
-public class BeanSelectionProvider implements ConfigurationProvider {
+public class DefaultBeanSelectionProvider extends AbstractBeanSelectionProvider {
- public static final String DEFAULT_BEAN_NAME = "struts";
-
- private static final Logger LOG = LoggerFactory.getLogger(BeanSelectionProvider.class);
-
- public void destroy() {
- // NO-OP
- }
-
- public void loadPackages() throws ConfigurationException {
- // NO-OP
- }
-
- public void init(Configuration configuration) throws ConfigurationException {
- // NO-OP
- }
-
- public boolean needsReload() {
- return false;
- }
+ private static final Logger LOG = LoggerFactory.getLogger(DefaultBeanSelectionProvider.class);
public void register(ContainerBuilder builder, LocatableProperties props) {
alias(ObjectFactory.class, StrutsConstants.STRUTS_OBJECTFACTORY, builder, props);
@@ -448,12 +422,6 @@ public class BeanSelectionProvider imple
}
}
- private void convertIfExist(LocatableProperties props, String fromKey, String toKey) {
- if (props.containsKey(fromKey)) {
- props.setProperty(toKey, props.getProperty(fromKey));
- }
- }
-
private void loadCustomResourceBundles(LocatableProperties props) {
String bundles = props.getProperty(StrutsConstants.STRUTS_CUSTOM_I18N_RESOURCES);
if (bundles != null && bundles.length() > 0) {
@@ -473,67 +441,4 @@ public class BeanSelectionProvider imple
}
}
- void alias(Class type, String key, ContainerBuilder builder, Properties props) {
- alias(type, key, builder, props, Scope.SINGLETON);
- }
-
- void alias(Class type, String key, ContainerBuilder builder, Properties props, Scope scope) {
- if (!builder.contains(type)) {
- String foundName = props.getProperty(key, DEFAULT_BEAN_NAME);
- if (builder.contains(type, foundName)) {
- if (LOG.isInfoEnabled()) {
- LOG.info("Choosing bean (#0) for (#1)", foundName, type.getName());
- }
- builder.alias(type, foundName, Container.DEFAULT_NAME);
- } else {
- try {
- Class cls = ClassLoaderUtil.loadClass(foundName, this.getClass());
- if (LOG.isDebugEnabled()) {
- LOG.debug("Choosing bean (#0) for (#1)", cls.getName(), type.getName());
- }
- builder.factory(type, cls, scope);
- } catch (ClassNotFoundException ex) {
- // Perhaps a spring bean id, so we'll delegate to the object factory at runtime
- if (LOG.isDebugEnabled()) {
- LOG.debug("Choosing bean (#0) for (#1) to be loaded from the ObjectFactory", foundName, type.getName());
- }
- if (DEFAULT_BEAN_NAME.equals(foundName)) {
- // Probably an optional bean, will ignore
- } else {
- if (ObjectFactory.class != type) {
- builder.factory(type, new ObjectFactoryDelegateFactory(foundName, type), scope);
- } else {
- throw new ConfigurationException("Cannot locate the chosen ObjectFactory implementation: " + foundName);
- }
- }
- }
- }
- } else {
- if (LOG.isWarnEnabled()) {
- LOG.warn("Unable to alias bean type (#0), default mapping already assigned.", type.getName());
- }
- }
- }
-
- static class ObjectFactoryDelegateFactory implements Factory {
-
- String name;
- Class type;
-
- ObjectFactoryDelegateFactory(String name, Class type) {
- this.name = name;
- this.type = type;
- }
-
- public Object create(Context context) throws Exception {
- ObjectFactory objFactory = context.getContainer().getInstance(ObjectFactory.class);
- try {
- return objFactory.buildBean(name, null, true);
- } catch (ClassNotFoundException ex) {
- throw new ConfigurationException("Unable to load bean "+type.getName()+" ("+name+")");
- }
- }
-
- }
-
}
Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java?rev=1543527&r1=1543526&r2=1543527&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java (original)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java Tue Nov 19 17:56:18 2013
@@ -58,7 +58,7 @@ import org.apache.struts2.ServletActionC
import org.apache.struts2.StrutsConstants;
import org.apache.struts2.StrutsException;
import org.apache.struts2.StrutsStatics;
-import org.apache.struts2.config.BeanSelectionProvider;
+import org.apache.struts2.config.DefaultBeanSelectionProvider;
import org.apache.struts2.config.DefaultPropertiesProvider;
import org.apache.struts2.config.PropertiesConfigurationProvider;
import org.apache.struts2.config.StrutsXmlConfigurationProvider;
@@ -446,7 +446,7 @@ public class Dispatcher {
}
private void init_AliasStandardObjects() {
- configurationManager.addContainerProvider(new BeanSelectionProvider());
+ configurationManager.addContainerProvider(new DefaultBeanSelectionProvider());
}
private Container init_PreloadConfiguration() {
@@ -482,7 +482,7 @@ public class Dispatcher {
public void init() {
if (configurationManager == null) {
- configurationManager = createConfigurationManager(BeanSelectionProvider.DEFAULT_BEAN_NAME);
+ configurationManager = createConfigurationManager(DefaultBeanSelectionProvider.DEFAULT_BEAN_NAME);
}
try {
Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/StaticContentLoader.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/StaticContentLoader.java?rev=1543527&r1=1543526&r2=1543527&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/StaticContentLoader.java (original)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/StaticContentLoader.java Tue Nov 19 17:56:18 2013
@@ -33,7 +33,7 @@ import java.io.IOException;
* <bean name="myContentLoader" type="org.apache.struts2.dispatcher" class="com.company.struts.MyContentLoader"/>
* <constant name="struts.staticContentLoader" value="myContentLoader"/>
*
- * Check {@link org.apache.struts2.config.BeanSelectionProvider} for more details.
+ * Check {@link org.apache.struts2.config.DefaultBeanSelectionProvider} for more details.
*/
public interface StaticContentLoader {
Modified: struts/struts2/trunk/core/src/main/resources/struts-default.xml
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/resources/struts-default.xml?rev=1543527&r1=1543526&r2=1543527&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/main/resources/struts-default.xml (original)
+++ struts/struts2/trunk/core/src/main/resources/struts-default.xml Tue Nov 19 17:56:18 2013
@@ -25,8 +25,8 @@
<!--
When declaring beans in this file you must either use name="struts" or don't name the bean at all.
- The name="struts" must be used when alias was defined in {@link org.apache.struts2.config.BeanSelectionProvider} -
- it is then the default bean's name and {@link org.apache.struts2.config.BeanSelectionProvider} links name "struts"
+ The name="struts" must be used when alias was defined in {@link org.apache.struts2.config.DefaultBeanSelectionProvider} -
+ it is then the default bean's name and {@link org.apache.struts2.config.DefaultBeanSelectionProvider} links name "struts"
with "default" (aliasing it)
If name won't be defined then the "default" value will be used {@link com.opensymphony.xwork2.inject.Container#DEFAULT_NAME}
Copied: struts/struts2/trunk/core/src/test/java/org/apache/struts2/config/DefaultBeanSelectionProviderTest.java (from r1535515, struts/struts2/trunk/core/src/test/java/org/apache/struts2/config/BeanSelectionProviderTest.java)
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/java/org/apache/struts2/config/DefaultBeanSelectionProviderTest.java?p2=struts/struts2/trunk/core/src/test/java/org/apache/struts2/config/DefaultBeanSelectionProviderTest.java&p1=struts/struts2/trunk/core/src/test/java/org/apache/struts2/config/BeanSelectionProviderTest.java&r1=1535515&r2=1543527&rev=1543527&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/test/java/org/apache/struts2/config/BeanSelectionProviderTest.java (original)
+++ struts/struts2/trunk/core/src/test/java/org/apache/struts2/config/DefaultBeanSelectionProviderTest.java Tue Nov 19 17:56:18 2013
@@ -31,7 +31,7 @@ import com.opensymphony.xwork2.util.loca
import junit.framework.TestCase;
-public class BeanSelectionProviderTest extends TestCase {
+public class DefaultBeanSelectionProviderTest extends TestCase {
public void testRegister() {
Locale.setDefault(Locale.US); // force to US locale as we also have _de and _da properties
@@ -43,7 +43,7 @@ public class BeanSelectionProviderTest e
LocatableProperties props = new LocatableProperties();
props.setProperty(StrutsConstants.STRUTS_CUSTOM_I18N_RESOURCES, "testmessages,testmessages2");
- new BeanSelectionProvider().register(new ContainerBuilder(), props);
+ new DefaultBeanSelectionProvider().register(new ContainerBuilder(), props);
assertEquals("Replaced message for token tag", LocalizedTextUtil.findDefaultText("struts.messages.invalid.token", Locale.getDefault()));
}
Modified: struts/struts2/trunk/plugins/sitegraph/src/main/java/org/apache/struts2/sitegraph/StrutsConfigRetriever.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/sitegraph/src/main/java/org/apache/struts2/sitegraph/StrutsConfigRetriever.java?rev=1543527&r1=1543526&r2=1543527&view=diff
==============================================================================
--- struts/struts2/trunk/plugins/sitegraph/src/main/java/org/apache/struts2/sitegraph/StrutsConfigRetriever.java (original)
+++ struts/struts2/trunk/plugins/sitegraph/src/main/java/org/apache/struts2/sitegraph/StrutsConfigRetriever.java Tue Nov 19 17:56:18 2013
@@ -27,7 +27,7 @@ import com.opensymphony.xwork2.config.en
import com.opensymphony.xwork2.config.entities.ResultConfig;
import com.opensymphony.xwork2.util.logging.Logger;
import com.opensymphony.xwork2.util.logging.LoggerFactory;
-import org.apache.struts2.config.BeanSelectionProvider;
+import org.apache.struts2.config.DefaultBeanSelectionProvider;
import org.apache.struts2.config.DefaultPropertiesProvider;
import org.apache.struts2.config.PropertiesConfigurationProvider;
import org.apache.struts2.config.StrutsXmlConfigurationProvider;
@@ -76,7 +76,7 @@ public class StrutsConfigRetriever {
cm.addContainerProvider(new StrutsXmlConfigurationProvider("struts-default.xml", false, null));
cm.addContainerProvider(configProvider);
cm.addContainerProvider(new PropertiesConfigurationProvider());
- cm.addContainerProvider(new BeanSelectionProvider());
+ cm.addContainerProvider(new DefaultBeanSelectionProvider());
isXWorkStarted = true;
} catch (IOException e) {
LOG.error("IOException", e);