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("/css/.+", proxy);
31     mappings.put("/js/.+", proxy);
32     mappings.put("/fonts/.+", proxy);
33     mappings.put(".*\\.html", views);
34     mapping.setUrlMap(mappings);
35         return mapping;
36   }
37
38   @Bean
39   public ProxyHttpRequestHandler proxyHttpRequestHandler(
40       CloseableHttpClient client,
41       Environment env
42       )
43   {
44     ProxyHttpRequestHandler handler = new ProxyHttpRequestHandler();
45     handler.setClient(client);
46     handler.setOrigin(env.getProperty("thymeproxy.origin"));
47     handler.setTtl(30000l);
48     return handler;
49   }
50
51   @Bean
52   public UrlFilenameViewController urlFilenameViewController()
53   {
54     return new UrlFilenameViewController();
55   }
56
57   @Bean
58   public TemplateResolver defaultTemplateResolver(
59       IResourceResolver resources,
60       Environment env
61       )
62   {
63     TemplateResolver resolver = new TemplateResolver();
64     resolver.setResourceResolver(resources);
65     resolver.setPrefix("//thymeleaf/");
66     resolver.setSuffix(".html");
67     resolver.setTemplateMode("HTML5");
68     resolver.setCharacterEncoding("UTF-8");
69     resolver.setCacheable(Boolean.valueOf(env.getProperty("thymeproxy.cacheable")));
70     return resolver;
71   }
72
73   @Bean
74   public UrlResourceResolver thymeleafResourceResolver()
75   {
76     return new UrlResourceResolver();
77   }
78
79
80   public static void main(String[] args)
81   {
82     SpringApplication.run(Application.class, args);
83   }
84 }