You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by pd...@apache.org on 2015/02/28 08:23:22 UTC

svn commit: r1662903 [2/4] - in /felix/sandbox/pderop/dependencymanager: ./ cnf/localrepo/ cnf/localrepo/org.apache.felix.eventadmin/ cnf/localrepo/org.apache.felix.http.api/ cnf/localrepo/org.apache.felix.http.servlet-api/ cnf/releaserepo/ org.apache....

Added: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.benchmark/src/org/apache/felix/dm/benchmark/scenario/impl/TrackImpl.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.benchmark/src/org/apache/felix/dm/benchmark/scenario/impl/TrackImpl.java?rev=1662903&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.benchmark/src/org/apache/felix/dm/benchmark/scenario/impl/TrackImpl.java (added)
+++ felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.benchmark/src/org/apache/felix/dm/benchmark/scenario/impl/TrackImpl.java Sat Feb 28 07:23:20 2015
@@ -0,0 +1,27 @@
+package org.apache.felix.dm.benchmark.scenario.impl;
+
+import org.apache.felix.dm.benchmark.controller.ScenarioController;
+import org.apache.felix.dm.benchmark.scenario.Track;
+
+/**
+ * One single music.
+ */
+public class TrackImpl implements Track {
+    final ScenarioController m_controller;
+
+    public TrackImpl(ScenarioController controller) {
+        m_controller = controller;
+    }
+
+    void start() {
+        m_controller.trackAdded(this);
+    }
+    
+    void stop() {
+        m_controller.trackRemoved(this);
+    }
+
+    @Override
+    public void play() {
+    }
+}

Added: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.benchmark/src/org/apache/felix/dm/benchmark/scenario/impl/packageinfo
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.benchmark/src/org/apache/felix/dm/benchmark/scenario/impl/packageinfo?rev=1662903&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.benchmark/src/org/apache/felix/dm/benchmark/scenario/impl/packageinfo (added)
+++ felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.benchmark/src/org/apache/felix/dm/benchmark/scenario/impl/packageinfo Sat Feb 28 07:23:20 2015
@@ -0,0 +1 @@
+version 1.0
\ No newline at end of file

Added: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.benchmark/src/org/apache/felix/dm/benchmark/scenario/packageinfo
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.benchmark/src/org/apache/felix/dm/benchmark/scenario/packageinfo?rev=1662903&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.benchmark/src/org/apache/felix/dm/benchmark/scenario/packageinfo (added)
+++ felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.benchmark/src/org/apache/felix/dm/benchmark/scenario/packageinfo Sat Feb 28 07:23:20 2015
@@ -0,0 +1 @@
+version 1.0
\ No newline at end of file

Added: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.benchmark/test/.gitignore
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.benchmark/test/.gitignore?rev=1662903&view=auto
==============================================================================
    (empty)

Added: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/.classpath
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/.classpath?rev=1662903&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/.classpath
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/.gitignore
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/.gitignore?rev=1662903&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/.gitignore (added)
+++ felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/.gitignore Sat Feb 28 07:23:20 2015
@@ -0,0 +1,3 @@
+/bin/
+/bin_test/
+/generated/

Added: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/.project
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/.project?rev=1662903&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/.project
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/README.samples
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/README.samples?rev=1662903&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/README.samples (added)
+++ felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/README.samples Sat Feb 28 07:23:20 2015
@@ -0,0 +1,28 @@
+This sub-project contains some examples using the Dependency Manager Api and annotations.
+
+To execute the samples under bndtools, click on the "org.apache.felix.dependencymanager.samples" project, 
+then Run as "Bnd OSGi Run Launcher".
+
+Each samples displays some logs using the OSGi log service. 
+Just type:
+
+  log info
+
+To see a log for a given sample (for example org.apache.felix.dependencymanager.samples.device.api), just type:
+
+  log info|grep org.apache.felix.dependencymanager.samples.device.api
+
+For more informations on each sample, please refer to each README files in the sample source directories:
+
+  ./src/org/apache/felix/dependencymanager/samples/composite/README
+  ./src/org/apache/felix/dependencymanager/samples/tpool/README
+  ./src/org/apache/felix/dependencymanager/samples/customdep/README
+  ./src/org/apache/felix/dependencymanager/samples/device/api/README
+  ./src/org/apache/felix/dependencymanager/samples/device/annot/README
+  ./src/org/apache/felix/dependencymanager/samples/hello/api/README
+  ./src/org/apache/felix/dependencymanager/samples/hello/annot/README
+  ./src/org/apache/felix/dependencymanager/samples/conf/README
+  ./src/org/apache/felix/dependencymanager/samples/compositefactory/README
+  ./src/org/apache/felix/dependencymanager/samples/dictionary/api/README
+  ./src/org/apache/felix/dependencymanager/samples/dictionary/annot/README
+

Added: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/bnd.bnd
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/bnd.bnd?rev=1662903&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/bnd.bnd (added)
+++ felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/bnd.bnd Sat Feb 28 07:23:20 2015
@@ -0,0 +1,43 @@
+Bundle-Version: 4.0.0
+-buildpath:  \
+	org.apache.felix.dependencymanager;version=latest,\
+	osgi.core;version=4.2,\
+	osgi.cmpn;version=4.2,\
+	org.apache.felix.gogo.runtime;version=latest,\
+	org.apache.felix.dependencymanager.runtime;version=latest,\
+	org.apache.felix.dependencymanager.annotation;version=latest,\
+	biz.aQute.bnd.annotation
+-runfw: org.apache.felix.framework;version='[4.4.0,4.4.0]'
+-runee: JavaSE-1.7
+-runbundles:  \
+	org.apache.felix.dependencymanager;version=latest,\
+	org.apache.felix.metatype;version=1.0.4,\
+	org.apache.felix.log;version=1.0.1,\
+	org.apache.felix.gogo.command;version=0.14.0,\
+	org.apache.felix.gogo.runtime;version=0.12.0,\
+	org.apache.felix.gogo.shell;version=0.10.0,\
+	org.apache.felix.dependencymanager.shell;version=latest,\
+	org.apache.felix.dependencymanager.runtime;version=latest,\
+	org.apache.felix.configadmin;version=1.8.0,\
+	org.apache.felix.eventadmin;version=1.4.3,\
+	biz.aQute.bndlib;version=2.3.0,\
+	org.apache.felix.webconsole;version=4.2.2,\
+	org.apache.felix.http.api;version=2.3.0,\
+	org.apache.felix.http.servlet-api;version=1.0.0,\
+	org.apache.felix.http.jetty;version=2.3.0,\
+	org.apache.felix.dependencymanager.samples.hello.api;version=latest,\
+	org.apache.felix.dependencymanager.samples.tpool;version=latest,\
+	org.apache.felix.dependencymanager.samples.conf;version=latest,\
+	org.apache.felix.dependencymanager.samples.device.api;version=latest
+-runproperties:  \
+	org.apache.felix.dependencymanager.parallel='!org.apache.felix.dependencymanager.samples.tpool, *',\
+	org.apache.felix.dependencymanager.runtime.log=warn,\
+	org.apache.felix.dependencymanager.loglevel=2,\
+	org.apache.felix.log.maxSize=100000,\
+	org.apache.felix.log.storeDebug=true
+-plugin: org.apache.felix.dm.annotation.plugin.bnd.AnnotationPlugin;log=debug;\
+		 path:=${workspace}/org.apache.felix.dependencymanager.annotation/generated/org.apache.felix.dependencymanager.annotation.jar
+
+-sub:  \
+	*.bnd
+-metatype: *
\ No newline at end of file

