1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package org.jumpmind.symmetric.web;
22
23 import java.util.Iterator;
24
25 import javax.servlet.ServletConfig;
26 import javax.servlet.ServletContext;
27 import javax.servlet.ServletException;
28 import javax.servlet.ServletRequest;
29
30 import org.jumpmind.symmetric.transport.ITransportResource;
31 import org.jumpmind.symmetric.transport.ITransportResourceHandler;
32 import org.springframework.beans.BeanUtils;
33
34 /***
35 * @since 1.4.0
36 *
37 * @param <T>
38 */
39 public abstract class AbstractResourceServlet<T extends ITransportResourceHandler> extends AbstractServlet implements
40 IServletResource {
41 private ServletResourceTemplate servletResourceTemplate = new ServletResourceTemplate();
42
43 /***
44 * Returns true if this should be container compatible
45 *
46 * @return
47 */
48 public boolean isContainerCompatible() {
49 return false;
50 }
51
52 public void destroy() {
53 servletResourceTemplate.destroy();
54 }
55
56 public boolean isDisabled() {
57 return servletResourceTemplate.isDisabled();
58 }
59
60 public String[] getRegexPatterns() {
61 return servletResourceTemplate.getRegexPatterns();
62 }
63
64 public String[] getUriPatterns() {
65 return servletResourceTemplate.getUriPatterns();
66 }
67
68 public boolean matches(ServletRequest request) {
69 return servletResourceTemplate.matches(request);
70 }
71
72 public void setDisabled(boolean disabled) {
73 servletResourceTemplate.setDisabled(disabled);
74 }
75
76 public void setEnabled(boolean enabled) {
77 servletResourceTemplate.setDisabled(!enabled);
78 }
79
80 public void setRegexPattern(String regexPattern) {
81 servletResourceTemplate.setRegexPattern(regexPattern);
82 }
83
84 public void setRegexPatterns(String[] regexPatterns) {
85 servletResourceTemplate.setRegexPatterns(regexPatterns);
86 }
87
88 public void setUriPattern(String uriPattern) {
89 servletResourceTemplate.setUriPattern(uriPattern);
90 }
91
92 public void setUriPatterns(String[] uriPatterns) {
93 servletResourceTemplate.setUriPatterns(uriPatterns);
94 }
95
96 public String toString() {
97 return servletResourceTemplate.toString();
98 }
99
100 @Override
101 public void init(ServletConfig servletConfig) throws ServletException {
102 super.init(servletConfig);
103 servletResourceTemplate.init(getServletContext());
104 if (isContainerCompatible() && !this.isSpringManaged()) {
105 final IServletResource springBean = getSpringBean();
106 if (this != springBean) {
107 if (getLogger().isInfoEnabled()) {
108 getLogger().info(String.format("Initializing servlet %s", springBean.getClass().getSimpleName()));
109 }
110 BeanUtils.copyProperties(springBean, this, IServletResource.class);
111 BeanUtils.copyProperties(springBean, this, ITransportResource.class);
112 BeanUtils.copyProperties(springBean, this, this.getClass());
113
114 this.refresh();
115 }
116 }
117 }
118
119 /***
120 * Returns true if this is a spring managed resource.
121 *
122 * @return
123 */
124 public boolean isSpringManaged() {
125 return getDefaultApplicationContext().getBeansOfType(this.getClass()).values().contains(this);
126 }
127
128 /***
129 * Returns true if this is a container managed resource.
130 *
131 * @return
132 */
133 @SuppressWarnings("unchecked")
134 public IServletResource getSpringBean() {
135 IServletResource retVal = this;
136 if (!isSpringManaged()) {
137 Iterator iterator = getDefaultApplicationContext().getBeansOfType(this.getClass()).values().iterator();
138 if (iterator.hasNext()) {
139 retVal = (IServletResource) iterator.next();
140 }
141 }
142 return retVal;
143 }
144
145 public void init(ServletContext servletContext) {
146 servletResourceTemplate.init(servletContext);
147 }
148
149 public void refresh() {
150 servletResourceTemplate.refresh();
151 }
152 }