net.sourceforge.jabm.spring.PropertyOverrideWithReferencesConfigurer.java Source code

Java tutorial

Introduction

Here is the source code for net.sourceforge.jabm.spring.PropertyOverrideWithReferencesConfigurer.java

Source

/*
 * JABM - Java Agent-Based Modeling Toolkit
 * Copyright (C) 2013 Steve Phelps
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as
 * published by the Free Software Foundation; either version 3 of
 * the License, or (at your option) any later version.
 *
 * This program 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 General Public License for more details.
 */
package net.sourceforge.jabm.spring;

import org.springframework.beans.PropertyValue;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.config.PropertyOverrideConfigurer;
import org.springframework.beans.factory.config.RuntimeBeanReference;

public class PropertyOverrideWithReferencesConfigurer extends PropertyOverrideConfigurer {

    @Override
    protected void applyPropertyValue(ConfigurableListableBeanFactory factory, String beanName, String property,
            String value) {
        if (value != null && value.length() > 0 && !(value.charAt(0) == '&')) {
            super.applyPropertyValue(factory, beanName, property, value);
        } else {
            BeanDefinition bd = factory.getBeanDefinition(beanName);
            while (bd.getOriginatingBeanDefinition() != null) {
                bd = bd.getOriginatingBeanDefinition();
            }
            Object referencedValue = new RuntimeBeanReference(value.substring(1));
            PropertyValue pv = new PropertyValue(property, referencedValue);
            pv.setOptional(false);
            bd.getPropertyValues().addPropertyValue(pv);
        }
    }

}