Added: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/composite.bnd
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/composite.bnd?rev=1662903&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/composite.bnd (added)
+++ felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/composite.bnd Sat Feb 28 07:23:20 2015
@@ -0,0 +1,3 @@
+Private-Package:  \
+	org.apache.felix.dependencymanager.samples.composite
+Bundle-Activator: org.apache.felix.dependencymanager.samples.composite.Activator
\ No newline at end of file

Added: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/compositefactory.bnd
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/compositefactory.bnd?rev=1662903&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/compositefactory.bnd (added)
+++ felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/compositefactory.bnd Sat Feb 28 07:23:20 2015
@@ -0,0 +1,3 @@
+Private-Package:  \
+	org.apache.felix.dependencymanager.samples.compositefactory
+Bundle-Activator: org.apache.felix.dependencymanager.samples.compositefactory.Activator
\ No newline at end of file

Added: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/conf.bnd
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/conf.bnd?rev=1662903&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/conf.bnd (added)
+++ felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/conf.bnd Sat Feb 28 07:23:20 2015
@@ -0,0 +1,3 @@
+Private-Package:  \
+	org.apache.felix.dependencymanager.samples.conf
+Bundle-Activator: org.apache.felix.dependencymanager.samples.conf.Activator
\ No newline at end of file

Added: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/customdep.bnd
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/customdep.bnd?rev=1662903&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/customdep.bnd (added)
+++ felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/customdep.bnd Sat Feb 28 07:23:20 2015
@@ -0,0 +1,3 @@
+Private-Package:  \
+	org.apache.felix.dependencymanager.samples.customdep
+Bundle-Activator: org.apache.felix.dependencymanager.samples.customdep.Activator
\ No newline at end of file

Added: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/device.annot.bnd
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/device.annot.bnd?rev=1662903&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/device.annot.bnd (added)
+++ felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/device.annot.bnd Sat Feb 28 07:23:20 2015
@@ -0,0 +1,2 @@
+Private-Package:  \
+	org.apache.felix.dependencymanager.samples.device.annot
\ No newline at end of file

Added: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/device.api.bnd
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/device.api.bnd?rev=1662903&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/device.api.bnd (added)
+++ felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/device.api.bnd Sat Feb 28 07:23:20 2015
@@ -0,0 +1,3 @@
+Private-Package:  \
+	org.apache.felix.dependencymanager.samples.device.api
+Bundle-Activator: org.apache.felix.dependencymanager.samples.device.api.Activator
\ No newline at end of file

Added: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/dictionary.annot.bnd
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/dictionary.annot.bnd?rev=1662903&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/dictionary.annot.bnd (added)
+++ felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/dictionary.annot.bnd Sat Feb 28 07:23:20 2015
@@ -0,0 +1,2 @@
+Private-Package:  \
+	org.apache.felix.dependencymanager.samples.dictionary.annot
\ No newline at end of file

Added: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/dictionary.api.bnd
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/dictionary.api.bnd?rev=1662903&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/dictionary.api.bnd (added)
+++ felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/dictionary.api.bnd Sat Feb 28 07:23:20 2015
@@ -0,0 +1,3 @@
+Private-Package:  \
+	org.apache.felix.dependencymanager.samples.dictionary.api
+Bundle-Activator: org.apache.felix.dependencymanager.samples.dictionary.api.Activator
\ No newline at end of file

Added: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/dynamicdep.annot.bnd
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/dynamicdep.annot.bnd?rev=1662903&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/dynamicdep.annot.bnd (added)
+++ felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/dynamicdep.annot.bnd Sat Feb 28 07:23:20 2015
@@ -0,0 +1,2 @@
+Private-Package:  \
+	org.apache.felix.dependencymanager.samples.dynamicdep.annot
\ No newline at end of file

Added: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/dynamicdep.api.bnd
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/dynamicdep.api.bnd?rev=1662903&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/dynamicdep.api.bnd (added)
+++ felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/dynamicdep.api.bnd Sat Feb 28 07:23:20 2015
@@ -0,0 +1,3 @@
+Bundle-Activator: org.apache.felix.dependencymanager.samples.dynamicdep.api.Activator
+Private-Package:  \
+	org.apache.felix.dependencymanager.samples.dynamicdep.api

Added: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/hello.annot.bnd
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/hello.annot.bnd?rev=1662903&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/hello.annot.bnd (added)
+++ felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/hello.annot.bnd Sat Feb 28 07:23:20 2015
@@ -0,0 +1,2 @@
+Private-Package:  \
+	org.apache.felix.dependencymanager.samples.hello.annot
\ No newline at end of file

Added: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/hello.api.bnd
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/hello.api.bnd?rev=1662903&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/hello.api.bnd (added)
+++ felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/hello.api.bnd Sat Feb 28 07:23:20 2015
@@ -0,0 +1,3 @@
+Private-Package:  \
+	org.apache.felix.dependencymanager.samples.hello.api
+Bundle-Activator: org.apache.felix.dependencymanager.samples.hello.api.Activator
\ No newline at end of file

Added: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/.gitignore
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/.gitignore?rev=1662903&view=auto
==============================================================================
    (empty)

Added: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/hello.annot.bnd
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/hello.annot.bnd?rev=1662903&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/hello.annot.bnd (added)
+++ felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/hello.annot.bnd Sat Feb 28 07:23:20 2015
@@ -0,0 +1,2 @@
+Private-Package:  \
+	org.apache.felix.dependencymanager.samples.hello.annot
\ No newline at end of file

Added: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/composite/Activator.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/composite/Activator.java?rev=1662903&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/composite/Activator.java (added)
+++ felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/composite/Activator.java Sat Feb 28 07:23:20 2015
@@ -0,0 +1,17 @@
+package org.apache.felix.dependencymanager.samples.composite;
+
+import org.apache.felix.dm.DependencyActivatorBase;
+import org.apache.felix.dm.DependencyManager;
+import org.osgi.framework.BundleContext;
+import org.osgi.service.log.LogService;
+
+public class Activator extends DependencyActivatorBase {
+    @Override
+    public void init(BundleContext ctx, DependencyManager m) throws Exception {
+        m.add(createComponent()
+            .setImplementation(ProviderImpl.class)
+            .setComposition("getComposition")
+            .add(createConfigurationDependency().setPid(ProviderImpl.class.getName()))
+            .add(createServiceDependency().setService(LogService.class).setRequired(true)));
+    }
+}

