/**
 * The contents of this file are subject to the license and copyright
 * detailed in the LICENSE and NOTICE files at the root of the source
 * tree and available online at
 *
 * http://www.dspace.org/license/
 */
package org.dspace.servicemanager.config;

import org.apache.commons.configuration2.Configuration;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
import org.springframework.core.env.MutablePropertySources;

/**
 * Extends Spring PropertySourcesPlaceholderConfigurer to allow our Configuration to be included as a Spring
 * PropertySource. This allows ${...} placeholders within bean definition property values and @Value annotations
 * to be resolved using DSpaceConfigurationService
 * <P>
 * See: https://stackoverflow.com/a/36718301/3750035
 * <P>
 * NOTE: This is initialized in spring-dspace-core-services.xml
 *
 * @see PropertySourcesPlaceholderConfigurer
 * @see DSpaceConfigurationService
 */
public class DSpaceConfigurationPlaceholderConfigurer extends PropertySourcesPlaceholderConfigurer {

    public DSpaceConfigurationPlaceholderConfigurer(Configuration configuration) {
        DSpaceConfigurationPropertySource apacheCommonsConfigPropertySource =
            new DSpaceConfigurationPropertySource(configuration.getClass().getName(), configuration);
        MutablePropertySources propertySources = new MutablePropertySources();
        propertySources.addLast(apacheCommonsConfigPropertySource);
        setPropertySources(propertySources);
    }
}
