View Javadoc
1   package pk.lucidxpo.ynami.spring.sample;
2   
3   import org.springframework.beans.factory.annotation.Autowired;
4   import org.springframework.beans.factory.annotation.Qualifier;
5   import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
6   import org.springframework.context.annotation.Bean;
7   import org.springframework.context.annotation.Configuration;
8   import org.springframework.context.annotation.Primary;
9   import pk.lucidxpo.ynami.service.sample.NewToggleableServiceImpl;
10  import pk.lucidxpo.ynami.service.sample.OldToggleableServiceImpl;
11  import pk.lucidxpo.ynami.service.sample.ToggleableService;
12  import pk.lucidxpo.ynami.spring.features.FeatureProxyFactoryBeanWrapper;
13  
14  import static pk.lucidxpo.ynami.spring.features.FeatureToggles.TOGGLEABLE_SERVICE;
15  
16  @Configuration
17  public class ToggleableServiceConfiguration {
18  
19      @Bean
20      @ConditionalOnProperty(name = "config.togglz.enabled", havingValue = "true")
21      public ToggleableService oldToggleableService() {
22          return new OldToggleableServiceImpl();
23      }
24  
25      @Bean
26      @ConditionalOnProperty(name = "config.togglz.enabled", havingValue = "true")
27      public ToggleableService newToggleableService() {
28          return new NewToggleableServiceImpl();
29      }
30  
31      @Bean
32      @ConditionalOnProperty(name = "config.togglz.enabled", havingValue = "true")
33      public FeatureProxyFactoryBeanWrapper proxiedToggleableService() {
34          final FeatureProxyFactoryBeanWrapper proxyFactoryBean = new FeatureProxyFactoryBeanWrapper();
35          proxyFactoryBean.setFeature(TOGGLEABLE_SERVICE);
36          proxyFactoryBean.setProxyType(ToggleableService.class);
37          proxyFactoryBean.setActive(newToggleableService());
38          proxyFactoryBean.setInactive(oldToggleableService());
39          return proxyFactoryBean;
40      }
41  
42      @Bean
43      @Primary
44      @ConditionalOnProperty(name = "config.togglz.enabled", havingValue = "true")
45      public ToggleableService toggleableService(
46              @Autowired @Qualifier("proxiedToggleableService") final FeatureProxyFactoryBeanWrapper proxiedToggleableService
47      ) throws Exception {
48          return (ToggleableService) proxiedToggleableService.getObject();
49      }
50  
51      @Bean
52      @ConditionalOnProperty(name = "config.togglz.enabled", havingValue = "false", matchIfMissing = true)
53      public ToggleableService oldService() {
54          return new OldToggleableServiceImpl();
55      }
56  }