Added: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/composite/Provider.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/composite/Provider.java?rev=1662903&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/composite/Provider.java (added)
+++ felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/composite/Provider.java Sat Feb 28 07:23:20 2015
@@ -0,0 +1,4 @@
+package org.apache.felix.dependencymanager.samples.composite;
+
+public interface Provider {
+}

Added: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/composite/ProviderImpl.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/composite/ProviderImpl.java?rev=1662903&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/composite/ProviderImpl.java (added)
+++ felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/composite/ProviderImpl.java Sat Feb 28 07:23:20 2015
@@ -0,0 +1,31 @@
+package org.apache.felix.dependencymanager.samples.composite;
+
+import java.util.Dictionary;
+
+import org.osgi.service.log.LogService;
+
+/**
+ * This is the main implementation for our "Provider" service.
+ * This service is using a composition of two participants, which are used to provide the service
+ * (ProviderParticipant1, and ProviderParticipant2).
+ */
+public class ProviderImpl implements Provider {
+    private final ProviderParticipant1 m_participant1 = new ProviderParticipant1();
+    private final ProviderParticipant2 m_participant2 = new ProviderParticipant2();
+    private volatile LogService m_log;
+    private Dictionary<String, String> m_conf;
+
+    public void updated(Dictionary<String, String> conf) throws Exception {
+        // validate configuration and throw an exception if the properties are invalid
+        m_conf = conf;
+    }
+
+    Object[] getComposition() {
+        return new Object[] { this, m_participant1, m_participant2 };
+    }
+
+    void start() {
+        m_log.log(LogService.LOG_INFO, "ProviderImpl.start(): participants=" + m_participant1 + "," + m_participant2
+            + ", conf=" + m_conf);
+    }
+}

Added: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/composite/ProviderParticipant1.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/composite/ProviderParticipant1.java?rev=1662903&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/composite/ProviderParticipant1.java (added)
+++ felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/composite/ProviderParticipant1.java Sat Feb 28 07:23:20 2015
@@ -0,0 +1,11 @@
+package org.apache.felix.dependencymanager.samples.composite;
+
+import org.osgi.service.log.LogService;
+
+public class ProviderParticipant1 {
+    private volatile LogService m_log; // Injected
+
+    void start() {
+        m_log.log(LogService.LOG_INFO, "ProviderParticipant1.start()");
+    }
+}

Added: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/composite/ProviderParticipant2.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/composite/ProviderParticipant2.java?rev=1662903&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/composite/ProviderParticipant2.java (added)
+++ felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/composite/ProviderParticipant2.java Sat Feb 28 07:23:20 2015
@@ -0,0 +1,11 @@
+package org.apache.felix.dependencymanager.samples.composite;
+
+import org.osgi.service.log.LogService;
+
+public class ProviderParticipant2 {
+    private volatile LogService m_log; // Injected
+
+    void start() {
+        m_log.log(LogService.LOG_INFO, "ProviderParticipant2.start()");
+    }
+}

Added: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/composite/README
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/composite/README?rev=1662903&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/composite/README (added)
+++ felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/composite/README Sat Feb 28 07:23:20 2015
@@ -0,0 +1,6 @@
+This sample is an example usage of DM composite components. A composite component is implemented
+using a composition of multiple object instances, which are used to implement a given complex
+service. Here, we define a "Provider" service, which is implemented by three object instances:
+ProviderImpl, ProviderParticipant1, ProviderParticipant2.
+
+Dependencies are injected in all objects being part of the composition.

Added: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/compositefactory/Activator.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/compositefactory/Activator.java?rev=1662903&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/compositefactory/Activator.java (added)
+++ felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/compositefactory/Activator.java Sat Feb 28 07:23:20 2015
@@ -0,0 +1,20 @@
+package org.apache.felix.dependencymanager.samples.compositefactory;
+
+import org.apache.felix.dm.DependencyActivatorBase;
+import org.apache.felix.dm.DependencyManager;
+import org.osgi.framework.BundleContext;
+import org.osgi.service.log.LogService;
+
+public class Activator extends DependencyActivatorBase {
+    @Override
+    public void init(BundleContext ctx, DependencyManager m) throws Exception {
+        CompositionManager compositionMngr = new CompositionManager();
+        m.add(createComponent()
+            .setFactory(compositionMngr, "create")
+            .setComposition(compositionMngr, "getComposition")
+            .add(createConfigurationDependency()
+                .setPid(CompositionManager.class.getName())
+                .setCallback(compositionMngr, "updated"))
+            .add(createServiceDependency().setService(LogService.class).setRequired(true)));
+    }
+}

Added: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/compositefactory/CompositionManager.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/compositefactory/CompositionManager.java?rev=1662903&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/compositefactory/CompositionManager.java (added)
+++ felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/compositefactory/CompositionManager.java Sat Feb 28 07:23:20 2015
@@ -0,0 +1,37 @@
+package org.apache.felix.dependencymanager.samples.compositefactory;
+
+import java.util.Dictionary;
+
+/**
+ * Pojo used to create all the objects composition used to implements the "Provider" Service.
+ * The manager is using a Configuration injected by Config Admin, in order to configure the 
+ * various objects being part of the "Provider" service implementation.
+ */
+public class CompositionManager {
+    private ProviderParticipant1 m_participant1;
+    private ProviderParticipant2 m_participant2;
+    private ProviderImpl m_providerImpl;
+    private Dictionary<String, String> m_conf;
+
+    public void updated(Dictionary<String, String> conf) throws Exception {
+        // validate configuration and throw an exception if the properties are invalid
+        m_conf = conf;
+    }
+
+    /**
+     * Builds the composition of objects used to implement the "Provider" service.
+     * The Configuration injected by Config Admin will be used to configure the components
+     * @return The "main" object providing the "Provider" service.
+     */
+    Object create() {
+        // Here, we can instantiate our object composition and configure them using the injected Configuration ...
+        m_participant1 = new ProviderParticipant1(); // possibly configure this object using our configuration
+        m_participant2 = new ProviderParticipant2(); // possibly configure this object using our configuration
+        m_providerImpl = new ProviderImpl(m_participant1, m_participant2);
+        return m_providerImpl; // Main object implementing the Provider service
+    }
+
+    Object[] getComposition() {
+        return new Object[] { m_providerImpl, m_participant1, m_participant2 };
+    }
+}

Added: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/compositefactory/Provider.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/compositefactory/Provider.java?rev=1662903&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/compositefactory/Provider.java (added)
+++ felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/compositefactory/Provider.java Sat Feb 28 07:23:20 2015
@@ -0,0 +1,5 @@
+package org.apache.felix.dependencymanager.samples.compositefactory;
+
+public interface Provider {
+
+}

