Author: pderop
Date: Wed Dec 19 14:40:48 2018
New Revision: 1849304

URL: http://svn.apache.org/viewvc?rev=1849304&view=rev
Log:
FELIX-5996: Remove generic parameter in DM Component interface

Removed:
    
felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/AbstractComponent.java
Modified:
    felix/trunk/dependencymanager/changelog.txt
    
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/api/DynamicScopedServiceTest.java
    
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/lambda/itest/DynamicScopedServiceTest.java
    
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/bnd.bnd
    
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/changelog.txt
    
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/impl/ConfigurationDependencyBuilderImpl.java
    
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/impl/FactoryPidAdapterBuilderImpl.java
    
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.runtime/bnd.bnd
    
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.runtime/changelog.txt
    
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.shell/bnd.bnd
    
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.shell/changelog.txt
    felix/trunk/dependencymanager/org.apache.felix.dependencymanager/bnd.bnd
    
felix/trunk/dependencymanager/org.apache.felix.dependencymanager/changelog.txt
    
felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/AdapterComponent.java
    
felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/AspectComponent.java
    
felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/BundleComponent.java
    
felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/Component.java
    
felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/DependencyActivatorBase.java
    
felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/DependencyManager.java
    
felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/FactoryComponent.java
    
felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/ResourceComponent.java
    
felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/context/ComponentContext.java
    
felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/context/packageinfo
    
felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/BundleAdapterImpl.java
    
felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/ComponentImpl.java
    
felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/FilterComponent.java
    
felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/ResourceAdapterImpl.java
    
felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/packageinfo
    felix/trunk/dependencymanager/release/build.gradle

Modified: felix/trunk/dependencymanager/changelog.txt
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/changelog.txt?rev=1849304&r1=1849303&r2=1849304&view=diff
==============================================================================
--- felix/trunk/dependencymanager/changelog.txt (original)
+++ felix/trunk/dependencymanager/changelog.txt Wed Dec 19 14:40:48 2018
@@ -1,3 +1,16 @@
+Release Notes - Felix - Version org.apache.felix.dependencymanager-r15
+======================================================================
+
+** List of bundles being part of the release:
+    * org.apache.felix.dependencymanager; version=4.6.0
+    * org.apache.felix.dependencymanager.shell; version=4.0.8
+    * org.apache.felix.dependencymanager.runtime; version=4.0.7
+    * org.apache.felix.dependencymanager.annotation; version=5.0.1
+    * org.apache.felix.dependencymanager.lambda; version=1.2.1
+
+** Task
+    * [FELIX-5996] - Remove generic parameter in DM Component interface
+
 Release Notes - Felix - Version org.apache.felix.dependencymanager-r14
 ======================================================================
 

Modified: 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/api/DynamicScopedServiceTest.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/api/DynamicScopedServiceTest.java?rev=1849304&r1=1849303&r2=1849304&view=diff
==============================================================================
--- 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/api/DynamicScopedServiceTest.java
 (original)
+++ 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/api/DynamicScopedServiceTest.java
 Wed Dec 19 14:40:48 2018
@@ -89,7 +89,7 @@ public class DynamicScopedServiceTest ex
             .setImplementation(new ServiceConsumer())
             
.add(m.createServiceDependency().setService(Service.class).setRequired(true).setCallbacks("bind",
 "unbind"));
         
-        Component<?> consumer2 = m.createComponent()
+        Component consumer2 = m.createComponent()
             .setImplementation(new ServiceConsumer())
             
.add(m.createServiceDependency().setService(Service.class).setRequired(true).setCallbacks("bind",
 "unbind"));
                 

Modified: 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/lambda/itest/DynamicScopedServiceTest.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/lambda/itest/DynamicScopedServiceTest.java?rev=1849304&r1=1849303&r2=1849304&view=diff
==============================================================================
--- 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/lambda/itest/DynamicScopedServiceTest.java
 (original)
+++ 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/lambda/itest/DynamicScopedServiceTest.java
 Wed Dec 19 14:40:48 2018
@@ -99,7 +99,7 @@ public class DynamicScopedServiceTest ex
             .withSvc(Service.class, svc -> 
svc.required().add("bind").remove("unbind"))
             .build();
         
-        Component<?> consumer2 = component(m)
+        Component consumer2 = component(m)
             .impl(new ServiceConsumer())
             .withSvc(Service.class, svc -> 
svc.required().add("bind").remove("unbind"))
             .build();

Modified: 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/bnd.bnd
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/bnd.bnd?rev=1849304&r1=1849303&r2=1849304&view=diff
==============================================================================
--- 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/bnd.bnd 
(original)
+++ 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/bnd.bnd 
Wed Dec 19 14:40:48 2018
@@ -16,7 +16,7 @@
 #
 javac.source:          1.8
 javac.target:          1.8
-Bundle-Version: 1.2.0
+Bundle-Version: 1.2.1
 -buildpath: \
        org.apache.felix.dependencymanager;version=latest,\
        osgi.core;version=6.0,\

Modified: 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/changelog.txt
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/changelog.txt?rev=1849304&r1=1849303&r2=1849304&view=diff
==============================================================================
--- 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/changelog.txt
 (original)
+++ 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/changelog.txt
 Wed Dec 19 14:40:48 2018
@@ -1,3 +1,13 @@
+Release Notes - Felix - Version org.apache.felix.dependencymanager-r15
+======================================================================
+
+** List of bundles being part of the release:
+    * org.apache.felix.dependencymanager; version=4.6.0
+    * org.apache.felix.dependencymanager.shell; version=4.0.8
+    * org.apache.felix.dependencymanager.runtime; version=4.0.7
+    * org.apache.felix.dependencymanager.annotation; version=5.0.1
+    * org.apache.felix.dependencymanager.lambda; version=1.2.1
+
 Release Notes - Felix - Version org.apache.felix.dependencymanager-r13
 ======================================================================
 

Modified: 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/impl/ConfigurationDependencyBuilderImpl.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/impl/ConfigurationDependencyBuilderImpl.java?rev=1849304&r1=1849303&r2=1849304&view=diff
==============================================================================
--- 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/impl/ConfigurationDependencyBuilderImpl.java
 (original)
+++ 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/impl/ConfigurationDependencyBuilderImpl.java
 Wed Dec 19 14:40:48 2018
@@ -139,7 +139,7 @@ public class ConfigurationDependencyBuil
         Class<T> componentType = Helpers.getLambdaArgType(callback, 0);
         m_pid = m_pid == null ? configClass.getName() : m_pid;
         return setComponentCallbackRef(componentType, (instance, component, 
props) -> { 
-            U configProxy = ((ComponentContext<?>) 
m_component).createConfigurationType(configClass, props);            
+            U configProxy = ((ComponentContext) 
m_component).createConfigurationType(configClass, props);            
             callback.accept((T) instance, configProxy);
         }); 
     }
@@ -149,7 +149,7 @@ public class ConfigurationDependencyBuil
         Class<T> componentType = Helpers.getLambdaArgType(callback, 0);
         m_pid = m_pid == null ? configClass.getName() : m_pid;
         return setComponentCallbackRef(componentType, (instance, component, 
props) -> { 
-            U configProxy = ((ComponentContext<?>) 
m_component).createConfigurationType(configClass, props);            
+            U configProxy = ((ComponentContext) 
m_component).createConfigurationType(configClass, props);            
             callback.accept((T) instance, configProxy, component);
         }); 
     }
@@ -171,7 +171,7 @@ public class ConfigurationDependencyBuil
     public <T> ConfigurationDependencyBuilder update(Class<T> configClass, 
InstanceCbConfiguration<T> updated) {
         m_pid = m_pid == null ? configClass.getName() : m_pid;
         return setInstanceCallbackRef((instance, component, props) -> { 
-            T configProxy = ((ComponentContext<?>) 
m_component).createConfigurationType(configClass, props);
+            T configProxy = ((ComponentContext) 
m_component).createConfigurationType(configClass, props);
             updated.accept(configProxy);
         });
     }
@@ -179,7 +179,7 @@ public class ConfigurationDependencyBuil
     public <T> ConfigurationDependencyBuilder update(Class<T> configClass, 
InstanceCbConfigurationComponent<T> updated) {
         m_pid = m_pid == null ? configClass.getName() : m_pid;
         return setInstanceCallbackRef((instance, component, props) -> { 
-            T configProxy = ((ComponentContext<?>) 
m_component).createConfigurationType(configClass, props);
+            T configProxy = ((ComponentContext) 
m_component).createConfigurationType(configClass, props);
             updated.accept(configProxy, component);
         });
     }

