Author: pderop
Date: Tue Jan 19 23:00:49 2016
New Revision: 1725647
URL: http://svn.apache.org/viewvc?rev=1725647&view=rev
Log:
Added support for Bundle Adapter. Added tests. Fixed component lifecycle
callbacks. cleaned API.
Added:
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/BundleAdapterTest.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/BundleAdapterWithCallbacksNotAutoConfiguredTest.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/BundleAdapterBuilder.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/BundleAdapterBuilderImpl.java
Modified:
felix/sandbox/pderop/dependencymanager-lambda/TODO
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/AdapterNoAutoConfigIfInstanceCallbackIsUsed.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/AdapterWithCallbackInstanceTest.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/FactoryInjectedWithConfigurationBeforeTheCreateMethod.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/MultipleExtraDependencyTest.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/MultipleExtraDependencyTest2.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/ServiceDependencyPropagateTest.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dependencymanager/lambda/samples/compositefactory/Activator.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dependencymanager/lambda/samples/factory/Activator.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dependencymanager/lambda/samples/hello/Activator.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dependencymanager/lambda/samples/rx/observable/ObservableComponent.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/BundleDependencyBuilder.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/ComponentBuilder.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/ConfigurationDependencyBuilder.java
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/FactoryPidAdapterBuilder.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/ServiceAdapterBuilder.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/ServiceAspectBuilder.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/AdapterBase.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/BundleDependencyBuilderImpl.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/ComponentBuilderImpl.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/ConfigurationDependencyBuilderImpl.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/FactoryPidAdapterBuilderImpl.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/ServiceAdapterBuilderImpl.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/ServiceAspectBuilderImpl.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/ServiceCallbacksBuilderImpl.java
Modified: felix/sandbox/pderop/dependencymanager-lambda/TODO
URL:
http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/TODO?rev=1725647&r1=1725646&r2=1725647&view=diff
==============================================================================
--- felix/sandbox/pderop/dependencymanager-lambda/TODO (original)
+++ felix/sandbox/pderop/dependencymanager-lambda/TODO Tue Jan 19 23:00:49 2016
@@ -1,5 +1,3 @@
-- add BundeAdapter
-
- Javadocs
Modified:
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/AdapterNoAutoConfigIfInstanceCallbackIsUsed.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/AdapterNoAutoConfigIfInstanceCallbackIsUsed.java?rev=1725647&r1=1725646&r2=1725647&view=diff
==============================================================================
---
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/AdapterNoAutoConfigIfInstanceCallbackIsUsed.java
(original)
+++
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/AdapterNoAutoConfigIfInstanceCallbackIsUsed.java
Tue Jan 19 23:00:49 2016
@@ -41,7 +41,7 @@ public class AdapterNoAutoConfigIfInstan
// Declare S1 adapter
S1AdapterCallback s1AdapterCB = new S1AdapterCallback();
- adapter(m, S1.class, a -> a.impl(S1Adapter.class).cb(s1AdapterCB,
"set"));
+ adapter(m, S1.class, a -> a.impl(S1Adapter.class).cbi(s1AdapterCB,
"set"));
// At this point, the s1AdapterCB.set(S1 s1) method should be called,
and s1Adapter.start() method should then be called.
// but s1 should not be injected on s1Adapter class fields.
Modified:
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/AdapterWithCallbackInstanceTest.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/AdapterWithCallbackInstanceTest.java?rev=1725647&r1=1725646&r2=1725647&view=diff
==============================================================================
---
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/AdapterWithCallbackInstanceTest.java
(original)
+++
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/AdapterWithCallbackInstanceTest.java
Tue Jan 19 23:00:49 2016
@@ -48,7 +48,7 @@ public class AdapterWithCallbackInstance
ServiceAdapterCallbackInstance callbackInstance = new
ServiceAdapterCallbackInstance(e);
Component adapter = adapter(m, OriginalService.class)
- .provides(AdaptedService.class).impl(new
ServiceAdapter(e)).autoConfig("m_originalService").propagate(true).cb(callbackInstance,
"set", "changed", "unset")
+ .provides(AdaptedService.class).impl(new
ServiceAdapter(e)).autoConfig("m_originalService").propagate(true).cbi(callbackInstance,
"set", "changed", "unset")
.build();
// add the provider and the adapter
Added:
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/BundleAdapterTest.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/BundleAdapterTest.java?rev=1725647&view=auto
==============================================================================
---
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/BundleAdapterTest.java
(added)
+++
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/BundleAdapterTest.java
Tue Jan 19 23:00:49 2016
@@ -0,0 +1,187 @@
+/*
+ * 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 org.junit.Assert;
+
+import org.apache.felix.dm.Component;
+import org.apache.felix.dm.DependencyManager;
+import org.apache.felix.dm.builder.lambda.Cb;
+import org.osgi.framework.Bundle;
+import static org.apache.felix.dm.builder.lambda.DependencyActivatorBase.*;
+
+/**
+ * @author <a href="mailto:[email protected]">Felix Project Team</a>
+ */
+public class BundleAdapterTest extends TestBase {
+ public void testBundleAdapter() {
+ DependencyManager m = getDM();
+ // create a bundle adapter service (one is created for each bundle)
+ Component adapter = bundleAdapter(m)
+ .mask(Bundle.INSTALLED | Bundle.RESOLVED | Bundle.ACTIVE)
+ .impl(BundleAdapter.class)
+ .provides(BundleAdapter.class)
+ .build();
+
+ // create a service provider and consumer
+ Consumer c = new Consumer();
+ Component consumer = m.createComponent().setImplementation(c)
+
.add(m.createServiceDependency().setService(BundleAdapter.class).setCallbacks("add",
"remove"));
+
+ // add the bundle adapter
+ m.add(adapter);
+ // add the service consumer
+ m.add(consumer);
+ // check if at least one bundle was found
+ c.check();
+ // remove the consumer again
+ m.remove(consumer);
+ // check if all bundles were removed correctly
+ c.doubleCheck();
+ // remove the bundle adapter
+ m.remove(adapter);
+ }
+
+ public void testBundleAdapterWithCallbackInstance() {
+ DependencyManager m = getDM();
+ // create a bundle adapter service (one is created for each bundle)
+ BundleAdapterWithCallback baWithCb = new BundleAdapterWithCallback();
+ BundleAdapterCallbackInstance cbInstance = new
BundleAdapterCallbackInstance(baWithCb);
+
+ Component adapter = bundleAdapter(m)
+ .mask(Bundle.INSTALLED | Bundle.RESOLVED | Bundle.ACTIVE)
+ .cbi(cbInstance, "add", "remove")
+ .impl(baWithCb)
+ .provides(BundleAdapter.class.getName())
+ .build();
+
+ // create a service provider and consumer
+ Consumer c = new Consumer();
+ Component consumer = component(m)
+ .impl(c)
+ .withService(BundleAdapter.class, s->s.cb("add", "remove"))
+ .build();
+
+ // add the bundle adapter
+ m.add(adapter);
+ // add the service consumer
+ m.add(consumer);
+ // check if at least one bundle was found
+ c.check();
+ // remove the consumer again
+ m.remove(consumer);
+ // check if all bundles were removed correctly
+ c.doubleCheck();
+ // remove the bundle adapter
+ m.remove(adapter);
+ }
+
+ public void testBundleAdapterWithCallbackInstanceRef() {
+ DependencyManager m = getDM();
+ // create a bundle adapter service (one is created for each bundle)
+ BundleAdapterWithCallback baWithCb = new BundleAdapterWithCallback();
+ BundleAdapterCallbackInstance cbInstance = new
BundleAdapterCallbackInstance(baWithCb);
+
+ Component adapter = bundleAdapter(m)
+ .mask(Bundle.INSTALLED | Bundle.RESOLVED | Bundle.ACTIVE)
+ .cbi(Cb.ADD, cbInstance::add).cbi(Cb.REM, cbInstance::remove)
+ .impl(baWithCb)
+ .provides(BundleAdapter.class.getName())
+ .build();
+
+ // create a service provider and consumer
+ Consumer c = new Consumer();
+ Component consumer = component(m)
+ .impl(c)
+ .withService(BundleAdapter.class, s->s.cb("add", "remove"))
+ .build();
+
+ // add the bundle adapter
+ m.add(adapter);
+ // add the service consumer
+ m.add(consumer);
+ // check if at least one bundle was found
+ c.check();
+ // remove the consumer again
+ m.remove(consumer);
+ // check if all bundles were removed correctly
+ c.doubleCheck();
+ // remove the bundle adapter
+ m.remove(adapter);
+ }
+
+ public static class BundleAdapter {
+ volatile Bundle m_bundle;
+
+ Bundle getBundle() {
+ return m_bundle;
+ }
+ }
+
+ public static class BundleAdapterWithCallback extends BundleAdapter {
+ void add(Bundle b) {
+ m_bundle = b;
+ }
+
+ void remove(Bundle b) {
+ m_bundle = null;
+ }
+ }
+
+ public static class BundleAdapterCallbackInstance {
+ final BundleAdapterWithCallback m_ba;
+
+ BundleAdapterCallbackInstance(BundleAdapterWithCallback ba) {
+ m_ba = ba;
+ }
+
+ void add(Component c, Bundle b) {
+ m_ba.add(b);
+ }
+
+ void remove(Bundle b) {
+ m_ba.remove(b);
+ }
+ }
+
+ static class Consumer {
+ private volatile int m_count = 0;
+
+ public void add(BundleAdapter ba) {
+ Bundle b = ba.getBundle();
+ System.out.println("Consumer.add(" + b.getSymbolicName() + ")");
+ Assert.assertNotNull("bundle instance must not be null", b);
+ m_count++;
+ }
+
+ public void check() {
+ Assert.assertTrue("we should have found at least one bundle",
m_count > 0);
+ }
+
+ public void remove(BundleAdapter ba) {
+ Bundle b = ba.getBundle();
+ System.out.println("Consumer.remove(" + b.getSymbolicName() + ")");
+ m_count--;
+ }
+
+ public void doubleCheck() {
+ Assert.assertEquals("all bundles we found should have been removed
again", 0, m_count);
+ }
+ }
+}
Added:
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/BundleAdapterWithCallbacksNotAutoConfiguredTest.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/BundleAdapterWithCallbacksNotAutoConfiguredTest.java?rev=1725647&view=auto
==============================================================================
---
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/BundleAdapterWithCallbacksNotAutoConfiguredTest.java
(added)
+++
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/BundleAdapterWithCallbacksNotAutoConfiguredTest.java
Tue Jan 19 23:00:49 2016
@@ -0,0 +1,70 @@
+/*
+ * 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 org.junit.Assert;
+
+import org.apache.felix.dm.Component;
+import org.apache.felix.dm.DependencyManager;
+import org.osgi.framework.Bundle;
+import static org.apache.felix.dm.builder.lambda.DependencyActivatorBase.*;
+
+/**
+ * @author <a href="mailto:[email protected]">Felix Project Team</a>
+ */
+public class BundleAdapterWithCallbacksNotAutoConfiguredTest extends TestBase
{
+ final Ensure m_e = new Ensure();
+
+ public void testBundleAdapterWithCallbacksNotAutoConfigured() {
+ DependencyManager m = getDM();
+ // create a bundle adapter service (one is created for each bundle)
+ BundleAdapterWithCallback baWithCb = new BundleAdapterWithCallback();
+ String bsn = "org.apache.felix.dependencymanager";
+ String filter = "(Bundle-SymbolicName=" + bsn + ")";
+
+ Component adapter = bundleAdapter(m)
+ .mask(Bundle.ACTIVE).filter(filter).cb("add")
+ .impl(baWithCb)
+ .build();
+
+ // add the bundle adapter
+ m.add(adapter);
+
+ // Check if adapter has not been auto configured (because it has
callbacks defined).
+ m_e.waitForStep(1, 3000);
+ Assert.assertNull("bundle adapter must not be auto configured",
baWithCb.getBundle());
+
+ // remove the bundle adapters
+ m.remove(adapter);
+ }
+
+ class BundleAdapterWithCallback {
+ volatile Bundle m_bundle; // must not be auto configured because we
are using callbacks.
+
+ Bundle getBundle() {
+ return m_bundle;
+ }
+
+ void add(Bundle b) {
+ Assert.assertNotNull(b);
+ Assert.assertEquals("org.apache.felix.dependencymanager",
b.getSymbolicName());
+ m_e.step(1);
+ }
+ }
+}
Modified:
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/FactoryInjectedWithConfigurationBeforeTheCreateMethod.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/FactoryInjectedWithConfigurationBeforeTheCreateMethod.java?rev=1725647&r1=1725646&r2=1725647&view=diff
==============================================================================
---
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/FactoryInjectedWithConfigurationBeforeTheCreateMethod.java
(original)
+++
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/FactoryInjectedWithConfigurationBeforeTheCreateMethod.java
Tue Jan 19 23:00:49 2016
@@ -51,7 +51,7 @@ public class FactoryInjectedWithConfigur
MyFactory factory = new MyFactory();
// Create the Component for the MyComponent class that is created
using the factory above.
- Component myComponent = component(m).factory(factory,
"create").withConfiguration(b->b.pid("foobar").cb(factory, "updated")).build();
+ Component myComponent = component(m).factory(factory,
"create").withConfiguration(b->b.pid("foobar").cbi(factory, "updated")).build();
// provide the configuration
m.add(configurator);
Modified:
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/MultipleExtraDependencyTest.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/MultipleExtraDependencyTest.java?rev=1725647&r1=1725646&r2=1725647&view=diff
==============================================================================
---
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/MultipleExtraDependencyTest.java
(original)
+++
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/MultipleExtraDependencyTest.java
Tue Jan 19 23:00:49 2016
@@ -41,7 +41,7 @@ public class MultipleExtraDependencyTest
.impl(ServiceProvider2.class).provides(ServiceProvider2.class)
.withService(Runnable.class,
srv->srv.filter("(foo=bar)").required(false).autoConfig("m_runnable"))
.withService(Sequencer.class, srv->srv.cb("bind"))
- .cb(null, "start", "stop", null)
+ .life(null, "start", "stop", null)
.composition("getComposition")
.build();
@@ -51,14 +51,14 @@ public class MultipleExtraDependencyTest
new Hashtable() {{ put("foo", "bar"); }})
.withService(Sequencer.class, srv->srv.autoConfig("m_sequencer"))
.withService(ServiceProvider2.class, srv->srv.cb("bind",
"unbind"))
- .cb(null, "start", "stop", null)
+ .life(null, "start", "stop")
.build();
Component sc = component(m)
.impl(ServiceConsumer.class)
.withService(Sequencer.class, srv->srv.autoConfig("m_sequencer"))
.withService(ServiceInterface.class,
srv->srv.filter("(foo=bar)").autoConfig("m_service"))
- .cb(null, "start", "stop", null)
+ .life(null, "start", "stop")
.build();
Component sequencer = component(m)
Modified:
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/MultipleExtraDependencyTest2.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/MultipleExtraDependencyTest2.java?rev=1725647&r1=1725646&r2=1725647&view=diff
==============================================================================
---
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/MultipleExtraDependencyTest2.java
(original)
+++
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/MultipleExtraDependencyTest2.java
Tue Jan 19 23:00:49 2016
@@ -30,7 +30,6 @@ import org.apache.felix.dm.ServiceDepend
*
* @author <a href="mailto:[email protected]">Felix Project Team</a>
*/
-@SuppressWarnings({"unchecked", "rawtypes", "serial"})
public class MultipleExtraDependencyTest2 extends TestBase {
public void testMultipleExtraDependencies() {
DependencyManager m = getDM();
@@ -39,19 +38,19 @@ public class MultipleExtraDependencyTest
Component sp2 = component(m)
.impl(ServiceProvider2.class)
.provides(ServiceProvider2.class)
- .cb("init", "start", "stop", null)
+ .life("init", "start", "stop")
.composition("getComposition").build();
Component sp = component(m)
- .impl(ServiceProvider.class)
- .provides(ServiceInterface.class, "foo", "bar")
- .cb("init", "start", "stop", null)
- .build();
+ .impl(ServiceProvider.class)
+ .provides(ServiceInterface.class, "foo", "bar")
+ .life("init", "start", "stop")
+ .build();
Component sc = component(m)
- .impl(ServiceConsumer.class)
- .cb("init", "start", "stop", null)
- .build();
+ .impl(ServiceConsumer.class)
+ .life("init", "start", "stop")
+ .build();
// Provide the Sequencer service to the MultipleAnnotationsTest class.
Component sequencer = component(m)
Modified:
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/ServiceDependencyPropagateTest.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/ServiceDependencyPropagateTest.java?rev=1725647&r1=1725646&r2=1725647&view=diff
==============================================================================
---
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/ServiceDependencyPropagateTest.java
(original)
+++
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/ServiceDependencyPropagateTest.java
Tue Jan 19 23:00:49 2016
@@ -46,7 +46,7 @@ public class ServiceDependencyPropagateT
Component c1 = component(m)
.impl(new C1(e))
- .withService(C2.class, s->s.cb("bind", null)).build();
+ .withService(C2.class, s->s.cb("bind")).build();
Component c2 = component(m)
.provides(C2.class.getName(), new Hashtable() {{
put("foo", "bar"); }})
Modified:
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dependencymanager/lambda/samples/compositefactory/Activator.java
URL:
http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dependencymanager/lambda/samples/compositefactory/Activator.java?rev=1725647&r1=1725646&r2=1725647&view=diff
==============================================================================
---
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dependencymanager/lambda/samples/compositefactory/Activator.java
(original)
+++
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dependencymanager/lambda/samples/compositefactory/Activator.java
Tue Jan 19 23:00:49 2016
@@ -52,7 +52,7 @@ public class Activator extends Dependenc
// before creating the composition of classes.
component(comp -> comp
.factory(factory::create, factory::getComposition)
- .cb(START, ProviderImpl::start) // only call start on ProviderImpl
+ .life(START, ProviderImpl::start) // only call start on
ProviderImpl
.withService(LogService.class, srv -> srv.cb(ADD,
ProviderImpl::bind).cb(ADD, ProviderComposite1::bind))
.withConfiguration(conf ->
conf.pid(ProviderFactory.class).cbi(factory::updated)));
Modified:
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dependencymanager/lambda/samples/factory/Activator.java
URL:
http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dependencymanager/lambda/samples/factory/Activator.java?rev=1725647&r1=1725646&r2=1725647&view=diff
==============================================================================
---
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dependencymanager/lambda/samples/factory/Activator.java
(original)
+++
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dependencymanager/lambda/samples/factory/Activator.java
Tue Jan 19 23:00:49 2016
@@ -36,7 +36,7 @@ public class Activator extends Dependenc
component(comp -> comp
.factory(ProviderFactory::new, ProviderFactory::create)
.provides(Provider.class)
- .cb(START, ProviderImpl::start)
+ .life(START, ProviderImpl::start)
.withService(LogService.class, srv -> srv.required().cb(ADD,
ProviderImpl::set)));
}
}
Modified:
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dependencymanager/lambda/samples/hello/Activator.java
URL:
http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dependencymanager/lambda/samples/hello/Activator.java?rev=1725647&r1=1725646&r2=1725647&view=diff
==============================================================================
---
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dependencymanager/lambda/samples/hello/Activator.java
(original)
+++
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dependencymanager/lambda/samples/hello/Activator.java
Tue Jan 19 23:00:49 2016
@@ -37,7 +37,7 @@ public class Activator extends Dependenc
component(comp -> comp
.impl(ServiceProviderImpl.class)
.provides(ServiceProvider.class, property1 -> "value1", property2
-> 123) // property names are deduced from lambda parameter names
- .cb(START, ServiceProviderImpl::activate)
+ .life(START, ServiceProviderImpl::activate)
.withService(LogService.class, srv -> srv.cb(ADD,
ServiceProviderImpl::bind)));
component(comp -> comp
Modified:
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dependencymanager/lambda/samples/rx/observable/ObservableComponent.java
URL:
http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dependencymanager/lambda/samples/rx/observable/ObservableComponent.java?rev=1725647&r1=1725646&r2=1725647&view=diff
==============================================================================
---
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dependencymanager/lambda/samples/rx/observable/ObservableComponent.java
(original)
+++
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dependencymanager/lambda/samples/rx/observable/ObservableComponent.java
Tue Jan 19 23:00:49 2016
@@ -80,7 +80,7 @@ public class ObservableComponent {
publisher.onSubscribe(EmptySubscription.INSTANCE);
component(m_dm, builder -> builder
.factory(() -> new
DocumentViewer(title))
- .cbi(Cb.START, publisher::onNext));
+ .lifeInst(Cb.START, publisher::onNext));
});
}
}
Added:
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/BundleAdapterBuilder.java
URL:
http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/BundleAdapterBuilder.java?rev=1725647&view=auto
==============================================================================
---
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/BundleAdapterBuilder.java
(added)
+++
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/BundleAdapterBuilder.java
Tue Jan 19 23:00:49 2016
@@ -0,0 +1,73 @@
+package org.apache.felix.dm.builder.lambda;
+
+import org.apache.felix.dm.builder.lambda.Functions.CbBundle;
+import org.apache.felix.dm.builder.lambda.Functions.CbComponentBundle;
+import org.apache.felix.dm.builder.lambda.Functions.CbComponentDictionary;
+import org.apache.felix.dm.builder.lambda.Functions.CbDictionary;
+import org.apache.felix.dm.builder.lambda.Functions.CbTypeBundle;
+import org.apache.felix.dm.builder.lambda.Functions.CbTypeComponentBundle;
+import org.apache.felix.dm.builder.lambda.Functions.CbTypeComponentDictionary;
+import org.apache.felix.dm.builder.lambda.Functions.CbTypeDictionary;
+
+/**
+ * Defines the interface for a Dependency Manager Factory Configuration
Adapter.
+ *
+ * Example that defines a factory configuration adapter service for the
"foo.bar" factory pid.
+ *
+ * <pre> {@code
+ * public class Activator extends DependencyActivatorBase {
+ * public void init() throws Exception {
+ * factoryPidAdapter(comp -> comp
+ *
.factoryPid("foo.bar").onUpdate(ServiceImpl::updated).propagate()
+ * .impl(DictionaryImpl.class)
+ * .withService(LogService.class, dep -> dep.required(false)));
+ * }
+ * }</pre>
+ *
+ * TODO: javadoc
+ */
+public interface BundleAdapterBuilder extends
ComponentBuilder<BundleAdapterBuilder> {
+ /**
+ * Sets the bundle state mask to depend on. The OSGi BundleTracker
explains this mask in more detail, but
+ * it is basically a mask with flags for each potential state a bundle can
be in.
+ *
+ * @param mask the mask to use
+ */
+ BundleAdapterBuilder mask(int mask);
+
+ /**
+ * Sets the filter condition to depend on. Filters are matched against the
full manifest of a bundle.
+ *
+ * @param filter the filter condition
+ * @return the bundle dependency builder
+ * @throws IllegalArgumentException if the filter is invalid
+ */
+ BundleAdapterBuilder filter(String filter);
+
+ /**
+ * Sets property propagation. If set to <code>true</code> any bundle
manifest properties will be added
+ * to the service properties of the component that has this dependency (if
it registers as a service).
+ *
+ * @param propagate <code>true</code> to propagate the bundle manifest
properties
+ * @return the bundle dependency builder
+ */
+ BundleAdapterBuilder propagate(boolean propagate);
+
+ /**
+ * Sets property propagation. If set to <code>true</code> any bundle
manifest properties will be added
+ * to the service properties of the component that has this dependency (if
it registers as a service).
+ *
+ * @param propagate <code>true</code> to propagate the bundle manifest
properties
+ * @return the bundle dependency builder
+ */
+ BundleAdapterBuilder propagate();
+
+ BundleAdapterBuilder cb(String ... callbacks);
+ BundleAdapterBuilder cbi(Object callbackInstance, String ... callbacks);
+
+ <T> BundleAdapterBuilder cb(Cb callbackType, CbTypeBundle<T> callback);
+ BundleAdapterBuilder cbi(Cb callbackType, CbBundle callback);
+
+ <T> BundleAdapterBuilder cb(Cb callbackType, CbTypeComponentBundle<T>
callback);
+ BundleAdapterBuilder cbi(Cb callbackType, CbComponentBundle callback);
+}
Modified:
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/BundleDependencyBuilder.java
URL:
http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/BundleDependencyBuilder.java?rev=1725647&r1=1725646&r2=1725647&view=diff
==============================================================================
---
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/BundleDependencyBuilder.java
(original)
+++
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/BundleDependencyBuilder.java
Tue Jan 19 23:00:49 2016
@@ -18,12 +18,8 @@ import org.osgi.framework.Bundle;
*/
public interface BundleDependencyBuilder extends
DependencyBuilder<BundleDependency> {
- BundleDependencyBuilder cb(String add);
- BundleDependencyBuilder cb(Object callbackInstance, String add);
- BundleDependencyBuilder cb(String add, String remove);
- BundleDependencyBuilder cb(Object callbackInstance, String add, String
remove);
- BundleDependencyBuilder cb(String add, String change, String remove);
- BundleDependencyBuilder cb(Object callbackInstance, String add, String
change, String remove);
+ BundleDependencyBuilder cb(String ... callbacks);
+ BundleDependencyBuilder cbi(Object callbackInstance, String ... callbacks);
<T> BundleDependencyBuilder cb(Cb callbackType, CbTypeBundle<T> callback);
<T> BundleDependencyBuilder cb(Cb callbackType, CbTypeComponentBundle<T>
callback);
@@ -76,9 +72,8 @@ public interface BundleDependencyBuilder
*
* @param filter the filter condition
* @return the bundle dependency builder
- * @throws IllegalArgumentException if the filter is invalid
*/
- public BundleDependencyBuilder filter(String filter) throws
IllegalArgumentException;
+ public BundleDependencyBuilder filter(String filter);
/**
* Sets the bundle state mask to depend on. The OSGi BundleTracker
explains this mask in more detail, but
Modified:
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/ComponentBuilder.java
URL:
http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/ComponentBuilder.java?rev=1725647&r1=1725646&r2=1725647&view=diff
==============================================================================
---
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/ComponentBuilder.java
(original)
+++
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/ComponentBuilder.java
Tue Jan 19 23:00:49 2016
@@ -7,9 +7,9 @@ import java.util.function.Function;
import java.util.function.Supplier;
import org.apache.felix.dm.Component;
-import org.apache.felix.dm.builder.lambda.Functions.CbBiConsumer;
import org.apache.felix.dm.builder.lambda.Functions.CbComponent;
import org.apache.felix.dm.builder.lambda.Functions.CbConsumer;
+import org.apache.felix.dm.builder.lambda.Functions.CbTypeComponent;
import org.apache.felix.dm.builder.lambda.Functions.FluentProperties;
/**
@@ -189,15 +189,15 @@ public interface ComponentBuilder<B exte
* @return
*/
<U> B withFuture(CompletableFuture<U> future,
Consumer<FutureDependencyBuilder<U>> consumer);
-
- B cb(String init, String start, String stop, String destroy);
- B cb(Object callbackInstance, String init, String start, String stop,
String destroy);
+ B life(String ... callbacks);
+ B lifeInst(Object callbackInstance, String ... callbacks);
+
+ <U> B life(Cb callbackType, CbConsumer<U> componentCallback);
+ B lifeInst(Cb callbackType, Runnable instanceCallback);
- <U> B cb(Cb callbackType, CbConsumer<U> callback);
- <U> B cb(Cb callbackType, CbBiConsumer<U, Component> callback);
- B cbi(Cb callbackType, Runnable callback);
- B cbi(Cb callbackType, CbComponent callback);
+ <U> B life(Cb callbackType, CbTypeComponent<U> componentCallback);
+ B lifeInst(Cb callbackType, CbComponent instanceCallback);
/**
* Configures OSGi object (BundleContext, Component, etc ...) that will be
injected in any field having the same OSGi object type.
Modified:
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/ConfigurationDependencyBuilder.java
URL:
http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/ConfigurationDependencyBuilder.java?rev=1725647&r1=1725646&r2=1725647&view=diff
==============================================================================
---
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/ConfigurationDependencyBuilder.java
(original)
+++
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/ConfigurationDependencyBuilder.java
Tue Jan 19 23:00:49 2016
@@ -30,10 +30,11 @@ public interface ConfigurationDependency
ConfigurationDependencyBuilder needsInstance(boolean needsInstance);
ConfigurationDependencyBuilder cb(String updateMethod);
- ConfigurationDependencyBuilder cb(Object callbackInstance, String
updateMethod);
+ ConfigurationDependencyBuilder cbi(Object callbackInstance, String
updateMethod);
<T> ConfigurationDependencyBuilder cb(CbTypeDictionary<T> callback);
- <T> ConfigurationDependencyBuilder cb(CbTypeComponentDictionary<T>
callback);
ConfigurationDependencyBuilder cbi(CbDictionary updated);
+
+ <T> ConfigurationDependencyBuilder cb(CbTypeComponentDictionary<T>
callback);
ConfigurationDependencyBuilder cbi(CbComponentDictionary updated);
}
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=1725647&r1=1725646&r2=1725647&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
Tue Jan 19 23:00:49 2016
@@ -5,6 +5,7 @@ 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.BundleAdapterBuilderImpl;
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;
@@ -13,7 +14,6 @@ import org.apache.felix.dm.builder.lambd
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;
@@ -144,7 +144,17 @@ public abstract class DependencyActivato
protected Component factoryPidAdapter(Consumer<FactoryPidAdapterBuilder>
consumer) {
return factoryPidAdapter(m_manager, consumer);
}
-
+
+ /**
+ * Builds a DM Bundle Adapter Component.
+ * @param consumer the lambda used to build the actual bundle adapter.
+ * The component is auto-added to the DependencyManager, unless the lambda
calls the BundleAdapter.autoAdd(false) method.
+ * @return a newly built DM component.
+ */
+ protected Component bundleAdapter(Consumer<BundleAdapterBuilder> consumer)
{
+ return bundleAdapter(m_manager, consumer);
+ }
+
// These static methods can be used when building DM components outside of
an activator.
/**
@@ -187,6 +197,15 @@ public abstract class DependencyActivato
}
/**
+ * Creates a bundle adapter builder that can be used to create a DM bundle
adapter Component.
+ * @param dm
+ * @return a bundle adapter builder that can be used to create a DM bundle
adapter Component.
+ */
+ public static BundleAdapterBuilder bundleAdapter(DependencyManager dm) {
+ return new BundleAdapterBuilderImpl(dm);
+ }
+
+ /**
* TODO
*
* @param component
@@ -292,7 +311,24 @@ public abstract class DependencyActivato
}
return comp;
}
-
+
+ /**
+ * Builds a bundle adapter DM Component.
+ * @param dm the DependencyManager object used to register the built
component
+ * @param consumer a lambda used to build the bundle adapter component
+ * @return a new bundle adapter component. The adapter component is
auto-added into the dm object, unless the lambda calls
+ * the AspectBuilder.autoAdd(false) method is called.
+ */
+ public static <T> Component bundleAdapter(DependencyManager dm,
Consumer<BundleAdapterBuilder> consumer) {
+ BundleAdapterBuilderImpl adapterBuilder = new
BundleAdapterBuilderImpl(dm);
+ consumer.accept(adapterBuilder);
+ Component comp = adapterBuilder.build();
+ if (adapterBuilder.isAutoAdd()) {
+ dm.add(comp);
+ }
+ return comp;
+ }
+
/**
* Builds a DM factory configuration adapter.
* @param dm the DependencyManager object used to create DM components.
Modified:
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/FactoryPidAdapterBuilder.java
URL:
http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/FactoryPidAdapterBuilder.java?rev=1725647&r1=1725646&r2=1725647&view=diff
==============================================================================
---
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/FactoryPidAdapterBuilder.java
(original)
+++
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/FactoryPidAdapterBuilder.java
Tue Jan 19 23:00:49 2016
@@ -1,8 +1,5 @@
package org.apache.felix.dm.builder.lambda;
-import java.util.function.Function;
-import java.util.function.Supplier;
-
import org.apache.felix.dm.builder.lambda.Functions.CbComponentDictionary;
import org.apache.felix.dm.builder.lambda.Functions.CbDictionary;
import org.apache.felix.dm.builder.lambda.Functions.CbTypeComponentDictionary;
@@ -32,10 +29,11 @@ public interface FactoryPidAdapterBuilde
FactoryPidAdapterBuilder propagate(boolean propagate);
FactoryPidAdapterBuilder cb(String updateMethod);
- FactoryPidAdapterBuilder cb(Object callbackInstance, String updateMethod);
+ FactoryPidAdapterBuilder cbi(Object callbackInstance, String updateMethod);
<U> FactoryPidAdapterBuilder cb(CbTypeDictionary<U> callback);
- <U> FactoryPidAdapterBuilder cb(CbTypeComponentDictionary<U> callback);
FactoryPidAdapterBuilder cbi(CbDictionary callback);
+
+ <U> FactoryPidAdapterBuilder cb(CbTypeComponentDictionary<U> callback);
FactoryPidAdapterBuilder cbi(CbComponentDictionary callback);
}
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=1725647&r1=1725646&r2=1725647&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
Tue Jan 19 23:00:49 2016
@@ -48,17 +48,7 @@ public class Functions {
return (T t) -> { accept(t); after.accept(t); };
}
}
-
- @FunctionalInterface
- public interface CbBiConsumer<T, U> extends SerializableLambda {
- void accept(T t, U u);
-
- default BiConsumer<T, U> andThen(BiConsumer<? super T, ? super U>
after) {
- Objects.requireNonNull(after);
- return (l, r) -> { accept(l, r); after.accept(l, r); };
- }
- }
-
+
@FunctionalInterface
public interface CbTypeFuture<T, F> extends SerializableLambda {
void accept(T instance, F future);
@@ -288,27 +278,7 @@ public class Functions {
return (T instance, Component c, ServiceReference<S> oldRef, S
old, ServiceReference<S> replaceRef, S replace) -> { accept(instance, c,
oldRef, old, replaceRef, replace); after.accept(instance, c, oldRef, old,
replaceRef, replace); };
}
}
-
- @FunctionalInterface
- public interface CbTypeMapServiceMapService<T, S> extends
SerializableLambda {
- void accept(T instance, Map<String, Object> oldProps, S old,
Map<String, Object> replaceProps, S replace);
-
- default CbTypeMapServiceMapService<T, S>
andThen(CbTypeMapServiceMapService<? super T, S> after) {
- Objects.requireNonNull(after);
- return (T instance, Map<String, Object> oldProps, S old,
Map<String, Object> replaceProps, S replace) -> { accept(instance, oldProps,
old, replaceProps, replace); after.accept(instance, oldProps, old,
replaceProps, replace); };
- }
- }
-
- @FunctionalInterface
- public interface CbTypeDictServiceDictService<T, S> extends
SerializableLambda {
- void accept(T instance, Dictionary<String, Object> oldProps, S old,
Dictionary<String, Object> replaceProps, S replace);
- default CbTypeDictServiceDictService<T, S>
andThen(CbTypeDictServiceDictService<? super T, S> after) {
- Objects.requireNonNull(after);
- return (T instance, Dictionary<String, Object> oldProps, S old,
Dictionary<String, Object> replaceProps, S replace) -> { accept(instance,
oldProps, old, replaceProps, replace); after.accept(instance, oldProps, old,
replaceProps, replace); };
- }
- }
-
@FunctionalInterface
public interface CbServiceService<S> extends SerializableLambda {
void accept(S old, S replace);
@@ -349,46 +319,6 @@ public class Functions {
}
}
- @FunctionalInterface
- public interface CbMapServiceMapService<S> {
- void accept(Map<String, Object> oldProps, S old, Map<String, Object>
replaceProps, S replace);
-
- default CbMapServiceMapService<S> andThen(CbMapServiceMapService<S>
after) {
- Objects.requireNonNull(after);
- return (Map<String, Object> oldProps, S old, Map<String, Object>
replaceProps, S replace) -> { accept(oldProps, old, replaceProps, replace);
after.accept(oldProps, old, replaceProps, replace); };
- }
- }
-
- @FunctionalInterface
- public interface CbComponentMapServiceMapService<S> {
- void accept(Component c, Map<String, Object> oldProps, S old,
Map<String, Object> replaceProps, S replace);
-
- default CbComponentMapServiceMapService<S>
andThen(CbComponentMapServiceMapService<S> after) {
- Objects.requireNonNull(after);
- return (Component c, Map<String, Object> oldProps, S old,
Map<String, Object> replaceProps, S replace) -> { accept(c, oldProps, old,
replaceProps, replace); after.accept(c, oldProps, old, replaceProps, replace);
};
- }
- }
-
- @FunctionalInterface
- public interface CbDictServiceDictService<S> {
- void accept(Dictionary<String, Object> oldProps, S old,
Dictionary<String, Object> replaceProps, S replace);
-
- default CbDictServiceDictService<S>
andThen(CbDictServiceDictService<S> after) {
- Objects.requireNonNull(after);
- return (Dictionary<String, Object> oldProps, S old,
Dictionary<String, Object> replaceProps, S replace) -> { accept(oldProps, old,
replaceProps, replace); after.accept(oldProps, old, replaceProps, replace); };
- }
- }
-
- @FunctionalInterface
- public interface CbComponentDictServiceDictService<S> {
- void accept(Component c, Dictionary<String, Object> oldProps, S old,
Dictionary<String, Object> replaceProps, S replace);
-
- default CbComponentDictServiceDictService<S>
andThen(CbComponentDictServiceDictService<S> after) {
- Objects.requireNonNull(after);
- return (Component c, Dictionary<String, Object> oldProps, S old,
Dictionary<String, Object> replaceProps, S replace) -> { accept(c, oldProps,
old, replaceProps, replace); after.accept(c, oldProps, old, replaceProps,
replace); };
- }
- }
-
@FunctionalInterface
public interface CbComponent {
void accept(Component component);
Modified:
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/ServiceAdapterBuilder.java
URL:
http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/ServiceAdapterBuilder.java?rev=1725647&r1=1725646&r2=1725647&view=diff
==============================================================================
---
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/ServiceAdapterBuilder.java
(original)
+++
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/ServiceAdapterBuilder.java
Tue Jan 19 23:00:49 2016
@@ -1,8 +1,5 @@
package org.apache.felix.dm.builder.lambda;
-import java.util.function.Function;
-import java.util.function.Supplier;
-
/**
* Defines the interface for a DependencyManager adapter builder.
*
Modified:
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/ServiceAspectBuilder.java
URL:
http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/ServiceAspectBuilder.java?rev=1725647&r1=1725646&r2=1725647&view=diff
==============================================================================
---
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/ServiceAspectBuilder.java
(original)
+++
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/ServiceAspectBuilder.java
Tue Jan 19 23:00:49 2016
@@ -1,8 +1,5 @@
package org.apache.felix.dm.builder.lambda;
-import java.util.function.Function;
-import java.util.function.Supplier;
-
/**
* Defines the interface for a DependencyManager aspect builder.
*
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=1725647&r1=1725646&r2=1725647&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
Tue Jan 19 23:00:49 2016
@@ -1,15 +1,11 @@
package org.apache.felix.dm.builder.lambda;
import org.apache.felix.dm.builder.lambda.Functions.CbComponent;
-import
org.apache.felix.dm.builder.lambda.Functions.CbComponentDictServiceDictService;
-import
org.apache.felix.dm.builder.lambda.Functions.CbComponentMapServiceMapService;
import org.apache.felix.dm.builder.lambda.Functions.CbComponentRef;
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.CbComponentServiceService;
-import org.apache.felix.dm.builder.lambda.Functions.CbDictServiceDictService;
-import org.apache.felix.dm.builder.lambda.Functions.CbMapServiceMapService;
import org.apache.felix.dm.builder.lambda.Functions.CbRef;
import org.apache.felix.dm.builder.lambda.Functions.CbRefService;
import org.apache.felix.dm.builder.lambda.Functions.CbRefServiceRefService;
@@ -23,8 +19,6 @@ import org.apache.felix.dm.builder.lambd
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.CbTypeComponentServiceService;
-import
org.apache.felix.dm.builder.lambda.Functions.CbTypeDictServiceDictService;
-import org.apache.felix.dm.builder.lambda.Functions.CbTypeMapServiceMapService;
import org.apache.felix.dm.builder.lambda.Functions.CbTypeRef;
import org.apache.felix.dm.builder.lambda.Functions.CbTypeRefService;
import org.apache.felix.dm.builder.lambda.Functions.CbTypeRefServiceRefService;
@@ -63,47 +57,45 @@ public interface ServiceCallbacksBuilder
*/
B autoConfig(String field);
- B cb(String add);
- B cb(Object callbackInstance, String add);
- B cb(String add, String remove);
- B cb(Object callbackInstance, String add, String remove);
- B cb(String add, String change, String remove);
- B cb(Object callbackInstance, String add, String change, String remove);
- B cb(String add, String change, String remove, String swap);
- B cb(Object callbackInstance, String add, String change, String remove,
String swap);
+ B cb(String ... callbacks);
+ B cbi(Object callbackInstance, String ... callbacks);
<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, 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, 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);
+
+ <T> B cb(Cb callbackType, CbTypeServiceMap<T, S> callback);
B cbi(Cb callbackType, CbServiceMap<S> callback);
+
+ <T> B cb(Cb callbackType, CbTypeServiceDict<T, S> callback);
B cbi(Cb callbackType, CbServiceDict<S> callback);
+
+ <T> B cb(Cb callbackType, CbTypeRefService<T, S> callback);
B cbi(Cb callbackType, CbRefService<S> callback);
+
+ <T> B cb(Cb callbackType, CbTypeRef<T, S> callback);
B cbi(Cb callbackType, CbRef<S> callback);
- B cbi(Cb callbackType, CbComponentService<S> callback);
+
+ <T> B cb(Cb callbackType, CbTypeComponent<T> callback);
B cbi(Cb callbackType, CbComponent callback);
+
+ <T> B cb(Cb callbackType, CbTypeComponentRef<T, S> callback);
B cbi(Cb callbackType, CbComponentRef<S> callback);
+
+ <T> B cb(Cb callbackType, CbTypeComponentService<T, S> callback);
B cbi(Cb callbackType, CbComponentRefService<S> callback);
-
+
+ <T> B cb(Cb callbackType, CbTypeComponentRefService<T, S> callback);
+ B cbi(Cb callbackType, CbComponentService<S> callback);
+
<T> B sw(CbTypeServiceService<T, S> swap);
- <T> B sw(CbTypeComponentServiceService<T, S> swap);
- <T> B sw(CbTypeRefServiceRefService<T, S> swap);
- <T> B sw(CbTypeComponentRefServiceRefService<T, S> swap);
- <T> B sw(CbTypeMapServiceMapService<T, S> swap);
- <T> B sw(CbTypeDictServiceDictService<T, S> swap);
B swi(CbServiceService<S> swap);
+
+ <T> B sw(CbTypeComponentServiceService<T, S> swap);
B swi(CbComponentServiceService<S> swap);
+
+ <T> B sw(CbTypeRefServiceRefService<T, S> swap);
B swi(CbRefServiceRefService<S> swap);
- B swi(CbComponentRefServiceRefService<S> swap);
- B swi(CbMapServiceMapService<S> swap);
- B swi(CbComponentMapServiceMapService<S> swap);
- B swi(CbDictServiceDictService<S> swap);
- B swi(CbComponentDictServiceDictService<S> swap);
+
+ <T> B sw(CbTypeComponentRefServiceRefService<T, S> swap);
+ B swi(CbComponentRefServiceRefService<S> swap);
}
Modified:
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/AdapterBase.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/AdapterBase.java?rev=1725647&r1=1725646&r2=1725647&view=diff
==============================================================================
---
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/AdapterBase.java
(original)
+++
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/AdapterBase.java
Tue Jan 19 23:00:49 2016
@@ -6,14 +6,13 @@ import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Supplier;
-import org.apache.felix.dm.Component;
import org.apache.felix.dm.builder.lambda.BundleDependencyBuilder;
import org.apache.felix.dm.builder.lambda.Cb;
import org.apache.felix.dm.builder.lambda.ComponentBuilder;
import org.apache.felix.dm.builder.lambda.ConfigurationDependencyBuilder;
-import org.apache.felix.dm.builder.lambda.Functions.CbBiConsumer;
import org.apache.felix.dm.builder.lambda.Functions.CbComponent;
import org.apache.felix.dm.builder.lambda.Functions.CbConsumer;
+import org.apache.felix.dm.builder.lambda.Functions.CbTypeComponent;
import org.apache.felix.dm.builder.lambda.Functions.FluentProperties;
import org.apache.felix.dm.builder.lambda.FutureDependencyBuilder;
import org.apache.felix.dm.builder.lambda.ServiceDependencyBuilder;
@@ -26,7 +25,7 @@ import org.apache.felix.dm.builder.lambd
@SuppressWarnings({"unchecked"})
public interface AdapterBase<B extends ComponentBuilder<B>> extends
ComponentBuilder<B> {
- void andThenBuild(Consumer<ComponentBuilder> builder);
+ void andThenBuild(Consumer<ComponentBuilder<?>> builder);
default <U> B impl(U impl) {
andThenBuild(compBuilder -> compBuilder.impl(impl));
@@ -193,33 +192,33 @@ public interface AdapterBase<B extends C
return (B) this;
}
- default B cb(String init, String start, String stop, String destroy) {
- andThenBuild(compBuilder -> compBuilder.cb(init, start, stop,
destroy));
+ default B life(String ... callbacks) {
+ andThenBuild(compBuilder -> compBuilder.life(callbacks));
return (B) this;
}
- default B cb(Object callbackInstance, String init, String start, String
stop, String destroy) {
- andThenBuild(compBuilder -> compBuilder.cb(callbackInstance, init,
start, stop, destroy));
+ default B lifeInst(Object callbackInstance, String ... callbacks) {
+ andThenBuild(compBuilder -> compBuilder.lifeInst(callbackInstance,
callbacks));
return (B) this;
}
- default <U> B cb(Cb callbackType, CbConsumer<U> callback) {
- andThenBuild(compBuilder -> compBuilder.cb(callbackType, callback));
+ default <U> B life(Cb callbackType, CbConsumer<U> callback) {
+ andThenBuild(compBuilder -> compBuilder.life(callbackType, callback));
return (B) this;
}
- default <U> B cb(Cb callbackType, CbBiConsumer<U, Component> callback) {
- andThenBuild(compBuilder -> compBuilder.cb(callbackType, callback));
+ default <U> B life(Cb callbackType, CbTypeComponent<U> callback) {
+ andThenBuild(compBuilder -> compBuilder.life(callbackType, callback));
return (B) this;
}
- default B cbi(Cb callbackType, Runnable callback) {
- andThenBuild(compBuilder -> compBuilder.cbi(callbackType, callback));
+ default B lifeInst(Cb callbackType, Runnable callback) {
+ andThenBuild(compBuilder -> compBuilder.lifeInst(callbackType,
callback));
return (B) this;
}
- default B cbi(Cb callbackType, CbComponent callback) {
- andThenBuild(compBuilder -> compBuilder.cbi(callbackType, callback));
+ default B lifeInst(Cb callbackType, CbComponent callback) {
+ andThenBuild(compBuilder -> compBuilder.lifeInst(callbackType,
callback));
return (B) this;
}
Added:
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/BundleAdapterBuilderImpl.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/BundleAdapterBuilderImpl.java?rev=1725647&view=auto
==============================================================================
---
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/BundleAdapterBuilderImpl.java
(added)
+++
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/BundleAdapterBuilderImpl.java
Tue Jan 19 23:00:49 2016
@@ -0,0 +1,202 @@
+package org.apache.felix.dm.builder.lambda.impl;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.function.Consumer;
+import java.util.stream.Stream;
+
+import org.apache.felix.dm.Component;
+import org.apache.felix.dm.DependencyManager;
+import org.apache.felix.dm.builder.lambda.BundleAdapterBuilder;
+import org.apache.felix.dm.builder.lambda.Cb;
+import org.apache.felix.dm.builder.lambda.ComponentBuilder;
+import org.apache.felix.dm.builder.lambda.Functions.CbBundle;
+import org.apache.felix.dm.builder.lambda.Functions.CbComponentBundle;
+import org.apache.felix.dm.builder.lambda.Functions.CbTypeBundle;
+import org.apache.felix.dm.builder.lambda.Functions.CbTypeComponentBundle;
+import org.osgi.framework.Bundle;
+
+public class BundleAdapterBuilderImpl implements
AdapterBase<BundleAdapterBuilder>, BundleAdapterBuilder {
+ private Consumer<ComponentBuilder<?>> m_compBuilder = (compBuilder -> {});
+ protected final Map<Cb, List<MethodRef<Object>>> m_refs = new HashMap<>();
+ private DependencyManager m_dm;
+ private boolean m_autoAdd;
+ private String m_added;
+ private String m_changed;
+ private String m_removed;
+ private String m_filter;
+ private int m_stateMask = -1;
+ private boolean m_propagate;
+ private Object m_callbackInstance;
+ private String m_add;
+ private String m_change;
+ private String m_remove;
+
+ @FunctionalInterface
+ interface MethodRef<I> {
+ public void accept(I instance, Component c, Bundle b);
+ }
+
+ public BundleAdapterBuilderImpl(DependencyManager dm) {
+ m_dm = dm;
+ }
+
+ public void andThenBuild(Consumer<ComponentBuilder<?>> builder) {
+ m_compBuilder = m_compBuilder.andThen(builder);
+ }
+
+ @Override
+ public BundleAdapterBuilderImpl autoAdd(boolean autoAdd) {
+ m_autoAdd = autoAdd;
+ return this;
+ }
+
+ @Override
+ public BundleAdapterBuilderImpl autoAdd() {
+ m_autoAdd = true;
+ return this;
+ }
+
+ public boolean isAutoAdd() {
+ return m_autoAdd;
+ }
+
+ public BundleAdapterBuilder mask(int mask) {
+ m_stateMask = mask;
+ return this;
+ }
+
+ public BundleAdapterBuilder filter(String filter) {
+ m_filter = filter;
+ return this;
+ }
+
+ public BundleAdapterBuilder propagate(boolean propagate) {
+ m_propagate = propagate;
+ return this;
+ }
+
+ public BundleAdapterBuilder propagate() {
+ m_propagate = true;
+ return this;
+ }
+
+ public BundleAdapterBuilder cb(String ... callbacks) {
+ return cbi(null, callbacks);
+ }
+
+ public BundleAdapterBuilder cbi(Object callbackInstance, String ...
callbacks) {
+ switch (callbacks.length) {
+ case 1:
+ return cbi(callbackInstance, callbacks[0], null, null);
+
+ case 2:
+ return cbi(callbackInstance, callbacks[0], null, callbacks[1]);
+
+ case 3:
+ return cbi(callbackInstance, callbacks[0], callbacks[1],
callbacks[2]);
+
+ default:
+ throw new IllegalArgumentException("wrong number of arguments: " +
callbacks.length + ". " +
+ "Possible arguments: [add], [add, remove] or [add, change,
remove]");
+ }
+ }
+
+ private BundleAdapterBuilder cbi(Object callbackInstance, String add,
String change, String remove) {
+ checkHasNoMethodRefs();
+ m_callbackInstance = callbackInstance;
+ m_add = add;
+ m_change = change;
+ m_remove = remove;
+ return this;
+ }
+
+ public <T> BundleAdapterBuilder cb(Cb callbackType, CbTypeBundle<T>
callback) {
+ Class<T> type = Helpers.getLambdaGenericType(callback, 0);
+ return setComponentCallbackRef(callbackType, type, (instance,
component, bundle) -> { callback.accept((T) instance, bundle); });
+ }
+
+ public <T> BundleAdapterBuilder cb(Cb callbackType,
CbTypeComponentBundle<T> callback) {
+ Class<T> type = Helpers.getLambdaGenericType(callback, 0);
+ return setComponentCallbackRef(callbackType, type, (instance,
component, bundle) -> { callback.accept((T) instance, component, bundle); });
+ }
+
+ public BundleAdapterBuilder cbi(Cb callbackType, CbBundle callback) {
+ return setInstanceCallbackRef(callbackType, (instance, component,
bundle) -> { callback.accept(bundle); });
+ }
+
+ public BundleAdapterBuilder cbi(Cb callbackType, CbComponentBundle
callback) {
+ return setInstanceCallbackRef(callbackType, (instance, component,
bundle) -> { callback.accept(component, bundle); });
+ }
+
+ @Override
+ public Component build() {
+ Component c = null;
+
+ if (m_refs.size() > 0) {
+ @SuppressWarnings("unused")
+ Object wrapCallback = new Object() {
+ public void add(Component comp, Bundle bundle) {
+ invokeMethodRefs(Cb.ADD, comp, bundle);
+ }
+
+ public void change(Component comp, Bundle bundle) {
+ invokeMethodRefs(Cb.CHG, comp, bundle);
+ }
+
+ public void remove(Component comp, Bundle bundle) {
+ invokeMethodRefs(Cb.REM, comp, bundle);
+ }
+ };
+ c = m_dm.createBundleAdapterService(m_stateMask, m_filter,
m_propagate, wrapCallback, "add", "change", "remove");
+ } else {
+ c = m_dm.createBundleAdapterService(m_stateMask, m_filter,
m_propagate, m_callbackInstance, m_add, m_change, m_remove);
+ }
+ ComponentBuilderImpl cb = new ComponentBuilderImpl(c, false);
+ m_compBuilder.accept (cb);
+ return cb.build();
+ }
+
+ private <U> BundleAdapterBuilder setInstanceCallbackRef(Cb cbType,
MethodRef<U> ref) {
+ checkHasNoReflectionCallbacks();
+ List<MethodRef<Object>> list = m_refs.computeIfAbsent(cbType, l -> new
ArrayList<>());
+ list.add((instance, component, bundle) -> ref.accept(null, component,
bundle));
+ return this;
+ }
+
+ @SuppressWarnings("unchecked")
+ private <U> BundleAdapterBuilder setComponentCallbackRef(Cb cbType,
Class<U> type, MethodRef<U> ref) {
+ cbType.ensureServiceCallback();
+ checkHasNoReflectionCallbacks();
+ List<MethodRef<Object>> list = m_refs.computeIfAbsent(cbType, l -> new
ArrayList<>());
+ list.add((instance, component, bundle) -> {
+ Stream.of(component.getInstances()).forEach(inst -> {
+ if (Helpers.getClass(inst).equals(type)) {
+ ref.accept((U) inst, component, bundle);
+ }
+ });
+ });
+ return this;
+ }
+
+ private void invokeMethodRefs(Cb cbType, Component comp, Bundle bundle) {
+ m_refs.computeIfPresent(cbType, (k, mrefs) -> {
+ mrefs.forEach(mref -> mref.accept(null, comp, bundle));
+ return mrefs;
+ });
+ }
+
+ private void checkHasNoMethodRefs() {
+ if (m_refs.size() > 0) {
+ throw new IllegalStateException("Can't mix method references with
reflection based callbacks");
+ }
+ }
+
+ private void checkHasNoReflectionCallbacks() {
+ if (m_added != null || m_changed != null || m_removed != null) {
+ throw new IllegalStateException("Can't mix method references with
reflection based callbacks");
+ }
+ }
+}
Modified:
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/BundleDependencyBuilderImpl.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/BundleDependencyBuilderImpl.java?rev=1725647&r1=1725646&r2=1725647&view=diff
==============================================================================
---
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/BundleDependencyBuilderImpl.java
(original)
+++
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/BundleDependencyBuilderImpl.java
Tue Jan 19 23:00:49 2016
@@ -130,36 +130,35 @@ public class BundleDependencyBuilderImpl
m_propagateSupplier = instance;
return this;
}
-
- @Override
- public BundleDependencyBuilder cb(String add) {
- cb(add, null, null);
- return this;
- }
-
- @Override
- public BundleDependencyBuilder cb(Object callbackInstance, String add) {
- cb(callbackInstance, add, null, null);
- return this;
+
+ public BundleDependencyBuilder cb(String ... callbacks) {
+ return cbi(null, callbacks);
}
@Override
- public BundleDependencyBuilder cb(String add, String remove) {
- cb(add, null, remove);
+ public BundleDependencyBuilder cbi(Object callbackInstance, String ...
callbacks) {
+ switch (callbacks.length) {
+ case 1:
+ cbi(callbackInstance, callbacks[0], null, null);
+ break;
+
+ case 2:
+ cbi(callbackInstance, callbacks[0], null, callbacks[1]);
+ break;
+
+ case 3:
+ cbi(callbackInstance, callbacks[0], callbacks[1], callbacks[2]);
+ break;
+
+ default:
+ throw new IllegalArgumentException("wrong number of arguments: " +
callbacks.length + ". " +
+ "Possible arguments: [add], [add, remove] or [add, change,
remove]");
+ }
+
return this;
}
- @Override
- public BundleDependencyBuilder cb(Object callbackInstance, String add,
String remove) {
- cb(callbackInstance, add, null, remove);
- return this;
- }
-
- public BundleDependencyBuilder cb(String added, String changed, String
removed) {
- return cb(null, added, changed, removed);
- }
-
- public BundleDependencyBuilder cb(Object callbackInstance, String added,
String changed, String removed) {
+ private BundleDependencyBuilder cbi(Object callbackInstance, String added,
String changed, String removed) {
requiresNoMethodRefs();
m_instance = callbackInstance;
m_added = added != null ? added : m_added;
Modified:
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/ComponentBuilderImpl.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/ComponentBuilderImpl.java?rev=1725647&r1=1725646&r2=1725647&view=diff
==============================================================================
---
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/ComponentBuilderImpl.java
(original)
+++
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/ComponentBuilderImpl.java
Tue Jan 19 23:00:49 2016
@@ -22,9 +22,9 @@ import org.apache.felix.dm.builder.lambd
import org.apache.felix.dm.builder.lambda.ComponentBuilder;
import org.apache.felix.dm.builder.lambda.ConfigurationDependencyBuilder;
import org.apache.felix.dm.builder.lambda.DependencyBuilder;
-import org.apache.felix.dm.builder.lambda.Functions.CbBiConsumer;
import org.apache.felix.dm.builder.lambda.Functions.CbComponent;
import org.apache.felix.dm.builder.lambda.Functions.CbConsumer;
+import org.apache.felix.dm.builder.lambda.Functions.CbTypeComponent;
import org.apache.felix.dm.builder.lambda.Functions.FluentProperties;
import org.apache.felix.dm.builder.lambda.FutureDependencyBuilder;
import org.apache.felix.dm.builder.lambda.ServiceDependencyBuilder;
@@ -424,39 +424,61 @@ public class ComponentBuilderImpl implem
return this;
}
- public ComponentBuilderImpl cb(String init, String start, String stop,
String destroy) {
+ public ComponentBuilderImpl life(String ...callbacks) {
ensureHasNoLifecycleMethodRefs();
- m_init = init;
- m_start = start;
- m_stop = stop;
- m_destroy = destroy;
+ switch (callbacks.length) {
+ case 1:
+ m_init = callbacks[0];
+ break;
+
+ case 2:
+ m_init = callbacks[0];
+ m_start = callbacks[1];
+ break;
+
+ case 3:
+ m_init = callbacks[0];
+ m_start = callbacks[1];
+ m_stop = callbacks[2];
+ break;
+
+ case 4:
+ m_init = callbacks[0];
+ m_start = callbacks[1];
+ m_stop = callbacks[2];
+ m_destroy = callbacks[3];
+ break;
+
+ default:
+ throw new IllegalArgumentException("life method may take at
max four parameters (first one for \"init\" callback, second for \"start\",
third for \"stop\", and fourth for \"destroy\" callback");
+ }
return this;
}
- public ComponentBuilderImpl cb(Object callbackInstance, String init,
String start, String stop, String destroy) {
+ public ComponentBuilderImpl lifeInst(Object callbackInstance, String
...callbacks) {
m_callbackInstance = callbackInstance;
- return cb(init, start, stop, destroy);
+ return life(callbacks);
}
@Override
- public <U> ComponentBuilderImpl cb(Cb callbackType, CbConsumer<U>
callback) {
+ public <U> ComponentBuilderImpl life(Cb callbackType, CbConsumer<U>
callback) {
Class<U> type = Helpers.getLambdaGenericType(callback, 0);
return setComponentCallbackRef(callbackType, type, (inst, component) ->
callback.accept((U) inst));
}
@Override
- public <U> ComponentBuilderImpl cb(Cb callbackType, CbBiConsumer<U,
Component> callback) {
+ public <U> ComponentBuilderImpl life(Cb callbackType, CbTypeComponent<U>
callback) {
Class<U> type = Helpers.getLambdaGenericType(callback, 0);
return setComponentCallbackRef(callbackType, type, (inst, component)
-> callback.accept((U) inst, component));
}
@Override
- public ComponentBuilderImpl cbi(Cb callbackType, Runnable callback) {
+ public ComponentBuilderImpl lifeInst(Cb callbackType, Runnable callback) {
return setInstanceCallbackRef(callbackType, (inst, component) ->
callback.run());
}
@Override
- public ComponentBuilderImpl cbi(Cb callbackType, CbComponent callback) {
+ public ComponentBuilderImpl lifeInst(Cb callbackType, CbComponent
callback) {
return setInstanceCallbackRef(callbackType, (inst, component) ->
callback.accept(component));
}
Modified:
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/ConfigurationDependencyBuilderImpl.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/ConfigurationDependencyBuilderImpl.java?rev=1725647&r1=1725646&r2=1725647&view=diff
==============================================================================
---
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/ConfigurationDependencyBuilderImpl.java
(original)
+++
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/ConfigurationDependencyBuilderImpl.java
Tue Jan 19 23:00:49 2016
@@ -66,7 +66,7 @@ public class ConfigurationDependencyBuil
return this;
}
- public ConfigurationDependencyBuilder cb(Object callbackInstance, String
update) {
+ public ConfigurationDependencyBuilder cbi(Object callbackInstance, String
update) {
m_updateCallbackInstance = callbackInstance;
cb(update);
return this;
Modified:
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/FactoryPidAdapterBuilderImpl.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/FactoryPidAdapterBuilderImpl.java?rev=1725647&r1=1725646&r2=1725647&view=diff
==============================================================================
---
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/FactoryPidAdapterBuilderImpl.java
(original)
+++
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/FactoryPidAdapterBuilderImpl.java
Tue Jan 19 23:00:49 2016
@@ -25,7 +25,7 @@ public class FactoryPidAdapterBuilderImp
private Object m_updateCallbackInstance;
private boolean m_hasMethodRefs;
private boolean m_hasReflectionCallback;
- private Consumer<ComponentBuilder> m_compBuilder = (componentBuilder ->
{});
+ private Consumer<ComponentBuilder<?>> m_compBuilder = (componentBuilder ->
{});
private final List<MethodRef<Object>> m_refs = new ArrayList<>();
@FunctionalInterface
@@ -37,7 +37,7 @@ public class FactoryPidAdapterBuilderImp
m_dm = dm;
}
- public void andThenBuild(Consumer<ComponentBuilder> builder) {
+ public void andThenBuild(Consumer<ComponentBuilder<?>> builder) {
m_compBuilder = m_compBuilder.andThen(builder);
}
@@ -88,7 +88,7 @@ public class FactoryPidAdapterBuilderImp
return this;
}
- public FactoryPidAdapterBuilder cb(Object callbackInstance, String update)
{
+ public FactoryPidAdapterBuilder cbi(Object callbackInstance, String
update) {
cb(update);
m_updateCallbackInstance = callbackInstance;
return this;
Modified:
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/ServiceAdapterBuilderImpl.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/ServiceAdapterBuilderImpl.java?rev=1725647&r1=1725646&r2=1725647&view=diff
==============================================================================
---
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/ServiceAdapterBuilderImpl.java
(original)
+++
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/ServiceAdapterBuilderImpl.java
Tue Jan 19 23:00:49 2016
@@ -2,8 +2,6 @@ package org.apache.felix.dm.builder.lamb
import java.util.Objects;
import java.util.function.Consumer;
-import java.util.function.Function;
-import java.util.function.Supplier;
import org.apache.felix.dm.Component;
import org.apache.felix.dm.DependencyManager;
@@ -19,7 +17,7 @@ public class ServiceAdapterBuilderImpl<T
private boolean m_propagate = true;
private final DependencyManager m_dm;
private boolean m_autoAdd = true;
- private Consumer<ComponentBuilder> m_compBuilder = (componentBuilder ->
{});
+ private Consumer<ComponentBuilder<?>> m_compBuilder = (componentBuilder ->
{});
public ServiceAdapterBuilderImpl(DependencyManager dm, Class<T> type) {
super(type);
@@ -28,7 +26,7 @@ public class ServiceAdapterBuilderImpl<T
}
@Override
- public void andThenBuild(Consumer<ComponentBuilder> after) {
+ public void andThenBuild(Consumer<ComponentBuilder<?>> after) {
m_compBuilder = m_compBuilder.andThen(after);
}