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