1
2
3
4
5
6
7 package org.mule.config.spring.parsers.specific;
8
9 import org.mule.config.spring.parsers.delegate.ParentContextDefinitionParser;
10 import org.mule.config.spring.parsers.generic.ChildDefinitionParser;
11 import org.mule.config.spring.parsers.generic.MuleOrphanDefinitionParser;
12 import org.mule.config.spring.parsers.processors.CheckExclusiveAttributesAndChildren;
13 import org.mule.config.spring.parsers.processors.CheckRequiredAttributesWhenNoChildren;
14 import org.mule.expression.ExpressionConfig;
15 import org.mule.expression.transformers.ExpressionArgument;
16
17 import org.springframework.beans.factory.support.BeanDefinitionBuilder;
18 import org.springframework.beans.factory.support.GenericBeanDefinition;
19 import org.springframework.beans.factory.support.ManagedList;
20 import org.springframework.beans.factory.xml.ParserContext;
21 import org.w3c.dom.Element;
22
23
24
25
26
27 public class ExpressionTransformerDefinitionParser extends ParentContextDefinitionParser
28 {
29
30 public ExpressionTransformerDefinitionParser(Class messageProcessor)
31 {
32 super(MuleOrphanDefinitionParser.ROOT_ELEMENT, new ExpressionTransformerOrphanDefinitionParser(
33 messageProcessor, false));
34 otherwise(new ExpressionTransformerChildDefinitionParser("messageProcessor", messageProcessor));
35
36 registerPreProcessor(
37 new CheckRequiredAttributesWhenNoChildren(new String[][]{{"evaluator", "expression"}},
38 "return-argument")).registerPreProcessor(
39 new CheckExclusiveAttributesAndChildren(new String[]{"evaluator", "expression"},
40 new String[]{"return-argument"}))
41 .addIgnored("evaluator")
42 .addIgnored("expression")
43 .addIgnored("custom-evaluator");
44 }
45
46 protected static void addExpressionArgumentFromAttributes(Element element, BeanDefinitionBuilder builder)
47 {
48 if (element.getAttributeNode("expression") != null)
49 {
50 GenericBeanDefinition objectFactoryBeanDefinition = new GenericBeanDefinition();
51 objectFactoryBeanDefinition.setBeanClass(ExpressionArgument.class);
52 objectFactoryBeanDefinition.getPropertyValues().addPropertyValue("name", "single");
53 objectFactoryBeanDefinition.getPropertyValues().addPropertyValue("optional", false);
54 GenericBeanDefinition objectFactoryBeanDefinition2 = new GenericBeanDefinition();
55 objectFactoryBeanDefinition2.setBeanClass(ExpressionConfig.class);
56 objectFactoryBeanDefinition2.getPropertyValues().addPropertyValue("evaluator",
57 element.getAttribute("evaluator"));
58 objectFactoryBeanDefinition2.getPropertyValues().addPropertyValue("customEvaluator",
59 element.getAttribute("custom-evaluator"));
60 objectFactoryBeanDefinition2.getPropertyValues().addPropertyValue("expression",
61 element.getAttribute("expression"));
62 objectFactoryBeanDefinition.getPropertyValues().addPropertyValue("expressionConfig",
63 objectFactoryBeanDefinition2);
64 ManagedList list = new ManagedList<ExpressionArgument>(1);
65 list.add(objectFactoryBeanDefinition2);
66 builder.getBeanDefinition().getPropertyValues().addPropertyValue("arguments",
67 objectFactoryBeanDefinition);
68 }
69 }
70
71 static class ExpressionTransformerChildDefinitionParser extends ChildDefinitionParser
72 {
73
74 public ExpressionTransformerChildDefinitionParser(String string, Class messageProcessor)
75 {
76 super(string, messageProcessor);
77 }
78
79 @Override
80 protected void parseChild(Element element, ParserContext parserContext, BeanDefinitionBuilder builder)
81 {
82 addExpressionArgumentFromAttributes(element, builder);
83 super.parseChild(element, parserContext, builder);
84 }
85 };
86
87 static class ExpressionTransformerOrphanDefinitionParser extends MuleOrphanDefinitionParser
88 {
89
90 public ExpressionTransformerOrphanDefinitionParser(Class<?> beanClass, boolean singleton)
91 {
92 super(beanClass, singleton);
93 }
94
95 @Override
96 protected void doParse(Element element, ParserContext context, BeanDefinitionBuilder builder)
97 {
98 addExpressionArgumentFromAttributes(element, builder);
99 super.doParse(element, context, builder);
100 }
101 };
102
103 }