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.module;
35
36 import java.util.ArrayList;
37 import java.util.List;
38 import javax.servlet.ServletContext;
39 import javax.servlet.ServletException;
40
41 import org.springframework.util.StringUtils;
42 import org.springframework.web.context.ConfigurableWebApplicationContext;
43 import org.springframework.web.context.ContextLoader;
44 import org.springframework.web.servlet.DispatcherServlet;
45
46 import info.magnolia.module.blossom.render.BlossomDispatcherServlet;
47 import info.magnolia.module.blossom.support.CustomServletConfig;
48 import info.magnolia.objectfactory.Components;
49
50
51
52
53
54
55
56
57
58 public class BlossomModuleSupport {
59
60 private ContextLoader contextLoader;
61 private List<DispatcherServlet> dispatcherServlets = new ArrayList<DispatcherServlet>();
62
63 public void initRootWebApplicationContext(final String configLocation) {
64
65 initRootWebApplicationContext(new ContextLoader() {
66
67 @Override
68 protected void customizeContext(ServletContext servletContext, ConfigurableWebApplicationContext applicationContext) {
69
70 applicationContext.setConfigLocations(StringUtils.tokenizeToStringArray(configLocation, ConfigurableWebApplicationContext.CONFIG_LOCATION_DELIMITERS));
71 }
72 });
73 }
74
75 public void initRootWebApplicationContext(ContextLoader contextLoader) {
76 if (this.contextLoader != null) {
77 throw new IllegalStateException("ContextLoader already set, root WebApplicationContext has already been initialized");
78 }
79 this.contextLoader = contextLoader;
80 this.contextLoader.initWebApplicationContext(getServletContext());
81 }
82
83 public void closeRootWebApplicationContext() {
84 if (contextLoader != null) {
85 contextLoader.closeWebApplicationContext(getServletContext());
86 contextLoader = null;
87 }
88 }
89
90 public void initBlossomDispatcherServlet(String servletName, String configLocation) {
91 initDispatcherServlet(new BlossomDispatcherServlet(), servletName, configLocation);
92 }
93
94 public void initDispatcherServlet(String servletName, String configLocation) {
95 initDispatcherServlet(new DispatcherServlet(), servletName, configLocation);
96 }
97
98 public void initDispatcherServlet(DispatcherServlet dispatcherServlet, String servletName, String configLocation) {
99 try {
100
101 CustomServletConfig servletConfig = new CustomServletConfig(servletName, getServletContext());
102 servletConfig.addInitParameter("contextConfigLocation", configLocation);
103
104 dispatcherServlet.init(servletConfig);
105
106 dispatcherServlets.add(dispatcherServlet);
107
108 } catch (ServletException e) {
109 throw new RuntimeException("Servlet initialization failed for servlet [" + servletName + "]", e);
110 }
111 }
112
113 public void destroyDispatcherServlets() {
114 for (int i = dispatcherServlets.size() - 1; i >= 0; i--) {
115 dispatcherServlets.get(i).destroy();
116 }
117 dispatcherServlets.clear();
118 }
119
120 public List<DispatcherServlet> getDispatcherServlets() {
121 return dispatcherServlets;
122 }
123
124 public ServletContext getServletContext() {
125 return Components.getComponent(ServletContext.class);
126 }
127 }