1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.seasar.cubby.internal.plugin;
17
18 import static org.seasar.cubby.internal.util.LogMessages.format;
19
20 import java.util.Collection;
21 import java.util.HashSet;
22 import java.util.Set;
23
24 import javax.servlet.ServletContext;
25
26 import org.seasar.cubby.internal.util.ServiceLoader;
27 import org.seasar.cubby.plugin.Plugin;
28 import org.seasar.cubby.plugin.PluginRegistry;
29 import org.slf4j.Logger;
30 import org.slf4j.LoggerFactory;
31
32
33
34
35
36
37 public class PluginManager {
38
39
40 private static final Logger logger = LoggerFactory
41 .getLogger(PluginManager.class);
42
43
44 private final PluginRegistry pluginRegistry;
45
46
47
48
49
50
51
52 public PluginManager(final PluginRegistry pluginRegistry) {
53 this.pluginRegistry = pluginRegistry;
54 }
55
56
57
58
59
60
61
62
63
64 public void init(final ServletContext servletContext) throws Exception {
65 final Collection<Plugin> plugins = loadPlugins();
66 initializePlugins(servletContext, plugins);
67 registerPlugins(pluginRegistry, plugins);
68 readyPlugins(plugins);
69 }
70
71
72
73
74 public void destroy() {
75 final Set<? extends Plugin> plugins = pluginRegistry.getPlugins();
76 destroyPlugins(plugins);
77 pluginRegistry.clear();
78 }
79
80
81
82
83
84
85 protected Collection<Plugin> loadPlugins() {
86 final Set<Plugin> plugins = new HashSet<Plugin>();
87 for (final Plugin plugin : ServiceLoader.load(Plugin.class)) {
88 plugins.add(plugin);
89 }
90 return plugins;
91 }
92
93
94
95
96
97
98
99
100
101
102
103 protected void initializePlugins(final ServletContext servletContext,
104 final Collection<Plugin> plugins) throws Exception {
105 for (final Plugin plugin : plugins) {
106 if (logger.isDebugEnabled()) {
107 logger.debug(format("DCUB0019", plugin));
108 }
109 plugin.initialize(servletContext);
110 if (logger.isInfoEnabled()) {
111 logger.info(format("ICUB0002", plugin));
112 }
113 }
114 }
115
116
117
118
119
120
121
122
123
124 protected void registerPlugins(final PluginRegistry pluginRegistry,
125 final Collection<Plugin> plugins) {
126 for (final Plugin plugin : plugins) {
127 if (logger.isDebugEnabled()) {
128 logger.debug(format("DCUB0020", plugin));
129 }
130 pluginRegistry.register(plugin);
131 if (logger.isInfoEnabled()) {
132 logger.info(format("ICUB0003", plugin));
133 }
134 }
135 }
136
137
138
139
140
141
142
143
144
145 private void readyPlugins(final Collection<Plugin> plugins)
146 throws Exception {
147 for (final Plugin plugin : plugins) {
148 if (logger.isDebugEnabled()) {
149 logger.debug(format("DCUB0021", plugin));
150 }
151 plugin.ready();
152 if (logger.isInfoEnabled()) {
153 logger.info(format("ICUB0004", plugin));
154 }
155 }
156 }
157
158
159
160
161
162
163
164 protected void destroyPlugins(final Set<? extends Plugin> plugins) {
165 for (final Plugin plugin : plugins) {
166 if (logger.isDebugEnabled()) {
167 logger.debug(format("DCUB0022", plugin));
168 }
169 plugin.destroy();
170 if (logger.isInfoEnabled()) {
171 logger.info(format("ICUB0005", plugin));
172 }
173 }
174 }
175
176 }