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 }