Modified: 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/impl/FactoryPidAdapterBuilderImpl.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/impl/FactoryPidAdapterBuilderImpl.java?rev=1849304&r1=1849303&r2=1849304&view=diff
==============================================================================
--- 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/impl/FactoryPidAdapterBuilderImpl.java
 (original)
+++ 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/impl/FactoryPidAdapterBuilderImpl.java
 Wed Dec 19 14:40:48 2018
@@ -133,7 +133,7 @@ public class FactoryPidAdapterBuilderImp
         Class<T> type = Helpers.getLambdaArgType(callback, 0);
         m_factoryPid = m_factoryPid == null ? configType.getName() : 
m_factoryPid;
         return setComponentCallbackRef(type, (instance, component, props) -> {
-            U configProxy = ((ComponentContext<?>) 
component).createConfigurationType(configType, props);            
+            U configProxy = ((ComponentContext) 
component).createConfigurationType(configType, props);            
             callback.accept((T) instance, configProxy); 
         });
     }
@@ -149,7 +149,7 @@ public class FactoryPidAdapterBuilderImp
         Class<T> type = Helpers.getLambdaArgType(callback, 0);
         m_factoryPid = m_factoryPid == null ? configType.getName() : 
m_factoryPid;
         return setComponentCallbackRef(type, (instance, component, props) -> { 
-            U configProxy = ((ComponentContext<?>) 
component).createConfigurationType(configType, props);            
+            U configProxy = ((ComponentContext) 
component).createConfigurationType(configType, props);            
             callback.accept((T) instance, configProxy, component); 
         });
     }
@@ -162,7 +162,7 @@ public class FactoryPidAdapterBuilderImp
     @Override
     public <T> FactoryPidAdapterBuilder update(Class<T> configType, 
InstanceCbConfiguration<T> callback) {
         return setInstanceCallbackRef((instance, component, props) -> { 
-            T configProxy = ((ComponentContext<?>) 
component).createConfigurationType(configType, props);            
+            T configProxy = ((ComponentContext) 
component).createConfigurationType(configType, props);            
             callback.accept(configProxy);
         });
     }
@@ -175,7 +175,7 @@ public class FactoryPidAdapterBuilderImp
     @Override
     public <T> FactoryPidAdapterBuilder update(Class<T> configType, 
InstanceCbConfigurationComponent<T> callback) {
         return setInstanceCallbackRef((instance, component, props) -> { 
-            T configProxy = ((ComponentContext<?>) 
component).createConfigurationType(configType, props);            
+            T configProxy = ((ComponentContext) 
component).createConfigurationType(configType, props);            
             callback.accept(configProxy, component);
         });
     }

Modified: 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.runtime/bnd.bnd
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.runtime/bnd.bnd?rev=1849304&r1=1849303&r2=1849304&view=diff
==============================================================================
--- 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.runtime/bnd.bnd
 (original)
+++ 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.runtime/bnd.bnd
 Wed Dec 19 14:40:48 2018
@@ -14,7 +14,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 #
-Bundle-Version: 4.0.6
+Bundle-Version: 4.0.7
 -buildpath: \
        osgi.core;version=4.2,\
        osgi.cmpn;version=4.2,\
@@ -34,5 +34,3 @@ Bundle-Category: osgi
 Bundle-License: http://www.apache.org/licenses/LICENSE-2.0.txt
 Bundle-Vendor: The Apache Software Foundation
 Bundle-ContactAddress: 
http://felix.apache.org/documentation/subprojects/apache-felix-dependency-manager.html
-# Work around used to make sure DM api is imported using proper version range 
(can be removed with bndtools 3)
-Import-Package: org.apache.felix.dm;org.apache.felix.dm.context;version="[4, 
5)", *

Modified: 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.runtime/changelog.txt
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.runtime/changelog.txt?rev=1849304&r1=1849303&r2=1849304&view=diff
==============================================================================
--- 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.runtime/changelog.txt
 (original)
+++ 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.runtime/changelog.txt
 Wed Dec 19 14:40:48 2018
@@ -1,3 +1,13 @@
+Release Notes - Felix - Version org.apache.felix.dependencymanager-r15
+======================================================================
+
+** List of bundles being part of the release:
+    * org.apache.felix.dependencymanager; version=4.6.0
+    * org.apache.felix.dependencymanager.shell; version=4.0.8
+    * org.apache.felix.dependencymanager.runtime; version=4.0.7
+    * org.apache.felix.dependencymanager.annotation; version=5.0.1
+    * org.apache.felix.dependencymanager.lambda; version=1.2.1
+
 Release Notes - Felix - Version org.apache.felix.dependencymanager-r13
 ======================================================================
 

Modified: 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.shell/bnd.bnd
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.shell/bnd.bnd?rev=1849304&r1=1849303&r2=1849304&view=diff
==============================================================================
--- 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.shell/bnd.bnd 
(original)
+++ 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.shell/bnd.bnd 
Wed Dec 19 14:40:48 2018
@@ -24,7 +24,7 @@
 Private-Package: \
        org.apache.felix.dm.shell
 Bundle-Activator:org.apache.felix.dm.shell.Activator
-Bundle-Version: 4.0.7
+Bundle-Version: 4.0.8
 Include-Resource: META-INF/=resources/,META-INF/changelog.txt=changelog.txt
 Bundle-Name: Apache Felix Dependency Manager Shell
 Bundle-Description: Gogo Shell commands for Apache Felix Dependency Manager

Modified: 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.shell/changelog.txt
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.shell/changelog.txt?rev=1849304&r1=1849303&r2=1849304&view=diff
==============================================================================
--- 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.shell/changelog.txt
 (original)
+++ 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.shell/changelog.txt
 Wed Dec 19 14:40:48 2018
@@ -1,3 +1,13 @@
+Release Notes - Felix - Version org.apache.felix.dependencymanager-r15
+======================================================================
+
+** List of bundles being part of the release:
+    * org.apache.felix.dependencymanager; version=4.6.0
+    * org.apache.felix.dependencymanager.shell; version=4.0.8
+    * org.apache.felix.dependencymanager.runtime; version=4.0.7
+    * org.apache.felix.dependencymanager.annotation; version=5.0.1
+    * org.apache.felix.dependencymanager.lambda; version=1.2.1
+
 Release Notes - Felix - Version org.apache.felix.dependencymanager-r13
 ======================================================================
 

Modified: 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager/bnd.bnd
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager/bnd.bnd?rev=1849304&r1=1849303&r2=1849304&view=diff
==============================================================================
--- felix/trunk/dependencymanager/org.apache.felix.dependencymanager/bnd.bnd 
(original)
+++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager/bnd.bnd 
Wed Dec 19 14:40:48 2018
@@ -34,7 +34,7 @@ Export-Package:  \
 Include-Resource: META-INF/=resources/,META-INF/changelog.txt=changelog.txt
 Import-Package: !org.junit,!org.mockito.*,org.osgi.framework;version="[1.8, 
2)",*
 Bundle-Activator: org.apache.felix.dm.impl.Activator
-Bundle-Version: 4.5.1
+Bundle-Version: 4.6.0
 Bundle-Name: Apache Felix Dependency Manager
 Bundle-Description: Provides dynamic service and component dependency 
management
 Bundle-License: http://www.apache.org/licenses/LICENSE-2.0.txt
@@ -46,3 +46,11 @@ Bundle-Category: osgi
        ${junit},\
        ${mockito},\
        org.objenesis;version=2.2
+       
+-fixupmessages.baselining-error-to-warning: \
+    "Baseline mismatch for package org.apache.felix.dm, MAJOR change. Current 
is 4.6.0, repo is 4.5.0...";is:=warning,\
+    "Baseline mismatch for package org.apache.felix.dm.context, MAJOR change. 
Current is 4.4.1, repo is 4.4.0...";is:=warning,\
+    "The bundle version \\(4.5.1/4.6.0\\) is too low, must be at least 
5.0.0";is:=warning
+
+
+

