1 package com.atlassian.plugin.osgi.factory;
2
3 import com.atlassian.plugin.ModuleDescriptor;
4 import org.apache.commons.logging.Log;
5 import org.apache.commons.logging.LogFactory;
6 import org.apache.commons.lang.Validate;
7 import org.osgi.framework.Bundle;
8 import org.osgi.framework.ServiceReference;
9 import org.osgi.util.tracker.ServiceTrackerCustomizer;
10
11
12
13
14
15
16 class ModuleDescriptorServiceTrackerCustomizer implements ServiceTrackerCustomizer
17 {
18 private static final Log log = LogFactory.getLog(ModuleDescriptorServiceTrackerCustomizer.class);
19
20 private final Bundle bundle;
21 private final OsgiPlugin plugin;
22
23 public ModuleDescriptorServiceTrackerCustomizer(OsgiPlugin plugin)
24 {
25 Validate.notNull(plugin);
26 this.bundle = plugin.getBundle();
27 Validate.notNull(bundle);
28 this.plugin = plugin;
29 }
30
31 public Object addingService(final ServiceReference serviceReference)
32 {
33 ModuleDescriptor<?> descriptor = null;
34 if (serviceReference.getBundle() == bundle)
35 {
36 descriptor = (ModuleDescriptor<?>) bundle.getBundleContext().getService(serviceReference);
37 plugin.addModuleDescriptor(descriptor);
38 if (log.isInfoEnabled())
39 {
40 log.info("Dynamically registered new module descriptor: " + descriptor.getCompleteKey());
41 }
42 }
43 return descriptor;
44 }
45
46 public void modifiedService(final ServiceReference serviceReference, final Object o)
47 {
48 if (serviceReference.getBundle() == bundle)
49 {
50 final ModuleDescriptor<?> descriptor = (ModuleDescriptor<?>) o;
51 plugin.addModuleDescriptor(descriptor);
52 if (log.isInfoEnabled())
53 {
54 log.info("Dynamically upgraded new module descriptor: " + descriptor.getCompleteKey());
55 }
56 }
57 }
58
59 public void removedService(final ServiceReference serviceReference, final Object o)
60 {
61 if (serviceReference.getBundle() == bundle)
62 {
63 final ModuleDescriptor<?> descriptor = (ModuleDescriptor<?>) o;
64 plugin.clearModuleDescriptor(descriptor.getKey());
65 if (log.isInfoEnabled())
66 {
67 log.info("Dynamically removed module descriptor: " + descriptor.getCompleteKey());
68 }
69 }
70 }
71 }