001package org.kuali.common.util.properties.spring; 002 003import java.util.Properties; 004 005import org.kuali.common.util.PropertyUtils; 006import org.kuali.common.util.enc.EncContext; 007import org.kuali.common.util.project.model.Project; 008import org.kuali.common.util.project.spring.AutowiredProjectConfig; 009import org.kuali.common.util.properties.DefaultPropertiesService; 010import org.kuali.common.util.properties.PropertiesService; 011import org.kuali.common.util.property.ImmutableProperties; 012import org.kuali.common.util.property.processor.JasyptDecryptingProcessor; 013import org.kuali.common.util.property.processor.OverridingProcessor; 014import org.kuali.common.util.property.processor.ProcessorsProcessor; 015import org.kuali.common.util.property.processor.PropertyProcessor; 016import org.kuali.common.util.property.processor.ResolvingProcessor; 017import org.kuali.common.util.spring.env.BasicEnvironmentService; 018import org.kuali.common.util.spring.env.EnvironmentService; 019import org.kuali.common.util.spring.service.SpringServiceConfig; 020import org.springframework.beans.factory.annotation.Autowired; 021import org.springframework.context.annotation.Bean; 022import org.springframework.context.annotation.Configuration; 023import org.springframework.context.annotation.Import; 024 025@Configuration 026@Import({ SpringServiceConfig.class, AutowiredProjectConfig.class }) 027public class DefaultPropertiesServiceConfig implements PropertiesServiceConfig { 028 029 @Autowired 030 Project project; 031 032 @Autowired 033 EnvironmentService env; 034 035 @Override 036 @Bean 037 public PropertiesService propertiesService() { 038 Properties overrides = getOverrides(project); 039 PropertyProcessor processor = getPostProcessor(overrides); 040 return new DefaultPropertiesService(overrides, processor); 041 } 042 043 private Properties getOverrides(Project project) { 044 // Get a reference to system + environment properties 045 Properties global = PropertyUtils.getGlobalProperties(); 046 047 // Setup a properties object where system properties "win" over project properties 048 return ImmutableProperties.copyOf(PropertyUtils.combine(project.getProperties(), global)); 049 } 050 051 private PropertyProcessor getPostProcessor(Properties overrides) { 052 EnvironmentService env = new BasicEnvironmentService(overrides); 053 EncContext context = EncContext.builder(env).removeSystemProperties(true).build(); 054 PropertyProcessor override = new OverridingProcessor(overrides); 055 PropertyProcessor decrypt = new JasyptDecryptingProcessor(context.getTextEncryptor()); 056 PropertyProcessor resolver = new ResolvingProcessor(); 057 return new ProcessorsProcessor(override, decrypt, resolver); 058 } 059 060}