content: package org.airsonic.player.spring;
  
  import com.google.common.collect.Lists;
  import org.airsonic.player.service.ApacheCommonsConfigurationService;
  import org.apache.commons.configuration2.ImmutableConfiguration;
  import org.apache.commons.lang3.StringUtils;
  import org.springframework.context.ApplicationContextInitializer;
  import org.springframework.core.env.PropertySource;
  import org.springframework.web.context.ConfigurableWebApplicationContext;
  
  import java.util.List;
  
  public class CustomPropertySourceConfigurer implements
          ApplicationContextInitializer<ConfigurableWebApplicationContext> {
  
      public static final String DATASOURCE_CONFIG_TYPE = "DatabaseConfigType";
  
      public void initialize(ConfigurableWebApplicationContext ctx) {
  
          ApacheCommonsConfigurationService configurationService = new ApacheCommonsConfigurationService();
          ImmutableConfiguration snapshot = configurationService.getImmutableSnapshot();
  
          PropertySource ps = new CommonsConfigurationPropertySource("airsonic-pre-init-configs", snapshot);
  
  
          ctx.getEnvironment().getPropertySources().addLast(ps);
  
          addDataSourceProfile(ctx);
      }
  
      private void addDataSourceProfile(ConfigurableWebApplicationContext ctx) {
          DataSourceConfigType dataSourceConfigType;
          String rawType = ctx.getEnvironment().getProperty(DATASOURCE_CONFIG_TYPE);
          if (StringUtils.isNotBlank(rawType)) {
              dataSourceConfigType = DataSourceConfigType.valueOf(StringUtils.upperCase(rawType));
          } else {
              dataSourceConfigType = DataSourceConfigType.LEGACY;
          }
          String dataSourceTypeProfile = StringUtils.lowerCase(dataSourceConfigType.name());
          List<String> existingProfiles = Lists.newArrayList(ctx.getEnvironment().getActiveProfiles());
          existingProfiles.add(dataSourceTypeProfile);
          ctx.getEnvironment().setActiveProfiles(existingProfiles.toArray(new String[0]));
      }
  }
  