View Javadoc
1   /*
2    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
3    * The software in this package is published under the terms of the CPAL v1.0
4    * license, a copy of which has been included with this distribution in the
5    * LICENSE.txt file.
6    */
7   package org.mule.config.spring.parsers;
8   
9   import org.mule.config.spring.factories.InboundEndpointFactoryBean;
10  import org.mule.config.spring.handlers.AbstractMuleNamespaceHandler;
11  import org.mule.config.spring.parsers.beans.ChildBean;
12  import org.mule.config.spring.parsers.beans.OrphanBean;
13  import org.mule.config.spring.parsers.collection.ChildListEntryDefinitionParser;
14  import org.mule.config.spring.parsers.collection.ChildMapDefinitionParser;
15  import org.mule.config.spring.parsers.collection.ChildMapEntryDefinitionParser;
16  import org.mule.config.spring.parsers.collection.ChildSingletonMapDefinitionParser;
17  import org.mule.config.spring.parsers.delegate.InheritDefinitionParser;
18  import org.mule.config.spring.parsers.delegate.MapDefinitionParserMutator;
19  import org.mule.config.spring.parsers.delegate.SingleParentFamilyDefinitionParser;
20  import org.mule.config.spring.parsers.generic.ChildDefinitionParser;
21  import org.mule.config.spring.parsers.generic.NamedDefinitionParser;
22  import org.mule.config.spring.parsers.generic.OrphanDefinitionParser;
23  import org.mule.config.spring.parsers.generic.ParentDefinitionParser;
24  import org.mule.config.spring.parsers.specific.endpoint.TransportEndpointDefinitionParser;
25  import org.mule.config.spring.parsers.specific.endpoint.TransportGlobalEndpointDefinitionParser;
26  import org.mule.config.spring.parsers.specific.endpoint.support.AddressedEndpointDefinitionParser;
27  import org.mule.config.spring.parsers.specific.endpoint.support.ChildAddressDefinitionParser;
28  import org.mule.config.spring.parsers.specific.endpoint.support.ChildEndpointDefinitionParser;
29  import org.mule.config.spring.parsers.specific.endpoint.support.OrphanEndpointDefinitionParser;
30  import org.mule.endpoint.EndpointURIEndpointBuilder;
31  
32  /**
33   * Registers a Bean Definition Parser for handling <code><parsers-test:...></code> elements.
34   *
35   */
36  public class ParsersTestNamespaceHandler extends AbstractMuleNamespaceHandler
37  {
38  
39      public void init()
40      {
41          registerMuleBeanDefinitionParser("orphan", new OrphanDefinitionParser(OrphanBean.class, true)).addAlias("bar", "foo").addIgnored("ignored").addCollection("offspring");
42          registerMuleBeanDefinitionParser("child", new ChildDefinitionParser("child", ChildBean.class)).addAlias("bar", "foo").addIgnored("ignored").addCollection("offspring");
43          registerMuleBeanDefinitionParser("mapped-child", new MapDefinitionParserMutator("map", new ChildDefinitionParser("child", ChildBean.class))).addAlias("bar", "foo").addIgnored("ignored").addCollection("offspring");
44          registerMuleBeanDefinitionParser("kid", new ChildDefinitionParser("kid", ChildBean.class)).addAlias("bar", "foo").addIgnored("ignored");
45          registerMuleBeanDefinitionParser("parent", new ParentDefinitionParser()).addAlias("bar", "foo").addIgnored("ignored").addCollection("offspring");
46          registerMuleBeanDefinitionParser("orphan1", new NamedDefinitionParser("orphan1")).addAlias("bar", "foo").addIgnored("ignored").addCollection("offspring");
47          registerMuleBeanDefinitionParser("orphan2", new NamedDefinitionParser("orphan2")).addAlias("bar", "foo").addIgnored("ignored");
48          registerMuleBeanDefinitionParser("map-entry", new ChildMapEntryDefinitionParser("map", "key", "value")).addCollection("map");
49          registerMuleBeanDefinitionParser("map-entry-combiner", new ChildSingletonMapDefinitionParser("map")).addCollection("map");
50          registerMuleBeanDefinitionParser("properties", new ChildMapDefinitionParser("map")).addCollection("map");
51          registerBeanDefinitionParser("list-entry", new ChildListEntryDefinitionParser("list"));
52          registerMuleBeanDefinitionParser("named", new NamedDefinitionParser()).addAlias("bar", "foo").addIgnored("ignored");
53          registerMuleBeanDefinitionParser("inherit",
54                  new InheritDefinitionParser(
55                          new OrphanDefinitionParser(OrphanBean.class, true),
56                          new NamedDefinitionParser())).addAlias("bar", "foo").addIgnored("ignored").addCollection("offspring");
57  
58          registerMuleBeanDefinitionParser("address", new ChildAddressDefinitionParser("test")).addAlias("address", "host");
59          registerBeanDefinitionParser("orphan-endpoint", new OrphanEndpointDefinitionParser(EndpointURIEndpointBuilder.class));
60          registerBeanDefinitionParser("child-endpoint", new ChildEndpointDefinitionParser(InboundEndpointFactoryBean.class));
61          registerBeanDefinitionParser("unaddressed-orphan-endpoint", new OrphanEndpointDefinitionParser(EndpointURIEndpointBuilder.class));
62          registerBeanDefinitionParser("addressed-orphan-endpoint", new AddressedEndpointDefinitionParser("test", AddressedEndpointDefinitionParser.PROTOCOL, new OrphanEndpointDefinitionParser(EndpointURIEndpointBuilder.class), new String[]{"path"}, new String[]{}));
63          registerBeanDefinitionParser("addressed-child-endpoint", new TransportEndpointDefinitionParser("test", InboundEndpointFactoryBean.class, new String[]{}));
64  
65          registerBeanDefinitionParser("list-element-test-1", new ChildListEntryDefinitionParser("kids", "listAttribute"));
66          registerBeanDefinitionParser("list-element-test-2",
67                  new SingleParentFamilyDefinitionParser(
68                          new OrphanDefinitionParser(OrphanBean.class, true))
69                          .addChildDelegate("kid1", new ChildListEntryDefinitionParser("kids", "kid1"))
70                          .addChildDelegate("kid2", new ChildListEntryDefinitionParser("kids", "kid2")));
71          // simpler list element parser doesn't support dynamic attribute
72  //        registerBeanDefinitionParser("list-element-test-3", new AllAttributeChildDefinitionParser(new ChildListEntryDefinitionParser("kids")));
73  
74          // TODO ComplexComponentDefinitionParser is not longer used, is there any way to rewrite/reuse the "factory" element for testing?
75  //         registerBeanDefinitionParser("factory",
76  //                new ComplexComponentDefinitionParser(
77  //                        new SimpleComponentDefinitionParser(ChildBean.class),
78  //                        (ChildDefinitionParser) new ChildDefinitionParser("child", ChildBean.class).addAlias("bar", "foo").addIgnored("ignored").addCollection("offspring")));
79  
80          registerMuleBeanDefinitionParser("complex-endpoint",
81                  new TransportGlobalEndpointDefinitionParser(
82                          "test", TransportGlobalEndpointDefinitionParser.PROTOCOL,
83                          new String[]{"path"}, new String[]{"string", "bar"})).addAlias("bar", "foo");
84  
85          registerBeanDefinitionParser("no-name", new OrphanDefinitionParser(OrphanBean.class, true));
86          registerBeanDefinitionParser("no-name-2", new IndependentDefinitionParser());
87          registerBeanDefinitionParser("container", new ThirdPartyContainerDefinitionParser());
88      }
89  
90  }