Modified: 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager/changelog.txt
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager/changelog.txt?rev=1849304&r1=1849303&r2=1849304&view=diff
==============================================================================
--- 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager/changelog.txt 
(original)
+++ 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager/changelog.txt 
Wed Dec 19 14:40:48 2018
@@ -1,3 +1,16 @@
+Release Notes - Felix - Version org.apache.felix.dependencymanager-r15
+======================================================================
+
+** List of bundles being part of the release:
+    * org.apache.felix.dependencymanager; version=4.6.0
+    * org.apache.felix.dependencymanager.shell; version=4.0.8
+    * org.apache.felix.dependencymanager.runtime; version=4.0.7
+    * org.apache.felix.dependencymanager.annotation; version=5.0.1
+    * org.apache.felix.dependencymanager.lambda; version=1.2.1
+
+** Task
+    * [FELIX-5996] - Remove generic parameter in DM Component interface
+
 Release Notes - Felix - Version org.apache.felix.dependencymanager-r14
 ======================================================================
 

Modified: 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/AdapterComponent.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/AdapterComponent.java?rev=1849304&r1=1849303&r2=1849304&view=diff
==============================================================================
--- 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/AdapterComponent.java
 (original)
+++ 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/AdapterComponent.java
 Wed Dec 19 14:40:48 2018
@@ -18,6 +18,10 @@
  */
 package org.apache.felix.dm;
 
+import java.util.Dictionary;
+
+import org.apache.felix.dm.Component.ServiceScope;
+
 /**
  * Interface used to configure the various parameters needed when defining 
  * a Dependency Manager adapter component.
@@ -40,7 +44,7 @@ package org.apache.felix.dm;
  * public class Activator extends DependencyActivatorBase {
  *     &Override
  *     public void init(BundleContext context, DependencyManager dm) throws 
Exception {
- *         Component adapterComponent = createAdapterComponent()
+ *         AdapterComponent adapterComponent = createAdapterComponent()
  *             .setAdaptee(HelloService.class, "(foo=bar)")
  *             .setInterface(HttpServlet.class.getName(), null)
  *             .setImplementation(HelloServlet.class);
@@ -101,8 +105,247 @@ package org.apache.felix.dm;
  * 
  * @see DependencyManager#createAdapterComponent()
  */
