/** * Abiquo community edition * cloud management application for hybrid clouds * Copyright (C) 2008-2010 - Abiquo Holdings S.L. * * This application is free software; you can redistribute it and/or * modify it under the terms of the GNU LESSER GENERAL PUBLIC * LICENSE as published by the Free Software Foundation under * version 3 of the License * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * LESSER GENERAL PUBLIC LICENSE v.3 for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ package com.abiquo.api.spring; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.config.BeanFactoryPostProcessor; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.context.ApplicationContextException; /** * Process all bean deifnitions to replace community beans by the premium ones. * * @author pnavarro */ public class BeanReplacementProcessor implements BeanFactoryPostProcessor { /** The logger. */ private static final Logger LOGGER = LoggerFactory.getLogger(BeanReplacementProcessor.class); /** Map with the bean -> replacement for the community beans. */ private Map<String, String> replacements; @Override public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { if (!(beanFactory instanceof BeanDefinitionRegistry)) { throw new ApplicationContextException("Unsupported bean factory type: " + beanFactory.getClass().getName() + ". Bean factory must implement the BeanDefinitionRegistry interface"); } BeanDefinitionRegistry registry = (BeanDefinitionRegistry) beanFactory; for (String candidate : replacements.keySet()) { String replacement = replacements.get(candidate); BeanDefinition replacementBeanDefinition = registry.getBeanDefinition(replacement); LOGGER.info("Replacing bean {} with class: {}", candidate, replacementBeanDefinition.getBeanClassName()); registry.removeBeanDefinition(candidate); registry.registerBeanDefinition(candidate, replacementBeanDefinition); registry.removeBeanDefinition(replacement); } } public Map<String, String> getReplacements() { return replacements; } public void setReplacements(Map<String, String> replacements) { this.replacements = replacements; } }