* Application Context after configuring the <code>ExecutionContext</code>, \r
* and outputs of a <code>RunnableFactory</code>.\r
*/\r
-/**\r
- * @author Olivier Capillon\r
- *\r
- */\r
public class ExecutionFlowGenerator implements BeanFactoryPostProcessor,\r
PriorityOrdered {\r
\r
* <code>RunnableCallFlow</code> beans.\r
*/\r
private String contextValuesBeanName = "executionFlowGenerator.contextValues";\r
+ \r
+ /**\r
+ * Prefix added to the bean names defined in each \r
+ * <code>RunnableCallFlowDescriptor</code>\r
+ */\r
+ private String flowBeanNamesPrefix = "";\r
\r
public void postProcessBeanFactory(\r
ConfigurableListableBeanFactory beanFactory) throws BeansException {\r
GenericBeanDefinition flowBean = new GenericBeanDefinition();\r
flowBean.setBeanClass(RunnableCallFlow.class);\r
\r
+ String beanName = flowBeanNamesPrefix + flowDescriptor.getBeanName();\r
+ \r
MutablePropertyValues mpv = new MutablePropertyValues(); \r
mpv.addPropertyValue("runnableCalls", flowDescriptor.getRunnableCalls());\r
mpv.addPropertyValue("sharedContextValuesMap", new RuntimeBeanReference(contextValuesBeanName));\r
\r
- mpv.addPropertyValue("name", flowDescriptor.getBeanName());\r
+ mpv.addPropertyValue("name", beanName);\r
mpv.addPropertyValue("path", flowDescriptor.getPath());\r
\r
mpv.addPropertyValue("executionContext", new RuntimeBeanReference(executionContextBeanName));\r
\r
// register it\r
if(log.isDebugEnabled()) {\r
- log.debug("Registering bean definition for RunnableCallFlow " + flowDescriptor.getBeanName());\r
+ log.debug("Registering bean definition for RunnableCallFlow " + beanName);\r
}\r
- registry.registerBeanDefinition(flowDescriptor.getBeanName(), flowBean);\r
+ registry.registerBeanDefinition(beanName, flowBean);\r
}\r
\r
/**\r
this.contextValuesBeanName = contextValuesBeanName;\r
}\r
\r
-\r
+ public void setFlowBeanNamesPrefix(String flowBeanNamesPrefix) {\r
+ this.flowBeanNamesPrefix = flowBeanNamesPrefix;\r
+ }\r
}\r
import org.argeo.slc.core.test.context.SimpleContextAware;\r
import org.argeo.slc.test.context.ContextAware;\r
\r
+/**\r
+ * Overrides Values and Expected values of a target \r
+ * <code>SimpleContextAware</code> with the corresponding\r
+ * values and expected values of a source <code>ContextAware</code>\r
+ *\r
+ */\r
public class OverrideContextAware implements Runnable {\r
\r
private ContextAware source;\r
\r
private SimpleContextAware target;\r
\r
-\r
- public void setSource(ContextAware source) {\r
- this.source = source;\r
- }\r
-\r
-\r
- public void setTarget(SimpleContextAware target) {\r
- this.target = target;\r
- }\r
-\r
-\r
+ /**\r
+ * Whether an exception shall be thrown if a value\r
+ * or expected value of the source is not defined\r
+ * in the target\r
+ */\r
+ private Boolean failIfUndefinedInSource = true;\r
+ \r
public void run() {\r
// override values\r
if(source.getValues() != null)\r
for(String key : source.getValues().keySet()) {\r
- if(!target.getValues().containsKey(key)) {\r
+ if(failIfUndefinedInSource && !target.getValues().containsKey(key)) {\r
throw new SlcException("No entry in target values for key '" + key + "'");\r
}\r
target.getValues().put(key, source.getValues().get(key));\r
// override expected values\r
if(source.getExpectedValues() != null)\r
for(String key : source.getExpectedValues().keySet()) {\r
- if(!target.getExpectedValues().containsKey(key)) {\r
+ if(failIfUndefinedInSource && !target.getExpectedValues().containsKey(key)) {\r
throw new SlcException("No entry in target expected values for key '" + key + "'");\r
}\r
target.getExpectedValues().put(key, source.getExpectedValues().get(key));\r
} \r
} \r
+ \r
+ public void setSource(ContextAware source) {\r
+ this.source = source;\r
+ }\r
+\r
+ public void setTarget(SimpleContextAware target) {\r
+ this.target = target;\r
+ }\r
+\r
+ public void setFailIfUndefinedInSource(Boolean failIfUndefinedInSource) {\r
+ this.failIfUndefinedInSource = failIfUndefinedInSource;\r
+ } \r
}\r