View Javadoc

1   /*
2    * $Id: ScriptDefinitionParser.java 12318 2008-07-13 00:51:27Z rossmason $
3    * --------------------------------------------------------------------------------------
4    * Copyright (c) MuleSource, Inc.  All rights reserved.  http://www.mulesource.com
5    *
6    * The software in this package is published under the terms of the CPAL v1.0
7    * license, a copy of which has been included with this distribution in the
8    * LICENSE.txt file.
9    */
10  
11  package org.mule.module.scripting.config;
12  
13  import org.mule.config.spring.parsers.assembly.BeanAssembler;
14  import org.mule.config.spring.parsers.generic.OptionalChildDefinitionParser;
15  import org.mule.config.spring.parsers.processors.CheckRequiredAttributes;
16  import org.mule.module.scripting.component.Scriptable;
17  import org.mule.util.StringUtils;
18  
19  import org.springframework.beans.factory.xml.ParserContext;
20  import org.w3c.dom.Element;
21  import org.w3c.dom.Node;
22  
23  public class ScriptDefinitionParser extends OptionalChildDefinitionParser
24  {
25      public ScriptDefinitionParser()
26      {
27          super("script", Scriptable.class);
28          addIgnored("name");
29          addAlias("engine", "scriptEngineName");
30          addAlias("file", "scriptFile");        
31  
32          // The "engine" attribute is required unless "file" is specified, in which case the 
33          // file extension will be used to determine the appropriate script engine.
34          String[][] requiredAttributeSets = new String[2][];
35          requiredAttributeSets[0] = new String[]{"engine"};
36          requiredAttributeSets[1] = new String[]{"file"};
37          registerPreProcessor(new CheckRequiredAttributes(requiredAttributeSets));
38      }
39  
40      protected void postProcess(ParserContext context, BeanAssembler assembler, Element element)
41      {
42          Node node = element.getFirstChild();
43          if (node != null)
44          {
45              String value = node.getNodeValue();
46              //Support CDATA for script text
47              if(node.getNextSibling()!=null && node.getNextSibling().getNodeType()== Node.CDATA_SECTION_NODE)
48              {
49                  value = node.getNextSibling().getNodeValue();
50              }
51  
52              if (!StringUtils.isBlank(value))
53              {
54                  assembler.getBean().addPropertyValue("scriptText", value);
55              }
56          }
57          super.postProcess(context, assembler, element);
58      }
59  }
60  
61