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 java.io.IOException;
37 import javax.servlet.ServletException;
38 import javax.servlet.http.HttpServletRequest;
39 import javax.servlet.http.HttpServletResponse;
40
41 import org.springframework.beans.BeansException;
42 import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
43 import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
44 import org.springframework.context.ApplicationContext;
45 import org.springframework.web.context.ConfigurableWebApplicationContext;
46 import org.springframework.web.servlet.DispatcherServlet;
47 import org.springframework.web.servlet.HandlerAdapter;
48 import org.springframework.web.servlet.LocaleResolver;
49
50 import info.magnolia.context.MgnlContext;
51 import info.magnolia.module.blossom.context.MagnoliaLocaleResolver;
52 import info.magnolia.module.blossom.dialog.DialogExporter;
53 import info.magnolia.module.blossom.dispatcher.BlossomDispatcher;
54 import info.magnolia.module.blossom.dispatcher.BlossomDispatcherAwareBeanPostProcessor;
55 import info.magnolia.module.blossom.paragraph.ParagraphExporter;
56 import info.magnolia.module.blossom.support.ForwardRequestWrapper;
57 import info.magnolia.module.blossom.support.IncludeRequestWrapper;
58 import info.magnolia.module.blossom.template.TemplateExporter;
59 import info.magnolia.module.blossom.urimapping.AnnotatedVirtualURIMappingExporter;
60 import info.magnolia.module.blossom.urimapping.VirtualURIMappingExporter;
61
62
63
64
65
66
67
68 public class BlossomDispatcherServlet extends DispatcherServlet implements BlossomDispatcher {
69
70 @Override
71 protected Object getDefaultStrategy(ApplicationContext context, Class strategyInterface) throws BeansException {
72 if (strategyInterface.equals(LocaleResolver.class))
73 return super.createDefaultStrategy(context, MagnoliaLocaleResolver.class);
74 return super.getDefaultStrategy(context, strategyInterface);
75 }
76
77 @Override
78 protected void postProcessWebApplicationContext(final ConfigurableWebApplicationContext wac) {
79 wac.addBeanFactoryPostProcessor(new BeanFactoryPostProcessor() {
80 public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
81 beanFactory.addBeanPostProcessor(new BlossomDispatcherAwareBeanPostProcessor(BlossomDispatcherServlet.this));
82 beanFactory.addBeanPostProcessor(new ParagraphExporter(BlossomDispatcherServlet.this));
83 beanFactory.addBeanPostProcessor(new TemplateExporter(BlossomDispatcherServlet.this));
84 }
85 });
86 }
87
88 @Override
89 protected void onRefresh(ApplicationContext context) throws BeansException {
90 super.onRefresh(context);
91 context.getAutowireCapableBeanFactory().createBean(DialogExporter.class);
92 context.getAutowireCapableBeanFactory().createBean(AnnotatedVirtualURIMappingExporter.class);
93 context.getAutowireCapableBeanFactory().createBean(VirtualURIMappingExporter.class);
94 }
95
96 @Override
97 public HandlerAdapter getHandlerAdapter(Object handler) throws ServletException {
98 return super.getHandlerAdapter(handler);
99 }
100
101 public void forward(String path, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
102
103 String contextPath = request.getContextPath();
104
105 request = new ForwardRequestWrapper(request, contextPath + path, contextPath, path, null);
106
107 MgnlContext.push(request, response);
108 try {
109 super.service(request, response);
110 } finally {
111 MgnlContext.pop();
112 }
113 }
114
115 public void include(String path, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
116
117 String contextPath = request.getContextPath();
118
119 request = new IncludeRequestWrapper(request, contextPath + path, contextPath, path, null, request.getQueryString());
120
121 MgnlContext.push(request, response);
122 try {
123 super.service(request, response);
124 } finally {
125 MgnlContext.pop();
126 }
127 }
128 }