Added: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/compositefactory/ProviderImpl.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/compositefactory/ProviderImpl.java?rev=1662903&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/compositefactory/ProviderImpl.java (added)
+++ felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/compositefactory/ProviderImpl.java Sat Feb 28 07:23:20 2015
@@ -0,0 +1,26 @@
+package org.apache.felix.dependencymanager.samples.compositefactory;
+
+import org.osgi.service.log.LogService;
+
+/**
+ * This is the main implementation for our "Provider" service.
+ * This service is using a composition of two participants, which are used to provide the service
+ * (ProviderParticipant1, and ProviderParticipant2).
+ * 
+ * This class is instantiated by the CompositionManager class.
+ */
+public class ProviderImpl implements Provider {
+    private final ProviderParticipant1 m_participant1;
+    private final ProviderParticipant2 m_participant2;
+
+    private volatile LogService m_log; // Injected
+
+    ProviderImpl(ProviderParticipant1 participant1, ProviderParticipant2 participant2) {
+        m_participant1 = participant1;
+        m_participant2 = participant2;
+    }
+
+    void start() {
+        m_log.log(LogService.LOG_INFO, "ProviderImpl.start(): participants=" + m_participant1 + "," + m_participant2);
+    }
+}

Added: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/compositefactory/ProviderParticipant1.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/compositefactory/ProviderParticipant1.java?rev=1662903&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/compositefactory/ProviderParticipant1.java (added)
+++ felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/compositefactory/ProviderParticipant1.java Sat Feb 28 07:23:20 2015
@@ -0,0 +1,11 @@
+package org.apache.felix.dependencymanager.samples.compositefactory;
+
+import org.osgi.service.log.LogService;
+
+public class ProviderParticipant1 {
+    private volatile LogService m_log; // Injected
+
+    void start() {
+        m_log.log(LogService.LOG_INFO, "ProviderParticipant1.start()");
+    }
+}

Added: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/compositefactory/ProviderParticipant2.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/compositefactory/ProviderParticipant2.java?rev=1662903&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/compositefactory/ProviderParticipant2.java (added)
+++ felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/compositefactory/ProviderParticipant2.java Sat Feb 28 07:23:20 2015
@@ -0,0 +1,11 @@
+package org.apache.felix.dependencymanager.samples.compositefactory;
+
+import org.osgi.service.log.LogService;
+
+public class ProviderParticipant2 {
+    private volatile LogService m_log; // Injected
+
+    void start() {
+        m_log.log(LogService.LOG_INFO, "ProviderParticipant2.start()");
+    }
+}

Added: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/compositefactory/README
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/compositefactory/README?rev=1662903&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/compositefactory/README (added)
+++ felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/compositefactory/README Sat Feb 28 07:23:20 2015
@@ -0,0 +1,9 @@
+This Activator is an example usage of DM composite components. A composite component is implemented
+using a composition of multiple object instances, which are used to implement a given service. 
+
+The sample also uses a Factory approach in order to instantiate the composition of objects: A
+"CompositionManager" is first injected with a Configuration that can be possibly be used to create
+and configure all the composites.
+
+Dependencies are injected in all objects in the composition.
+

Added: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/conf/Activator.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/conf/Activator.java?rev=1662903&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/conf/Activator.java (added)
+++ felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/conf/Activator.java Sat Feb 28 07:23:20 2015
@@ -0,0 +1,17 @@
+package org.apache.felix.dependencymanager.samples.conf;
+
+import org.apache.felix.dm.DependencyActivatorBase;
+import org.apache.felix.dm.DependencyManager;
+import org.osgi.framework.BundleContext;
+import org.osgi.service.cm.ConfigurationAdmin;
+import org.osgi.service.log.LogService;
+
+public class Activator extends DependencyActivatorBase {
+    @Override
+    public void init(BundleContext context, DependencyManager dm) throws Exception {        
+        dm.add(createComponent()
+            .setImplementation(Configurator.class)
+            .add(createServiceDependency().setService(LogService.class).setRequired(true))
+            .add(createServiceDependency().setService(ConfigurationAdmin.class).setRequired(true)));
+    }
+}

