Merge pull request #21 from rmannibucau/rmannibucau/support-multiple-servicepid
enable to have a String[] for service.pid
diff --git a/winegrower-core/src/main/java/org/apache/winegrower/service/OSGiServices.java b/winegrower-core/src/main/java/org/apache/winegrower/service/OSGiServices.java
index 57f7ce9..f1e331f 100644
--- a/winegrower-core/src/main/java/org/apache/winegrower/service/OSGiServices.java
+++ b/winegrower-core/src/main/java/org/apache/winegrower/service/OSGiServices.java
@@ -13,22 +13,6 @@
*/
package org.apache.winegrower.service;
-import static java.util.Collections.list;
-import static java.util.Optional.ofNullable;
-import static java.util.stream.Collectors.groupingBy;
-import static java.util.stream.Collectors.toList;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Dictionary;
-import java.util.Hashtable;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import java.util.concurrent.atomic.AtomicLong;
-import java.util.stream.Stream;
-
import org.apache.winegrower.Ripener;
import org.apache.winegrower.api.InjectedService;
import org.apache.winegrower.deployer.BundleContextImpl;
@@ -56,6 +40,22 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Dictionary;
+import java.util.Hashtable;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.concurrent.atomic.AtomicLong;
+import java.util.stream.Stream;
+
+import static java.util.Collections.list;
+import static java.util.Optional.ofNullable;
+import static java.util.stream.Collectors.groupingBy;
+import static java.util.stream.Collectors.toList;
+
// holder of all services
public class OSGiServices {
private static final Logger LOGGER = LoggerFactory.getLogger(OSGiServices.class);
@@ -248,29 +248,13 @@
final Object pid = serviceProperties.get(Constants.SERVICE_PID);
if (pid != null) {
final ConfigurationAdmin configurationAdmin = framework.getConfigurationAdmin();
- final String pidStr = String.valueOf(pid);
- try {
- final Configuration configuration = configurationAdmin.getConfiguration(pidStr);
- ofNullable(configuration.getProperties())
- .ifPresent(prop -> list(prop.keys())
- .forEach(key -> serviceProperties.put(key, configuration.getProperties().get(key))));
- } catch (final IOException e) {
- LOGGER.warn(e.getMessage());
- }
+ asStream(pid).forEach(it -> initConfiguration(serviceProperties, configurationAdmin, it));
}
final Object factoryPid = serviceProperties.get("service.factoryPid");
if (factoryPid != null) {
final ConfigurationAdmin configurationAdmin = framework.getConfigurationAdmin();
- final String pidStr = String.valueOf(factoryPid);
- try {
- final Configuration configuration = configurationAdmin.createFactoryConfiguration(pidStr);
- ofNullable(configuration.getProperties())
- .ifPresent(prop -> list(prop.keys())
- .forEach(key -> serviceProperties.put(key, configuration.getProperties().get(key))));
- } catch (final IOException e) {
- LOGGER.warn(e.getMessage());
- }
+ asStream(factoryPid).forEach(it -> initFactoryConfiguration(serviceProperties, configurationAdmin, it));
}
services.add(registration);
@@ -298,6 +282,42 @@
return registration;
}
+ private Stream<String> asStream(final Object value) {
+ if (String[].class.isInstance(value)) {
+ return Stream.of(String[].class.cast(value));
+ }
+ if (Collection.class.isInstance(value)) {
+ return Collection.class.cast(value).stream().map(String::valueOf);
+ }
+ return Stream.of(String.valueOf(value));
+ }
+
+ public void initFactoryConfiguration(final Hashtable<String, Object> serviceProperties,
+ final ConfigurationAdmin configurationAdmin,
+ final String pidStr) {
+ try {
+ final Configuration configuration = configurationAdmin.createFactoryConfiguration(pidStr);
+ ofNullable(configuration.getProperties())
+ .ifPresent(prop -> list(prop.keys())
+ .forEach(key -> serviceProperties.put(key, configuration.getProperties().get(key))));
+ } catch (final IOException e) {
+ LOGGER.warn(e.getMessage());
+ }
+ }
+
+ public void initConfiguration(final Hashtable<String, Object> serviceProperties,
+ final ConfigurationAdmin configurationAdmin,
+ final String pid) {
+ try {
+ final Configuration configuration = configurationAdmin.getConfiguration(pid);
+ ofNullable(configuration.getProperties())
+ .ifPresent(prop -> list(prop.keys())
+ .forEach(key -> serviceProperties.put(key, configuration.getProperties().get(key))));
+ } catch (final IOException e) {
+ LOGGER.warn(e.getMessage());
+ }
+ }
+
private void fireEvent(final ServiceRegistration<?> reg, final ServiceEvent event) {
final List<ServiceListenerDefinition> listeners = getListeners(reg);
final Collection<ServiceReference<EventListenerHook>> eventListenerHooks = hooks.getEventListenerHooks();