ResourceBeanDefinitionParser.java
01 /*
02  *  ResourceBeanDefinitionParser.java
03  *
04  *  Copyright (c) 1995-2012, The University of Sheffield. See the file
05  *  COPYRIGHT.txt in the software or at http://gate.ac.uk/gate/COPYRIGHT.txt
06  *
07  *  This file is part of GATE (see http://gate.ac.uk/), and is free
08  *  software, licenced under the GNU Library General Public License,
09  *  Version 2, June 1991 (in the distribution as file licence.html,
10  *  and also available at http://gate.ac.uk/gate/licence.html).
11  *
12  *  Ian Roberts, 22/Jan/2008
13  *
14  *  $Id: ResourceBeanDefinitionParser.java 17657 2014-03-14 09:08:56Z markagreenwood $
15  */
16 
17 package gate.util.spring.xml;
18 
19 import gate.util.spring.GateResourceFactoryBean;
20 
21 import org.springframework.beans.factory.config.BeanDefinition;
22 import org.springframework.beans.factory.support.BeanDefinitionBuilder;
23 import org.springframework.beans.factory.xml.ParserContext;
24 import org.springframework.util.xml.DomUtils;
25 import org.w3c.dom.Element;
26 
27 /**
28  * BeanDefinitionParser for <code>&lt;gate:resource&gt;</code>,
29  * producing a definition for a {@link GateResourceFactoryBean}.
30  */
31 public class ResourceBeanDefinitionParser
32                                          extends
33                                            CustomisableBeanDefinitionParser {
34   private FeatureMapBeanDefinitionParser fmParser = new FeatureMapBeanDefinitionParser();
35 
36   @Override
37   protected void doParse(Element element, ParserContext parserContext,
38           BeanDefinitionBuilder builder) {
39 
40     if(element.hasAttribute("scope")) {
41       builder.setScope(element.getAttribute("scope"));
42     }
43 
44     // this can't be null - use="required" in schema
45     String resourceClass = element.getAttribute("resource-class");
46     builder.addPropertyValue("resourceClass", resourceClass);
47 
48     BeanDefinition paramsDefinition = null;
49     Element parametersElement = DomUtils.getChildElementByTagName(element,
50             "parameters");
51     if(parametersElement != null) {
52       paramsDefinition = fmParser.parse(parametersElement, nestedContext(
53               parserContext, builder));
54       builder.addPropertyValue("parameters", paramsDefinition);
55     }
56 
57     BeanDefinition featuresDefinition = null;
58     Element featuresElement = DomUtils.getChildElementByTagName(element,
59             "features");
60     if(featuresElement != null) {
61       featuresDefinition = fmParser.parse(featuresElement, nestedContext(
62               parserContext, builder));
63       builder.addPropertyValue("features", featuresDefinition);
64     }
65 
66     if(element.hasAttribute("resource-name")) {
67       builder.addPropertyValue("resourceName", element
68               .getAttribute("resource-name"));
69     }
70 
71     extractCustomisers(element, parserContext, builder);
72   }
73 
74   private ParserContext nestedContext(ParserContext parserContext,
75           BeanDefinitionBuilder builder) {
76     return new ParserContext(parserContext.getReaderContext(), parserContext
77             .getDelegate(), builder.getRawBeanDefinition());
78   }
79 
80   @Override
81   protected Class<?> getBeanClass(Element element) {
82     return GateResourceFactoryBean.class;
83   }
84 
85 }