Added: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/conf/Configurator.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/conf/Configurator.java?rev=1662903&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/conf/Configurator.java (added)
+++ felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/conf/Configurator.java Sat Feb 28 07:23:20 2015
@@ -0,0 +1,58 @@
+package org.apache.felix.dependencymanager.samples.conf;
+
+import java.io.IOException;
+import java.util.Hashtable;
+
+import org.osgi.service.cm.Configuration;
+import org.osgi.service.cm.ConfigurationAdmin;
+import org.osgi.service.log.LogService;
+
+/**
+ * Configurator class used to inject configuration into Configuration Admin Service.
+ * 
+ * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
+ */
+public class Configurator {
+    private volatile ConfigurationAdmin m_ca;
+    volatile Configuration m_serviceConsumerConf;
+    volatile Configuration m_serviceConsumerAnnotConf;
+    volatile LogService m_log;
+    
+    public void start() {
+        try {
+            System.out.println("Configuring sample components ... please consult log service messages for each sample you want to play with.");
+            System.out.println("For example: \"log info|grep org.apache.felix.dependencymanager.samples.device.api\"");
+            // Provide configuration to the hello.ServiceConsumer component
+            m_serviceConsumerConf = m_ca.getConfiguration("org.apache.felix.dependencymanager.samples.hello.api.ServiceConsumer", null);
+            Hashtable<String, String> props = new Hashtable<>();
+            props.put("key", "value");
+            m_serviceConsumerConf.update(props);
+            
+            // Provide configuration to the hello.annot.ServiceConsumer component
+            m_serviceConsumerAnnotConf = m_ca.getConfiguration("org.apache.felix.dependencymanager.samples.hello.annot.ServiceConsumer", null);
+            props = new Hashtable<>();
+            props.put("key", "value");
+            m_serviceConsumerAnnotConf.update(props);
+            
+            // Provide configuration to the composite component
+            m_serviceConsumerAnnotConf = m_ca.getConfiguration("org.apache.felix.dependencymanager.samples.composite.ProviderImpl", null);
+            props = new Hashtable<>();
+            props.put("key", "value");
+            m_serviceConsumerAnnotConf.update(props);
+
+            // Provide configuration to the compositefactory component
+            m_serviceConsumerAnnotConf = m_ca.getConfiguration("org.apache.felix.dependencymanager.samples.compositefactory.CompositionManager", null);
+            props = new Hashtable<>();
+            props.put("key", "value");
+            m_serviceConsumerAnnotConf.update(props);            
+        }
+        catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+    
+    public void destroy() throws IOException {
+    	m_serviceConsumerConf.delete();
+        m_serviceConsumerAnnotConf.delete();
+    }
+}

Added: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/conf/README
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/conf/README?rev=1662903&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/conf/README (added)
+++ felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/conf/README Sat Feb 28 07:23:20 2015
@@ -0,0 +1,2 @@
+This sample defines a component that is used to inject configuration into the Configuration Admin
+service, in order to configure other components declared in the various samples.

Added: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/customdep/Activator.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/customdep/Activator.java?rev=1662903&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/customdep/Activator.java (added)
+++ felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/customdep/Activator.java Sat Feb 28 07:23:20 2015
@@ -0,0 +1,20 @@
+package org.apache.felix.dependencymanager.samples.customdep;
+
+import org.apache.felix.dm.DependencyActivatorBase;
+import org.apache.felix.dm.DependencyManager;
+import org.osgi.framework.BundleContext;
+import org.osgi.service.log.LogService;
+
+public class Activator extends DependencyActivatorBase {    
+    PathDependency createPathDependency(String path) {
+        return new PathDependencyImpl(path);
+    }
+    
+    @Override
+    public void init(BundleContext context, DependencyManager m) throws Exception {
+        m.add(createComponent()
+            .setImplementation(PathTracker.class)
+            .add(createServiceDependency().setService(LogService.class).setRequired(true))
+            .add(createPathDependency("/tmp").setCallbacks("add", "change", "remove").setRequired(true)));
+    }
+}

Added: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/customdep/PathDependency.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/customdep/PathDependency.java?rev=1662903&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/customdep/PathDependency.java (added)
+++ felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/customdep/PathDependency.java Sat Feb 28 07:23:20 2015
@@ -0,0 +1,13 @@
+package org.apache.felix.dependencymanager.samples.customdep;
+
+import org.apache.felix.dm.Dependency;
+
+/**
+ * A custom Dependency Manager Path Dependency that can track a path directory.
+ * When a file is added or removed from the path dir, then the component is called
+ * in the corresponding add/remove callback.
+ */
+public interface PathDependency extends Dependency {
+    PathDependency setRequired(boolean required);
+    PathDependency setCallbacks(String add, String change, String remove);
+}

Added: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/customdep/PathDependencyImpl.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/customdep/PathDependencyImpl.java?rev=1662903&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/customdep/PathDependencyImpl.java (added)
+++ felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/customdep/PathDependencyImpl.java Sat Feb 28 07:23:20 2015
@@ -0,0 +1,167 @@
+package org.apache.felix.dependencymanager.samples.customdep;
+
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.StandardWatchEventKinds;
+import java.nio.file.WatchEvent;
+import java.nio.file.WatchEvent.Kind;
+import java.nio.file.WatchKey;
+import java.nio.file.WatchService;
+import java.util.List;
+
+import org.apache.felix.dm.context.AbstractDependency;
+import org.apache.felix.dm.context.DependencyContext;
+import org.apache.felix.dm.context.Event;
+import org.apache.felix.dm.context.EventType;
+
+/**
+ * This is our own "path" Dependency Manager Dependency, which can track the presence of files in a given path dir.
+ * Every DM custom dependency must implement the DependencyContext interface, but we extends the AbstractDependency 
+ * which already implements most of the DependencyContext methods.
+ * 
+ */
+public class PathDependencyImpl extends AbstractDependency<PathDependencyImpl> implements PathDependency, Runnable {
+    private final String m_path;
+    private volatile Thread m_thread;
+
+    /**
+     * Creates a new custom DM "path" dependency.
+     * @param path the directory to watch for
+     */
+    public PathDependencyImpl(String path) {
+        super.setRequired(true);
+        m_path = path;
+    }
+    
+    /**
+     * Create a new PathDependency from an existing prototype.
+     * @param prototype the existing PathDependency.
+     */
+    public PathDependencyImpl(PathDependencyImpl prototype) {
+        super(prototype);
+        m_path = prototype.m_path;
+    }
+
+    // ---------- DependencyContext interface ----------
+
+    @Override
+    public DependencyContext createCopy() {
+        return new PathDependencyImpl(this);
+    }
+    
+    @Override
+    public Class<?> getAutoConfigType() {
+        return null; // we don't support auto config mode
+    }
+
+    @Override
+    public void start() {
+        m_thread = new Thread(this);
+        m_thread.start();
+        super.start();
+    }
+
+    @Override   
+    public void stop() {
+        m_thread.interrupt();
+        super.stop();
+    }
+    
+    @Override   
+    public void invokeCallback(EventType type, Event ...events) {
+        switch (type) {
+        case ADDED:   
+            if (m_add != null) {
+                invoke(m_add, events[0], getInstances());
+            }
+            break;
+        case CHANGED:
+            if (m_change != null) {
+                invoke(m_change, events[0], getInstances());
+            }
+            break;
+        case REMOVED:
+            if (m_remove != null) {
+                invoke(m_remove, events[0], getInstances());
+            }
+            break;
+        default:
+            // We don't support other kind of callbacks.
+            break;
+        }
+    }
+        
+    // ---------- ComponentDependencyDeclaration interface -----------
+    
+    /**
+     * Returns the name of this dependency (a generic name with optional info separated by spaces).
+     * The DM Shell will use this method when displaying the dependency
+     **/
+    @Override
+    public String getSimpleName() {
+        return m_path;
+    }
+
+    /**
+     * Returns the name of the type of this dependency. Used by the DM shell when displaying the dependency.
+     **/
+    @Override
+    public String getType() {
+        return "path";
+    }
+
+    /**
+     * Our start method fires a thread and this is our run method, which is watching for a given directory path
+     */    
+    public void run() {
+        Path myDir = Paths.get(m_path);
+
+        try {
+            WatchService watcher = myDir.getFileSystem().newWatchService();
+            myDir.register(watcher, StandardWatchEventKinds.ENTRY_CREATE, StandardWatchEventKinds.ENTRY_MODIFY,
+                StandardWatchEventKinds.ENTRY_DELETE);
+            while (! Thread.currentThread().isInterrupted()) {
+				WatchKey watckKey = watcher.take();
+
+				List<WatchEvent<?>> events = watckKey.pollEvents();
+
+				for (@SuppressWarnings("rawtypes") WatchEvent event : events) {
+					final Kind<?> kind = event.kind();
+					if (StandardWatchEventKinds.OVERFLOW == kind) {
+						continue;
+					}
+					if (StandardWatchEventKinds.ENTRY_CREATE == kind) {
+					    // Notify the component implementation context that a file has been created.
+					    // Later, the component will call our invokeAdd method in order to inject the file
+					    // in the component instance
+				        m_component.handleEvent(this, EventType.ADDED, new Event(event.context().toString()));
+					} else if (StandardWatchEventKinds.ENTRY_MODIFY == kind) {
+					    // Notify the component implementation context that a file has changed.
+                        // Later, the component will call our invokeChange method in order to call our component "change" callback
+                        m_component.handleEvent(this, EventType.CHANGED, new Event(event.context().toString()));
+                    } else if (StandardWatchEventKinds.ENTRY_DELETE == kind) {
+					    // Notify the component implementation context that a file has been removed.
+					    // Later, the component will call our invokeRemove method in order to call our component "remove" callback
+					    m_component.handleEvent(this, EventType.REMOVED, new Event(event.context().toString()));
+					}
+				}
+				
+				watckKey.reset();
+            }
+        } catch (Throwable e) {
+            m_component.getLogger().err("path dependency exception", e);
+        }
+    }
+
+    /**
+     * Invoke either the "add" or "remove" callback of the component instance(s).
+     */
+    private void invoke(String method, Event e, Object[] instances) {
+        // specific for this type of dependency
+        m_component.invokeCallbackMethod(instances, method, 
+            new Class[][] { {String.class}, 
+                            {}}, 
+            new Object[][] { { e.getEvent() }, 
+                            {}});
+    }
+}
\ No newline at end of file

Added: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/customdep/PathTracker.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/customdep/PathTracker.java?rev=1662903&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/customdep/PathTracker.java (added)
+++ felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/customdep/PathTracker.java Sat Feb 28 07:23:20 2015
@@ -0,0 +1,27 @@
+package org.apache.felix.dependencymanager.samples.customdep;
+
+import org.osgi.service.log.LogService;
+
+public class PathTracker {
+    volatile LogService logService;
+    
+    void start() {
+        logService.log(LogService.LOG_INFO, "PathTracker.start");
+    }
+    
+    void stop() {
+        logService.log(LogService.LOG_INFO, "PathTracker.stop");
+    }
+
+    void add(String path) {
+        logService.log(LogService.LOG_INFO, "PathTracker.add: " + path);
+    }
+    
+    void change(String path) {
+        logService.log(LogService.LOG_INFO, "PathTracker.change: " + path);
+    }
+
+    void remove(String path) {
+        logService.log(LogService.LOG_INFO, "PathTracker.remove: " + path);
+    }
+}

Added: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/customdep/README
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/customdep/README?rev=1662903&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/customdep/README (added)
+++ felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/customdep/README Sat Feb 28 07:23:20 2015
@@ -0,0 +1,4 @@
+This directory contains an example of a custom dependency (PathDependency).
+This dependency tracks all created files in /tmp and injects them in the PathTracker.add(String path) method ...
+
+The PathDependendency is a low level DM example, but shows how to create any custom dependencies. 
\ No newline at end of file

Added: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/annot/Device.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/annot/Device.java?rev=1662903&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/annot/Device.java (added)
+++ felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/annot/Device.java Sat Feb 28 07:23:20 2015
@@ -0,0 +1,5 @@
+package org.apache.felix.dependencymanager.samples.device.annot;
+
+public interface Device {
+    int getDeviceId();
+}

Added: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/annot/DeviceAccess.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/annot/DeviceAccess.java?rev=1662903&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/annot/DeviceAccess.java (added)
+++ felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/annot/DeviceAccess.java Sat Feb 28 07:23:20 2015
@@ -0,0 +1,7 @@
+package org.apache.felix.dependencymanager.samples.device.annot;
+
+public interface DeviceAccess {
+    Device getDevice();
+
+    DeviceParameter getDeviceParameter();
+}

Added: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/annot/DeviceAccessConsumer.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/annot/DeviceAccessConsumer.java?rev=1662903&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/annot/DeviceAccessConsumer.java (added)
+++ felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/annot/DeviceAccessConsumer.java Sat Feb 28 07:23:20 2015
@@ -0,0 +1,22 @@
+package org.apache.felix.dependencymanager.samples.device.annot;
+
+import java.util.Map;
+
+import org.apache.felix.dm.annotation.api.Component;
+import org.apache.felix.dm.annotation.api.ServiceDependency;
+import org.osgi.service.log.LogService;
+
+@Component
+public class DeviceAccessConsumer {
+    @ServiceDependency
+    volatile LogService log;
+    
+    // Injected afer all required dependencies have been injected (including our logger)
+    @ServiceDependency(required=false)
+    void add(Map<String, Object> props, DeviceAccess deviceAccess) {
+        log.log(LogService.LOG_INFO, "Handling device access: id=" + props.get("device.id") 
+            + "\n\t device=" + deviceAccess.getDevice() 
+            + "\n\t device parameter=" + deviceAccess.getDeviceParameter()
+            + "\n\t device access properties=" + props);
+    }
+}

Added: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/annot/DeviceAccessImpl.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/annot/DeviceAccessImpl.java?rev=1662903&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/annot/DeviceAccessImpl.java (added)
+++ felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/annot/DeviceAccessImpl.java Sat Feb 28 07:23:20 2015
@@ -0,0 +1,51 @@
+package org.apache.felix.dependencymanager.samples.device.annot;
+
+import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.Map;
+
+import org.apache.felix.dm.annotation.api.AdapterService;
+import org.apache.felix.dm.annotation.api.Init;
+import org.apache.felix.dm.annotation.api.ServiceDependency;
+import org.apache.felix.dm.annotation.api.Start;
+import org.osgi.service.log.LogService;
+
+@AdapterService(adapteeService = Device.class)
+public class DeviceAccessImpl implements DeviceAccess {
+    volatile Device device;
+
+    @ServiceDependency(name = "deviceparam")
+    volatile DeviceParameter deviceParameter;
+
+    @ServiceDependency
+    volatile LogService log;
+
+    @Init
+    Map<String, String> init() {
+        log.log(LogService.LOG_INFO, "DeviceAccessImpl.init: device id=" + device.getDeviceId());
+        // Dynamically configure our "deviceparam" dependency, using the already injected device service.
+        Map<String, String> filters = new HashMap<>();
+        filters.put("deviceparam.filter", "(device.id=" + device.getDeviceId() + ")");
+        filters.put("deviceparam.required", "true");
+        return filters;
+    }
+
+    @Start
+    Map<?, ?> start() {
+        log.log(LogService.LOG_INFO, "DeviceAccessImpl.start");
+        // Dynamically add a service property, using the device.id
+        Map<String, Object> props = new Hashtable<>();
+        props.put("device.access.id", device.getDeviceId());
+        return props;
+    }
+
+    @Override
+    public Device getDevice() {
+        return device;
+    }
+
+    @Override
+    public DeviceParameter getDeviceParameter() {
+        return deviceParameter;
+    }
+}

Added: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/annot/DeviceAndParameterFactory.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/annot/DeviceAndParameterFactory.java?rev=1662903&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/annot/DeviceAndParameterFactory.java (added)
+++ felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/annot/DeviceAndParameterFactory.java Sat Feb 28 07:23:20 2015
@@ -0,0 +1,46 @@
+package org.apache.felix.dependencymanager.samples.device.annot;
+
+import java.util.Dictionary;
+import java.util.Hashtable;
+
+import org.apache.felix.dm.annotation.api.Component;
+import org.apache.felix.dm.annotation.api.ServiceDependency;
+import org.apache.felix.dm.annotation.api.Start;
+import org.apache.felix.dm.runtime.api.ComponentFactory;
+import org.osgi.service.log.LogService;
+
+/**
+ * Component used to instantiate Device and DeviceParameter services, using DM annotation "factory set".
+ * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
+ */
+@Component
+public class DeviceAndParameterFactory {
+    @ServiceDependency(filter = "(" + Component.FACTORY_NAME + "=Device)")
+    volatile ComponentFactory m_deviceFactory;
+
+    @ServiceDependency(filter = "(" + Component.FACTORY_NAME + "=DeviceParameter)")
+    volatile ComponentFactory m_deviceParameterFactory;
+
+    @ServiceDependency
+    volatile LogService log;
+
+    @Start
+    public void start() {
+        log.log(LogService.LOG_INFO, "DeviceAndParameterFactory.start");
+        for (int i = 0; i < 2; i++) {
+            createDeviceAndParameter(i);
+        }
+    }
+
+    private void createDeviceAndParameter(int id) {
+        log.log(LogService.LOG_INFO, "DeviceAndParameterFactory: creating Device/DeviceParameter with id=" + id);
+
+        Dictionary<String, Object> device = new Hashtable<>();
+        device.put("device.id", new Integer(id));
+        m_deviceFactory.newInstance(device);
+
+        Dictionary<String, Object> param = new Hashtable<>();
+        param.put("device.id", new Integer(id));
+        m_deviceParameterFactory.newInstance(param);
+    }
+}

Added: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/annot/DeviceImpl.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/annot/DeviceImpl.java?rev=1662903&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/annot/DeviceImpl.java (added)
+++ felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/annot/DeviceImpl.java Sat Feb 28 07:23:20 2015
@@ -0,0 +1,19 @@
+package org.apache.felix.dependencymanager.samples.device.annot;
+
+import java.util.Dictionary;
+
+import org.apache.felix.dm.annotation.api.Component;
+
+@Component(factoryName = "Device", factoryConfigure = "configure")
+public class DeviceImpl implements Device {
+    int id;
+
+    void configure(Dictionary<String, Object> configuration) {
+        this.id = (Integer) configuration.get("device.id");
+    }
+
+    @Override
+    public int getDeviceId() {
+        return id;
+    }
+}

Added: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/annot/DeviceParameter.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/annot/DeviceParameter.java?rev=1662903&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/annot/DeviceParameter.java (added)
+++ felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/annot/DeviceParameter.java Sat Feb 28 07:23:20 2015
@@ -0,0 +1,5 @@
+package org.apache.felix.dependencymanager.samples.device.annot;
+
+public interface DeviceParameter {
+    int getDeviceId();
+}

Added: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/annot/DeviceParameterImpl.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/annot/DeviceParameterImpl.java?rev=1662903&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/annot/DeviceParameterImpl.java (added)
+++ felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/annot/DeviceParameterImpl.java Sat Feb 28 07:23:20 2015
@@ -0,0 +1,19 @@
+package org.apache.felix.dependencymanager.samples.device.annot;
+
+import java.util.Dictionary;
+
+import org.apache.felix.dm.annotation.api.Component;
+
+@Component(factoryName = "DeviceParameter", factoryConfigure = "configure")
+public class DeviceParameterImpl implements DeviceParameter {
+    int id;
+
+    void configure(Dictionary<String, Object> configuration) {
+        this.id = (Integer) configuration.get("device.id");
+    }
+
+    @Override
+    public int getDeviceId() {
+        return id;
+    }
+}

Added: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/annot/README
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/annot/README?rev=1662903&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/annot/README (added)
+++ felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/annot/README Sat Feb 28 07:23:20 2015
@@ -0,0 +1,9 @@
+This is an example showing a Dependency Manager "Adapter" in action, using DM annotations. Two kinds
+of services are registered in the registry: some Device, and some DeviceParameter services. For each
+Device (having a given id), there is also a corresponding "DeviceParameter" service, having the same
+id.
+
+Then a "DeviceAccessImpl" adapter service is defined: it is used to "adapt" the "Device" service to
+a "DeviceAccess" service, which provides the union of each pair of Device/DeviceParameter having the
+same device.id . The adapter also dynamically propagate the service properties of the adapted Device
+service.

Added: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/api/Activator.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/api/Activator.java?rev=1662903&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/api/Activator.java (added)
+++ felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/api/Activator.java Sat Feb 28 07:23:20 2015
@@ -0,0 +1,37 @@
+package org.apache.felix.dependencymanager.samples.device.api;
+
+import java.util.Hashtable;
+
+import org.apache.felix.dm.DependencyActivatorBase;
+import org.apache.felix.dm.DependencyManager;
+import org.osgi.framework.BundleContext;
+import org.osgi.service.log.LogService;
+
+public class Activator extends DependencyActivatorBase {
+    @Override
+    public void init(BundleContext context, DependencyManager dm) throws Exception { 
+        createDeviceAndParameter(dm, 1);
+        createDeviceAndParameter(dm, 2);
+
+        dm.add(createAdapterService(Device.class, null)
+            .setImplementation(DeviceAccessImpl.class)
+            .setInterface(DeviceAccess.class.getName(), null));
+        
+        dm.add(createComponent()
+            .setImplementation(DeviceAccessConsumer.class)
+            .add(createServiceDependency().setService(LogService.class).setRequired(true))
+            .add(createServiceDependency().setService(DeviceAccess.class).setRequired(true).setCallbacks("add", null)));
+    }
+    
+    private void createDeviceAndParameter(DependencyManager dm, int id) {
+        Hashtable<String, Object> props = new Hashtable<>();
+        props.put("device.id", id);
+        dm.add(createComponent()
+          .setImplementation(new DeviceImpl(id)).setInterface(Device.class.getName(), props));
+           
+        props = new Hashtable<>();
+        props.put("device.id", id);
+        dm.add(createComponent()
+          .setImplementation(new DeviceParameterImpl(id)).setInterface(DeviceParameter.class.getName(), props));        
+    }
+}

Added: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/api/Device.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/api/Device.java?rev=1662903&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/api/Device.java (added)
+++ felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/api/Device.java Sat Feb 28 07:23:20 2015
@@ -0,0 +1,5 @@
+package org.apache.felix.dependencymanager.samples.device.api;
+
+public interface Device {
+    int getDeviceId();
+}

Added: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/api/DeviceAccess.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/api/DeviceAccess.java?rev=1662903&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/api/DeviceAccess.java (added)
+++ felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/api/DeviceAccess.java Sat Feb 28 07:23:20 2015
@@ -0,0 +1,7 @@
+package org.apache.felix.dependencymanager.samples.device.api;
+
+public interface DeviceAccess {
+    Device getDevice();
+
+    DeviceParameter getDeviceParameter();
+}

Added: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/api/DeviceAccessConsumer.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/api/DeviceAccessConsumer.java?rev=1662903&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/api/DeviceAccessConsumer.java (added)
+++ felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/api/DeviceAccessConsumer.java Sat Feb 28 07:23:20 2015
@@ -0,0 +1,16 @@
+package org.apache.felix.dependencymanager.samples.device.api;
+
+import java.util.Map;
+
+import org.osgi.service.log.LogService;
+
+public class DeviceAccessConsumer {
+    volatile LogService log;
+
+    void add(Map<String, Object> props, DeviceAccess deviceAccess) {
+        log.log(LogService.LOG_INFO, "DeviceAccessConsumer: Handling device access: id=" + props.get("device.id") 
+            + "\n\t device=" + deviceAccess.getDevice() 
+            + "\n\t device parameter=" + deviceAccess.getDeviceParameter()
+            + "\n\t device access properties=" + props);
+    }
+}

Added: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/api/DeviceAccessImpl.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/api/DeviceAccessImpl.java?rev=1662903&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/api/DeviceAccessImpl.java (added)
+++ felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/api/DeviceAccessImpl.java Sat Feb 28 07:23:20 2015
@@ -0,0 +1,36 @@
+package org.apache.felix.dependencymanager.samples.device.api;
+
+import java.util.Hashtable;
+
+import org.apache.felix.dm.Component;
+import org.apache.felix.dm.DependencyManager;
+
+public class DeviceAccessImpl implements DeviceAccess {
+    volatile Device device;
+    volatile DeviceParameter deviceParameter;
+
+    void init(Component c) {
+        // Dynamically add an extra dependency on a DeviceParameter.
+        DependencyManager dm = c.getDependencyManager();
+        c.add(dm.createServiceDependency().setService(DeviceParameter.class, "(device.id=" + device.getDeviceId() + ")").setRequired(
+            true));
+    }
+
+    void start(Component c) {
+        // Our service is starting: before being registered in the OSGi service registry,
+        // add here a service property, using the device.id.
+        Hashtable<String, Object> props = new Hashtable<>();
+        props.put("device.access.id", device.getDeviceId());
+        c.setServiceProperties(props);
+    }
+
+    @Override
+    public Device getDevice() {
+        return device;
+    }
+
+    @Override
+    public DeviceParameter getDeviceParameter() {
+        return deviceParameter;
+    }
+}

Added: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/api/DeviceImpl.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/api/DeviceImpl.java?rev=1662903&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/api/DeviceImpl.java (added)
+++ felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/api/DeviceImpl.java Sat Feb 28 07:23:20 2015
@@ -0,0 +1,14 @@
+package org.apache.felix.dependencymanager.samples.device.api;
+
+public class DeviceImpl implements Device {
+    final int id;
+
+    public DeviceImpl(int id) {
+        this.id = id;
+    }
+
+    @Override
+    public int getDeviceId() {
+        return id;
+    }
+}

Added: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/api/DeviceParameter.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/api/DeviceParameter.java?rev=1662903&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/api/DeviceParameter.java (added)
+++ felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/api/DeviceParameter.java Sat Feb 28 07:23:20 2015
@@ -0,0 +1,5 @@
+package org.apache.felix.dependencymanager.samples.device.api;
+
+public interface DeviceParameter {
+    int getDeviceId();
+}

Added: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/api/DeviceParameterImpl.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/api/DeviceParameterImpl.java?rev=1662903&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/api/DeviceParameterImpl.java (added)
+++ felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/api/DeviceParameterImpl.java Sat Feb 28 07:23:20 2015
@@ -0,0 +1,14 @@
+package org.apache.felix.dependencymanager.samples.device.api;
+
+public class DeviceParameterImpl implements DeviceParameter {
+    final int id;
+
+    public DeviceParameterImpl(int id) {
+        this.id = id;
+    }
+
+    @Override
+    public int getDeviceId() {
+        return id;
+    }
+}

Added: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/api/README
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/api/README?rev=1662903&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/api/README (added)
+++ felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/device/api/README Sat Feb 28 07:23:20 2015
@@ -0,0 +1,8 @@
+This is an example showing a Dependency Manager "Adapter" in action. Two kinds of services are
+registered in the registry: some Device, and some DeviceParameter services. For each Device (having
+a given id), there is also a corresponding "DeviceParameter" service, having the same id.
+
+Then a "DeviceAccessImpl" adapter service is defined: it is used to "adapt" the "Device" service to
+a "DeviceAccess" service, which provides the union of each pair of Device/DeviceParameter having the
+same device.id . The adapter also dynamically propagate the service properties of the adapted Device
+service.

Added: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/dictionary/annot/DictionaryAspect.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/dictionary/annot/DictionaryAspect.java?rev=1662903&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/dictionary/annot/DictionaryAspect.java (added)
+++ felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/dictionary/annot/DictionaryAspect.java Sat Feb 28 07:23:20 2015
@@ -0,0 +1,93 @@
+/*
+ * 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.dependencymanager.samples.dictionary.annot;
+
+import java.util.Dictionary;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+import org.apache.felix.dm.annotation.api.AspectService;
+import org.apache.felix.dm.annotation.api.ConfigurationDependency;
+import org.apache.felix.dm.annotation.api.ServiceDependency;
+import org.apache.felix.dm.annotation.api.Start;
+import org.osgi.service.log.LogService;
+
+import aQute.bnd.annotation.metatype.Configurable;
+
+/**
+ * This aspect applies to the English DictionaryService, and allows to decorate it with some
+ * custom English words, which are configurable from WebConsole.
+ * 
+ * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
+ */
+@AspectService(ranking = 10, filter = "(lang=en)")
+public class DictionaryAspect implements DictionaryService {
+    /**
+     * This is the service this aspect is applying to.
+     */
+    private volatile DictionaryService m_originalDictionary;
+
+    /**
+     * We store all configured words in a thread-safe data structure, because ConfigAdmin may
+     * invoke our updated method at any time.
+     */
+    private CopyOnWriteArrayList<String> m_words = new CopyOnWriteArrayList<String>();
+
+    /**
+     * We'll use the OSGi log service for logging. If no log service is available, then we'll
+     * use a NullObject.
+     */
+    @ServiceDependency(required = false)
+    private LogService m_log;
+
+    /**
+     * Defines a configuration dependency for retrieving our english custom words (by default,
+     * our PID is our full class name).
+     */
+    @ConfigurationDependency(pidClass = DictionaryAspectConfiguration.class, propagate = false)
+    protected void updated(Dictionary<String, ?> config) {
+        if (config != null) {
+            // We use the bnd "Configurable" helper in order to get an implementation for our DictionaryConfiguration interface.
+            DictionaryConfiguration cnf = Configurable.createConfigurable(
+                DictionaryConfiguration.class, config);
+            m_words.clear();
+            for (String word : cnf.words()) {
+                m_words.add(word);
+            }
+        }
+    }
+
+    /**
+     * Our Aspect Service is starting and is about to be registered in the OSGi regsitry.
+     */
+    @Start
+    protected void start() {
+        m_log.log(LogService.LOG_INFO, "Starting aspect Dictionary with words: " + m_words
+            + "; original dictionary service=" + m_originalDictionary);
+    }
+
+    /**
+     * Checks if a word is found from our custom word list. if not, delegate to the decorated
+     * dictionary.
+     */
+    public boolean checkWord(String word) {
+        m_log.log(LogService.LOG_INFO, "DictionaryAspect: checking word " + word + " (original dictionary="
+            + m_originalDictionary + ")");
+        if (m_words.contains(word)) {
+            return true;
+        }
+        return m_originalDictionary.checkWord(word);
+    }
+
+    public String toString() {
+        return "DictionaryAspect: words=" + m_words + "; original dictionary=" + m_originalDictionary;
+    }
+}