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