/* * Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com * The software in this package is published under the terms of the CPAL v1.0 * license, a copy of which has been included with this distribution in the * LICENSE.txt file. */ package org.mule.runtime.config.spring.parsers.specific; import org.mule.runtime.config.spring.parsers.assembly.BeanAssembler; import org.mule.runtime.config.spring.parsers.assembly.BeanAssemblerFactory; import org.mule.runtime.config.spring.parsers.assembly.DefaultBeanAssembler; import org.mule.runtime.config.spring.parsers.assembly.configuration.PropertyConfiguration; import org.mule.runtime.config.spring.parsers.collection.ChildMapEntryDefinitionParser; import org.springframework.beans.MutablePropertyValues; import org.springframework.beans.PropertyValue; import org.springframework.beans.PropertyValues; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.support.ManagedMap; public class ImportMapEntryDefinitionParser extends ChildMapEntryDefinitionParser { public ImportMapEntryDefinitionParser(String mapName) { super(mapName); addAlias("name", KEY); addAlias("class", VALUE); setBeanAssemblerFactory(new ImportMapEntryBeanAssemblerFactory()); } private static class ImportMapEntryBeanAssemblerFactory implements BeanAssemblerFactory { @Override public BeanAssembler newBeanAssembler(PropertyConfiguration beanConfig, BeanDefinitionBuilder bean, PropertyConfiguration targetConfig, BeanDefinition target) { return new ImportMapEntryBeanAssembler(beanConfig, bean, targetConfig, target); } } private static class ImportMapEntryBeanAssembler extends DefaultBeanAssembler { public ImportMapEntryBeanAssembler(PropertyConfiguration beanConfig, BeanDefinitionBuilder bean, PropertyConfiguration targetConfig, BeanDefinition target) { super(beanConfig, bean, targetConfig, target); } @Override public void insertBeanInTarget(String oldName) { assertTargetPresent(); PropertyValues sourceProperties = bean.getRawBeanDefinition().getPropertyValues(); String newName = bestGuessName(targetConfig, oldName, target.getBeanClassName()); MutablePropertyValues targetProperties = target.getPropertyValues(); PropertyValue pv = targetProperties.getPropertyValue(newName); @SuppressWarnings("unchecked") ManagedMap<String, String> oldValue = (ManagedMap<String, String>) (null == pv ? null : pv.getValue()); if (null == oldValue) { oldValue = new ManagedMap<String, String>(); pv = new PropertyValue(newName, oldValue); targetProperties.addPropertyValue(pv); } String importName = null; String importClassName = (String) sourceProperties.getPropertyValue(ChildMapEntryDefinitionParser.VALUE).getValue(); PropertyValue namePropertyValue = sourceProperties.getPropertyValue(ChildMapEntryDefinitionParser.KEY); if (namePropertyValue != null) { importName = (String) namePropertyValue.getValue(); } else { importName = importClassName.substring(importClassName.lastIndexOf(".") + 1, importClassName.length()); } oldValue.put(importName, importClassName); } } }