Author: pderop
Date: Mon Jan 18 22:24:06 2016
New Revision: 1725367

URL: http://svn.apache.org/viewvc?rev=1725367&view=rev
Log:
Added tests. Reworked service dependency callbacks.

Added:
    
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/RemovedDependencyTest.java
    
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/ServiceDependencyCallbackSignaturesTest.java
Modified:
    
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/DependencyActivatorBase.java
    
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/Functions.java
    
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/ServiceCallbacksBuilder.java
    
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/ServiceCallbacksBuilderImpl.java

Added: 
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/RemovedDependencyTest.java
URL: 
http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/RemovedDependencyTest.java?rev=1725367&view=auto
==============================================================================
--- 
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/RemovedDependencyTest.java
 (added)
+++ 
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/RemovedDependencyTest.java
 Mon Jan 18 22:24:06 2016
@@ -0,0 +1,175 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.felix.dm.builder.lambda.itest;
+
+import java.util.ArrayList;
+import java.util.Hashtable;
+import java.util.List;
+import java.util.Properties;
+
+import org.junit.Assert;
+
+import org.apache.felix.dm.Component;
+import org.apache.felix.dm.Dependency;
+import org.apache.felix.dm.DependencyManager;
+import org.apache.felix.dm.builder.lambda.ComponentBuilder;
+import org.apache.felix.dm.builder.lambda.DependencyBuilder;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
+import static org.apache.felix.dm.builder.lambda.DependencyActivatorBase.*;
+import static org.apache.felix.dm.builder.lambda.Cb.*;
+
+/**
+ * One consumer, Three providers. The Consumer has two required dependency on 
provider1, provider2, and one 
+ * instance-bound required dependency on provider3.
+ * When the three providers are there, the consumer is started.
+ * 
+ * This test asserts the following correct behaviors:
+ *   - when we remove the dependency on provider2, then the consumer is not 
stopped.
+ *   - when we remove the (instance-bound) dependency on provider3, then the 
consumer os not stopped.
+ * 
+ * @author <a href="mailto:[email protected]";>Felix Project Team</a>
+ */
+@SuppressWarnings({"unchecked", "rawtypes", "unused"})
+public class RemovedDependencyTest extends TestBase {
+    public void testRemoveDependencyAndConsumerMustRemainStarted() {
+        DependencyManager m = getDM();
+        // helper class that ensures certain steps get executed in sequence
+        Ensure e = new Ensure();
+        // Create two providers
+        Hashtable props = new Hashtable();
+        props.put("name", "provider1");
+        Component sp = component(m).impl(new 
ServiceProvider(e)).provides(ServiceInterface.class, props).build();
+        props = new Properties();
+        props.put("name", "provider2");
+        Component sp2 = component(m).impl(new 
ServiceProvider(e)).provides(ServiceInterface.class.getName(), props).build();
+        props = new Properties();
+        props.put("name", "provider3");
+        Component sp3 = component(m).impl(new 
ServiceProvider(e)).provides(ServiceInterface.class.getName(), props).build();
+
+        // Create the consumer, and start it
+        Dependency d3 = 
m.createServiceDependency().setService(ServiceInterface.class, 
"(name=provider3)").setRequired(true).setCallbacks("add", "remove");
+
+        ServiceConsumer consumer = new ServiceConsumer(e, d3);
+        Component sc = component(m).impl(consumer).build();
+        
+        Dependency d1 = serviceDependency(sc, 
ServiceInterface.class).filter("(name=provider1)").cb("add", "remove").build();
+        Dependency d2 = serviceDependency(sc, 
ServiceInterface.class).filter("(name=provider2)").cb("add", "remove").build();
+        
+        sc.add(d1, d2);
+            
+        // Add the first two providers and the consumer
+        m.add(sp);
+        m.add(sp2);
+        m.add(sp3);
+        m.add(sc);
+        
+        // Check if consumer has been bound to the three providers
+        e.waitForStep(3,  5000);
+        Assert.assertEquals(3, consumer.getProvidersCount());
+        Assert.assertNotNull(consumer.getProvider("provider1"));
+        Assert.assertNotNull(consumer.getProvider("provider2"));
+        Assert.assertNotNull(consumer.getProvider("provider3"));
+        
+        // Now remove the provider2, and check if the consumer is still alive
+        sc.remove(d2);
+        Assert.assertFalse(consumer.isStopped());
+        Assert.assertEquals(2, consumer.getProvidersCount());
+        Assert.assertNotNull(consumer.getProvider("provider1"));
+        Assert.assertNull(consumer.getProvider("provider2"));
+        Assert.assertNotNull(consumer.getProvider("provider3"));
+
+        // Now remove the provider3 (the consumer has an instance bound 
dependency on it), and check if the consumer is still alive
+        sc.remove(d3);
+        Assert.assertFalse(consumer.isStopped());
+        Assert.assertEquals(1, consumer.getProvidersCount());
+        Assert.assertNotNull(consumer.getProvider("provider1"));
+        Assert.assertNull(consumer.getProvider("provider2"));
+        Assert.assertNull(consumer.getProvider("provider3"));
+        
+        m.clear();
+    }
+    
+    static interface ServiceInterface {
+        public void invoke();
+    }
+
+    class ServiceProvider implements ServiceInterface {
+        final Ensure m_ensure;
+        
+        public ServiceProvider(Ensure e) {
+            m_ensure = e;
+        }
+        public void invoke() {
+            m_ensure.step();
+        }
+    }
+    
+    class ServiceConsumer {
+        private final Ensure m_ensure;
+        private final List<ServiceReference> m_providers = new ArrayList<>();
+        private BundleContext m_bc;
+        private boolean m_stopped;
+        private final Dependency m_dependency3;
+
+        public ServiceConsumer(Ensure e, Dependency dependency3) {
+            m_ensure = e;
+            m_dependency3 = dependency3;
+        }
+                
+        public void add(ServiceReference ref) {
+            debug("ServiceConsumer.add(%s)", ref);
+            m_providers.add(ref);
+            ServiceInterface s = (ServiceInterface) m_bc.getService(ref);
+            s.invoke();
+        }
+        
+        public void remove(ServiceReference ref) {
+            debug("ServiceConsumer.remove(%s)", ref);
+            m_providers.remove(ref);
+            debug("ServiceConsumer: current providers list=%s", m_providers);
+        }
+        
+        public void init(Component c) {
+            c.add(m_dependency3);
+        }
+        
+        public int getProvidersCount() {
+            return m_providers.size();
+        }
+        
+        public ServiceInterface getProvider(String name) {
+            for (ServiceReference ref : m_providers) {
+                Object n = ref.getProperty("name");
+                if (n.equals(name)) {
+                    return (ServiceInterface) m_bc.getService(ref);
+                }
+            }
+            return null;
+        }
+        
+        public void stop() {
+            m_stopped = true;
+        }
+        
+        public boolean isStopped() {
+            return m_stopped;
+        }
+    }
+}

