autoconfigure
[maven-thymeleaf-skin] / src / main / java / de / juplo / autoconfigure / ThymeproxyAutoConfiguration.java
1 package de.juplo.autoconfigure;
2
3
4 import de.juplo.autoconfigure.ThymeproxyProperties.Origin;
5 import de.juplo.thymeproxy.ProxyTemplateResolver;
6 import org.apache.http.impl.client.CloseableHttpClient;
7 import org.slf4j.Logger;
8 import org.slf4j.LoggerFactory;
9 import org.springframework.boot.autoconfigure.AutoConfigureBefore;
10 import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
11 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
12 import org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration;
13 import org.springframework.boot.context.properties.EnableConfigurationProperties;
14 import org.springframework.context.ConfigurableApplicationContext;
15 import org.springframework.context.annotation.Bean;
16 import org.springframework.context.annotation.Configuration;
17
18
19 /**
20  * Automatic configuration
21  *
22  * @author Kai Moritz
23  */
24 @Configuration
25 @EnableConfigurationProperties(ThymeproxyProperties.class)
26 @ConditionalOnClass(value = ThymeleafAutoConfiguration.class)
27 @AutoConfigureBefore(ThymeleafAutoConfiguration.class)
28 public class ThymeproxyAutoConfiguration
29 {
30   private static final Logger LOG =
31       LoggerFactory.getLogger(ThymeproxyAutoConfiguration.class);
32
33
34   @Bean
35   @ConditionalOnProperty("thymeproxy.origins[0].uri")
36   public ProxyTemplateResolver defaultTemplateResolver(
37       CloseableHttpClient client,
38       ThymeproxyProperties properties,
39       ConfigurableApplicationContext context
40       )
41   {
42     LOG.info("configuring {} proxies", properties.origins.size());
43
44     Origin origin = properties.origins.get(0);
45     String uri = origin.uri.toString();
46     ProxyTemplateResolver defaultResolver =
47         new ProxyTemplateResolver(
48             "0: " + origin.uri.getHost(),
49             0,
50             client,
51             uri,
52             origin.ttl
53             );
54     LOG.info("registering defaultTemplateResolver for {}", uri);
55
56     for (int i=1; i<properties.origins.size(); i++)
57     {
58       origin = properties.origins.get(i);
59
60       String name = "proxy" + i;
61       uri = origin.uri.toString();
62       ProxyTemplateResolver resolver =
63           new ProxyTemplateResolver(
64               i + ": " + origin.uri.getHost(),
65               i,
66               client,
67               origin.uri.toString(),
68               origin.ttl
69               );
70
71       LOG.info("registering {} for {}", name, uri);
72       context.getBeanFactory().registerSingleton(name, resolver);
73     }
74
75     return defaultResolver;
76   }
77 }