-public interface AdapterComponent extends Component<AdapterComponent> {
+public interface AdapterComponent extends Component {
+    
+       /**
+        * Sets the component scope.
+        * @param scope the component scope (default=SINGLETON)
+        * 
+        * @return this component
+        */
+    AdapterComponent setScope(ServiceScope scope);
     
+   /**
+     * Sets the implementation for this component. You can actually specify
+     * an instance you have instantiated manually, or a <code>Class</code>
+     * that will be instantiated using its default constructor when the
+     * required dependencies are resolved, effectively giving you a lazy
+     * instantiation mechanism.
+     * 
+     * There are four special methods that are called when found through
+     * reflection to give you life cycle management options:
+     * <ol>
+     * <li><code>init()</code> is invoked after the instance has been
+     * created and dependencies have been resolved, and can be used to
+     * initialize the internal state of the instance or even to add more
+     * dependencies based on runtime state</li>
+     * <li><code>start()</code> is invoked right before the service is 
+     * registered</li>
+     * <li><code>stop()</code> is invoked right after the service is
+     * unregistered</li>
+     * <li><code>destroy()</code> is invoked after all dependencies are
+     * removed</li>
+     * </ol>
+     * In short, this allows you to initialize your instance before it is
+     * registered, perform some post-initialization and pre-destruction code
+     * as well as final cleanup. If a method is not defined, it simply is not
+     * called, so you can decide which one(s) you need. If you need even more
+     * fine-grained control, you can register as a service state listener too.
+     * 
+     * @param implementation the implementation
+     * @return this component
+     * @see ComponentStateListener
+     */
+       AdapterComponent setImplementation(Object implementation);
+
+    /**
+     * Adds dependency(ies) to this component, atomically. If the component is 
already active or if you add
+     * dependencies from the init method, then you should add all the 
dependencies in one single add method call 
+     * (using the varargs argument), because this method may trigger component 
activation (like
+     * the ServiceTracker.open() method does).
+     * 
+     * @param dependencies the dependencies to add.
+     * @return this component
+     */
+       AdapterComponent add(Dependency ... dependencies);
+       
+       /**
+        * Removes a dependency from the component.
+        * @param d the dependency to remove
+        * @return this component
+        */
+       AdapterComponent remove(Dependency d);
+
+    /**
+     * Adds a component state listener to this component.
+     * 
+     * @param listener the state listener
+     */
+       AdapterComponent add(ComponentStateListener listener);
+
+    /**
+     * Removes a component state listener from this component.
+     * 
+     * @param listener the state listener
+     */
+       AdapterComponent remove(ComponentStateListener listener);
+
+    /**
+     * Sets the public interface under which this component should be 
registered
+     * in the OSGi service registry.
+     *  
+     * @param serviceName the name of the service interface
+     * @param properties the properties for this service
+     * @return this component
+     */
+       AdapterComponent setInterface(String serviceName, Dictionary<?,?> 
properties);
+
+    /**
+     * Sets the public interfaces under which this component should be 
registered
+     * in the OSGi service registry.
+     *  
+     * @param serviceNames the names of the service interface
+     * @param properties the properties for these services
+     * @return this component
+     */
+       AdapterComponent setInterface(String[] serviceNames, Dictionary<?, ?> 
properties);
+
+    /**
+     * Sets the public interface under which this component should be 
registered
+     * in the OSGi service registry.
+     *  
+     * @param serviceName the name of the service interface
+     * @param properties the properties for this service
+     * @return this component
+     */
+       AdapterComponent setInterface(Class<?> serviceName, Dictionary<?,?> 
properties);
+
+    /**
+     * Sets the public interfaces under which this component should be 
registered
+     * in the OSGi service registry.
+     *  
+     * @param serviceNames the names of the service interface
+     * @param properties the properties for these services
+     * @return this component
+     */
+       AdapterComponent setInterface(Class<?>[] serviceNames, Dictionary<?, ?> 
properties);
+
+       /**
+     * Configures auto configuration of injected classes in the component 
instance.
+     * The following injections are currently performed, unless you explicitly
+     * turn them off:
+     * <dl>
+     * <dt>BundleContext</dt><dd>the bundle context of the bundle</dd>
+     * <dt>ServiceRegistration</dt><dd>the service registration used to 
register your service</dd>
+     * <dt>DependencyManager</dt><dd>the dependency manager instance</dd>
+     * <dt>Component</dt><dd>the component instance of the dependency 
manager</dd>
+     * </dl>
+     * 
+     * @param clazz the class (from the list above)
+     * @param autoConfig <code>false</code> to turn off auto configuration
+     */
+       AdapterComponent setAutoConfig(Class<?> clazz, boolean autoConfig);
+
+    /**
+     * Configures auto configuration of injected classes in the component 
instance.
+     * 
+     * @param clazz the class (from the list above)
+     * @param instanceName the name of the instance to inject the class into
+     * @see #setAutoConfig(Class, boolean)
+     */
+       AdapterComponent setAutoConfig(Class<?> clazz, String instanceName);
+
+    /**
+     * Sets the service properties associated with the component. If the 
service
+     * was already registered, it will be updated.
+     * 
+     * @param serviceProperties the properties
+     */
+       AdapterComponent setServiceProperties(Dictionary<?, ?> 
serviceProperties);
+
+    /**
+     * Sets the names of the methods used as callbacks. These methods, when 
found, are
+     * invoked as part of the life cycle management of the component 
implementation. The
+     * dependency manager will look for a method of this name with the 
following signatures,
+     * in this order:
+     * <ol>
+     * <li>method(Component component)</li>
+     * <li>method()</li>
+     * </ol>
+     * 
+     * @param init the name of the init method
+     * @param start the name of the start method
+     * @param stop the name of the stop method
+     * @param destroy the name of the destroy method
+     * @return the component
+     */
+       AdapterComponent setCallbacks(String init, String start, String stop, 
String destroy);
+
+    /**
+     * Sets the names of the methods used as callbacks. These methods, when 
found, are
+     * invoked on the specified instance as part of the life cycle management 
of the component
+     * implementation.
+     * <p>
+     * See setCallbacks(String init, String start, String stop, String 
destroy) for more
+     * information on the signatures. Specifying an instance means you can 
create a manager
+     * that will be invoked whenever the life cycle of a component changes and 
this manager
+     * can then decide how to expose this life cycle to the actual component, 
offering an
+     * important indirection when developing your own component models.
+     *
+     * @return this component
+     */
+       AdapterComponent setCallbacks(Object instance, String init, String 
start, String stop, String destroy);
+
+    /**
+     * Sets the factory to use to create the implementation. You can specify
+     * both the factory class and method to invoke. The method should return
+     * the implementation, and can use any method to create it. Actually, this
+     * can be used together with <code>setComposition</code> to create a
+     * composition of instances that work together to implement a component. 
The
+     * factory itself can also be instantiated lazily by not specifying an
+     * instance, but a <code>Class</code>.
+     * 
+     * @param factory the factory instance or class
+     * @param createMethod the name of the create method
+     * @return this component
+     */
+       AdapterComponent setFactory(Object factory, String createMethod);
+
+    /**
+     * Sets the factory to use to create the implementation. You specify the
+     * method to invoke. The method should return the implementation, and can
+     * use any method to create it. Actually, this can be used together with
+     * <code>setComposition</code> to create a composition of instances that
+     * work together to implement a component.
+     * <p>
+     * Note that currently, there is no default for the factory, so please use
+     * <code>setFactory(factory, createMethod)</code> instead.
+     * 
+     * @param createMethod the name of the create method
+     * @return this component
+     */
+       AdapterComponent setFactory(String createMethod);
+
+    /**
+     * Sets the instance and method to invoke to get back all instances that
+     * are part of a composition and need dependencies injected. All of them
+     * will be searched for any of the dependencies. The method that is
+     * invoked must return an <code>Object[]</code>.
+     * 
+     * @param instance the instance that has the method
+     * @param getMethod the method to invoke
+     * @return this component
+     */
+       AdapterComponent setComposition(Object instance, String getMethod);
+
+    /**
+     * Sets the method to invoke on the service implementation to get back all
+     * instances that are part of a composition and need dependencies injected.
+     * All of them will be searched for any of the dependencies. The method 
that
+     * is invoked must return an <code>Object[]</code>.
+     * 
+     * @param getMethod the method to invoke
+     * @return this component
+     */
+       AdapterComponent setComposition(String getMethod);
+
+       /**
+        * Activate debug for this component. Informations related to 
dependency processing will be displayed
+        * using osgi log service, our to standard output if no log service is 
currently available.
+        * @param label
+        */
+       AdapterComponent setDebug(String label);
+               
     /**
      * Sets the service interface to apply the adapter to
      * @param service the service interface to apply the adapter to
@@ -144,5 +387,5 @@ public interface AdapterComponent extend
      * @return this adapter parameter instance
      */
        AdapterComponent setPropagate(boolean propagate);
-    
+
 }

Modified: 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/AspectComponent.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/AspectComponent.java?rev=1849304&r1=1849303&r2=1849304&view=diff
==============================================================================
--- 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/AspectComponent.java
 (original)
+++ 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/AspectComponent.java
 Wed Dec 19 14:40:48 2018
@@ -18,6 +18,10 @@
  */
 package org.apache.felix.dm;
 
+import java.util.Dictionary;
+
+import org.apache.felix.dm.Component.ServiceScope;
+
 /**
  * Interface used to configure the various parameters needed when defining 
  * a Dependency Manager aspect component.
@@ -38,7 +42,7 @@ package org.apache.felix.dm;
  * public class Activator extends DependencyActivatorBase {
  *     &Override
  *     public void init(BundleContext context, DependencyManager dm) throws 
Exception {
- *         Component aspectComponent = createAspectComponent()
+ *         AspectComponent aspectComponent = createAspectComponent()
  *             .setAspect(Database.class, null, 10)
  *             .setImplementation(DatabaseCache.class);
  *         dm.add(aspectComponent);
@@ -100,7 +104,246 @@ package org.apache.felix.dm;
  * (Component comp, ServiceReference old, ServiceReference replace)
  * }</pre>
  */
-public interface AspectComponent extends Component<AspectComponent> {
+public interface AspectComponent extends Component {
+
+       /**
+        * Sets the component scope.
+        * @param scope the component scope (default=SINGLETON)
+        * 
+        * @return this component
+        */
+    AspectComponent setScope(ServiceScope scope);
+    
+   /**
+     * Sets the implementation for this component. You can actually specify
+     * an instance you have instantiated manually, or a <code>Class</code>
+     * that will be instantiated using its default constructor when the
+     * required dependencies are resolved, effectively giving you a lazy
+     * instantiation mechanism.
+     * 
+     * There are four special methods that are called when found through
+     * reflection to give you life cycle management options:
+     * <ol>
+     * <li><code>init()</code> is invoked after the instance has been
+     * created and dependencies have been resolved, and can be used to
+     * initialize the internal state of the instance or even to add more
+     * dependencies based on runtime state</li>
+     * <li><code>start()</code> is invoked right before the service is 
+     * registered</li>
+     * <li><code>stop()</code> is invoked right after the service is
+     * unregistered</li>
+     * <li><code>destroy()</code> is invoked after all dependencies are
+     * removed</li>
+     * </ol>
+     * In short, this allows you to initialize your instance before it is
+     * registered, perform some post-initialization and pre-destruction code
+     * as well as final cleanup. If a method is not defined, it simply is not
+     * called, so you can decide which one(s) you need. If you need even more
+     * fine-grained control, you can register as a service state listener too.
+     * 
+     * @param implementation the implementation
+     * @return this component
+     * @see ComponentStateListener
+     */
+       AspectComponent setImplementation(Object implementation);
+
+    /**
+     * Adds dependency(ies) to this component, atomically. If the component is 
already active or if you add
+     * dependencies from the init method, then you should add all the 
dependencies in one single add method call 
+     * (using the varargs argument), because this method may trigger component 
activation (like
+     * the ServiceTracker.open() method does).
+     * 
+     * @param dependencies the dependencies to add.
+     * @return this component
+     */
+       AspectComponent add(Dependency ... dependencies);
+       
+       /**
+        * Removes a dependency from the component.
+        * @param d the dependency to remove
+        * @return this component
+        */
+       AspectComponent remove(Dependency d);
+
+    /**
+     * Adds a component state listener to this component.
+     * 
+     * @param listener the state listener
+     */
+       AspectComponent add(ComponentStateListener listener);
+
+    /**
+     * Removes a component state listener from this component.
+     * 
+     * @param listener the state listener
+     */
+       AspectComponent remove(ComponentStateListener listener);
+
+    /**
+     * Sets the public interface under which this component should be 
registered
+     * in the OSGi service registry.
+     *  
+     * @param serviceName the name of the service interface
+     * @param properties the properties for this service
+     * @return this component
+     */
+       AspectComponent setInterface(String serviceName, Dictionary<?,?> 
properties);
+
+    /**
+     * Sets the public interfaces under which this component should be 
registered
+     * in the OSGi service registry.
+     *  
+     * @param serviceNames the names of the service interface
+     * @param properties the properties for these services
+     * @return this component
+     */
+       AspectComponent setInterface(String[] serviceNames, Dictionary<?, ?> 
properties);
+
+    /**
+     * Sets the public interface under which this component should be 
registered
+     * in the OSGi service registry.
+     *  
+     * @param serviceName the name of the service interface
+     * @param properties the properties for this service
+     * @return this component
+     */
+       AspectComponent setInterface(Class<?> serviceName, Dictionary<?,?> 
properties);
+
+    /**
+     * Sets the public interfaces under which this component should be 
registered
+     * in the OSGi service registry.
+     *  
+     * @param serviceNames the names of the service interface
+     * @param properties the properties for these services
+     * @return this component
+     */
+       AspectComponent setInterface(Class<?>[] serviceNames, Dictionary<?, ?> 
properties);
+
+       /**
+     * Configures auto configuration of injected classes in the component 
instance.
+     * The following injections are currently performed, unless you explicitly
+     * turn them off:
+     * <dl>
+     * <dt>BundleContext</dt><dd>the bundle context of the bundle</dd>
+     * <dt>ServiceRegistration</dt><dd>the service registration used to 
register your service</dd>
+     * <dt>DependencyManager</dt><dd>the dependency manager instance</dd>
+     * <dt>Component</dt><dd>the component instance of the dependency 
manager</dd>
+     * </dl>
+     * 
+     * @param clazz the class (from the list above)
+     * @param autoConfig <code>false</code> to turn off auto configuration
+     */
+       AspectComponent setAutoConfig(Class<?> clazz, boolean autoConfig);
+
+    /**
+     * Configures auto configuration of injected classes in the component 
instance.
+     * 
+     * @param clazz the class (from the list above)
+     * @param instanceName the name of the instance to inject the class into
+     * @see #setAutoConfig(Class, boolean)
+     */
+       AspectComponent setAutoConfig(Class<?> clazz, String instanceName);
+
+    /**
+     * Sets the service properties associated with the component. If the 
service
+     * was already registered, it will be updated.
+     * 
+     * @param serviceProperties the properties
+     */
+       AspectComponent setServiceProperties(Dictionary<?, ?> 
serviceProperties);
+
+    /**
+     * Sets the names of the methods used as callbacks. These methods, when 
found, are
+     * invoked as part of the life cycle management of the component 
implementation. The
+     * dependency manager will look for a method of this name with the 
following signatures,
+     * in this order:
+     * <ol>
+     * <li>method(Component component)</li>
+     * <li>method()</li>
+     * </ol>
+     * 
+     * @param init the name of the init method
+     * @param start the name of the start method
+     * @param stop the name of the stop method
+     * @param destroy the name of the destroy method
+     * @return the component
+     */
+       AspectComponent setCallbacks(String init, String start, String stop, 
String destroy);
+
+    /**
+     * Sets the names of the methods used as callbacks. These methods, when 
found, are
+     * invoked on the specified instance as part of the life cycle management 
of the component
+     * implementation.
+     * <p>
+     * See setCallbacks(String init, String start, String stop, String 
destroy) for more
+     * information on the signatures. Specifying an instance means you can 
create a manager
+     * that will be invoked whenever the life cycle of a component changes and 
this manager
+     * can then decide how to expose this life cycle to the actual component, 
offering an
+     * important indirection when developing your own component models.
+     *
+     * @return this component
+     */
+       AspectComponent setCallbacks(Object instance, String init, String 
start, String stop, String destroy);
+
+    /**
+     * Sets the factory to use to create the implementation. You can specify
+     * both the factory class and method to invoke. The method should return
+     * the implementation, and can use any method to create it. Actually, this
+     * can be used together with <code>setComposition</code> to create a
+     * composition of instances that work together to implement a component. 
The
+     * factory itself can also be instantiated lazily by not specifying an
+     * instance, but a <code>Class</code>.
+     * 
+     * @param factory the factory instance or class
+     * @param createMethod the name of the create method
+     * @return this component
+     */
+       AspectComponent setFactory(Object factory, String createMethod);
+
+    /**
+     * Sets the factory to use to create the implementation. You specify the
+     * method to invoke. The method should return the implementation, and can
+     * use any method to create it. Actually, this can be used together with
+     * <code>setComposition</code> to create a composition of instances that
+     * work together to implement a component.
+     * <p>
+     * Note that currently, there is no default for the factory, so please use
+     * <code>setFactory(factory, createMethod)</code> instead.
+     * 
+     * @param createMethod the name of the create method
+     * @return this component
+     */
+       AspectComponent setFactory(String createMethod);
+
+    /**
+     * Sets the instance and method to invoke to get back all instances that
+     * are part of a composition and need dependencies injected. All of them
+     * will be searched for any of the dependencies. The method that is
+     * invoked must return an <code>Object[]</code>.
+     * 
+     * @param instance the instance that has the method
+     * @param getMethod the method to invoke
+     * @return this component
+     */
+       AspectComponent setComposition(Object instance, String getMethod);
+
+    /**
+     * Sets the method to invoke on the service implementation to get back all
+     * instances that are part of a composition and need dependencies injected.
+     * All of them will be searched for any of the dependencies. The method 
that
+     * is invoked must return an <code>Object[]</code>.
+     * 
+     * @param getMethod the method to invoke
+     * @return this component
+     */
+       AspectComponent setComposition(String getMethod);
+
+       /**
+        * Activate debug for this component. Informations related to 
dependency processing will be displayed
+        * using osgi log service, our to standard output if no log service is 
currently available.
+        * @param label
+        */
+       AspectComponent setDebug(String label);
 
     /**
      * Sets the service interface to apply the aspect to (required parameter)

Modified: 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/BundleComponent.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/BundleComponent.java?rev=1849304&r1=1849303&r2=1849304&view=diff
==============================================================================
--- 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/BundleComponent.java
 (original)
+++ 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/BundleComponent.java
 Wed Dec 19 14:40:48 2018
@@ -18,6 +18,10 @@
  */
 package org.apache.felix.dm;
 
+import java.util.Dictionary;
+
+import org.apache.felix.dm.Component.ServiceScope;
+
 /**
  * Interface used to configure the various parameters needed when defining 
  * a Dependency Manager bundle adapter component.
@@ -43,7 +47,7 @@ package org.apache.felix.dm;
  * public class Activator extends DependencyActivatorBase {
  *     &Override
  *     public void init(BundleContext context, DependencyManager dm) throws 
Exception {
- *         Component bundleComponent = createBundleComponent()
+ *         BundleComponent bundleComponent = createBundleComponent()
  *             .setFilter(Bundle.ACTIVE, "(Video-Path=*)")
  *             .setInterface(VideoPlayer.class.getName(), null)
  *             .setImplementation(VideoPlayerImpl.class);
@@ -80,9 +84,248 @@ package org.apache.felix.dm;
  * 
  * @see DependencyManager#createBundleComponent()
  */
-public interface BundleComponent extends Component<BundleComponent> {
+public interface BundleComponent extends Component {
+    
+       /**
+        * Sets the component scope.
+        * @param scope the component scope (default=SINGLETON)
+        * 
+        * @return this component
+        */
+    BundleComponent setScope(ServiceScope scope);
     
+   /**
+     * Sets the implementation for this component. You can actually specify
+     * an instance you have instantiated manually, or a <code>Class</code>
+     * that will be instantiated using its default constructor when the
+     * required dependencies are resolved, effectively giving you a lazy
+     * instantiation mechanism.
+     * 
+     * There are four special methods that are called when found through
+     * reflection to give you life cycle management options:
+     * <ol>
+     * <li><code>init()</code> is invoked after the instance has been
+     * created and dependencies have been resolved, and can be used to
+     * initialize the internal state of the instance or even to add more
+     * dependencies based on runtime state</li>
+     * <li><code>start()</code> is invoked right before the service is 
+     * registered</li>
+     * <li><code>stop()</code> is invoked right after the service is
+     * unregistered</li>
+     * <li><code>destroy()</code> is invoked after all dependencies are
+     * removed</li>
+     * </ol>
+     * In short, this allows you to initialize your instance before it is
+     * registered, perform some post-initialization and pre-destruction code
+     * as well as final cleanup. If a method is not defined, it simply is not
+     * called, so you can decide which one(s) you need. If you need even more
+     * fine-grained control, you can register as a service state listener too.
+     * 
+     * @param implementation the implementation
+     * @return this component
+     * @see ComponentStateListener
+     */
+       BundleComponent setImplementation(Object implementation);
+
+    /**
+     * Adds dependency(ies) to this component, atomically. If the component is 
already active or if you add
+     * dependencies from the init method, then you should add all the 
dependencies in one single add method call 
+     * (using the varargs argument), because this method may trigger component 
activation (like
+     * the ServiceTracker.open() method does).
+     * 
+     * @param dependencies the dependencies to add.
+     * @return this component
+     */
+       BundleComponent add(Dependency ... dependencies);
+       
+       /**
+        * Removes a dependency from the component.
+        * @param d the dependency to remove
+        * @return this component
+        */
+       BundleComponent remove(Dependency d);
+
+    /**
+     * Adds a component state listener to this component.
+     * 
+     * @param listener the state listener
+     */
+       BundleComponent add(ComponentStateListener listener);
+
+    /**
+     * Removes a component state listener from this component.
+     * 
+     * @param listener the state listener
+     */
+       BundleComponent remove(ComponentStateListener listener);
+
+    /**
+     * Sets the public interface under which this component should be 
registered
+     * in the OSGi service registry.
+     *  
+     * @param serviceName the name of the service interface
+     * @param properties the properties for this service
+     * @return this component
+     */
+       BundleComponent setInterface(String serviceName, Dictionary<?,?> 
properties);
+
+    /**
+     * Sets the public interfaces under which this component should be 
registered
+     * in the OSGi service registry.
+     *  
+     * @param serviceNames the names of the service interface
+     * @param properties the properties for these services
+     * @return this component
+     */
+       BundleComponent setInterface(String[] serviceNames, Dictionary<?, ?> 
properties);
+
+    /**
+     * Sets the public interface under which this component should be 
registered
+     * in the OSGi service registry.
+     *  
+     * @param serviceName the name of the service interface
+     * @param properties the properties for this service
+     * @return this component
+     */
+       BundleComponent setInterface(Class<?> serviceName, Dictionary<?,?> 
properties);
+
+    /**
+     * Sets the public interfaces under which this component should be 
registered
+     * in the OSGi service registry.
+     *  
+     * @param serviceNames the names of the service interface
+     * @param properties the properties for these services
+     * @return this component
+     */
+       BundleComponent setInterface(Class<?>[] serviceNames, Dictionary<?, ?> 
properties);
+
+       /**
+     * Configures auto configuration of injected classes in the component 
instance.
+     * The following injections are currently performed, unless you explicitly
+     * turn them off:
+     * <dl>
+     * <dt>BundleContext</dt><dd>the bundle context of the bundle</dd>
+     * <dt>ServiceRegistration</dt><dd>the service registration used to 
register your service</dd>
+     * <dt>DependencyManager</dt><dd>the dependency manager instance</dd>
+     * <dt>Component</dt><dd>the component instance of the dependency 
manager</dd>
+     * </dl>
+     * 
+     * @param clazz the class (from the list above)
+     * @param autoConfig <code>false</code> to turn off auto configuration
+     */
+       BundleComponent setAutoConfig(Class<?> clazz, boolean autoConfig);
+
+    /**
+     * Configures auto configuration of injected classes in the component 
instance.
+     * 
+     * @param clazz the class (from the list above)
+     * @param instanceName the name of the instance to inject the class into
+     * @see #setAutoConfig(Class, boolean)
+     */
+       BundleComponent setAutoConfig(Class<?> clazz, String instanceName);
+
+    /**
+     * Sets the service properties associated with the component. If the 
service
+     * was already registered, it will be updated.
+     * 
+     * @param serviceProperties the properties
+     */
+       BundleComponent setServiceProperties(Dictionary<?, ?> 
serviceProperties);
+
+    /**
+     * Sets the names of the methods used as callbacks. These methods, when 
found, are
+     * invoked as part of the life cycle management of the component 
implementation. The
+     * dependency manager will look for a method of this name with the 
following signatures,
+     * in this order:
+     * <ol>
+     * <li>method(Component component)</li>
+     * <li>method()</li>
+     * </ol>
+     * 
+     * @param init the name of the init method
+     * @param start the name of the start method
+     * @param stop the name of the stop method
+     * @param destroy the name of the destroy method
+     * @return the component
+     */
+       BundleComponent setCallbacks(String init, String start, String stop, 
String destroy);
+
+    /**
+     * Sets the names of the methods used as callbacks. These methods, when 
found, are
+     * invoked on the specified instance as part of the life cycle management 
of the component
+     * implementation.
+     * <p>
+     * See setCallbacks(String init, String start, String stop, String 
destroy) for more
+     * information on the signatures. Specifying an instance means you can 
create a manager
+     * that will be invoked whenever the life cycle of a component changes and 
this manager
+     * can then decide how to expose this life cycle to the actual component, 
offering an
+     * important indirection when developing your own component models.
+     *
+     * @return this component
+     */
+       BundleComponent setCallbacks(Object instance, String init, String 
start, String stop, String destroy);
+
     /**
+     * Sets the factory to use to create the implementation. You can specify
+     * both the factory class and method to invoke. The method should return
+     * the implementation, and can use any method to create it. Actually, this
+     * can be used together with <code>setComposition</code> to create a
+     * composition of instances that work together to implement a component. 
The
+     * factory itself can also be instantiated lazily by not specifying an
+     * instance, but a <code>Class</code>.
+     * 
+     * @param factory the factory instance or class
+     * @param createMethod the name of the create method
+     * @return this component
+     */
+       BundleComponent setFactory(Object factory, String createMethod);
+
+    /**
+     * Sets the factory to use to create the implementation. You specify the
+     * method to invoke. The method should return the implementation, and can
+     * use any method to create it. Actually, this can be used together with
+     * <code>setComposition</code> to create a composition of instances that
+     * work together to implement a component.
+     * <p>
+     * Note that currently, there is no default for the factory, so please use
+     * <code>setFactory(factory, createMethod)</code> instead.
+     * 
+     * @param createMethod the name of the create method
+     * @return this component
+     */
+       BundleComponent setFactory(String createMethod);
+
+    /**
+     * Sets the instance and method to invoke to get back all instances that
+     * are part of a composition and need dependencies injected. All of them
+     * will be searched for any of the dependencies. The method that is
+     * invoked must return an <code>Object[]</code>.
+     * 
+     * @param instance the instance that has the method
+     * @param getMethod the method to invoke
+     * @return this component
+     */
+       BundleComponent setComposition(Object instance, String getMethod);
+
+    /**
+     * Sets the method to invoke on the service implementation to get back all
+     * instances that are part of a composition and need dependencies injected.
+     * All of them will be searched for any of the dependencies. The method 
that
+     * is invoked must return an <code>Object[]</code>.
+     * 
+     * @param getMethod the method to invoke
+     * @return this component
+     */
+       BundleComponent setComposition(String getMethod);
+
+       /**
+        * Activate debug for this component. Informations related to 
dependency processing will be displayed
+        * using osgi log service, our to standard output if no log service is 
currently available.
+        * @param label
+        */
+       BundleComponent setDebug(String label);
+
+       /**
      * Sets the bundle state mask and bundle manifest headers filter.
      * 
      * @param bundleStateMask the bundle state mask to apply

Modified: 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/Component.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/Component.java?rev=1849304&r1=1849303&r2=1849304&view=diff
==============================================================================
--- 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/Component.java
 (original)
+++ 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/Component.java
 Wed Dec 19 14:40:48 2018
@@ -33,7 +33,7 @@ import org.osgi.framework.ServiceRegistr
  * @author <a href="mailto:[email protected]";>Felix Project Team</a>
  */
 @ProviderType
-public interface Component<T extends Component<T>> extends AbstractComponent {
+public interface Component {
     
        /**
         * Component service scopes
@@ -67,7 +67,7 @@ public interface Component<T extends Com
         * 
         * @return this component
         */
-    T setScope(ServiceScope scope);
+    Component setScope(ServiceScope scope);
     
    /**
      * Sets the implementation for this component. You can actually specify
@@ -100,7 +100,7 @@ public interface Component<T extends Com
      * @return this component
      * @see ComponentStateListener
      */
-       public T setImplementation(Object implementation);
+       Component setImplementation(Object implementation);
 
     /**
      * Adds dependency(ies) to this component, atomically. If the component is 
already active or if you add
@@ -111,28 +111,28 @@ public interface Component<T extends Com
      * @param dependencies the dependencies to add.
      * @return this component
      */
-       public T add(Dependency ... dependencies);
+       Component add(Dependency ... dependencies);
        
        /**
         * Removes a dependency from the component.
         * @param d the dependency to remove
         * @return this component
         */
-       public T remove(Dependency d);
+       Component remove(Dependency d);
 
     /**
      * Adds a component state listener to this component.
      * 
      * @param listener the state listener
      */
-       public T add(ComponentStateListener listener);
+       Component add(ComponentStateListener listener);
 
     /**
      * Removes a component state listener from this component.
      * 
      * @param listener the state listener
      */
-       public T remove(ComponentStateListener listener);
+       Component remove(ComponentStateListener listener);
 
     /**
      * Sets the public interface under which this component should be 
registered
@@ -142,7 +142,7 @@ public interface Component<T extends Com
      * @param properties the properties for this service
      * @return this component
      */
-       public T setInterface(String serviceName, Dictionary<?,?> properties);
+       Component setInterface(String serviceName, Dictionary<?,?> properties);
 
     /**
      * Sets the public interfaces under which this component should be 
registered
@@ -152,7 +152,7 @@ public interface Component<T extends Com
      * @param properties the properties for these services
      * @return this component
      */
-       public T setInterface(String[] serviceNames, Dictionary<?, ?> 
properties);
+       Component setInterface(String[] serviceNames, Dictionary<?, ?> 
properties);
 
     /**
      * Sets the public interface under which this component should be 
registered
@@ -162,7 +162,7 @@ public interface Component<T extends Com
      * @param properties the properties for this service
      * @return this component
      */
-       public T setInterface(Class<?> serviceName, Dictionary<?,?> properties);
+       Component setInterface(Class<?> serviceName, Dictionary<?,?> 
properties);
 
     /**
      * Sets the public interfaces under which this component should be 
registered
@@ -172,7 +172,7 @@ public interface Component<T extends Com
      * @param properties the properties for these services
      * @return this component
      */
-       public T setInterface(Class<?>[] serviceNames, Dictionary<?, ?> 
properties);
+       Component setInterface(Class<?>[] serviceNames, Dictionary<?, ?> 
properties);
 
        /**
      * Configures auto configuration of injected classes in the component 
instance.
@@ -188,7 +188,7 @@ public interface Component<T extends Com
      * @param clazz the class (from the list above)
      * @param autoConfig <code>false</code> to turn off auto configuration
      */
-       public T setAutoConfig(Class<?> clazz, boolean autoConfig);
+       Component setAutoConfig(Class<?> clazz, boolean autoConfig);
 
     /**
      * Configures auto configuration of injected classes in the component 
instance.
@@ -197,18 +197,7 @@ public interface Component<T extends Com
      * @param instanceName the name of the instance to inject the class into
      * @see #setAutoConfig(Class, boolean)
      */
-       public T setAutoConfig(Class<?> clazz, String instanceName);
-
-    /**
-     * Returns the service registration for this component. The method
-     * will return <code>null</code> if no service registration is
-     * available, for example if this component is not registered as a
-     * service at all.
-     * 
-     * @return the service registration
-     */
-       @SuppressWarnings("rawtypes")
-       public ServiceRegistration getServiceRegistration();
+       Component setAutoConfig(Class<?> clazz, String instanceName);
 
     /**
      * Sets the service properties associated with the component. If the 
service
@@ -216,7 +205,7 @@ public interface Component<T extends Com
      * 
      * @param serviceProperties the properties
      */
-       public T setServiceProperties(Dictionary<?, ?> serviceProperties);
+       Component setServiceProperties(Dictionary<?, ?> serviceProperties);
 
     /**
      * Sets the names of the methods used as callbacks. These methods, when 
found, are
@@ -234,7 +223,7 @@ public interface Component<T extends Com
      * @param destroy the name of the destroy method
      * @return the component
      */
-       public T setCallbacks(String init, String start, String stop, String 
destroy);
+       Component setCallbacks(String init, String start, String stop, String 
destroy);
 
     /**
      * Sets the names of the methods used as callbacks. These methods, when 
found, are
@@ -249,7 +238,7 @@ public interface Component<T extends Com
      *
      * @return this component
      */
-       public T setCallbacks(Object instance, String init, String start, 
String stop, String destroy);
+       Component setCallbacks(Object instance, String init, String start, 
String stop, String destroy);
 
     /**
      * Sets the factory to use to create the implementation. You can specify
@@ -264,7 +253,7 @@ public interface Component<T extends Com
      * @param createMethod the name of the create method
      * @return this component
      */
-       public T setFactory(Object factory, String createMethod);
+       Component setFactory(Object factory, String createMethod);
 
     /**
      * Sets the factory to use to create the implementation. You specify the
@@ -279,7 +268,7 @@ public interface Component<T extends Com
      * @param createMethod the name of the create method
      * @return this component
      */
-       public T setFactory(String createMethod);
+       Component setFactory(String createMethod);
 
     /**
      * Sets the instance and method to invoke to get back all instances that
@@ -291,7 +280,7 @@ public interface Component<T extends Com
      * @param getMethod the method to invoke
      * @return this component
      */
-       public T setComposition(Object instance, String getMethod);
+       Component setComposition(Object instance, String getMethod);
 
     /**
      * Sets the method to invoke on the service implementation to get back all
@@ -302,12 +291,64 @@ public interface Component<T extends Com
      * @param getMethod the method to invoke
      * @return this component
      */
-       public T setComposition(String getMethod);
+       Component setComposition(String getMethod);
 
        /**
         * Activate debug for this component. Informations related to 
dependency processing will be displayed
         * using osgi log service, our to standard output if no log service is 
currently available.
         * @param label
         */
-       public T setDebug(String label);
+       Component setDebug(String label);
+       
+    /**
+     * Returns the service registration for this component. The method
+     * will return <code>null</code> if no service registration is
+     * available, for example if this component is not registered as a
+     * service at all.
+     * 
+     * @return the service registration
+     */
+       @SuppressWarnings("rawtypes")
+       ServiceRegistration getServiceRegistration();
+       
+    /**
+     * Returns the instance that make up this component. If the component has 
a composition of instances,
+     * then the first instance of the composition is returned. Null is 
returned if the component has not 
+     * even been instantiated.
+     * 
+     * @return the component instances
+     */
+       public <U> U getInstance();
+       
+    /**
+     * Returns the composition instances that make up this component, or just 
the
+     * component instance if it does not have a composition, or an empty array 
if
+     * the component has not even been instantiated.
+     * 
+     * @return the component instances
+     */
+       public Object[] getInstances();
+       
+    /**
+     * Returns the component service properties.
+     * The returned dictionary is either empty if no service properties were 
defined for this component,
+     * or copy of the existing service properties associated with this 
component.
+     * 
+     * @return a copy of the service properties associated to this component 
or an empty dictionary 
+     *         if no service properties were defined for this component.
+     */
+       public <K,V> Dictionary<K,V> getServiceProperties();
+       
+    /**
+     * Returns the dependency manager associated with this component.
+     * @return the dependency manager associated with this component.
+     */
+       public DependencyManager getDependencyManager();
+
+       /**
+        * Returns the component description (dependencies, service provided, 
etc ...).
+        * @return the component description (dependencies, service provided, 
etc ...).
+        */
+       public ComponentDeclaration getComponentDeclaration();
+
 }

Modified: 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/DependencyActivatorBase.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/DependencyActivatorBase.java?rev=1849304&r1=1849303&r2=1849304&view=diff
==============================================================================
--- 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/DependencyActivatorBase.java
 (original)
+++ 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/DependencyActivatorBase.java
 Wed Dec 19 14:40:48 2018
@@ -126,7 +126,7 @@ public abstract class DependencyActivato
      * 
      * @return the new component
      */
-    public Component<?> createComponent() {
+    public Component createComponent() {
         return m_manager.createComponent();
     }
     

Modified: 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/DependencyManager.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/DependencyManager.java?rev=1849304&r1=1849303&r2=1849304&view=diff
==============================================================================
--- 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/DependencyManager.java
 (original)
+++ 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/DependencyManager.java
 Wed Dec 19 14:40:48 2018
@@ -157,7 +157,7 @@ public class DependencyManager extends D
      * 
      * @return the new component
      */
-    public Component<?> createComponent() {
+    public Component createComponent() {
         return new ComponentImpl(m_context, this, m_logger);
     }
 
@@ -295,7 +295,7 @@ public class DependencyManager extends D
      * Removes all components and their dependencies.
      */
     public void clear() {
-        for (Component<?> component : m_components.keySet()) {
+        for (Component component : m_components.keySet()) {
             remove(component);
         }
         m_components.clear();

Modified: 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/FactoryComponent.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/FactoryComponent.java?rev=1849304&r1=1849303&r2=1849304&view=diff
==============================================================================
--- 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/FactoryComponent.java
 (original)
+++ 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/FactoryComponent.java
 Wed Dec 19 14:40:48 2018
@@ -18,6 +18,10 @@
  */
 package org.apache.felix.dm;
 
+import java.util.Dictionary;
+
+import org.apache.felix.dm.Component.ServiceScope;
+
 /**
  * Interface used to configure the various parameters needed when defining 
  * a Dependency Manager factory component.
@@ -45,7 +49,7 @@ package org.apache.felix.dm;
  * public class Activator extends DependencyActivatorBase {
  *     &Override
  *     public void init(BundleContext context, DependencyManager dm) throws 
Exception {
- *         Component factoryComponent = createFactoryComponent()
+ *         FactoryComponent factoryComponent = createFactoryComponent()
  *             .setFactoryPid("my.factory.pid")
  *             .setInterface(MySevice.class.getName(), null)
  *             .setImplementation(MyComponent.class)
@@ -70,9 +74,248 @@ package org.apache.felix.dm;
  * 
  * @see DependencyManager#createFactoryComponent()
  */
-public interface FactoryComponent extends Component<FactoryComponent> {
+public interface FactoryComponent extends Component {
     
+       /**
+        * Sets the component scope.
+        * @param scope the component scope (default=SINGLETON)
+        * 
+        * @return this component
+        */
+    FactoryComponent setScope(ServiceScope scope);
+    
+   /**
+     * Sets the implementation for this component. You can actually specify
+     * an instance you have instantiated manually, or a <code>Class</code>
+     * that will be instantiated using its default constructor when the
+     * required dependencies are resolved, effectively giving you a lazy
+     * instantiation mechanism.
+     * 
+     * There are four special methods that are called when found through
+     * reflection to give you life cycle management options:
+     * <ol>
+     * <li><code>init()</code> is invoked after the instance has been
+     * created and dependencies have been resolved, and can be used to
+     * initialize the internal state of the instance or even to add more
+     * dependencies based on runtime state</li>
+     * <li><code>start()</code> is invoked right before the service is 
+     * registered</li>
+     * <li><code>stop()</code> is invoked right after the service is
+     * unregistered</li>
+     * <li><code>destroy()</code> is invoked after all dependencies are
+     * removed</li>
+     * </ol>
+     * In short, this allows you to initialize your instance before it is
+     * registered, perform some post-initialization and pre-destruction code
+     * as well as final cleanup. If a method is not defined, it simply is not
+     * called, so you can decide which one(s) you need. If you need even more
+     * fine-grained control, you can register as a service state listener too.
+     * 
+     * @param implementation the implementation
+     * @return this component
+     * @see ComponentStateListener
+     */
+       FactoryComponent setImplementation(Object implementation);
+
+    /**
+     * Adds dependency(ies) to this component, atomically. If the component is 
already active or if you add
+     * dependencies from the init method, then you should add all the 
dependencies in one single add method call 
+     * (using the varargs argument), because this method may trigger component 
activation (like
+     * the ServiceTracker.open() method does).
+     * 
+     * @param dependencies the dependencies to add.
+     * @return this component
+     */
+       FactoryComponent add(Dependency ... dependencies);
+       
+       /**
+        * Removes a dependency from the component.
+        * @param d the dependency to remove
+        * @return this component
+        */
+       FactoryComponent remove(Dependency d);
+
+    /**
+     * Adds a component state listener to this component.
+     * 
+     * @param listener the state listener
+     */
+       FactoryComponent add(ComponentStateListener listener);
+
+    /**
+     * Removes a component state listener from this component.
+     * 
+     * @param listener the state listener
+     */
+       FactoryComponent remove(ComponentStateListener listener);
+
+    /**
+     * Sets the public interface under which this component should be 
registered
+     * in the OSGi service registry.
+     *  
+     * @param serviceName the name of the service interface
+     * @param properties the properties for this service
+     * @return this component
+     */
+       FactoryComponent setInterface(String serviceName, Dictionary<?,?> 
properties);
+
+    /**
+     * Sets the public interfaces under which this component should be 
registered
+     * in the OSGi service registry.
+     *  
+     * @param serviceNames the names of the service interface
+     * @param properties the properties for these services
+     * @return this component
+     */
+       FactoryComponent setInterface(String[] serviceNames, Dictionary<?, ?> 
properties);
+
+    /**
+     * Sets the public interface under which this component should be 
registered
+     * in the OSGi service registry.
+     *  
+     * @param serviceName the name of the service interface
+     * @param properties the properties for this service
+     * @return this component
+     */
+       FactoryComponent setInterface(Class<?> serviceName, Dictionary<?,?> 
properties);
+
+    /**
+     * Sets the public interfaces under which this component should be 
registered
+     * in the OSGi service registry.
+     *  
+     * @param serviceNames the names of the service interface
+     * @param properties the properties for these services
+     * @return this component
+     */
+       FactoryComponent setInterface(Class<?>[] serviceNames, Dictionary<?, ?> 
properties);
+
+       /**
+     * Configures auto configuration of injected classes in the component 
instance.
+     * The following injections are currently performed, unless you explicitly
+     * turn them off:
+     * <dl>
+     * <dt>BundleContext</dt><dd>the bundle context of the bundle</dd>
+     * <dt>ServiceRegistration</dt><dd>the service registration used to 
register your service</dd>
+     * <dt>DependencyManager</dt><dd>the dependency manager instance</dd>
+     * <dt>Component</dt><dd>the component instance of the dependency 
manager</dd>
+     * </dl>
+     * 
+     * @param clazz the class (from the list above)
+     * @param autoConfig <code>false</code> to turn off auto configuration
+     */
+       FactoryComponent setAutoConfig(Class<?> clazz, boolean autoConfig);
+
+    /**
+     * Configures auto configuration of injected classes in the component 
instance.
+     * 
+     * @param clazz the class (from the list above)
+     * @param instanceName the name of the instance to inject the class into
+     * @see #setAutoConfig(Class, boolean)
+     */
+       FactoryComponent setAutoConfig(Class<?> clazz, String instanceName);
+
+    /**
+     * Sets the service properties associated with the component. If the 
service
+     * was already registered, it will be updated.
+     * 
+     * @param serviceProperties the properties
+     */
+       FactoryComponent setServiceProperties(Dictionary<?, ?> 
serviceProperties);
+
+    /**
+     * Sets the names of the methods used as callbacks. These methods, when 
found, are
+     * invoked as part of the life cycle management of the component 
implementation. The
+     * dependency manager will look for a method of this name with the 
following signatures,
+     * in this order:
+     * <ol>
+     * <li>method(Component component)</li>
+     * <li>method()</li>
+     * </ol>
+     * 
+     * @param init the name of the init method
+     * @param start the name of the start method
+     * @param stop the name of the stop method
+     * @param destroy the name of the destroy method
+     * @return the component
+     */
+       FactoryComponent setCallbacks(String init, String start, String stop, 
String destroy);
+
+    /**
+     * Sets the names of the methods used as callbacks. These methods, when 
found, are
+     * invoked on the specified instance as part of the life cycle management 
of the component
+     * implementation.
+     * <p>
+     * See setCallbacks(String init, String start, String stop, String 
destroy) for more
+     * information on the signatures. Specifying an instance means you can 
create a manager
+     * that will be invoked whenever the life cycle of a component changes and 
this manager
+     * can then decide how to expose this life cycle to the actual component, 
offering an
+     * important indirection when developing your own component models.
+     *
+     * @return this component
+     */
+       FactoryComponent setCallbacks(Object instance, String init, String 
start, String stop, String destroy);
+
+    /**
+     * Sets the factory to use to create the implementation. You can specify
+     * both the factory class and method to invoke. The method should return
+     * the implementation, and can use any method to create it. Actually, this
+     * can be used together with <code>setComposition</code> to create a
+     * composition of instances that work together to implement a component. 
The
+     * factory itself can also be instantiated lazily by not specifying an
+     * instance, but a <code>Class</code>.
+     * 
+     * @param factory the factory instance or class
+     * @param createMethod the name of the create method
+     * @return this component
+     */
+       FactoryComponent setFactory(Object factory, String createMethod);
+
+    /**
+     * Sets the factory to use to create the implementation. You specify the
+     * method to invoke. The method should return the implementation, and can
+     * use any method to create it. Actually, this can be used together with
+     * <code>setComposition</code> to create a composition of instances that
+     * work together to implement a component.
+     * <p>
+     * Note that currently, there is no default for the factory, so please use
+     * <code>setFactory(factory, createMethod)</code> instead.
+     * 
+     * @param createMethod the name of the create method
+     * @return this component
+     */
+       FactoryComponent setFactory(String createMethod);
+
     /**
+     * Sets the instance and method to invoke to get back all instances that
+     * are part of a composition and need dependencies injected. All of them
+     * will be searched for any of the dependencies. The method that is
+     * invoked must return an <code>Object[]</code>.
+     * 
+     * @param instance the instance that has the method
+     * @param getMethod the method to invoke
+     * @return this component
+     */
+       FactoryComponent setComposition(Object instance, String getMethod);
+
+    /**
+     * Sets the method to invoke on the service implementation to get back all
+     * instances that are part of a composition and need dependencies injected.
+     * All of them will be searched for any of the dependencies. The method 
that
+     * is invoked must return an <code>Object[]</code>.
+     * 
+     * @param getMethod the method to invoke
+     * @return this component
+     */
+       FactoryComponent setComposition(String getMethod);
+
+       /**
+        * Activate debug for this component. Informations related to 
dependency processing will be displayed
+        * using osgi log service, our to standard output if no log service is 
currently available.
+        * @param label
+        */
+       FactoryComponent setDebug(String label);
+
+       /**
      * Sets the pid matching the factory configuration
      * @param factoryPid the pid matching the factory configuration
      */


Reply via email to