01: /*
02: * $Id: OrphanMapDefinitionParser.java 10489 2008-01-23 17:53:38Z dfeist $
03: * --------------------------------------------------------------------------------------
04: * Copyright (c) MuleSource, Inc. All rights reserved. http://www.mulesource.com
05: *
06: * The software in this package is published under the terms of the CPAL v1.0
07: * license, a copy of which has been included with this distribution in the
08: * LICENSE.txt file.
09: */
10: package org.mule.config.spring.parsers.collection;
11:
12: import org.mule.config.spring.MuleHierarchicalBeanDefinitionParserDelegate;
13: import org.mule.config.spring.parsers.AbstractMuleBeanDefinitionParser;
14:
15: import java.util.Map;
16:
17: import org.springframework.beans.factory.BeanDefinitionStoreException;
18: import org.springframework.beans.factory.config.MapFactoryBean;
19: import org.springframework.beans.factory.support.AbstractBeanDefinition;
20: import org.springframework.beans.factory.support.BeanDefinitionBuilder;
21: import org.springframework.beans.factory.xml.ParserContext;
22: import org.w3c.dom.Element;
23:
24: /**
25: * Creates a single, stand-alone map object and processes standard Spring sub elements
26: */
27: public class OrphanMapDefinitionParser extends
28: AbstractMuleBeanDefinitionParser {
29: private Class mapClass;
30: private String name;
31: private boolean dynamicName = false;
32:
33: public OrphanMapDefinitionParser(Class mapClass) {
34: this .mapClass = mapClass;
35: dynamicName = true;
36: }
37:
38: public OrphanMapDefinitionParser(Class mapClass, String name) {
39: this .mapClass = mapClass;
40: this .name = name;
41: }
42:
43: protected Class getBeanClass(Element element) {
44: return MapFactoryBean.class;
45: }
46:
47: protected void doParse(Element element,
48: ParserContext parserContext, BeanDefinitionBuilder builder) {
49: Map parsedMap = parserContext.getDelegate().parseMapElement(
50: element, builder.getRawBeanDefinition());
51: builder.addPropertyValue("sourceMap", parsedMap);
52: builder.addPropertyValue("targetMapClass", mapClass.getName());
53: getBeanAssembler(element, builder)
54: .setBeanFlag(
55: MuleHierarchicalBeanDefinitionParserDelegate.MULE_NO_RECURSE);
56: }
57:
58: //@Override
59:
60: protected void preProcess(Element element) {
61: super .preProcess(element);
62: if (dynamicName) {
63: name = null;
64: }
65: }
66:
67: //@java.lang.Override
68: protected String resolveId(Element element,
69: AbstractBeanDefinition definition,
70: ParserContext parserContext)
71: throws BeanDefinitionStoreException {
72: return name;
73: }
74: }
|