Added: 
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/ServiceDependencyCallbackSignaturesTest.java
URL: 
http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/ServiceDependencyCallbackSignaturesTest.java?rev=1725367&view=auto
==============================================================================
--- 
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/ServiceDependencyCallbackSignaturesTest.java
 (added)
+++ 
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/ServiceDependencyCallbackSignaturesTest.java
 Mon Jan 18 22:24:06 2016
@@ -0,0 +1,299 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.felix.dm.builder.lambda.itest;
+
+import static org.apache.felix.dm.builder.lambda.Cb.*;
+import static org.apache.felix.dm.builder.lambda.Cb.CHG;
+import static 
org.apache.felix.dm.builder.lambda.DependencyActivatorBase.component;
+
+import java.util.Dictionary;
+import java.util.Hashtable;
+import java.util.Map;
+
+import org.apache.felix.dm.Component;
+import org.apache.felix.dm.DependencyManager;
+import org.junit.Assert;
+import org.osgi.framework.ServiceReference;
+
+/**
+ * @author <a href="mailto:[email protected]";>Felix Project Team</a>
+ */
+@SuppressWarnings({"unchecked", "rawtypes"})
+public class ServiceDependencyCallbackSignaturesTest extends TestBase {
+    volatile Ensure m_ensure;
+    
+    /**
+     * Tests if all possible dependency callbacks signatures supported by 
ServiceDependency.
+     */
+    public void testDependencyCallbackSignatures() {
+        DependencyManager m = getDM();
+        m_ensure = new Ensure();    
+        Hashtable<String, String> props = new Hashtable<>();
+        props.put("foo", "bar");
+        Component provider = component(m)
+            .impl(new ProviderImpl()).provides(Provider.class.getName(), 
props).build();
+        
+        component(m, c->c.impl(new Consumer1()).withService(Provider.class, 
srv->srv.cb("bind", "change", "remove")));
+        component(m, c->c.impl(new Consumer2()).withService(Provider.class, 
srv->srv.cb("bind", "change", "remove")));
+        component(m, c->c.impl(new Consumer3()).withService(Provider.class, 
srv->srv.cb("bind", "change", "remove")));
+        component(m, c->c.impl(new Consumer4()).withService(Provider.class, 
srv->srv.cb("bind", "change", "remove")));
+        component(m, c->c.impl(new Consumer5()).withService(Provider.class, 
srv->srv.cb("bind", "change", "remove")));
+        component(m, c->c.impl(new Consumer6()).withService(Provider.class, 
srv->srv.cb("bind", "change", "remove")));
+        component(m, c->c.impl(new Consumer7()).withService(Provider.class, 
srv->srv.cb("bind", "change", "remove")));
+        component(m, c->c.impl(new Consumer8()).withService(Provider.class, 
srv->srv.cb("bind", "change", "remove")));
+        component(m, c->c.impl(new Consumer9()).withService(Provider.class, 
srv->srv.cb("bind", "change", "remove")));
+
+        m.add(provider);
+        m_ensure.waitForStep(9, 5000);
+        
+        props = new Hashtable<>();
+        props.put("foo", "zoo");
+        provider.setServiceProperties(props);
+        m_ensure.waitForStep(18, 5000);
+        
+        m.remove(provider);
+        m_ensure.waitForStep(26, 5000);
+    }
+    
+    /**
+     * Tests if all possible dependency callbacks signatures supported by 
ServiceDependency.
+     */
+    public void testDependencyCallbackSignaturesRef() {
+        DependencyManager m = getDM();
+        m_ensure = new Ensure();    
+        Hashtable<String, String> props = new Hashtable<>();
+        props.put("foo", "bar");
+        Component provider = component(m)
+            .impl(new ProviderImpl()).provides(Provider.class.getName(), 
props).build();
+        
+        component(m, c->c.impl(new Consumer1()).withService(Provider.class, 
srv->srv.cb(ADD, Consumer1::bind).cb(CHG, Consumer1::change).cb(REM, 
Consumer1::remove)));
+        component(m, c->c.impl(new Consumer2()).withService(Provider.class, 
srv->srv.cb(ADD, Consumer2::bind).cb(CHG, Consumer2::change).cb(REM, 
Consumer2::remove)));
+        component(m, c->c.impl(new Consumer3()).withService(Provider.class, 
srv->srv.cb(ADD, Consumer3::bind).cb(CHG, Consumer3::change).cb(REM, 
Consumer3::remove)));
+        component(m, c->c.impl(new Consumer4()).withService(Provider.class, 
srv->srv.cb(ADD, Consumer4::bind).cb(CHG, Consumer4::change).cb(REM, 
Consumer4::remove)));
+        component(m, c->c.impl(new Consumer5()).withService(Provider.class, 
srv->srv.cb(ADD, Consumer5::bind).cb(CHG, Consumer5::change).cb(REM, 
Consumer5::remove)));
+        component(m, c->c.impl(new Consumer6()).withService(Provider.class, 
srv->srv.cb(ADD, Consumer6::bind).cb(CHG, Consumer6::change).cb(REM, 
Consumer6::remove)));
+        component(m, c->c.impl(new Consumer7()).withService(Provider.class, 
srv->srv.cb(ADD, Consumer7::bind).cb(CHG, Consumer7::change).cb(REM, 
Consumer7::remove)));
+        component(m, c->c.impl(new Consumer8()).withService(Provider.class, 
srv->srv.cb(ADD, Consumer8::bind).cb(CHG, Consumer8::change).cb(REM, 
Consumer8::remove)));
+        component(m, c->c.impl(new Consumer9()).withService(Provider.class, 
srv->srv.cb(ADD, Consumer9::bind).cb(CHG, Consumer9::change).cb(REM, 
Consumer9::remove)));
+
+        m.add(provider);
+        m_ensure.waitForStep(9, 5000);
+        
+        props = new Hashtable<>();
+        props.put("foo", "zoo");
+        provider.setServiceProperties(props);
+        m_ensure.waitForStep(18, 5000);
+        
+        m.remove(provider);
+        m_ensure.waitForStep(26, 5000);
+    }
+    
+    private void declareConsumer(DependencyManager m, Object consumerImpl) {
+        Component consumer = component(m)
+            .impl(consumerImpl)
+            .withService(Provider.class, srv->srv.cb("bind", "change", 
"change"))
+            .build();
+        m.add(consumer);
+    }
+
+    public static interface Provider {        
+    }
+    
+    public static class ProviderImpl implements Provider {        
+    }
+    
+    class Consumer1 {        
+        void bind(Provider provider) {
+            Assert.assertNotNull(provider);
+            m_ensure.step();
+        }
+        void change(Provider provider) {
+            Assert.assertNotNull(provider);
+            m_ensure.step();
+        }
+        
+        void remove(Provider provider) {
+            Assert.assertNotNull(provider);
+            m_ensure.step();
+        }
+    }
+    
+    class Consumer2 {        
+        void bind(Provider provider, Map<String, Object> props) {
+            Assert.assertNotNull(provider);
+            Assert.assertEquals("bar", props.get("foo"));
+            m_ensure.step();
+        }
+        void change(Provider provider, Map<String, Object> props) {
+            Assert.assertNotNull(provider);
+            Assert.assertEquals("zoo", props.get("foo"));
+            m_ensure.step();
+        }
+        void remove(Provider provider, Map<String, Object> props) {
+            Assert.assertNotNull(provider);
+            Assert.assertEquals("zoo", props.get("foo"));
+            m_ensure.step();
+        }
+    }
+    
+    class Consumer3 {        
+        void bind(Provider provider, Dictionary<?, ?> props) {
+            Assert.assertNotNull(provider);
+            Assert.assertEquals("bar", props.get("foo"));
+            m_ensure.step();
+        }
+        void change(Provider provider, Dictionary<?, ?> props) {
+            Assert.assertNotNull(provider);
+            Assert.assertEquals("zoo", props.get("foo"));
+            m_ensure.step();
+        }
+        void remove(Provider provider, Dictionary<?, ?> props) {
+            Assert.assertNotNull(provider);
+            Assert.assertEquals("zoo", props.get("foo"));
+            m_ensure.step();
+        }
+    }
+
+    class Consumer4 {        
+        void bind(ServiceReference ref, Provider provider) {
+            Assert.assertNotNull(ref);
+            Assert.assertNotNull(provider);
+            Assert.assertEquals("bar", ref.getProperty("foo"));
+            m_ensure.step();
+        }
+        void change(ServiceReference ref, Provider provider) {
+            Assert.assertNotNull(ref);
+            Assert.assertNotNull(provider);
+            Assert.assertEquals("zoo", ref.getProperty("foo"));
+            m_ensure.step();
+        }
+        void remove(ServiceReference ref, Provider provider) {
+            Assert.assertNotNull(ref);
+            Assert.assertNotNull(provider);
+            Assert.assertEquals("zoo", ref.getProperty("foo"));
+            m_ensure.step();
+        }
+    }
+        
+    class Consumer5 {        
+        void bind(ServiceReference ref) {
+            Assert.assertNotNull(ref);
+            Assert.assertEquals("bar", ref.getProperty("foo"));
+            m_ensure.step();
+        }
+        void change(ServiceReference ref) {
+            Assert.assertNotNull(ref);
+            Assert.assertEquals("zoo", ref.getProperty("foo"));
+            m_ensure.step();
+        }
+        void remove(ServiceReference ref) {
+            Assert.assertNotNull(ref);
+            Assert.assertEquals("zoo", ref.getProperty("foo"));
+            m_ensure.step();
+        }
+    }
+
+    class Consumer6 {        
+        void bind(Component c) {
+            Assert.assertNotNull(c);
+            m_ensure.step();
+        }
+        void change(Component c) {
+            Assert.assertNotNull(c);
+            m_ensure.step();
+        }
+        void remove(Component c) {
+            Assert.assertNotNull(c);
+            m_ensure.step();
+        }
+    }
+        
+    class Consumer7 {
+        void bind(Component c, ServiceReference ref) {
+            Assert.assertNotNull(c);
+            Assert.assertNotNull(ref);
+            Assert.assertEquals("bar", ref.getProperty("foo"));
+            Assert.assertNotNull(context.getService(ref));
+            Assert.assertEquals(context.getService(ref).getClass(), 
ProviderImpl.class);
+            m_ensure.step();
+        }
+        void change(Component c, ServiceReference ref) {
+            Assert.assertNotNull(c);
+            Assert.assertNotNull(ref);
+            Assert.assertEquals("zoo", ref.getProperty("foo"));
+            Assert.assertNotNull(context.getService(ref));
+            Assert.assertEquals(context.getService(ref).getClass(), 
ProviderImpl.class);
+            m_ensure.step();
+        }
+        void remove(Component c, ServiceReference ref) {
+            Assert.assertNotNull(c);
+            Assert.assertNotNull(ref);
+            Assert.assertEquals("zoo", ref.getProperty("foo"));
+            Assert.assertNotNull(context.getService(ref));
+            Assert.assertEquals(context.getService(ref).getClass(), 
ProviderImpl.class);
+            m_ensure.step();
+        }
+    }
+        
+    class Consumer8 {
+        void bind(Component c, Provider provider) {
+            Assert.assertNotNull(c);
+            Assert.assertNotNull(provider);
+            m_ensure.step();
+        }
+        void change(Component c, Provider provider) {
+            Assert.assertNotNull(c);
+            Assert.assertNotNull(provider);
+            m_ensure.step();
+        }
+        void remove(Component c, Provider provider) {
+            Assert.assertNotNull(c);
+            Assert.assertNotNull(provider);
+            m_ensure.step();
+        }
+    }
+    
+    class Consumer9 {
+        void bind(Component c, ServiceReference ref, Provider provider) {
+            Assert.assertNotNull(c);
+            Assert.assertNotNull(ref);
+            Assert.assertNotNull(provider);
+            Assert.assertEquals("bar", ref.getProperty("foo"));
+            Assert.assertEquals(context.getService(ref), provider);
+            m_ensure.step();
+        }
+        void change(Component c, ServiceReference ref, Provider provider) {
+            Assert.assertNotNull(c);
+            Assert.assertNotNull(ref);
+            Assert.assertNotNull(provider);
+            Assert.assertEquals("zoo", ref.getProperty("foo"));
+            Assert.assertEquals(context.getService(ref), provider);
+            m_ensure.step();
+        }
+        void remove(Component c, ServiceReference ref, Provider provider) {
+            Assert.assertNotNull(c);
+            Assert.assertNotNull(ref);
+            Assert.assertNotNull(provider);
+            Assert.assertEquals("zoo", ref.getProperty("foo"));
+            Assert.assertEquals(context.getService(ref), provider);
+            m_ensure.step();
+        }
+    }
+        
+}

