org.springframework.yarn.test.context
Class YarnDelegatingSmartContextLoader

java.lang.Object
  extended by org.springframework.yarn.test.context.YarnDelegatingSmartContextLoader
All Implemented Interfaces:
ContextLoader, SmartContextLoader

public class YarnDelegatingSmartContextLoader
extends Object
implements SmartContextLoader

DelegatingSmartContextLoader is an implementation of the SmartContextLoader SPI that delegates to a set of candidate SmartContextLoaders (i.e., YarnClusterInjectingXmlContextLoader and YarnClusterInjectingAnnotationConfigContextLoader) to determine which context loader is appropriate for a given test classes configuration. Each candidate is given a chance to process the ContextConfigurationAttributes for each class in the test class hierarchy that is annotated with @ContextConfiguration, and the candidate that supports the merged, processed configuration will be used to actually load the context.

Placing an empty @ContextConfiguration annotation on a test class signals that default resource locations (i.e., XML configuration files) or default configuration classes should be detected. Furthermore, if a specific ContextLoader or SmartContextLoader is not explicitly declared via @ContextConfiguration, DelegatingSmartContextLoader will be used as the default loader, thus providing automatic support for either XML configuration files or configuration classes, but not both simultaneously.

NOTE: This is a copy from a spring-test order to add custom yarn specific testing logic.

Author:
Sam Brannen, Janne Valkealahti
See Also:
SmartContextLoader, YarnClusterInjectingXmlContextLoader, YarnClusterInjectingAnnotationConfigContextLoader

Constructor Summary
YarnDelegatingSmartContextLoader()
           
 
Method Summary
 ApplicationContext loadContext(MergedContextConfiguration mergedConfig)
          Delegates to an appropriate candidate SmartContextLoader to load an ApplicationContext.
 ApplicationContext loadContext(String... locations)
          DelegatingSmartContextLoader does not support the ContextLoader.loadContext(String...) method.
 void processContextConfiguration(ContextConfigurationAttributes configAttributes)
          Delegates to candidate SmartContextLoaders to process the supplied ContextConfigurationAttributes.
 String[] processLocations(Class<?> clazz, String... locations)
          DelegatingSmartContextLoader does not support the ContextLoader.processLocations(Class, String...) method.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

YarnDelegatingSmartContextLoader

public YarnDelegatingSmartContextLoader()
Method Detail

processContextConfiguration

public void processContextConfiguration(ContextConfigurationAttributes configAttributes)
Delegates to candidate SmartContextLoaders to process the supplied ContextConfigurationAttributes.

Delegation is based on explicit knowledge of the implementations of YarnClusterInjectingXmlContextLoader and YarnClusterInjectingAnnotationConfigContextLoader. Specifically, the delegation algorithm is as follows:

Specified by:
processContextConfiguration in interface SmartContextLoader
Parameters:
configAttributes - the context configuration attributes to process
Throws:
IllegalArgumentException - if the supplied configuration attributes are null, or if the supplied configuration attributes include both resource locations and configuration classes
IllegalStateException - if YarnClusterInjectingXmlContextLoader detects default configuration classes; if YarnClusterInjectingAnnotationConfigContextLoader detects default resource locations; if neither candidate loader detects defaults for the supplied context configuration; or if both candidate loaders detect defaults for the supplied context configuration

loadContext

public ApplicationContext loadContext(MergedContextConfiguration mergedConfig)
                               throws Exception
Delegates to an appropriate candidate SmartContextLoader to load an ApplicationContext.

Delegation is based on explicit knowledge of the implementations of YarnClusterInjectingXmlContextLoader and YarnClusterInjectingAnnotationConfigContextLoader. Specifically, the delegation algorithm is as follows:

Specified by:
loadContext in interface SmartContextLoader
Parameters:
mergedConfig - the merged context configuration to use to load the application context
Throws:
IllegalArgumentException - if the supplied merged configuration is null
IllegalStateException - if neither candidate loader is capable of loading an ApplicationContext from the supplied merged context configuration
Exception

processLocations

public String[] processLocations(Class<?> clazz,
                                 String... locations)
DelegatingSmartContextLoader does not support the ContextLoader.processLocations(Class, String...) method. Call processContextConfiguration(ContextConfigurationAttributes) instead.

Specified by:
processLocations in interface ContextLoader
Throws:
UnsupportedOperationException

loadContext

public ApplicationContext loadContext(String... locations)
                               throws Exception
DelegatingSmartContextLoader does not support the ContextLoader.loadContext(String...) method. Call loadContext(MergedContextConfiguration) instead.

Specified by:
loadContext in interface ContextLoader
Throws:
UnsupportedOperationException
Exception