1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.module.blossom.render;
35
36 import info.magnolia.context.MgnlContext;
37 import info.magnolia.context.WebContext;
38 import info.magnolia.module.blossom.context.MagnoliaLocaleResolver;
39 import info.magnolia.module.blossom.dialog.DialogExporter;
40 import info.magnolia.module.blossom.dispatcher.BlossomDispatcher;
41 import info.magnolia.module.blossom.dispatcher.BlossomDispatcherAwareBeanPostProcessor;
42 import info.magnolia.module.blossom.paragraph.ParagraphExporter;
43 import info.magnolia.module.blossom.support.ServletPathOverridingRequestWrapper;
44 import info.magnolia.module.blossom.template.TemplateExporter;
45 import info.magnolia.module.blossom.urimapping.AnnotatedVirtualURIMappingExporter;
46 import info.magnolia.module.blossom.urimapping.VirtualURIMappingExporter;
47 import org.springframework.beans.BeansException;
48 import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
49 import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
50 import org.springframework.context.ApplicationContext;
51 import org.springframework.web.context.ConfigurableWebApplicationContext;
52 import org.springframework.web.servlet.DispatcherServlet;
53 import org.springframework.web.servlet.HandlerAdapter;
54 import org.springframework.web.servlet.LocaleResolver;
55
56 import javax.servlet.ServletException;
57 import javax.servlet.http.HttpServletRequest;
58 import javax.servlet.http.HttpServletResponse;
59 import java.io.IOException;
60
61
62
63
64
65 public class BlossomDispatcherServlet extends DispatcherServlet implements BlossomDispatcher {
66
67 @Override
68 protected Object getDefaultStrategy(ApplicationContext context, Class strategyInterface) throws BeansException {
69 if (strategyInterface.equals(LocaleResolver.class))
70 return super.createDefaultStrategy(context, MagnoliaLocaleResolver.class);
71 return super.getDefaultStrategy(context, strategyInterface);
72 }
73
74 @Override
75 protected void postProcessWebApplicationContext(final ConfigurableWebApplicationContext wac) {
76 wac.addBeanFactoryPostProcessor(new BeanFactoryPostProcessor() {
77 public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
78 beanFactory.addBeanPostProcessor(new BlossomDispatcherAwareBeanPostProcessor(BlossomDispatcherServlet.this));
79 beanFactory.addBeanPostProcessor(new ParagraphExporter(BlossomDispatcherServlet.this));
80 beanFactory.addBeanPostProcessor(new TemplateExporter(BlossomDispatcherServlet.this));
81 }
82 });
83 }
84
85 @Override
86 protected void onRefresh(ApplicationContext context) throws BeansException {
87 super.onRefresh(context);
88 context.getAutowireCapableBeanFactory().createBean(DialogExporter.class);
89 context.getAutowireCapableBeanFactory().createBean(AnnotatedVirtualURIMappingExporter.class);
90 context.getAutowireCapableBeanFactory().createBean(VirtualURIMappingExporter.class);
91 }
92
93 @Override
94 public HandlerAdapter getHandlerAdapter(Object handler) throws ServletException {
95 return super.getHandlerAdapter(handler);
96 }
97
98 public void dispatch(String handlerPath) throws IOException, ServletException {
99
100 WebContext webContext = MgnlContext.getWebContext();
101 HttpServletRequest request = webContext.getRequest();
102 HttpServletResponse response = webContext.getResponse();
103
104
105 request = new ServletPathOverridingRequestWrapper(request, handlerPath);
106
107
108
109
110 super.service(request, response);
111 }
112 }