1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.seasar.cubby.plugins.s2;
18
19 import javax.el.ELResolver;
20 import javax.servlet.ServletContext;
21 import javax.servlet.jsp.JspApplicationContext;
22 import javax.servlet.jsp.JspFactory;
23
24 import org.seasar.cubby.plugin.AbstractPlugin;
25 import org.seasar.cubby.plugins.s2.el.S2BeanELResolver;
26 import org.seasar.cubby.spi.BeanDescProvider;
27 import org.seasar.cubby.spi.ContainerProvider;
28 import org.seasar.cubby.spi.ConverterProvider;
29 import org.seasar.cubby.spi.PathResolverProvider;
30 import org.seasar.cubby.spi.Provider;
31 import org.seasar.cubby.spi.RequestParserProvider;
32 import org.seasar.framework.container.S2Container;
33 import org.seasar.framework.container.factory.SingletonS2ContainerFactory;
34 import org.seasar.framework.log.Logger;
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53 public class S2ContainerPlugin extends AbstractPlugin {
54
55
56 private static final Logger logger = Logger
57 .getLogger(S2ContainerPlugin.class);
58
59 static {
60
61
62
63
64
65 try {
66 Class.forName("org.apache.jasper.compiler.JspRuntimeContext");
67 } catch (final Exception e) {
68 if (logger.isDebugEnabled()) {
69 logger.debug(e.getMessage());
70 }
71 }
72 }
73
74
75
76
77 public S2ContainerPlugin() {
78 support(BeanDescProvider.class);
79 support(ContainerProvider.class);
80 support(RequestParserProvider.class);
81 support(PathResolverProvider.class);
82 support(ConverterProvider.class);
83 }
84
85
86 private ServletContext servletContext;
87
88
89
90
91 @Override
92 public void initialize(final ServletContext servletContext)
93 throws Exception {
94 super.initialize(servletContext);
95 this.servletContext = servletContext;
96 }
97
98
99
100
101
102
103
104 @Override
105 public void ready() {
106 final JspFactory jspFactory = JspFactory.getDefaultFactory();
107 if (jspFactory != null) {
108 final JspApplicationContext jspApplicationContext = jspFactory
109 .getJspApplicationContext(servletContext);
110 final S2Container container = SingletonS2ContainerFactory
111 .getContainer();
112 final ELResolver[] elResolvers = (ELResolver[]) container
113 .findAllComponents(ELResolver.class);
114 for (final ELResolver elResolver : elResolvers) {
115 jspApplicationContext.addELResolver(elResolver);
116 logger.log("ICUB0001", new Object[] { elResolver });
117 }
118 }
119 }
120
121
122
123
124 @Override
125 public <S extends Provider> S getProvider(final Class<S> service) {
126 if (this.isSupport(service)) {
127 final S2Container container = SingletonS2ContainerFactory
128 .getContainer();
129 return service.cast(container.getComponent(service));
130 } else {
131 return null;
132 }
133 }
134
135 }