WIP: thymeproxy
[maven-thymeleaf-skin] / src / main / java / de / juplo / thymeproxy / Application.java
1 package de.juplo.thymeproxy;
2
3 import java.util.HashMap;
4 import java.util.Map;
5 import org.apache.http.impl.client.CloseableHttpClient;
6 import org.springframework.boot.SpringApplication;
7 import org.springframework.boot.autoconfigure.SpringBootApplication;
8 import org.springframework.context.annotation.Bean;
9 import org.springframework.core.Ordered;
10 import org.springframework.core.env.Environment;
11 import org.springframework.web.servlet.mvc.UrlFilenameViewController;
12 import org.thymeleaf.resourceresolver.IResourceResolver;
13 import org.thymeleaf.resourceresolver.UrlResourceResolver;
14 import org.thymeleaf.templateresolver.TemplateResolver;
15
16
17 @SpringBootApplication
18 public class Application
19 {
20   @Bean
21   public RegexUrlHandlerMapping proxiedHandlerMapping(
22       ProxyHttpRequestHandler proxy,
23       UrlFilenameViewController views
24       )
25   {
26     RegexUrlHandlerMapping mapping = new RegexUrlHandlerMapping();
27     mapping.setOrder(Ordered.HIGHEST_PRECEDENCE);
28     Map<String, Object> mappings = new HashMap<>();
29     mappings.put("/thymeleaf/.*\\.html", proxy);
30     mappings.put("/img/.+", proxy);
31     mappings.put("/css/.+", proxy);
32     mappings.put("/js/.+", proxy);
33     mappings.put("/fonts/.+", proxy);
34     mappings.put("/.*\\.html", views);
35     mapping.setUrlMap(mappings);
36         return mapping;
37   }
38
39   @Bean
40   public ProxyHttpRequestHandler proxyHttpRequestHandler(
41       CloseableHttpClient client,
42       Environment env
43       )
44   {
45     ProxyHttpRequestHandler handler = new ProxyHttpRequestHandler();
46     handler.setClient(client);
47     handler.setOrigin(env.getProperty("thymeproxy.origin"));
48     handler.setTtl(30000l);
49     return handler;
50   }
51
52   @Bean
53   public UrlFilenameViewController urlFilenameViewController()
54   {
55     return new UrlFilenameViewController();
56   }
57
58   @Bean
59   public TemplateResolver defaultTemplateResolver(
60       IResourceResolver resources,
61       Environment env
62       )
63   {
64     TemplateResolver resolver = new TemplateResolver();
65     resolver.setResourceResolver(resources);
66     resolver.setPrefix("http://localhost:8080/thymeleaf/");
67     resolver.setSuffix(".html");
68     resolver.setTemplateMode("HTML5");
69     resolver.setCharacterEncoding("UTF-8");
70     resolver.setCacheable(Boolean.valueOf(env.getProperty("thymeproxy.cacheable")));
71     return resolver;
72   }
73
74   @Bean
75   public UrlResourceResolver thymeleafResourceResolver()
76   {
77     return new UrlResourceResolver();
78   }
79
80
81   public static void main(String[] args)
82   {
83     SpringApplication.run(Application.class, args);
84   }
85 }