WIP: welcome + error
[maven-thymeleaf-skin] / src / main / java / de / juplo / thymeproxy / Application.java
1 package de.juplo.thymeproxy;
2
3 import de.juplo.thymeleaf.JuploDialect;
4 import java.util.HashMap;
5 import java.util.Map;
6 import org.apache.http.impl.client.CloseableHttpClient;
7 import org.springframework.boot.SpringApplication;
8 import org.springframework.boot.autoconfigure.SpringBootApplication;
9 import org.springframework.context.annotation.Bean;
10 import org.springframework.core.Ordered;
11 import org.springframework.core.env.Environment;
12 import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
13 import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
14 import org.springframework.web.servlet.mvc.UrlFilenameViewController;
15 import org.thymeleaf.resourceresolver.IResourceResolver;
16 import org.thymeleaf.resourceresolver.UrlResourceResolver;
17 import org.thymeleaf.spring4.SpringTemplateEngine;
18 import org.thymeleaf.spring4.view.ThymeleafView;
19 import org.thymeleaf.templateresolver.TemplateResolver;
20
21
22 @SpringBootApplication
23 public class Application extends WebMvcConfigurerAdapter
24 {
25   @Bean
26   public RegexUrlHandlerMapping proxiedHandlerMapping(
27       ProxyHttpRequestHandler proxy,
28       UrlFilenameViewController views
29       )
30   {
31     RegexUrlHandlerMapping mapping = new RegexUrlHandlerMapping();
32     mapping.setOrder(Ordered.HIGHEST_PRECEDENCE);
33     Map<String, Object> mappings = new HashMap<>();
34     mappings.put("/thymeleaf/.*\\.html", proxy);
35     mappings.put("/img/.+", proxy);
36     mappings.put("/css/.+", proxy);
37     mappings.put("/js/.+", proxy);
38     mappings.put("/fonts/.+", proxy);
39     mappings.put("/.*\\.html", views);
40     mapping.setUrlMap(mappings);
41         return mapping;
42   }
43
44   @Bean
45   public ProxyHttpRequestHandler proxyHttpRequestHandler(
46       CloseableHttpClient client,
47       Environment env
48       )
49   {
50     ProxyHttpRequestHandler handler = new ProxyHttpRequestHandler();
51     handler.setClient(client);
52     handler.setOrigin(env.getProperty("thymeproxy.origin"));
53     handler.setTtl(30000l);
54     return handler;
55   }
56
57   @Bean
58   public UrlFilenameViewController urlFilenameViewController()
59   {
60     return new UrlFilenameViewController();
61   }
62
63   @Bean
64   public TemplateResolver defaultTemplateResolver(
65       IResourceResolver resources,
66       Environment env
67       )
68   {
69     TemplateResolver resolver = new TemplateResolver();
70     resolver.setResourceResolver(resources);
71     resolver.setPrefix("http://localhost:8080/thymeleaf/");
72     resolver.setSuffix(".html");
73     resolver.setTemplateMode("HTML5");
74     resolver.setCharacterEncoding("UTF-8");
75     resolver.setCacheable(Boolean.valueOf(env.getProperty("thymeproxy.cacheable")));
76     return resolver;
77   }
78
79   @Bean
80   public TemplateResolver jsonTemplateResolver(
81       IResourceResolver resources,
82       Environment env
83       )
84   {
85     TemplateResolver resolver = new TemplateResolver();
86     resolver.setResourceResolver(resources);
87     resolver.setPrefix("http://localhost:8080/thymeleaf/");
88     resolver.setSuffix(".json");
89     resolver.setTemplateMode("JSON");
90     resolver.setCharacterEncoding("UTF-8");
91     resolver.setCacheable(Boolean.valueOf(env.getProperty("thymeproxy.cacheable")));
92     return resolver;
93   }
94
95   @Bean
96   public UrlResourceResolver thymeleafResourceResolver()
97   {
98     return new UrlResourceResolver();
99   }
100
101   @Bean
102   public JuploDialect juploDialect()
103   {
104     return new JuploDialect();
105   }
106
107   @Bean
108   public ThymeleafView error(SpringTemplateEngine templateEngine)
109   {
110     return new ErrorThymeleafView(templateEngine, "/thymeleaf/error.html");
111   }
112
113   @Override
114   public void addViewControllers(ViewControllerRegistry registry)
115   {
116     registry.addViewController("/").setViewName("forward:index.html");
117   }
118
119
120   public static void main(String[] args)
121   {
122     SpringApplication.run(Application.class, args);
123   }
124
125
126   static class ErrorThymeleafView extends ThymeleafView
127   {
128     ErrorThymeleafView(SpringTemplateEngine templateEngine, String templateName)
129     {
130       super(templateName);
131       setTemplateEngine(templateEngine);
132     }
133   }
134 }