1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.springframework.osgi.extender.internal.dependencies.startup;
18
19 import java.util.ArrayList;
20 import java.util.Collection;
21 import java.util.List;
22
23 import org.osgi.framework.BundleContext;
24 import org.osgi.framework.BundleException;
25 import org.osgi.framework.InvalidSyntaxException;
26 import org.springframework.beans.BeansException;
27 import org.springframework.beans.factory.BeanFactory;
28 import org.springframework.beans.factory.BeanFactoryUtils;
29 import org.springframework.beans.factory.SmartFactoryBean;
30 import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
31 import org.springframework.osgi.extender.OsgiServiceDependencyFactory;
32 import org.springframework.osgi.service.importer.DefaultOsgiServiceDependency;
33 import org.springframework.osgi.service.importer.OsgiServiceDependency;
34 import org.springframework.osgi.service.importer.support.OsgiServiceCollectionProxyFactoryBean;
35 import org.springframework.osgi.service.importer.support.OsgiServiceProxyFactoryBean;
36 import org.springframework.util.StringUtils;
37
38 /**
39 * Default mandatory importer dependency factory.
40 *
41 * @author Costin Leau
42 *
43 */
44 public class MandatoryImporterDependencyFactory implements OsgiServiceDependencyFactory {
45
46 public Collection getServiceDependencies(BundleContext bundleContext, ConfigurableListableBeanFactory beanFactory)
47 throws BeansException, InvalidSyntaxException, BundleException {
48
49 String[] singleBeans = BeanFactoryUtils.beanNamesForTypeIncludingAncestors(beanFactory,
50 OsgiServiceProxyFactoryBean.class, true, false);
51
52 String[] collectionBeans = BeanFactoryUtils.beanNamesForTypeIncludingAncestors(beanFactory,
53 OsgiServiceCollectionProxyFactoryBean.class, true, false);
54
55 String[] beans = StringUtils.concatenateStringArrays(singleBeans, collectionBeans);
56
57 List beansCollections = new ArrayList(beans.length);
58
59 for (int i = 0; i < beans.length; i++) {
60 String beanName = (beans[i].startsWith(BeanFactory.FACTORY_BEAN_PREFIX) ? beans[i]
61 : BeanFactory.FACTORY_BEAN_PREFIX + beans[i]);
62
63 SmartFactoryBean reference = (SmartFactoryBean) beanFactory.getBean(beanName);
64
65 OsgiServiceDependency dependency;
66 if (reference instanceof OsgiServiceProxyFactoryBean) {
67 OsgiServiceProxyFactoryBean importer = (OsgiServiceProxyFactoryBean) reference;
68
69 dependency = new DefaultOsgiServiceDependency(beanName, importer.getUnifiedFilter(),
70 importer.getCardinality().isMandatory());
71 }
72 else {
73 OsgiServiceCollectionProxyFactoryBean importer = (OsgiServiceCollectionProxyFactoryBean) reference;
74
75 dependency = new DefaultOsgiServiceDependency(beanName, importer.getUnifiedFilter(),
76 importer.getCardinality().isMandatory());
77 }
78
79 beansCollections.add(dependency);
80 }
81
82 return beansCollections;
83 }
84 }