PersistenceConfig.java

  1. package pk.lucidxpo.ynami.spring;

  2. import org.springframework.beans.factory.annotation.Autowired;
  3. import org.springframework.beans.factory.annotation.Qualifier;
  4. import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
  5. import org.springframework.context.annotation.Bean;
  6. import org.springframework.context.annotation.Configuration;
  7. import org.springframework.context.annotation.Primary;
  8. import org.springframework.data.domain.AuditorAware;
  9. import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
  10. import org.springframework.transaction.annotation.EnableTransactionManagement;
  11. import pk.lucidxpo.ynami.spring.features.FeatureProxyFactoryBeanWrapper;
  12. import pk.lucidxpo.ynami.spring.security.SpringSecurityAuditAwareImpl;

  13. import static pk.lucidxpo.ynami.spring.features.FeatureToggles.WEB_SECURITY;

  14. @Configuration
  15. @EnableJpaAuditing
  16. @EnableTransactionManagement
  17. public class PersistenceConfig {
  18.     static final String AUDITOR_AWARE_BEAN_NAME = "auditorAware";

  19.     @Bean
  20.     @ConditionalOnProperty(name = "config.togglz.enabled", havingValue = "true")
  21.     public AuditorAware<String> insecureAuditorAware() {
  22.         return new AuditorAwareImpl();
  23.     }

  24.     @Bean
  25.     @ConditionalOnProperty(name = "config.togglz.enabled", havingValue = "true")
  26.     public AuditorAware<String> springSecurityAuditorAware() {
  27.         return new SpringSecurityAuditAwareImpl();
  28.     }

  29.     @Bean
  30.     @ConditionalOnProperty(name = "config.togglz.enabled", havingValue = "true")
  31.     public FeatureProxyFactoryBeanWrapper proxiedAuditorAware() {
  32.         final FeatureProxyFactoryBeanWrapper proxyFactoryBean = new FeatureProxyFactoryBeanWrapper();
  33.         proxyFactoryBean.setFeature(WEB_SECURITY);
  34.         proxyFactoryBean.setProxyType(AuditorAware.class);
  35.         proxyFactoryBean.setActive(springSecurityAuditorAware());
  36.         proxyFactoryBean.setInactive(insecureAuditorAware());
  37.         return proxyFactoryBean;
  38.     }

  39.     @Primary
  40.     @Bean(AUDITOR_AWARE_BEAN_NAME)
  41.     @ConditionalOnProperty(name = "config.togglz.enabled", havingValue = "true")
  42.     public AuditorAware auditorAware(@Autowired @Qualifier("proxiedAuditorAware") final FeatureProxyFactoryBeanWrapper proxiedAuditorAware) throws Exception {
  43.         return (AuditorAware) proxiedAuditorAware.getObject();
  44.     }

  45.     @Bean(AUDITOR_AWARE_BEAN_NAME)
  46.     @ConditionalOnProperty(name = "config.togglz.enabled", havingValue = "false", matchIfMissing = true)
  47.     public AuditorAware auditorAwareWhenTogglzIsDisabled() {
  48.         return new AuditorAwareImpl();
  49.     }
  50. }