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.specific;
8   
9   import org.mule.api.lifecycle.Disposable;
10  import org.mule.api.lifecycle.Initialisable;
11  import org.mule.config.spring.parsers.AbstractMuleBeanDefinitionParser;
12  import org.mule.object.AbstractObjectFactory;
13  import org.mule.object.PrototypeObjectFactory;
14  
15  import org.springframework.beans.factory.support.BeanDefinitionBuilder;
16  import org.springframework.beans.factory.support.GenericBeanDefinition;
17  import org.springframework.beans.factory.xml.ParserContext;
18  import org.w3c.dom.Element;
19  
20  public class ShortcutComponentDefinitionParser extends ComponentDefinitionParser
21  {
22  
23      private static Class OBJECT_FACTORY_TYPE = PrototypeObjectFactory.class;
24  
25      public ShortcutComponentDefinitionParser(Class clazz)
26      {
27          super(clazz);
28      }
29  
30      @Override
31      protected void parseChild(Element element, ParserContext parserContext, BeanDefinitionBuilder builder)
32      {
33          String className = element.getAttributeNode(AbstractMuleBeanDefinitionParser.ATTRIBUTE_CLASS).getValue();
34  
35          GenericBeanDefinition objectFactoryBeanDefinition = new GenericBeanDefinition();
36          objectFactoryBeanDefinition.setBeanClass(OBJECT_FACTORY_TYPE);
37          objectFactoryBeanDefinition.getPropertyValues().addPropertyValue(
38              AbstractObjectFactory.ATTRIBUTE_OBJECT_CLASS_NAME, className);
39          //MArker for MULE-4813
40          objectFactoryBeanDefinition.setInitMethodName(Initialisable.PHASE_NAME);
41          objectFactoryBeanDefinition.setDestroyMethodName(Disposable.PHASE_NAME);
42  
43          builder.addPropertyValue("objectFactory", objectFactoryBeanDefinition);
44          super.parseChild(element, parserContext, builder);
45      }
46  }