Modified: 
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/DependencyActivatorBase.java
URL: 
http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/DependencyActivatorBase.java?rev=1725367&r1=1725366&r2=1725367&view=diff
==============================================================================
--- 
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/DependencyActivatorBase.java
 (original)
+++ 
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/DependencyActivatorBase.java
 Mon Jan 18 22:24:06 2016
@@ -1,13 +1,19 @@
 package org.apache.felix.dm.builder.lambda;
 
+import java.util.concurrent.CompletableFuture;
 import java.util.function.Consumer;
 
 import org.apache.felix.dm.Component;
 import org.apache.felix.dm.DependencyManager;
+import org.apache.felix.dm.builder.lambda.impl.BundleDependencyBuilderImpl;
+import org.apache.felix.dm.builder.lambda.impl.CompletableFutureDependencyImpl;
 import org.apache.felix.dm.builder.lambda.impl.ComponentBuilderImpl;
+import 
org.apache.felix.dm.builder.lambda.impl.ConfigurationDependencyBuilderImpl;
 import org.apache.felix.dm.builder.lambda.impl.FactoryPidAdapterBuilderImpl;
 import org.apache.felix.dm.builder.lambda.impl.ServiceAdapterBuilderImpl;
 import org.apache.felix.dm.builder.lambda.impl.ServiceAspectBuilderImpl;
