Author: pderop
Date: Tue Jan 12 22:45:36 2016
New Revision: 1724333
URL: http://svn.apache.org/viewvc?rev=1724333&view=rev
Log:
Committing my current work. API has been cleaned and "API bloat" has been
reduced, using CB enum.
Added:
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/.settings/org.eclipse.jdt.core.prefs
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/build.gradle
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/AdapterAndConsumerTest.java
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/AdapterWithExtraDependenciesTest.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/AdapterWithInstanceBoundDependencyParallelTest.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/AdapterWithInstanceBoundDependencyTest.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/AdapterWithModifiedInstanceBoundDependencyTest.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/AdapterWithPropagationTest.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/AdapterWithoutPropagationTest.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/AspectBaseTest.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/AspectChainTest.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/AspectDynamicsTest.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/AspectServiceDependencyTest.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/AspectServiceDependencyWithSwapCallbackTest.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/AspectWhiteboardTest.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/AspectWithCallbacksServiceDependencyTest.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/AspectWithPropagationTest.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/ModifiedBundleDependencyTest.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dependencymanager/lambda/samples/compositefactory/ProviderComposite1.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dependencymanager/lambda/samples/compositefactory/ProviderComposite2.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dependencymanager/lambda/samples/compositefactory/ProviderFactory.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dependencymanager/lambda/samples/future/DisplayFelixLinks.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dependencymanager/lambda/samples/future/FelixLinks.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dependencymanager/lambda/samples/future/FelixLinksImpl.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/CB.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/ComponentBuilderBase.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/impl/AdapterBase.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
Removed:
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/BundleDependencyReflectTest.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dependencymanager/lambda/samples/compositefactory/CompositionManager.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dependencymanager/lambda/samples/compositefactory/ProviderParticipant1.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dependencymanager/lambda/samples/compositefactory/ProviderParticipant2.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dependencymanager/lambda/samples/future/DisplaySite.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dependencymanager/lambda/samples/future/SiteInfo.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dependencymanager/lambda/samples/future/SiteInfoImpl.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/AdapterBuilder.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/AspectBuilder.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/ResourceDependencyBuilder.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/AdapterBuilderImpl.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/AspectBuilderImpl.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/ExtendedComponentBase.java
Modified:
felix/sandbox/pderop/dependencymanager-lambda/TODO
felix/sandbox/pderop/dependencymanager-lambda/cnf/localrepo/index.xml
felix/sandbox/pderop/dependencymanager-lambda/cnf/localrepo/index.xml.sha
felix/sandbox/pderop/dependencymanager-lambda/cnf/localrepo/org.apache.felix.dependencymanager/org.apache.felix.dependencymanager-4.2.0.jar
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/bnd.bnd
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/AbstractServiceDependencyTest.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/BundleDependencyTest.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/ComponentTest.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/ResourceProvider.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/ServiceDependencyTest.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/ServiceDependencyThroughCallbackInstanceTest.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/ServiceUpdateTest.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/ServiceUtil.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/TestBase.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/compositefactory/Configurator.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dependencymanager/lambda/samples/compositefactory/ProviderImpl.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dependencymanager/lambda/samples/device/Activator.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dependencymanager/lambda/samples/dictionary/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/factory/ProviderFactory.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dependencymanager/lambda/samples/future/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/completable/Activator.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dependencymanager/lambda/samples/rx/completable/SiteInfoImpl.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/FutureDependencyBuilder.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/ServiceDependencyBuilder.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/CompletableFutureDependencyImpl.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/Helpers.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/ServiceCallbacksBuilderImpl.java
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/ServiceDependencyBuilderImpl.java
Modified: felix/sandbox/pderop/dependencymanager-lambda/TODO
URL:
http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/TODO?rev=1724333&r1=1724332&r2=1724333&view=diff
==============================================================================
--- felix/sandbox/pderop/dependencymanager-lambda/TODO (original)
+++ felix/sandbox/pderop/dependencymanager-lambda/TODO Tue Jan 12 22:45:36 2016
@@ -1,36 +1,68 @@
-- when a factory(() -> new(...)) is used, then from the shell, the component
is now well displayed:
+- Check if method reference method signatures are consistent for refective
method signature.
- [1] org.apache.felix.dm.impl.ComponentImpl@51b279c9 registered
- [2] org.apache.felix.dm.impl.ComponentImpl@60438a68 registered
-g!
+- in ServiceDependencyBuilder:
+ * add support for method references in the "propagateTo" method
+ * add a withService method that takes a string (class name), instead of a
Class object.
-- In ComponentBuilder: add support for component lifecycle callbaks declared
with method names (like it is the case with regular Dependency Manager API):
+- Finish to adapt all DependencyManager integration tests
-componentBuilder.onInit(String init);
-componentBuilder.onStart(String start);
-componentBuilder.onStop(String stop);
-componentBuilder.onDestroy(String destroy);
+- Add BundeAdapter component
-- In ConfigurationDependencyBuilder: add support for updated callback defined
with a method name (like it is the case with regular DM API)
-
-- add more javadocs
-
-- in ServiceDependencyBuilder: add support for method references in the
"propagateTo" method
-
-- in ServiceDependencyBuilder: add a withService method that takes a string
(class name), instead of a Class object.
-
-- finish to adapt all DependencyManager integration tests
+- Add support for BundleAdapter
-- add support for BundleDependency
+- simplify completablefuture examples ("WordCount" demo).
-- add support for BundleAdapter
+- Javadocs
-- add support for ResourceDependency
-
-- add support for ResourceAdapter
-
-
-- "gradle check" is not currently working. The integration tests are only
working under eclipse/bndtools.
+ cb(String add)
+ cb(String add, String remove)
+ cb(String add, String change, String remove)
+ cb(String add, String change, String remove, String swap)
+ enum CbType { ADD, CHG, REM}
+
+* B cb(CbType cbType, CbTypeService<T, S> add);
+ B cb(CbType cbType, CbTypeServiceMap<T, S> add);
+ B cb(CbType cbType, CbTypeServiceDict<T, S> add);
+ B cb(CbType cbType, CbTypeRef<T, S> add);
+ B cb(CbType cbType, CbTypeRefService<T, S> add);
+ B cb(CbType cbType, CbTypeComponentService<T, S> add);
+ B cb(CbType cbType, CbTypeComponentServiceMap<T, S> add);
+ B cb(CbType cbType, CbTypeComponentServiceDict<T, S> add);
+ B cb(CbType cbType, CbTypeComponentRef<T, S> add);
+ B cb(CbType cbType, CbTypeComponentRefService<T, S> add);
+
+ B cb(CbType cbType, CbService<S> add);
+ B cb(CbType cbType, CbServiceMap<S> add);
+ B cb(CbType cbType, CbServiceDict<S> add);
+ B cb(CbType cbType, CbRef<S> add);
+ B cb(CbType cbType, CbRefService<S> add);
+* B cb(CbType cbType, CbComponentService<S> add);
+ B cb(CbType cbType, CbComponentServiceMap<S> add);
+ B cb(CbType cbType, CbComponentServiceDict<S> add);
+ B cb(CbType cbType, CbComponentRef<S> add);
+ B cb(CbType cbType, CbComponentRefService<S> add);
+
+ B swap(CbTypeServiceService<T, S> swap);
+ B swap(CbTypeRefServiceRefService<T, S> swap);
+ B swap(CbTypeMapServiceMapService<T, S> swap);
+ B swap(CbTypeDictServiceDictService<T, S> swap);
+ B swap(CbTypeComponentServiceService<T, S> swap);
+ B swap(CbTypeComponentRefServiceRefService<T, S> swap);
+ B swap(CbTypeComponentMapServiceMapService<T, S> swap);
+ B swap(CbTypeComponentDictServiceDictService<T, S> swap);
+ B swap(CbServiceService<S> swap);
+ B swap(CbRefServiceRefService<S> swap);
+ B swap(CbMapServiceMapService<S> swap);
+ B swap(CbDictServiceDictService<S> swap);
+ B swap(CbComponentServiceService<S> swap);
+ B swap(CbComponentRefServiceRefService<S> swap);
+ B swap(CbComponentMapServiceMapService<S> swap);
+ B swap(CbComponentDictServiceDictService<S> swap);
+
+ withServices(s -> s.cb(ADD, inst::bind)).cb(CHG, inst::change).cb(REM,
inst::remove)
+
+ withServices(s ->
s.add().cb(inst::bind)).chg().cb(inst::change).rm().cbinst::remove)
+
Modified: felix/sandbox/pderop/dependencymanager-lambda/cnf/localrepo/index.xml
URL:
http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/cnf/localrepo/index.xml?rev=1724333&r1=1724332&r2=1724333&view=diff
==============================================================================
Binary files - no diff available.
Modified:
felix/sandbox/pderop/dependencymanager-lambda/cnf/localrepo/index.xml.sha
URL:
http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/cnf/localrepo/index.xml.sha?rev=1724333&r1=1724332&r2=1724333&view=diff
==============================================================================
--- felix/sandbox/pderop/dependencymanager-lambda/cnf/localrepo/index.xml.sha
(original)
+++ felix/sandbox/pderop/dependencymanager-lambda/cnf/localrepo/index.xml.sha
Tue Jan 12 22:45:36 2016
@@ -1 +1 @@
-32c13ed9948f7e16d70860f5335063cef506408c7684c9460b25a7265a23095d
\ No newline at end of file
+a99bb2c7135e307a0613d129fa087005ed8227315b8596947e64f56023a1daeb
\ No newline at end of file
Modified:
felix/sandbox/pderop/dependencymanager-lambda/cnf/localrepo/org.apache.felix.dependencymanager/org.apache.felix.dependencymanager-4.2.0.jar
URL:
http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/cnf/localrepo/org.apache.felix.dependencymanager/org.apache.felix.dependencymanager-4.2.0.jar?rev=1724333&r1=1724332&r2=1724333&view=diff
==============================================================================
Binary files - no diff available.
Added:
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/.settings/org.eclipse.jdt.core.prefs
URL:
http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/.settings/org.eclipse.jdt.core.prefs?rev=1724333&view=auto
==============================================================================
---
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/.settings/org.eclipse.jdt.core.prefs
(added)
+++
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/.settings/org.eclipse.jdt.core.prefs
Tue Jan 12 22:45:36 2016
@@ -0,0 +1,12 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.methodParameters=generate
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.8
Modified:
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/bnd.bnd
URL:
http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/bnd.bnd?rev=1724333&r1=1724332&r2=1724333&view=diff
==============================================================================
---
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/bnd.bnd
(original)
+++
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/bnd.bnd
Tue Jan 12 22:45:36 2016
@@ -14,7 +14,9 @@
org.apache.felix.dependencymanager.shell;version=4.0.1,\
org.apache.felix.configadmin;version=1.8.4,\
org.apache.felix.dependencymanager.lambda;version=latest,\
- biz.aQute.junit;version=1.3.0
+ biz.aQute.junit;version=1.3.0,\
+ org.apache.felix.gogo.shell;version=0.10.0,\
+ org.apache.felix.gogo.command;version=0.14.0
-runee: JavaSE-1.8
-runfw: org.apache.felix.framework;version='[5.2.0,5.2.0]'
-runvm: -ea
@@ -26,4 +28,7 @@ Test-Cases: \
javac.source: 1.8
javac.target: 1.8
-tester: biz.aQute.junit
-
+-runproperties: \
+ org.apache.felix.dependencymanager.loglevel=2,\
+ org.apache.felix.log.maxSize=100000,\
+ org.apache.felix.log.storeDebug=true
Added:
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/build.gradle
URL:
http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/build.gradle?rev=1724333&view=auto
==============================================================================
---
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/build.gradle
(added)
+++
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/build.gradle
Tue Jan 12 22:45:36 2016
@@ -0,0 +1,3 @@
+ tasks.withType(JavaCompile) {
+ options.compilerArgs << "-parameters" << "-Xdiags:verbose"
+}
Modified:
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/AbstractServiceDependencyTest.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/AbstractServiceDependencyTest.java?rev=1724333&r1=1724332&r2=1724333&view=diff
==============================================================================
---
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/AbstractServiceDependencyTest.java
(original)
+++
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/AbstractServiceDependencyTest.java
Tue Jan 12 22:45:36 2016
@@ -18,6 +18,8 @@
*/
package org.apache.felix.dm.builder.lambda.itest;
+import static org.apache.felix.dm.builder.lambda.CB.ADD;
+import static org.apache.felix.dm.builder.lambda.CB.REM;
import static
org.apache.felix.dm.builder.lambda.DependencyActivatorBase.component;
import org.apache.felix.dm.Component;
@@ -34,11 +36,11 @@ public class AbstractServiceDependencyTe
Ensure e = new Ensure();
// create a service provider and consumer
Component sp = component(m, comp -> comp
- .autoAdd(false).provides(ServiceAbstract.class).impl(new
ServiceProvider(e)));
+ .autoAdd(false).provides(ServiceAbstract.class).impl(new
ServiceProvider(e)));
Component sc = component(m, comp -> comp
- .autoAdd(false).impl(new ServiceConsumer(e))
- .withService(ServiceAbstract.class, srv ->
srv.onAdd(ServiceConsumer::bind).onRemove(ServiceConsumer::unbind)));
+ .autoAdd(false).impl(new ServiceConsumer(e))
+ .withService(ServiceAbstract.class, srv -> srv.cb(ADD,
ServiceConsumer::bind).cb(REM, ServiceConsumer::unbind)));
m.add(sp);
m.add(sc);
m.remove(sp);
Added:
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/AdapterAndConsumerTest.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/AdapterAndConsumerTest.java?rev=1724333&view=auto
==============================================================================
---
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/AdapterAndConsumerTest.java
(added)
+++
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/AdapterAndConsumerTest.java
Tue Jan 12 22:45:36 2016
@@ -0,0 +1,103 @@
+/*
+ * 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.DependencyActivatorBase.adapter;
+import static
org.apache.felix.dm.builder.lambda.DependencyActivatorBase.component;
+
+import org.apache.felix.dm.Component;
+import org.apache.felix.dm.DependencyManager;
+
+/**
+ * @author <a href="mailto:[email protected]">Felix Project Team</a>
+ */
+public class AdapterAndConsumerTest extends TestBase {
+
+ public void testServiceWithAdapterAndConsumer() {
+ DependencyManager m = getDM();
+ // helper class that ensures certain steps get executed in sequence
+ Ensure e = new Ensure();
+
+ Component provider = component(m, comp->
comp.autoAdd(false).provides(OriginalService.class).impl(new
ServiceProvider(e)));
+ Component consumer = component(m, comp-> comp.autoAdd(false).impl(new
ServiceConsumer(e)).withService(AdaptedService.class));
+ Component adapter = adapter(m, OriginalService.class, a ->
a.provides(AdaptedService.class).impl(ServiceAdapter.class));
+
+ // add the provider and the adapter
+ m.add(provider);
+ m.add(adapter);
+ // add a consumer that will invoke the adapter
+ // which will in turn invoke the original provider
+ m.add(consumer);
+ // now validate that both have been invoked in the right order
+ e.waitForStep(2, 5000);
+ // remove the provider again
+ m.remove(provider);
+ // ensure that the consumer is stopped
+ e.waitForStep(3, 5000);
+ // remove adapter and consumer
+ m.remove(adapter);
+ m.remove(consumer);
+ }
+
+ static interface OriginalService {
+ public void invoke();
+ }
+
+ static interface AdaptedService {
+ public void invoke();
+ }
+
+ static class ServiceProvider implements OriginalService {
+ private final Ensure m_ensure;
+ public ServiceProvider(Ensure e) {
+ m_ensure = e;
+ }
+ public void invoke() {
+ m_ensure.step(2);
+ }
+ }
+
+ public static class ServiceAdapter implements AdaptedService {
+ private volatile OriginalService m_originalService;
+
+ public void start() { System.out.println("start"); }
+ public void stop() { System.out.println("stop"); }
+ public void invoke() {
+ m_originalService.invoke();
+ }
+ }
+
+ static class ServiceConsumer {
+ private volatile AdaptedService m_service;
+ private final Ensure m_ensure;
+
+ public ServiceConsumer(Ensure e) {
+ m_ensure = e;
+ }
+ public void start() {
+ m_ensure.step(1);
+ m_service.invoke();
+ }
+ public void stop() {
+ m_ensure.step(3);
+ }
+ }
+}
+
+
Added:
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=1724333&view=auto
==============================================================================
---
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/AdapterNoAutoConfigIfInstanceCallbackIsUsed.java
(added)
+++
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/AdapterNoAutoConfigIfInstanceCallbackIsUsed.java
Tue Jan 12 22:45:36 2016
@@ -0,0 +1,94 @@
+/*
+ * 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.ADD;
+import static
org.apache.felix.dm.builder.lambda.DependencyActivatorBase.adapter;
+import static
org.apache.felix.dm.builder.lambda.DependencyActivatorBase.component;
+
+import org.apache.felix.dm.DependencyManager;
+import org.junit.Assert;
+
+/**
+ * This tests validates that autoconfiguration of adapted service on adapter
class field(s) is not
+ * enabled when an instance callback is used when injected adapted service.
+ */
+public class AdapterNoAutoConfigIfInstanceCallbackIsUsed extends TestBase {
+ static Ensure m_e;
+
+ public void testNoAutoConfigIfInstanceCallbackIsUsed() {
+ m_e = new Ensure();
+ DependencyManager m = getDM();
+
+ // Declare S1 service
+ component(m, c -> c.impl(S1Impl.class).provides(S1.class));
+
+ // Declare S1 adapter
+ S1AdapterCallback s1AdapterCB = new S1AdapterCallback();
+ adapter(m, S1.class, a ->
a.impl(S1Adapter.class).cb("set").cbInst(s1AdapterCB));
+
+ // 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.
+
+ m_e.waitForStep(3, 5000);
+ m.clear();
+ }
+
+ public void testNoAutoConfigIfInstanceCallbackIsUsedRef() {
+ m_e = new Ensure();
+ DependencyManager m = getDM();
+
+ // Declare S1 service
+ component(m, c -> c.impl(S1Impl.class).provides(S1.class));
+
+ // Declare S1 adapter
+ S1AdapterCallback s1AdapterCB = new S1AdapterCallback();
+ adapter(m, S1.class, a -> a.impl(S1Adapter.class).cbi(ADD,
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.
+
+ m_e.waitForStep(3, 5000);
+ m.clear();
+ }
+
+ public interface S1 {
+ }
+
+ public static class S1Impl implements S1 {
+ }
+
+ public static class S1Adapter {
+ volatile S1 m_s1; // should not be injected by reflection
+
+ void start() {
+ m_e.step(2);
+ Assert.assertNull(m_s1);
+ m_e.step(3);
+ }
+ }
+
+ public static class S1AdapterCallback {
+ void set(S1 s1) {
+ Assert.assertNotNull(s1);
+ m_e.step(1);
+ }
+ }
+
+}
Added:
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=1724333&view=auto
==============================================================================
---
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/AdapterWithCallbackInstanceTest.java
(added)
+++
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/AdapterWithCallbackInstanceTest.java
Tue Jan 12 22:45:36 2016
@@ -0,0 +1,197 @@
+/*
+ * 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.ADD;
+import static org.apache.felix.dm.builder.lambda.CB.CHG;
+import static org.apache.felix.dm.builder.lambda.CB.REM;
+import static
org.apache.felix.dm.builder.lambda.DependencyActivatorBase.adapter;
+import static
org.apache.felix.dm.builder.lambda.DependencyActivatorBase.component;
+
+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.ServiceRegistration;
+
+/**
+ * @author <a href="mailto:[email protected]">Felix Project Team</a>
+ */
+public class AdapterWithCallbackInstanceTest extends TestBase {
+
+ public void testServiceWithAdapterAndConsumer() {
+ DependencyManager m = getDM();
+ // helper class that ensures certain steps get executed in sequence
+ Ensure e = new Ensure();
+
+ ServiceProvider serviceProvider = new ServiceProvider(e);
+ Component provider = component(m, comp ->
comp.autoAdd(false).provides(OriginalService.class).impl(serviceProvider));
+ Component consumer = component(m, comp -> comp.autoAdd(false).impl(new
ServiceConsumer(e)).withService(AdaptedService.class));
+
+ ServiceAdapterCallbackInstance callbackInstance = new
ServiceAdapterCallbackInstance(e);
+ Component adapter = adapter(m, OriginalService.class, adp -> adp
+ .provides(AdaptedService.class).impl(new ServiceAdapter(e))
+ .autoAdd(false).autoConfig("m_originalService").propagate(true)
+ .cb("set", "changed", "unset").cbInst(callbackInstance));
+
+ // add the provider and the adapter
+ m.add(provider);
+ m.add(adapter);
+ // Checks if the callbackInstances is called, and if the adapter start
method is called
+ e.waitForStep(2, 5000);
+
+ // add a consumer that will invoke the adapter
+ // which will in turn invoke the original provider
+ m.add(consumer);
+ // now validate that both have been invoked in the right order
+ e.waitForStep(4, 5000);
+
+ // change the service properties of the provider, and check that the
adapter callback instance is changed.
+ serviceProvider.changeServiceProperties();
+ e.waitForStep(5, 5000);
+
+ // remove the provider
+ m.remove(provider);
+ // ensure that the consumer is stopped, the adapter callback is called
in its unset method, and the adapter is stopped.
+ e.waitForStep(8, 5000);
+ // remove adapter and consumer
+ m.remove(adapter);
+ m.remove(consumer);
+ }
+
+ public void testServiceWithAdapterAndConsumerRef() {
+ DependencyManager m = getDM();
+ // helper class that ensures certain steps get executed in sequence
+ Ensure e = new Ensure();
+
+ ServiceProvider serviceProvider = new ServiceProvider(e);
+ Component provider = component(m, comp ->
comp.autoAdd(false).provides(OriginalService.class).impl(serviceProvider));
+
+ Component consumer = component(m, comp -> comp.autoAdd(false).impl(new
ServiceConsumer(e)).withService(AdaptedService.class));
+
+ ServiceAdapterCallbackInstance callbackInstance = new
ServiceAdapterCallbackInstance(e);
+ Component adapter = adapter(m, OriginalService.class, adp -> adp
+ .provides(AdaptedService.class).impl(new ServiceAdapter(e))
+ .autoAdd(false).autoConfig("m_originalService").propagate(true)
+ .cbi(ADD, callbackInstance::set).cbi(CHG,
callbackInstance::changed).cbi(REM, callbackInstance::unset));
+
+ // add the provider and the adapter
+ m.add(provider);
+ m.add(adapter);
+ // Checks if the callbackInstances is called, and if the adapter start
method is called
+ e.waitForStep(2, 5000);
+
+ // add a consumer that will invoke the adapter
+ // which will in turn invoke the original provider
+ m.add(consumer);
+ // now validate that both have been invoked in the right order
+ e.waitForStep(4, 5000);
+
+ // change the service properties of the provider, and check that the
adapter callback instance is changed.
+ serviceProvider.changeServiceProperties();
+ e.waitForStep(5, 5000);
+
+ // remove the provider
+ m.remove(provider);
+ // ensure that the consumer is stopped, the adapter callback is called
in its unset method, and the adapter is stopped.
+ e.waitForStep(8, 5000);
+ // remove adapter and consumer
+ m.remove(adapter);
+ m.remove(consumer);
+ }
+
+ static interface OriginalService {
+ public void invoke();
+ }
+
+ static interface AdaptedService {
+ public void invoke();
+ }
+
+ static class ServiceProvider implements OriginalService {
+ private final Ensure m_ensure;
+ private volatile ServiceRegistration m_registration; // auto injected
when started.
+ public ServiceProvider(Ensure e) {
+ m_ensure = e;
+ }
+ public void changeServiceProperties() {
+ Hashtable<String, String> props = new Hashtable<>();
+ props.put("foo", "bar");
+ m_registration.setProperties(props);
+ }
+ public void invoke() {
+ m_ensure.step(4);
+ }
+ }
+
+ public static class ServiceAdapter implements AdaptedService {
+ private volatile OriginalService m_originalService;
+ private final Ensure m_ensure;
+
+ public ServiceAdapter(Ensure e) {
+ m_ensure = e;
+ }
+
+ public void start() { m_ensure.step(2); }
+ public void stop() { m_ensure.step(7); }
+ public void invoke() {
+ m_originalService.invoke();
+ }
+ }
+
+ public static class ServiceAdapterCallbackInstance {
+ private final Ensure m_ensure;
+ public ServiceAdapterCallbackInstance(Ensure e) {
+ m_ensure = e;
+ }
+
+ public void set(OriginalService m_originalService, Map<String, Object>
props) {
+ m_ensure.step(1);
+ }
+
+ public void changed(OriginalService m_originalService, Map<String,
Object> props) {
+ Assert.assertEquals("bar", props.get("foo"));
+ m_ensure.step(5);
+ }
+
+ public void unset(OriginalService m_originalService, Map<String,
Object> props) {
+ m_ensure.step(8);
+ }
+ }
+
+ static class ServiceConsumer {
+ private volatile AdaptedService m_service;
+ private final Ensure m_ensure;
+
+ public ServiceConsumer(Ensure e) {
+ m_ensure = e;
+ }
+ public void start() {
+ m_ensure.step(3);
+ m_service.invoke();
+ }
+ public void stop() {
+ m_ensure.step(6);
+ }
+ }
+}
+
+
Added:
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/AdapterWithExtraDependenciesTest.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/AdapterWithExtraDependenciesTest.java?rev=1724333&view=auto
==============================================================================
---
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/AdapterWithExtraDependenciesTest.java
(added)
+++
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/AdapterWithExtraDependenciesTest.java
Tue Jan 12 22:45:36 2016
@@ -0,0 +1,143 @@
+/*
+ * 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.ADD;
+import static org.apache.felix.dm.builder.lambda.CB.REM;
+import static
org.apache.felix.dm.builder.lambda.DependencyActivatorBase.adapter;
+import static
org.apache.felix.dm.builder.lambda.DependencyActivatorBase.component;
+
+import org.apache.felix.dm.Component;
+import org.apache.felix.dm.DependencyManager;
+
+
+/**
+ * @author <a href="mailto:[email protected]">Felix Project Team</a>
+ */
+public class AdapterWithExtraDependenciesTest extends TestBase {
+
+ public void testAdapterWithExtraDependenciesAndCallbacks() {
+ DependencyManager m = getDM();
+ // helper class that ensures certain steps get executed in sequence
+ Ensure e = new Ensure();
+
+ // create a service adapter that adapts to services S1 and has an
optional dependency on services S2
+ Component sa = adapter(m, S1.class, a ->
a.autoAdd(false).impl(SA.class).withService(S2.class, s2 -> s2.cb("add",
"remove")));
+ m.add(sa);
+
+ // create a service S1, which triggers the creation of the first
adapter instance (A1)
+ Component s1 = component(m, c ->
c.autoAdd(false).provides(S1.class).impl(new S1Impl()));
+ m.add(s1);
+
+ // create a service S2, which will be added to A1
+ Component s2 = component(m, c ->
c.autoAdd(false).provides(S2.class).impl(new S2Impl(e)));
+ m.add(s2);
+
+ // create a second service S1, which triggers the creation of the
second adapter instance (A2)
+ Component s1b = component(m, c ->
c.autoAdd(false).provides(S1.class).impl(new S1Impl()));
+ m.add(s1b);
+
+ // observe that S2 is also added to A2
+ e.waitForStep(2, 5000);
+
+ // remove S2 again
+ m.remove(s2);
+
+ // make sure both adapters have their "remove" callbacks invoked
+ e.waitForStep(4, 5000);
+
+ m.remove(s1);
+ m.remove(sa);
+ m.clear();
+ }
+
+ public void testAdapterWithExtraDependenciesAndCallbacksRef() {
+ DependencyManager m = getDM();
+ // helper class that ensures certain steps get executed in sequence
+ Ensure e = new Ensure();
+
+ // create a service adapter that adapts to services S1 and has an
optional dependency on services S2
+ Component sa = adapter(m, S1.class, a ->
a.autoAdd(false).impl(SA.class).withService(S2.class, s2 -> s2.cb(ADD,
SA::add).cb(REM, SA::remove)));
+ m.add(sa);
+
+ // create a service S1, which triggers the creation of the first
adapter instance (A1)
+ Component s1 = component(m, c ->
c.autoAdd(false).provides(S1.class).impl(new S1Impl()));
+ m.add(s1);
+
+ // create a service S2, which will be added to A1
+ Component s2 = component(m, c ->
c.autoAdd(false).provides(S2.class).impl(new S2Impl(e)));
+ m.add(s2);
+
+ // create a second service S1, which triggers the creation of the
second adapter instance (A2)
+ Component s1b = component(m, c ->
c.autoAdd(false).provides(S1.class).impl(new S1Impl()));
+ m.add(s1b);
+
+ // observe that S2 is also added to A2
+ e.waitForStep(2, 5000);
+
+ // remove S2 again
+ m.remove(s2);
+
+ // make sure both adapters have their "remove" callbacks invoked
+ e.waitForStep(4, 5000);
+
+ m.remove(s1);
+ m.remove(sa);
+ m.clear();
+ }
+
+ static interface S1 {
+ }
+ static interface S2 {
+ public void invoke();
+ }
+ static class S1Impl implements S1 {
+ }
+ static class S2Impl implements S2 {
+
+ private final Ensure m_e;
+
+ public S2Impl(Ensure e) {
+ m_e = e;
+ }
+
+ public void invoke() {
+ m_e.step();
+ }
+ }
+
+ public static class SA {
+ volatile S2 s2;
+
+ public SA() {
+ System.out.println("Adapter created");
+ }
+ public void init() {
+ System.out.println("Adapter init " + s2);
+ }
+ public void add(S2 s) {
+ System.out.println("adding " + s);
+ s.invoke();
+ }
+ public void remove(S2 s) {
+ System.out.println("removing " + s);
+ s.invoke();
+ }
+ }
+}
Added:
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/AdapterWithInstanceBoundDependencyParallelTest.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/AdapterWithInstanceBoundDependencyParallelTest.java?rev=1724333&view=auto
==============================================================================
---
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/AdapterWithInstanceBoundDependencyParallelTest.java
(added)
+++
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/AdapterWithInstanceBoundDependencyParallelTest.java
Tue Jan 12 22:45:36 2016
@@ -0,0 +1,28 @@
+/*
+ * 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;
+
+/**
+ * @author <a href="mailto:[email protected]">Felix Project Team</a>
+ */
+public class AdapterWithInstanceBoundDependencyParallelTest extends
AdapterWithInstanceBoundDependencyTest {
+ public AdapterWithInstanceBoundDependencyParallelTest() {
+ setParallel();
+ }
+}
Added:
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/AdapterWithInstanceBoundDependencyTest.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/AdapterWithInstanceBoundDependencyTest.java?rev=1724333&view=auto
==============================================================================
---
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/AdapterWithInstanceBoundDependencyTest.java
(added)
+++
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/AdapterWithInstanceBoundDependencyTest.java
Tue Jan 12 22:45:36 2016
@@ -0,0 +1,148 @@
+/*
+ * 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.DependencyActivatorBase.adapter;
+import static
org.apache.felix.dm.builder.lambda.DependencyActivatorBase.component;
+
+import org.apache.felix.dm.Component;
+import org.apache.felix.dm.DependencyManager;
+
+
+/**
+ * @author <a href="mailto:[email protected]">Felix Project Team</a>
+ */
+public class AdapterWithInstanceBoundDependencyTest extends TestBase {
+
+ public void testInstanceBoundDependency() {
+ DependencyManager m = getDM();
+ // helper class that ensures certain steps get executed in sequence
+ Ensure e = new Ensure();
+ // create a service provider and consumer
+
+ Component sp = component(m,
c->c.provides(ServiceInterface.class).impl(new
ServiceProvider(e)).autoAdd(false));
+ Component sp2 = component(m,
c->c.provides(ServiceInterface2.class).impl(new
ServiceProvider2(e)).autoAdd(false));
+ Component sc = component(m, c->c.impl(new
ServiceConsumer(e)).autoAdd(false).withService(ServiceInterface3.class));
+ Component sa = adapter(m, ServiceInterface.class,
a->a.autoAdd(false).provides(ServiceInterface3.class).impl(new
ServiceAdapter(e)));
+ m.add(sc);
+ m.add(sp);
+ m.add(sp2);
+ m.add(sa);
+ e.waitForStep(5, 15000);
+ // cleanup
+ m.remove(sa);
+ m.remove(sp2);
+ m.remove(sp);
+ m.remove(sc);
+ m.clear();
+ e.waitForStep(9, 5000); // make sure all components are stopped
+ }
+
+ static interface ServiceInterface {
+ public void invoke();
+ }
+
+ static interface ServiceInterface2 {
+ public void invoke();
+ }
+
+ static interface ServiceInterface3 {
+ public void invoke();
+ }
+
+ static class ServiceProvider2 implements ServiceInterface2 {
+ private final Ensure m_ensure;
+
+ public ServiceProvider2(Ensure ensure) {
+ m_ensure = ensure;
+ }
+
+ public void invoke() {
+ m_ensure.step(4);
+ }
+
+ public void stop() {
+ m_ensure.step();
+ }
+ }
+
+ static class ServiceProvider implements ServiceInterface {
+ private final Ensure m_ensure;
+ public ServiceProvider(Ensure e) {
+ m_ensure = e;
+ }
+ public void invoke() {
+ m_ensure.step(5);
+ }
+ public void stop() {
+ m_ensure.step();
+ }
+ }
+
+ static class ServiceAdapter implements ServiceInterface3 {
+ private Ensure m_ensure;
+ private volatile ServiceInterface m_originalService;
+ private volatile ServiceInterface2 m_injectedService;
+ private volatile Component m_component;
+ private volatile DependencyManager m_manager;
+
+ public ServiceAdapter(Ensure e) {
+ m_ensure = e;
+ }
+ public void init() {
+ m_ensure.step(1);
+ component(m_component, c->c.withService(ServiceInterface2.class));
+ }
+ public void start() {
+ m_ensure.step(2);
+ }
+ public void invoke() {
+ m_ensure.step(3);
+ m_injectedService.invoke();
+ m_originalService.invoke();
+ }
+
+ public void stop() {
+ m_ensure.step();
+ }
+ }
+
+ static class ServiceConsumer implements Runnable {
+ volatile ServiceInterface3 m_service;
+ final Ensure m_ensure;
+
+ ServiceConsumer(Ensure e) {
+ m_ensure = e;
+ }
+
+ public void init() {
+ Thread t = new Thread(this);
+ t.start();
+ }
+
+ public void run() {
+ m_service.invoke();
+ }
+ public void stop() {
+ m_ensure.step();
+ }
+ }
+}
+
+
Added:
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/AdapterWithModifiedInstanceBoundDependencyTest.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/AdapterWithModifiedInstanceBoundDependencyTest.java?rev=1724333&view=auto
==============================================================================
---
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/AdapterWithModifiedInstanceBoundDependencyTest.java
(added)
+++
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/AdapterWithModifiedInstanceBoundDependencyTest.java
Tue Jan 12 22:45:36 2016
@@ -0,0 +1,177 @@
+/*
+ * 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.ADD;
+import static org.apache.felix.dm.builder.lambda.CB.CHG;
+import static org.apache.felix.dm.builder.lambda.CB.REM;
+import static
org.apache.felix.dm.builder.lambda.DependencyActivatorBase.adapter;
+import static
org.apache.felix.dm.builder.lambda.DependencyActivatorBase.component;
+
+import java.util.Map;
+import java.util.Properties;
+
+import org.apache.felix.dm.Component;
+import org.apache.felix.dm.DependencyManager;
+import org.junit.Assert;
+
+/**
+ * Test for FELIX-4334 issue.
+ *
+ * Three components: A, B and C
+ *
+ * - A provided with property foo=bar
+ * - B adapts A, B has no filters on A, and B.init() method adds an instance
bound required dependency to C.
+ * - C depends on A(foo=bar)
+ * - Now someone modifies the service properties of A: foo=bar2
+ * - As a result of that, C becomes unavailable and is unbound from B.
+ * - Since B has an instance bound required dependency to C: B should not be
destroyed: it should be called in B.stop(), B.remove(C), B.change(A, "foo=bar2))
+ *
+ * @author <a href="mailto:[email protected]">Felix Project Team</a>
+ */
+public class AdapterWithModifiedInstanceBoundDependencyTest extends TestBase {
+ public static interface A {
+ }
+
+ static class AImpl implements A {
+ final Ensure m_e;
+ AImpl(Ensure e) {
+ m_e = e;
+ }
+ }
+
+ public static interface C {
+ }
+
+ static class CImpl implements C {
+ volatile A m_a;
+ }
+
+ public static interface B {
+ }
+
+ public static class BImpl implements B {
+ final Ensure m_e;
+ volatile A m_a;
+ volatile C m_c;
+
+ BImpl(Ensure e) {
+ m_e = e;
+ }
+
+ void init(Component comp) {
+ m_e.step(2);
+ component(comp, c->c.withService(C.class, s->s.cb("addC",
"removeC")));
+ }
+
+ void addA(A a, Map<String, Object> properties) {
+ m_e.step(1);
+ }
+
+ public void addC(C c) {
+ m_e.step(3);
+ }
+
+ public void start() {
+ m_e.step(4);
+ }
+
+ public void stop() { // C becomes unsatisfied when A properties are
changed to foo=bar2
+ m_e.step(5);
+ }
+
+ public void removeC(C c) {
+ m_e.step(6);
+ }
+
+ public void changeA(A a, Map<String, Object> properties) {
+ Assert.assertEquals("bar2", properties.get("foo"));
+ m_e.step(7);
+ }
+
+ public void destroy() {
+ m_e.step(8);
+ }
+
+ public void removeA(A a, Map<String, Object> properties) {
+ m_e.step(9);
+ }
+ }
+
+ public void testAdapterWithChangedInstanceBoundDependency() {
+ DependencyManager m = getDM();
+ Ensure e = new Ensure();
+
+ Component a = component(m, c -> c.autoAdd(false).impl(new
AImpl(e)).provides(A.class).properties(foo -> "bar"));
+ Component b = adapter(m, A.class, builder ->
builder.autoAdd(false).cb("addA", "changeA",
"removeA").provides(B.class).impl(new BImpl(e)));
+ Component c = component(m, comp -> comp.autoAdd(false).impl(new
CImpl()).provides(C.class).withService(A.class, s -> s.filter("(foo=bar)")));
+
+ m.add(a);
+ m.add(c);
+ m.add(b);
+
+ e.waitForStep(4, 5000);
+
+ System.out.println("changing A props ...");
+ Properties props = new Properties();
+ props.put("foo", "bar2");
+ a.setServiceProperties(props);
+
+ e.waitForStep(7, 5000);
+
+ m.remove(c);
+ m.remove(a);
+ m.remove(b);
+
+ e.waitForStep(9, 5000);
+ }
+
+ public void testAdapterWithChangedInstanceBoundDependencyRef() {
+ DependencyManager m = getDM();
+ Ensure e = new Ensure();
+
+ Component a = component(m, c -> c.autoAdd(false).impl(new
AImpl(e)).provides(A.class).properties(foo -> "bar"));
+
+ Component b = adapter(m, A.class, builder -> builder
+ .autoAdd(false).impl(new BImpl(e)).provides(B.class)
+ .cb(ADD, BImpl::addA).cb(CHG, BImpl::changeA).cb(REM,
BImpl::removeA));
+
+ Component c = component(m, comp -> comp
+ .autoAdd(false).impl(new
CImpl()).provides(C.class).withService(A.class, s -> s.filter("(foo=bar)")));
+
+ m.add(a);
+ m.add(c);
+ m.add(b);
+
+ e.waitForStep(4, 5000);
+
+ System.out.println("changing A props ...");
+ Properties props = new Properties();
+ props.put("foo", "bar2");
+ a.setServiceProperties(props);
+
+ e.waitForStep(7, 5000);
+
+ m.remove(c);
+ m.remove(a);
+ m.remove(b);
+
+ e.waitForStep(9, 5000);
+ }
+}
Added:
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/AdapterWithPropagationTest.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/AdapterWithPropagationTest.java?rev=1724333&view=auto
==============================================================================
---
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/AdapterWithPropagationTest.java
(added)
+++
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/AdapterWithPropagationTest.java
Tue Jan 12 22:45:36 2016
@@ -0,0 +1,128 @@
+/*
+ * 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.DependencyActivatorBase.adapter;
+import static
org.apache.felix.dm.builder.lambda.DependencyActivatorBase.component;
+
+import java.util.Hashtable;
+import java.util.Map;
+
+import org.apache.felix.dm.Component;
+import org.apache.felix.dm.DependencyManager;
+import org.junit.Assert;
+
+/**
+ * Checks if a service adapter propagates its service properties, if
+ * the adapted service properties are changed:
+ *
+ * S1Impl provides S
+ * S1Adapter adapts S1Impl(S) to S2
+ * S3 depends on S2
+ *
+ * So, when S1Impl service properties are changed, S1Adapter shall propagate
the changed properties to S3.
+ *
+ * @author <a href="mailto:[email protected]">Felix Project Team</a>
+ */
+@SuppressWarnings({"unchecked", "rawtypes"})
+public class AdapterWithPropagationTest extends TestBase {
+ public static interface S1 {}
+
+ static class S1Impl implements S1 {
+ private Ensure m_ensure;
+ public S1Impl(Ensure e) {
+ m_ensure = e;
+ }
+
+ public void start() {
+ m_ensure.step(1);
+ }
+ }
+
+ public static interface S2 {}
+
+ static class S1Adapter implements S2 {
+ private Ensure m_ensure;
+ public S1Adapter(Ensure e) {
+ m_ensure = e;
+ }
+
+ public void add(Map properties, S1 s1) {
+ Assert.assertTrue("v1".equals(properties.get("p1")));
+ Assert.assertTrue("v2overriden".equals(properties.get("p2")));
+ m_ensure.step(2);
+ }
+
+ public void change(Map properties, S1 s1) {
+ Assert.assertTrue("v1modified".equals(properties.get("p1")));
+ Assert.assertTrue("v2overriden".equals(properties.get("p2")));
+ m_ensure.step(4);
+ }
+ }
+
+ static class S3 {
+ private final Ensure m_ensure;
+
+ public S3(Ensure e) {
+ m_ensure = e;
+ }
+
+ public void add(Map properties, S2 s2) {
+ Assert.assertTrue("v1".equals(properties.get("p1")));
+ Assert.assertTrue("v2".equals(properties.get("p2"))); // s1 should
not override adapter service properties
+ m_ensure.step(3);
+ }
+
+ public void change(Map properties, S2 s2) {
+ Assert.assertTrue("v1modified".equals(properties.get("p1")));
+ Assert.assertTrue("v2".equals(properties.get("p2"))); // s1 should
not override adapter service properties
+ m_ensure.step(5);
+ }
+ }
+
+ public void testAdapterWithPropagation() {
+ DependencyManager m = getDM();
+ // helper class that ensures certain steps get executed in sequence
+ Ensure e = new Ensure();
+
+ Component s1 = component(m,
+ c -> c.autoAdd(false).impl(new
S1Impl(e)).provides(S1.class).properties(p1 -> "v1", p2 -> "v2overriden"));
+
+ Component s1Adapter = adapter(m, S1.class,
+ a->a.autoAdd(false).cb("add", "change", null).impl(new
S1Adapter(e)).provides(S2.class).properties(p2 -> "v2"));
+
+ Component s3 = component(m,
+ c -> c.autoAdd(false).impl(new S3(e)).withService(S2.class, s ->
s.cb("add", "change", null)));
+
+ m.add(s1);
+ m.add(s1Adapter);
+ m.add(s3);
+
+ e.waitForStep(3, 5000);
+
+ Hashtable s1Properties = new Hashtable();
+ s1Properties.put("p1", "v1modified");
+ s1Properties.put("p2", "v2overriden");
+ s1.setServiceProperties(s1Properties);
+
+ e.waitForStep(5, 5000);
+
+ m.clear();
+ }
+}
Added:
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/AdapterWithoutPropagationTest.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/AdapterWithoutPropagationTest.java?rev=1724333&view=auto
==============================================================================
---
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/AdapterWithoutPropagationTest.java
(added)
+++
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/AdapterWithoutPropagationTest.java
Tue Jan 12 22:45:36 2016
@@ -0,0 +1,170 @@
+/*
+ * 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.ADD;
+import static org.apache.felix.dm.builder.lambda.CB.CHG;
+import static
org.apache.felix.dm.builder.lambda.DependencyActivatorBase.adapter;
+import static
org.apache.felix.dm.builder.lambda.DependencyActivatorBase.component;
+
+import java.util.Dictionary;
+import java.util.Hashtable;
+
+import org.apache.felix.dm.Component;
+import org.apache.felix.dm.DependencyManager;
+import org.junit.Assert;
+import org.osgi.framework.ServiceRegistration;
+
+/**
+ * @author <a href="mailto:[email protected]">Felix Project Team</a>
+ */
+public class AdapterWithoutPropagationTest extends TestBase {
+
+ public void testAdapterNoPropagate() {
+ DependencyManager m = getDM();
+ // helper class that ensures certain steps get executed in sequence
+ Ensure e = new Ensure();
+
+ // The provider has a "foo=bar" property
+ ServiceProvider serviceProvider = new ServiceProvider(e);
+ Component provider = component(m,
+ c ->
c.autoAdd(false).provides(OriginalService.class).properties(foo ->
"bar").impl(serviceProvider));
+
+ // The Adapter will see the "foo=bar" property from the adaptee
+ Component adapter = adapter(m, OriginalService.class,
+ a -> a.autoAdd(false).propagate(false).cb("set", "change",
null).provides(AdaptedService.class).impl(new ServiceAdapter(e)));
+
+ // The consumer depends on the AdaptedService, but won't see foo=bar
property from the adaptee
+ Component consumer = component(m,
+ c -> c.autoAdd(false).impl(new
ServiceConsumer(e)).withService(AdaptedService.class, b -> b.cb("set",
"change", null)));
+
+ // add the provider and the adapter
+ m.add(provider);
+ m.add(adapter);
+ // Checks if the adapter has been started and has seen the adaptee
properties
+ e.waitForStep(1, 5000);
+
+ // add a consumer that must not see the adaptee service properties
+ m.add(consumer);
+ e.waitForStep(2, 5000);
+
+ // change the service properties of the provider, and check that the
adapter callback instance is caled.
+ serviceProvider.changeServiceProperties();
+ e.waitForStep(3, 5000);
+
+ // cleanup
+ m.clear();
+ }
+
+ public void testAdapterNoPropagateRef() {
+ DependencyManager m = getDM();
+ // helper class that ensures certain steps get executed in sequence
+ Ensure e = new Ensure();
+
+ // The provider has a "foo=bar" property
+ ServiceProvider serviceProvider = new ServiceProvider(e);
+ Component provider = component(m, c -> c
+ .autoAdd(false).provides(OriginalService.class).properties(foo ->
"bar").impl(serviceProvider));
+
+ // The Adapter will see the "foo=bar" property from the adaptee
+ ServiceAdapter saimpl = new ServiceAdapter(e);
+ Component adapter = adapter(m, OriginalService.class, a -> a
+ .autoAdd(false).propagate(false).impl(saimpl)
+ .cbi(ADD, saimpl::set).cbi(CHG,
saimpl::change).provides(AdaptedService.class));
+
+ // The consumer depends on the AdaptedService, but won't see foo=bar
property from the adaptee
+ ServiceConsumer scimpl = new ServiceConsumer(e);
+ Component consumer = component(m, c -> c
+ .autoAdd(false).impl(scimpl).withService(AdaptedService.class, s
-> s.cbi(ADD, scimpl::set).cbi(CHG, scimpl::change)));
+
+ // add the provider and the adapter
+ m.add(provider);
+ m.add(adapter);
+ // Checks if the adapter has been started and has seen the adaptee
properties
+ e.waitForStep(1, 5000);
+
+ // add a consumer that must not see the adaptee service properties
+ m.add(consumer);
+ e.waitForStep(2, 5000);
+
+ // change the service properties of the provider, and check that the
adapter callback instance is caled.
+ serviceProvider.changeServiceProperties();
+ e.waitForStep(3, 5000);
+
+ // cleanup
+ m.clear();
+ }
+
+ static interface OriginalService {
+ }
+
+ static interface AdaptedService {
+ }
+
+ static class ServiceProvider implements OriginalService {
+ private volatile ServiceRegistration m_registration; // auto injected
when started.
+ public ServiceProvider(Ensure e) {
+ }
+ public void changeServiceProperties() {
+ Hashtable<String, String> props = new Hashtable<>();
+ props.put("foo", "bar2");
+ m_registration.setProperties(props);
+ }
+ }
+
+ public static class ServiceAdapter implements AdaptedService {
+ private final Ensure m_ensure;
+
+ public ServiceAdapter(Ensure e) {
+ m_ensure = e;
+ }
+
+ public void set(OriginalService adaptee, Dictionary<String, Object>
props) {
+ Assert.assertEquals("bar", props.get("foo"));
+ m_ensure.step(1);
+ }
+
+ void change(OriginalService adapted, Dictionary<String, Object> props)
{
+ Assert.assertEquals("bar2", props.get("foo"));
+ m_ensure.step(3);
+ }
+ }
+
+ static class ServiceConsumer {
+ @SuppressWarnings("unused")
+ private volatile AdaptedService m_service;
+ private final Ensure m_ensure;
+
+ public ServiceConsumer(Ensure e) {
+ m_ensure = e;
+ }
+
+ void set(AdaptedService adapted, Dictionary<String, Object> props) {
+ Assert.assertNull(props.get("foo"));
+ m_ensure.step(2);
+ }
+
+ void change(AdaptedService adapted, Dictionary<String, Object> props) {
+ Assert.assertNull(props.get("foo"));
+ Assert.fail("Change callback should not be called");
+ }
+ }
+}
+
+