1 package org
.argeo
.slc
.core
.execution
.xml
;
3 import org
.argeo
.slc
.SlcException
;
4 import org
.springframework
.beans
.factory
.config
.BeanDefinition
;
5 import org
.springframework
.beans
.factory
.config
.RuntimeBeanReference
;
6 import org
.springframework
.beans
.factory
.xml
.BeanDefinitionParserDelegate
;
7 import org
.springframework
.beans
.factory
.xml
.ParserContext
;
8 import org
.springframework
.util
.xml
.DomUtils
;
9 import org
.w3c
.dom
.Element
;
10 import org
.w3c
.dom
.Node
;
11 import org
.w3c
.dom
.NodeList
;
14 * Utilities to simplify common tasks when interpreting a custom namespace and
15 * converting it into bean definitions.
17 public class NamespaceUtils
{
18 // private final static CmsLog log = CmsLog.getLog(NamespaceUtils.class);
21 * Returns the value defined either: directly by the the 'value' attribute,
22 * as reference by the 'ref' attribute or as a nested bean.
24 public static Object
parseValue(Element element
,
25 ParserContext parserContext
,
26 BeanDefinition containingBeanDefintion
, String valueTagName
) {
28 if (element
.hasAttribute("value")) {
29 value
= element
.getAttribute("value");
32 if (element
.hasAttribute("ref")) {
34 throw new SlcException("Multiple value definition for "
36 value
= new RuntimeBeanReference(element
.getAttribute("ref"));
39 Element uniqueSubElem
= null;
40 if (valueTagName
!= null) {
41 Element valueElem
= DomUtils
.getChildElementByTagName(element
,
43 if (valueElem
!= null) {
44 uniqueSubElem
= findUniqueSubElement(valueElem
);
45 if (uniqueSubElem
== null)
46 throw new SlcException("No subelement found under "
49 } else {// no intermediary tag
50 uniqueSubElem
= findUniqueSubElement(element
);
53 if (uniqueSubElem
!= null) {
55 throw new SlcException("Multiple value definition for "
57 value
= parseBeanOrReference(uniqueSubElem
, parserContext
,
58 containingBeanDefintion
);
63 public static Element
findUniqueSubElement(Element element
) {
64 NodeList childNodes
= element
.getChildNodes();
66 Element uniqueSubElem
= null;
67 for (int i
= 0; i
< childNodes
.getLength(); i
++) {
68 Node node
= childNodes
.item(i
);
69 if (node
!= null && node
instanceof Element
) {
70 if (uniqueSubElem
== null)
71 uniqueSubElem
= (Element
) node
;
73 throw new SlcException(
74 "There are more than one sub element under "
81 public static Object
parseBeanOrReference(Element element
,
82 ParserContext parserContext
, BeanDefinition beanDefinition
) {
83 // return parserContext.getDelegate().parsePropertySubElement(element,
86 BeanDefinitionParserDelegate deleg
= parserContext
.getDelegate();
87 // if ("bean".equals(element.getNodeName()))
88 // return deleg.parseBeanDefinitionElement(element, beanDefinition);
90 return deleg
.parsePropertySubElement(element
, beanDefinition
);