+import org.apache.felix.dm.builder.lambda.impl.ServiceDependencyBuilderImpl;
+import org.apache.felix.dm.impl.ServiceDependencyImpl;
 import org.osgi.framework.BundleActivator;
 import org.osgi.framework.BundleContext;
 
@@ -179,8 +185,50 @@ public abstract class DependencyActivato
     public static FactoryPidAdapterBuilder factoryPidAdapter(DependencyManager 
dm) {
         return new FactoryPidAdapterBuilderImpl(dm);
     }
+   
+    /**
+     * TODO
+     * 
+     * @param component
+     * @param service
+     * @return
+     */
+    public static <T> ServiceDependencyBuilder<T> serviceDependency(Component 
component, Class<T> service) {
+        return new ServiceDependencyBuilderImpl<>(component, service);
+    }
+    
+    /**
+     * TODO
+     * 
+     * @param component
+     * @return
+     */
+    public static ConfigurationDependencyBuilder confDependency(Component 
component) {
+        return new ConfigurationDependencyBuilderImpl(component);
+    }
     
     /**
+     * TODO
+     * 
+     * @param component
+     * @return
+     */
+    public static BundleDependencyBuilder bundleDependency(Component 
component) {
+        return new BundleDependencyBuilderImpl(component);
+    }
+
+    /**
+     * TODO
+     * 
+     * @param component
+     * @param future
+     * @return
+     */
+    public static <F> FutureDependencyBuilder<F> futureDependency(Component 
component, CompletableFuture<F> future) {
+        return new CompletableFutureDependencyImpl<>(component, future);
+    }
+
+    /**
      * Builds a component using a lambda and a component builder
      * @param dm the DependencyManager where the component is auto-added 
(unless the component.autoAdd(false) is called)
      * @param consumer a lambda that is called to build the component. When 
the lambda is called, it will be provided with a 

Modified: 
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/Functions.java
URL: 
http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/Functions.java?rev=1725367&r1=1725366&r2=1725367&view=diff
==============================================================================
--- 
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/Functions.java
 (original)
+++ 
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/Functions.java
 Mon Jan 18 22:24:06 2016
@@ -468,26 +468,6 @@ public class Functions {
             return (Component c, S service) -> { accept(c, service); 
after.accept(c, service); };
         }
     }
-
-    @FunctionalInterface
-    public interface CbComponentServiceMap<S> {
-        void accept(Component c, S service, Map<String, Object> props);
-        
-        default CbComponentServiceMap<S> andThen(CbComponentServiceMap<S> 
after) {
-            Objects.requireNonNull(after);
-            return (Component c, S s, Map<String, Object> props) -> { 
accept(c, s, props); after.accept(c, s, props); };
-        }
-    }
-    
-    @FunctionalInterface
-    public interface CbComponentServiceDict<S> {
-        void accept(Component c, S service, Dictionary<String, Object> props);
-        
-        default CbComponentServiceDict<S> andThen(CbComponentServiceDict<S> 
after) {
-            Objects.requireNonNull(after);
-            return (Component c, S s, Dictionary<String, Object> props) -> { 
accept(c, s, props); after.accept(c, s, props); };
-        }
-    }
     
     @FunctionalInterface
     public interface CbComponentRef<S> {

Modified: 
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/ServiceCallbacksBuilder.java
URL: 
http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/ServiceCallbacksBuilder.java?rev=1725367&r1=1725366&r2=1725367&view=diff
==============================================================================
--- 
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/ServiceCallbacksBuilder.java
 (original)
+++ 
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/ServiceCallbacksBuilder.java
 Mon Jan 18 22:24:06 2016
@@ -7,8 +7,6 @@ import org.apache.felix.dm.builder.lambd
 import org.apache.felix.dm.builder.lambda.Functions.CbComponentRefService;
 import 
org.apache.felix.dm.builder.lambda.Functions.CbComponentRefServiceRefService;
 import org.apache.felix.dm.builder.lambda.Functions.CbComponentService;
-import org.apache.felix.dm.builder.lambda.Functions.CbComponentServiceDict;
-import org.apache.felix.dm.builder.lambda.Functions.CbComponentServiceMap;
 import org.apache.felix.dm.builder.lambda.Functions.CbComponentServiceService;
 import org.apache.felix.dm.builder.lambda.Functions.CbDictServiceDictService;
 import org.apache.felix.dm.builder.lambda.Functions.CbMapServiceMapService;
@@ -24,8 +22,6 @@ import org.apache.felix.dm.builder.lambd
 import org.apache.felix.dm.builder.lambda.Functions.CbTypeComponentRefService;
 import 
org.apache.felix.dm.builder.lambda.Functions.CbTypeComponentRefServiceRefService;
 import org.apache.felix.dm.builder.lambda.Functions.CbTypeComponentService;
-import org.apache.felix.dm.builder.lambda.Functions.CbTypeComponentServiceDict;
-import org.apache.felix.dm.builder.lambda.Functions.CbTypeComponentServiceMap;
 import 
org.apache.felix.dm.builder.lambda.Functions.CbTypeComponentServiceService;
 import 
org.apache.felix.dm.builder.lambda.Functions.CbTypeDictServiceDictService;
 import org.apache.felix.dm.builder.lambda.Functions.CbTypeMapServiceMapService;
@@ -79,24 +75,20 @@ public interface ServiceCallbacksBuilder
     <T> B cb(Cb callbackType, CbTypeService<T, S> callback);
     <T> B cb(Cb callbackType, CbTypeServiceMap<T, S> callback);
     <T> B cb(Cb callbackType, CbTypeServiceDict<T, S> callback);
-    <T> B cb(Cb callbackType, CbTypeRef<T, S> callback);
     <T> B cb(Cb callbackType, CbTypeRefService<T, S> callback);
+    <T> B cb(Cb callbackType, CbTypeRef<T, S> callback);
     <T> B cb(Cb callbackType, CbTypeComponent<T> callback);
-    <T> B cb(Cb callbackType, CbTypeComponentService<T, S> callback);
-    <T> B cb(Cb callbackType, CbTypeComponentServiceMap<T, S> callback);
-    <T> B cb(Cb callbackType, CbTypeComponentServiceDict<T, S> callback);
     <T> B cb(Cb callbackType, CbTypeComponentRef<T, S> callback);
+    <T> B cb(Cb callbackType, CbTypeComponentService<T, S> callback);
     <T> B cb(Cb callbackType, CbTypeComponentRefService<T, S> callback);
   
     B cbi(Cb callbackType, CbService<S> callback);
     B cbi(Cb callbackType, CbServiceMap<S> callback);
     B cbi(Cb callbackType, CbServiceDict<S> callback);
-    B cbi(Cb callbackType, CbRef<S> callback);
     B cbi(Cb callbackType, CbRefService<S> callback);
-    B cbi(Cb callbackType, CbComponent callback);
+    B cbi(Cb callbackType, CbRef<S> callback);
     B cbi(Cb callbackType, CbComponentService<S> callback);  
-    B cbi(Cb callbackType, CbComponentServiceMap<S> callback);
-    B cbi(Cb callbackType, CbComponentServiceDict<S> callback);
+    B cbi(Cb callbackType, CbComponent callback);
     B cbi(Cb callbackType, CbComponentRef<S> callback);
     B cbi(Cb callbackType, CbComponentRefService<S> callback);
 

Modified: 
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/ServiceCallbacksBuilderImpl.java
URL: 
http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/ServiceCallbacksBuilderImpl.java?rev=1725367&r1=1725366&r2=1725367&view=diff
==============================================================================
--- 
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/ServiceCallbacksBuilderImpl.java
 (original)
+++ 
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/ServiceCallbacksBuilderImpl.java
 Mon Jan 18 22:24:06 2016
@@ -15,8 +15,6 @@ import org.apache.felix.dm.builder.lambd
 import org.apache.felix.dm.builder.lambda.Functions.CbComponentRefService;
 import 
org.apache.felix.dm.builder.lambda.Functions.CbComponentRefServiceRefService;
 import org.apache.felix.dm.builder.lambda.Functions.CbComponentService;
-import org.apache.felix.dm.builder.lambda.Functions.CbComponentServiceDict;
-import org.apache.felix.dm.builder.lambda.Functions.CbComponentServiceMap;
 import org.apache.felix.dm.builder.lambda.Functions.CbComponentServiceService;
 import org.apache.felix.dm.builder.lambda.Functions.CbDictServiceDictService;
 import org.apache.felix.dm.builder.lambda.Functions.CbMapServiceMapService;
@@ -177,14 +175,14 @@ public abstract class ServiceCallbacksBu
             (instance, component, ref, service) -> callback.accept((T) 
instance, service, new SRefAsDictionary(ref))); 
     }
     
-    public <T> B cb(Cb cbType, CbTypeRef<T, S> callback) {
+    public <T> B cb(Cb cbType, CbTypeRefService<T, S> callback) {
         return setComponentCallbackRef(cbType, 
Helpers.getLambdaGenericType(callback, 0), 
-            (instance, component, ref, service) -> callback.accept((T) 
instance, ref)); 
+            (instance, component, ref, service) -> callback.accept((T) 
instance, ref, service)); 
     }
 
-    public <T> B cb(Cb cbType, CbTypeRefService<T, S> callback) {
+    public <T> B cb(Cb cbType, CbTypeRef<T, S> callback) {
         return setComponentCallbackRef(cbType, 
Helpers.getLambdaGenericType(callback, 0), 
-            (instance, component, ref, service) -> callback.accept((T) 
instance, ref, service)); 
+            (instance, component, ref, service) -> callback.accept((T) 
instance, ref)); 
     }
 
     public <T> B cb(Cb cbType, CbTypeComponent<T> callback) {
@@ -197,16 +195,6 @@ public abstract class ServiceCallbacksBu
             (instance, component, ref, service) -> callback.accept((T) 
instance, component, service)); 
     }
 
-    public <T> B cb(Cb cbType, CbTypeComponentServiceMap<T, S> callback) {
-        return setComponentCallbackRef(cbType, 
Helpers.getLambdaGenericType(callback, 0), 
-            (instance, component, ref, service) -> callback.accept((T) 
instance, component, service, new SRefAsMap(ref))); 
-    }
-
-    public <T> B cb(Cb cbType, CbTypeComponentServiceDict<T, S> callback) {
-        return setComponentCallbackRef(cbType, 
Helpers.getLambdaGenericType(callback, 0), 
-            (instance, component, ref, service) -> callback.accept((T) 
instance, component, service, new SRefAsDictionary(ref)));  
-    }
-
     public <T> B cb(Cb cbType, CbTypeComponentRef<T, S> callback) {
         return setComponentCallbackRef(cbType, 
Helpers.getLambdaGenericType(callback, 0), 
             (instance, component, ref, service) -> callback.accept((T) 
instance, component, ref));  
@@ -252,16 +240,6 @@ public abstract class ServiceCallbacksBu
             (instance, component, ref, service) -> callback.accept(component, 
service));   
     }
 
-    public B cbi(Cb cbType, CbComponentServiceMap<S> callback) {
-        return setInstanceCallbackRef(cbType, 
-            (instance, component, ref, service) -> callback.accept(component, 
service, new SRefAsMap(ref)));           
-    }
-
-    public B cbi(Cb cbType, CbComponentServiceDict<S> callback) {
-        return setInstanceCallbackRef(cbType, 
-            (instance, component, ref, service) -> callback.accept(component, 
service, new SRefAsDictionary(ref)));           
-    }
-
     public B cbi(Cb cbType, CbComponentRef<S> callback) {
         return setInstanceCallbackRef(cbType, 
             (instance, component, ref, service) -> callback.accept(component, 
ref));           


Reply via email to