1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package io.wcm.caravan.jaxrs.publisher.impl;
21
22 import static io.wcm.caravan.jaxrs.publisher.impl.ServletContainerBridge.isJaxRsGlobal;
23
24 import org.osgi.framework.Bundle;
25 import org.osgi.framework.BundleContext;
26 import org.osgi.framework.ServiceReference;
27 import org.osgi.util.tracker.ServiceTracker;
28
29 import io.wcm.caravan.jaxrs.publisher.JaxRsClassesProvider;
30
31
32
33
34 class JaxRsClassesProviderTracker extends ServiceTracker<JaxRsClassesProvider, Object> {
35
36 private final ServletContainerBridge bridge;
37 private final BundleContext bundleContext;
38 private final Bundle bundle;
39
40 JaxRsClassesProviderTracker(ServletContainerBridge bridge) {
41 super(bridge.getBundleContext(), JaxRsClassesProvider.class, null);
42 this.bridge = bridge;
43 this.bundleContext = bridge.getBundleContext();
44 this.bundle = bridge.getBundle();
45 }
46
47 @Override
48 public Object addingService(ServiceReference<JaxRsClassesProvider> reference) {
49 if (isJaxRsGlobal(reference)) {
50 JaxRsClassesProvider serviceInstance = bundle.getBundleContext().getService(reference);
51 ServletContainerBridge.log.debug("Register global classes provider {} for {}", serviceInstance.getClass().getName(), bundle.getSymbolicName());
52 bridge.getGlobalClassesProviders().add(serviceInstance);
53 bridge.markAsDirty();
54 }
55 else if (reference.getBundle() == bundle) {
56 JaxRsClassesProvider serviceInstance = bundle.getBundleContext().getService(reference);
57 ServletContainerBridge.log.debug("Register classes provider {} for {}", serviceInstance.getClass().getName(), bundle.getSymbolicName());
58 bridge.getLocalClassesProviders().add(serviceInstance);
59 bridge.markAsDirty();
60 }
61 return super.addingService(reference);
62 }
63
64 @Override
65 public void removedService(ServiceReference<JaxRsClassesProvider> reference, Object service) {
66 if (isJaxRsGlobal(reference)) {
67 JaxRsClassesProvider serviceInstance = bundle.getBundleContext().getService(reference);
68 ServletContainerBridge.log.debug("Unregister global classes provider {} for {}", serviceInstance.getClass().getName(), bundle.getSymbolicName());
69 bridge.getGlobalClassesProviders().remove(serviceInstance);
70 bundleContext.ungetService(reference);
71 bridge.markAsDirty();
72 }
73 else if (reference.getBundle() == bundle) {
74 JaxRsClassesProvider serviceInstance = bundle.getBundleContext().getService(reference);
75 ServletContainerBridge.log.debug("Unregister classes provider {} for {}", serviceInstance.getClass().getName(), bundle.getSymbolicName());
76 bridge.getLocalClassesProviders().remove(serviceInstance);
77 bundleContext.ungetService(reference);
78 bridge.markAsDirty();
79 }
80 super.removedService(reference, service);
81 }
82
83 }