|
1 | 1 | package com.neva.felix.webconsole.plugins.search;
|
2 | 2 |
|
| 3 | +import com.neva.felix.webconsole.plugins.search.core.SearchService; |
3 | 4 | import com.neva.felix.webconsole.plugins.search.plugin.AbstractPlugin;
|
4 | 5 | import com.neva.felix.webconsole.plugins.search.plugin.SearchPlugin;
|
5 | 6 | import com.google.common.collect.ImmutableSet;
|
| 7 | +import com.neva.felix.webconsole.plugins.search.rest.*; |
6 | 8 | import org.osgi.framework.BundleActivator;
|
7 | 9 | import org.osgi.framework.BundleContext;
|
| 10 | +import org.osgi.framework.ServiceRegistration; |
| 11 | +import org.slf4j.Logger; |
| 12 | +import org.slf4j.LoggerFactory; |
8 | 13 |
|
| 14 | +import javax.servlet.Servlet; |
| 15 | +import java.util.LinkedList; |
| 16 | +import java.util.List; |
9 | 17 | import java.util.Set;
|
10 | 18 |
|
11 | 19 | public class SearchActivator implements BundleActivator {
|
12 | 20 |
|
13 |
| - private SearchHttpTracker httpTracker; |
| 21 | + private static final Logger LOG = LoggerFactory.getLogger(SearchActivator.class); |
| 22 | + |
| 23 | + private final List<ServiceRegistration> services = new LinkedList<>(); |
14 | 24 |
|
15 | 25 | @Override
|
16 | 26 | public void start(BundleContext bundleContext) throws Exception {
|
17 | 27 | for (AbstractPlugin plugin : getPlugins(bundleContext)) {
|
18 |
| - plugin.register(); |
| 28 | + ServiceRegistration service = bundleContext.registerService(Servlet.class.getName(), plugin, plugin.getProps()); |
| 29 | + if (service != null) { |
| 30 | + services.add(service); |
| 31 | + } else { |
| 32 | + LOG.error("Cannot register plugin '{}' as OSGi service", plugin.getClass().getName()); |
| 33 | + } |
| 34 | + } |
| 35 | + for (RestServlet servlet : getServlets(bundleContext)) { |
| 36 | + ServiceRegistration service = bundleContext.registerService(Servlet.class.getName(), servlet, servlet.createProps()); |
| 37 | + if (service != null) { |
| 38 | + services.add(service); |
| 39 | + } else { |
| 40 | + LOG.error("Cannot register plugin servlet '{}' as OSGi service", servlet.getClass().getName()); |
| 41 | + } |
19 | 42 | }
|
20 |
| - |
21 |
| - httpTracker = new SearchHttpTracker(bundleContext); |
22 |
| - httpTracker.open(); |
23 | 43 | }
|
24 | 44 |
|
25 | 45 | @Override
|
26 | 46 | public void stop(BundleContext bundleContext) throws Exception {
|
27 |
| - httpTracker.close(); |
28 |
| - httpTracker = null; |
| 47 | + for (ServiceRegistration service : services) { |
| 48 | + service.unregister(); |
| 49 | + } |
29 | 50 | }
|
30 | 51 |
|
31 | 52 | private Set<AbstractPlugin> getPlugins(BundleContext bundleContext) {
|
32 |
| - return ImmutableSet.<AbstractPlugin>of( |
| 53 | + return ImmutableSet.of( |
33 | 54 | new SearchPlugin(bundleContext)
|
34 | 55 | );
|
35 | 56 | }
|
| 57 | + |
| 58 | + private ImmutableSet<RestServlet> getServlets(BundleContext context) { |
| 59 | + return ImmutableSet.of( |
| 60 | + new ByPhraseServlet(context), |
| 61 | + new BundleDownloadServlet(context), |
| 62 | + new BundleClassesServlet(context), |
| 63 | + new ClassDecompileServlet(context), |
| 64 | + new ClassSearchServlet(context), |
| 65 | + new SourceGenerateServlet(context), |
| 66 | + new FileDownloadServlet(context), |
| 67 | + new BundleAssembleServlet(context) |
| 68 | + ); |
| 69 | + } |
36 | 70 | }
|
0 commit comments