You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by cs...@apache.org on 2017/07/19 10:48:53 UTC
svn commit: r1802372 - in
/aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional:
OSGi.java internal/ServiceRegistrationOSGiImpl.java
Author: csierra
Date: Wed Jul 19 10:48:53 2017
New Revision: 1802372
URL: http://svn.apache.org/viewvc?rev=1802372&view=rev
Log:
Suuport the varied ways of register services in OSGi
Modified:
aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/OSGi.java
aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/internal/ServiceRegistrationOSGiImpl.java
Modified: aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/OSGi.java
URL: http://svn.apache.org/viewvc/aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/OSGi.java?rev=1802372&r1=1802371&r2=1802372&view=diff
==============================================================================
--- aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/OSGi.java (original)
+++ aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/OSGi.java Wed Jul 19 10:48:53 2017
@@ -37,11 +37,11 @@ import org.apache.aries.osgi.functional.
import org.apache.aries.osgi.functional.internal.ServicesOSGi;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceFactory;
import org.osgi.framework.ServiceObjects;
import org.osgi.framework.ServiceReference;
import org.osgi.framework.ServiceRegistration;
-import java.util.ArrayList;
import java.util.Dictionary;
import java.util.Map;
import java.util.function.Consumer;
@@ -114,11 +114,22 @@ public interface OSGi<T> extends OSGiRun
return new PrototypesOSGi<>(clazz, filterString);
}
- static <T, S extends T> OSGi<ServiceRegistration<T>> register(
- Class<T> clazz, S service, Map<String, Object> properties) {
+ static <T> OSGi<ServiceRegistration<T>> register(
+ Class<T> clazz, T service, Map<String, Object> properties) {
- return new ServiceRegistrationOSGiImpl<>(
- clazz, service, properties);
+ return new ServiceRegistrationOSGiImpl<>(clazz, service, properties);
+ }
+
+ static <T> OSGi<ServiceRegistration<T>> register(
+ Class<T> clazz, ServiceFactory<T> service, Map<String, Object> properties) {
+
+ return new ServiceRegistrationOSGiImpl<>(clazz, service, properties);
+ }
+
+ static OSGi<ServiceRegistration<?>> register(
+ String[] classes, Object service, Map<String, ?> properties) {
+
+ return new ServiceRegistrationOSGiImpl(classes, service, properties);
}
static <T> OSGi<T> services(Class<T> clazz) {
Modified: aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/internal/ServiceRegistrationOSGiImpl.java
URL: http://svn.apache.org/viewvc/aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/internal/ServiceRegistrationOSGiImpl.java?rev=1802372&r1=1802371&r2=1802372&view=diff
==============================================================================
--- aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/internal/ServiceRegistrationOSGiImpl.java (original)
+++ aries/trunk/component-dsl/component-dsl/src/main/java/org/apache/aries/osgi/functional/internal/ServiceRegistrationOSGiImpl.java Wed Jul 19 10:48:53 2017
@@ -17,6 +17,7 @@
package org.apache.aries.osgi.functional.internal;
+import org.osgi.framework.ServiceFactory;
import org.osgi.framework.ServiceRegistration;
import java.util.Hashtable;
@@ -26,47 +27,89 @@ import java.util.function.Consumer;
/**
* @author Carlos Sierra Andrés
*/
-public class ServiceRegistrationOSGiImpl<T, S extends T>
+public class ServiceRegistrationOSGiImpl<T>
extends OSGiImpl<ServiceRegistration<T>> {
public ServiceRegistrationOSGiImpl(
- Class<T> clazz, S service, Map<String, Object> properties) {
+ Class<T> clazz, T service, Map<String, Object> properties) {
super(bundleContext -> {
ServiceRegistration<T> serviceRegistration =
bundleContext.registerService(
+ clazz, service, getProperties(properties));
+
+ return getServiceRegistrationOSGiResult(serviceRegistration);
+ });
+ }
+
+ public ServiceRegistrationOSGiImpl(
+ Class<T> clazz, ServiceFactory<T> serviceFactory,
+ Map<String, Object> properties) {
+
+ super(bundleContext -> {
+ ServiceRegistration<T> serviceRegistration =
+ bundleContext.registerService(
+ clazz, serviceFactory, getProperties(properties));
+
+ return getServiceRegistrationOSGiResult(serviceRegistration);
+ });
+ }
+
+ public ServiceRegistrationOSGiImpl(
+ String[] clazz, Object service, Map<String, ?> properties) {
+
+ super(bundleContext -> {
+ ServiceRegistration<?> serviceRegistration =
+ bundleContext.registerService(
clazz, service, new Hashtable<>(properties));
- Pipe<Tuple
- <ServiceRegistration<T>>, Tuple<ServiceRegistration<T>>>
- added = Pipe.create();
-
- Consumer<Tuple<ServiceRegistration<T>>> addedSource =
- added.getSource();
-
- Tuple<ServiceRegistration<T>> tuple = Tuple.create(
- serviceRegistration);
-
- Pipe<Tuple<ServiceRegistration<T>>, Tuple<ServiceRegistration<T>>>
- removed = Pipe.create();
-
- Consumer<Tuple<ServiceRegistration<T>>> removedSource =
- removed.getSource();
-
- return new OSGiResultImpl<>(
- added, removed,
- () -> addedSource.accept(tuple),
- () -> {
- try {
- serviceRegistration.unregister();
- }
- catch (Exception e) {
- }
- finally {
- removedSource.accept(tuple);
- }
- });
+ return getServiceRegistrationOSGiResult(
+ (ServiceRegistration)serviceRegistration);
});
}
+ private static Hashtable<String, Object> getProperties(
+ Map<String, Object> properties) {
+
+ if (properties == null) {
+ return new Hashtable<>();
+ }
+
+ return new Hashtable<>(properties);
+ }
+
+ private static <T> OSGiResultImpl<ServiceRegistration<T>>
+ getServiceRegistrationOSGiResult(
+ ServiceRegistration<T> serviceRegistration) {
+
+ Pipe<Tuple<ServiceRegistration<T>>, Tuple<ServiceRegistration<T>>>
+ added = Pipe.create();
+
+ Consumer<Tuple<ServiceRegistration<T>>> addedSource =
+ added.getSource();
+
+ Tuple<ServiceRegistration<T>> tuple = Tuple.create(
+ serviceRegistration);
+
+ Pipe<Tuple<ServiceRegistration<T>>, Tuple<ServiceRegistration<T>>>
+ removed = Pipe.create();
+
+ Consumer<Tuple<ServiceRegistration<T>>> removedSource =
+ removed.getSource();
+
+ return new OSGiResultImpl<>(
+ added, removed,
+ () -> addedSource.accept(tuple),
+ () -> {
+ try {
+ serviceRegistration.unregister();
+ }
+ catch (Exception e) {
+ }
+ finally {
+ removedSource.accept(tuple);
+ }
+ });
+ }
+
}