FELIX-1314 Split main "impl" package by moving classes to helper, manager,
and metadata subpackages. Adapt unit tests accordingly.

git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@792540 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/BundleComponentActivator.java b/scr/src/main/java/org/apache/felix/scr/impl/BundleComponentActivator.java
index 6d44ca3..3d4eed8 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/BundleComponentActivator.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/BundleComponentActivator.java
@@ -29,6 +29,14 @@
 import java.util.List;
 import java.util.StringTokenizer;
 
+import org.apache.felix.scr.impl.helper.Logger;
+import org.apache.felix.scr.impl.manager.AbstractComponentManager;
+import org.apache.felix.scr.impl.manager.ComponentFactoryImpl;
+import org.apache.felix.scr.impl.manager.DelayedComponentManager;
+import org.apache.felix.scr.impl.manager.ImmediateComponentManager;
+import org.apache.felix.scr.impl.manager.ServiceFactoryComponentManager;
+import org.apache.felix.scr.impl.metadata.ComponentMetadata;
+import org.apache.felix.scr.impl.metadata.XmlHandler;
 import org.apache.felix.scr.impl.parser.KXml2SAXParser;
 import org.osgi.framework.BundleContext;
 import org.osgi.service.cm.ConfigurationAdmin;
@@ -42,7 +50,7 @@
  * a single bundle. It will read information from the metadata.xml file
  * descriptors and create the corresponding managers.
  */
-class BundleComponentActivator implements Logger
+public class BundleComponentActivator implements Logger
 {
     // global component registration
     private ComponentRegistry m_componentRegistry;
@@ -315,7 +323,7 @@
      *
      * @return the list of instance references
      */
-    protected List getInstanceReferences()
+    public List getInstanceReferences()
     {
         return m_managers;
     }
@@ -326,7 +334,7 @@
     *
     * @return the BundleContext
     */
-    protected BundleContext getBundleContext()
+    public BundleContext getBundleContext()
     {
         return m_context;
     }
@@ -355,7 +363,7 @@
      * @param name The name of the component to enable or <code>null</code> to
      *      enable all components.
      */
-    void enableComponent( String name )
+    public void enableComponent( String name )
     {
         final AbstractComponentManager[] cm = getSelectedComponents( name );
         if ( cm == null )
@@ -388,7 +396,7 @@
      * @param name The name of the component to disable or <code>null</code> to
      *      disable all components.
      */
-    void disableComponent( String name )
+    public void disableComponent( String name )
     {
         final AbstractComponentManager[] cm = getSelectedComponents( name );
         if ( cm == null )
@@ -431,7 +439,7 @@
         // if all components are selected
         if ( name == null )
         {
-            return ( AbstractComponentManager[] ) m_managers.toArray( new AbstractComponentManager[m_managers.size()] );
+            return (org.apache.felix.scr.impl.manager.AbstractComponentManager[] ) m_managers.toArray( new AbstractComponentManager[m_managers.size()] );
         }
 
         if ( m_componentRegistry.getComponent( name ) != null )
@@ -463,7 +471,7 @@
      *
      * @param task The component task to execute
      */
-    void schedule( ComponentActivatorTask task )
+    public void schedule( ComponentActivatorTask task )
     {
         if ( isActive() )
         {
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/ComponentActivatorTask.java b/scr/src/main/java/org/apache/felix/scr/impl/ComponentActivatorTask.java
index bf51715..9cce9ec 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/ComponentActivatorTask.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/ComponentActivatorTask.java
@@ -20,6 +20,7 @@
 
 
 import org.apache.felix.scr.Component;
+import org.apache.felix.scr.impl.manager.AbstractComponentManager;
 import org.osgi.framework.Bundle;
 import org.osgi.service.log.LogService;
 
@@ -30,7 +31,7 @@
  * implementation. This is mainly used when logging something around the task
  * being run or scheduled.
  */
-abstract class ComponentActivatorTask implements Runnable
+public abstract class ComponentActivatorTask implements Runnable
 {
 
     private final String taskName;
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/ComponentRegistry.java b/scr/src/main/java/org/apache/felix/scr/impl/ComponentRegistry.java
index 148a0ff..03cee8f 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/ComponentRegistry.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/ComponentRegistry.java
@@ -29,6 +29,9 @@
 
 import org.apache.felix.scr.Component;
 import org.apache.felix.scr.ScrService;
+import org.apache.felix.scr.impl.manager.AbstractComponentManager;
+import org.apache.felix.scr.impl.manager.ComponentFactoryImpl;
+import org.apache.felix.scr.impl.manager.ImmediateComponentManager;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.Constants;
@@ -220,7 +223,7 @@
     }
 
 
-    Configuration getConfiguration( final BundleContext ctx, final String pid )
+    public Configuration getConfiguration( final BundleContext ctx, final String pid )
     {
         final String filter = "(service.pid=" + pid + ")";
         Configuration[] cfg = getConfigurationInternal( ctx, filter );
@@ -228,7 +231,7 @@
     }
 
 
-    Configuration[] getConfigurations( final BundleContext ctx, final String factoryPid )
+    public Configuration[] getConfigurations( final BundleContext ctx, final String factoryPid )
     {
         final String filter = "(service.factoryPid=" + factoryPid + ")";
         return getConfigurationInternal( ctx, filter );
@@ -265,14 +268,14 @@
 
     //---------- ComponentManager registration support
 
-    long createComponentId()
+    public long createComponentId()
     {
         m_componentCounter++;
         return m_componentCounter;
     }
 
 
-    void checkComponentName( String name )
+    public void checkComponentName( String name )
     {
         if ( m_componentsByName.containsKey( name ) )
         {
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/Logger.java b/scr/src/main/java/org/apache/felix/scr/impl/helper/Logger.java
similarity index 92%
rename from scr/src/main/java/org/apache/felix/scr/impl/Logger.java
rename to scr/src/main/java/org/apache/felix/scr/impl/helper/Logger.java
index a5c9143..51a9435 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/Logger.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/helper/Logger.java
@@ -16,7 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.felix.scr.impl;
+package org.apache.felix.scr.impl.helper;
+
+import org.apache.felix.scr.impl.metadata.ComponentMetadata;
 
 
 /**
@@ -24,12 +26,12 @@
  * in the XML Parser and ComponentMetadata handling classes and at the same
  * time not be too intrusive for the unit tests.
  */
-interface Logger
+public interface Logger
 {
 
     /**
      * Writes a messages for the given <code>ComponentMetadata</code>.
-     * 
+     *
      * @param level The log level of the messages. This corresponds to the log
      *          levels defined by the OSGi LogService.
      * @param message The message to print
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/ReadOnlyDictionary.java b/scr/src/main/java/org/apache/felix/scr/impl/helper/ReadOnlyDictionary.java
similarity index 95%
rename from scr/src/main/java/org/apache/felix/scr/impl/ReadOnlyDictionary.java
rename to scr/src/main/java/org/apache/felix/scr/impl/helper/ReadOnlyDictionary.java
index 260b76f..634d7a2 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/ReadOnlyDictionary.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/helper/ReadOnlyDictionary.java
@@ -1,4 +1,4 @@
-/* 
+/*
  * 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
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.felix.scr.impl;
+package org.apache.felix.scr.impl.helper;
 
 
 import java.util.Dictionary;
@@ -25,7 +25,7 @@
 
 /**
  * The <code>ReadOnlyDictionary</code> is a <code>Dictionary</code> whose
- * {@link #put(Object, Object)} and {@link #remove(Object)} methods have 
+ * {@link #put(Object, Object)} and {@link #remove(Object)} methods have
  * no effect and always return <code>null</code>.
  *
  * @author fmeschbe
@@ -36,7 +36,7 @@
     private Dictionary delegatee;
 
 
-    ReadOnlyDictionary( Dictionary delegatee )
+    public ReadOnlyDictionary( Dictionary delegatee )
     {
         this.delegatee = delegatee;
     }
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/ReflectionHelper.java b/scr/src/main/java/org/apache/felix/scr/impl/helper/ReflectionHelper.java
similarity index 91%
rename from scr/src/main/java/org/apache/felix/scr/impl/ReflectionHelper.java
rename to scr/src/main/java/org/apache/felix/scr/impl/helper/ReflectionHelper.java
index 5f31c1b..745bb09 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/ReflectionHelper.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/helper/ReflectionHelper.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.felix.scr.impl;
+package org.apache.felix.scr.impl.helper;
 
 
 import java.lang.reflect.InvocationTargetException;
@@ -35,25 +35,25 @@
  * The <code>ReflectionHelper</code> class provides utility methods to find out
  * about binding and activation methods in components.
  */
-final class ReflectionHelper
+public final class ReflectionHelper
 {
 
     // Method instance to implement tristate behaviour on method fields:
     // unchecked (SENTINEL), no method (null), valid method (method object)
-    static final Method SENTINEL;
+    public static final Method SENTINEL;
 
     // class references to simplify parameter checking
-    static final Class COMPONENT_CONTEXT_CLASS = ComponentContext.class;
-    static final Class BUNDLE_CONTEXT_CLASS = BundleContext.class;
-    static final Class MAP_CLASS = Map.class;
-    static final Class INTEGER_CLASS = Integer.class;
+    public static final Class COMPONENT_CONTEXT_CLASS = ComponentContext.class;
+    public static final Class BUNDLE_CONTEXT_CLASS = BundleContext.class;
+    public static final Class MAP_CLASS = Map.class;
+    public static final Class INTEGER_CLASS = Integer.class;
 
     // Helper used to find the best matching activate and modified methods
-    static final ActivatorMethodTester ACTIVATE_ACCEPTED_PARAMETERS = new ActivatorMethodTester( new Class[]
+    public static final ActivatorMethodTester ACTIVATE_ACCEPTED_PARAMETERS = new ActivatorMethodTester( new Class[]
         { COMPONENT_CONTEXT_CLASS, BUNDLE_CONTEXT_CLASS, MAP_CLASS } );
 
     // Helper used to find the best matching deactivate method
-    static final ActivatorMethodTester DEACTIVATE_ACCEPTED_PARAMETERS = new ActivatorMethodTester( new Class[]
+    public static final ActivatorMethodTester DEACTIVATE_ACCEPTED_PARAMETERS = new ActivatorMethodTester( new Class[]
         { COMPONENT_CONTEXT_CLASS, BUNDLE_CONTEXT_CLASS, MAP_CLASS, Integer.TYPE, INTEGER_CLASS } );
 
     static
@@ -101,7 +101,7 @@
      * @throws InvocationTargetException If an unexpected Throwable is caught
      *      trying to access the desired method.
      */
-    static Method getMethod( final Class objectClass, final String name, final MethodTester tester )
+    public static Method getMethod( final Class objectClass, final String name, final MethodTester tester )
         throws NoSuchMethodException, InvocationTargetException
     {
         // whether we accept package private methods
@@ -196,7 +196,7 @@
      * @throws InvocationTargetException If an unexpected Throwable is caught
      *      trying to access the desired method.
      */
-    static Method getMethod( Class clazz, String name, Class[] parameterTypes, boolean acceptPrivate,
+    public static Method getMethod( Class clazz, String name, Class[] parameterTypes, boolean acceptPrivate,
         boolean acceptPackage ) throws NoSuchMethodException, InvocationTargetException
     {
         try
@@ -250,7 +250,7 @@
      * @param acceptPackage Whether a package private method is acceptable
      * @return
      */
-    static boolean accept( Method method, boolean acceptPrivate, boolean acceptPackage )
+    public static boolean accept( Method method, boolean acceptPrivate, boolean acceptPackage )
     {
         // method must be void
         if ( Void.TYPE != method.getReturnType() )
@@ -302,7 +302,7 @@
      * Returns the name of the package to which the class belongs or an
      * empty string if the class is in the default package.
      */
-    static String getPackageName( Class clazz )
+    public static String getPackageName( Class clazz )
     {
         String name = clazz.getName();
         int dot = name.lastIndexOf( '.' );
@@ -311,7 +311,7 @@
 
     //---------- inner classes
 
-    static interface MethodTester
+    public static interface MethodTester
     {
 
         /**
@@ -334,7 +334,7 @@
         Class[] getParameterLists();
     }
 
-    static final class ActivatorMethodTester implements ReflectionHelper.MethodTester
+    public static final class ActivatorMethodTester implements ReflectionHelper.MethodTester
     {
         private final Class[] parameterLists;
         private final Set methods;
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/AbstractComponentManager.java b/scr/src/main/java/org/apache/felix/scr/impl/manager/AbstractComponentManager.java
similarity index 98%
rename from scr/src/main/java/org/apache/felix/scr/impl/AbstractComponentManager.java
rename to scr/src/main/java/org/apache/felix/scr/impl/manager/AbstractComponentManager.java
index 444b9a9..5ade813 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/AbstractComponentManager.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/manager/AbstractComponentManager.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.felix.scr.impl;
+package org.apache.felix.scr.impl.manager;
 
 import java.util.ArrayList;
 import java.util.Dictionary;
@@ -27,6 +27,11 @@
 
 import org.apache.felix.scr.Component;
 import org.apache.felix.scr.Reference;
+import org.apache.felix.scr.impl.BundleComponentActivator;
+import org.apache.felix.scr.impl.ComponentActivatorTask;
+import org.apache.felix.scr.impl.ComponentRegistry;
+import org.apache.felix.scr.impl.metadata.ComponentMetadata;
+import org.apache.felix.scr.impl.metadata.ReferenceMetadata;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.InvalidSyntaxException;
 import org.osgi.framework.ServiceReference;
@@ -40,7 +45,7 @@
  * implementation object's lifecycle.
  *
  */
-abstract class AbstractComponentManager implements Component, ComponentInstance
+public abstract class AbstractComponentManager implements Component, ComponentInstance
 {
     // the ID of this component
     private long m_componentId;
@@ -738,7 +743,7 @@
     }
 
     //**********************************************************************************************************
-    BundleComponentActivator getActivator()
+    public BundleComponentActivator getActivator()
     {
         return m_activator;
     }
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/ComponentContextImpl.java b/scr/src/main/java/org/apache/felix/scr/impl/manager/ComponentContextImpl.java
similarity index 94%
rename from scr/src/main/java/org/apache/felix/scr/impl/ComponentContextImpl.java
rename to scr/src/main/java/org/apache/felix/scr/impl/manager/ComponentContextImpl.java
index ee65e7f..4806cb8 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/ComponentContextImpl.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/manager/ComponentContextImpl.java
@@ -16,11 +16,12 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.felix.scr.impl;
+package org.apache.felix.scr.impl.manager;
 
 
 import java.util.Dictionary;
 
+import org.apache.felix.scr.impl.helper.ReadOnlyDictionary;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceReference;
@@ -32,7 +33,7 @@
  * Implementation for the ComponentContext interface
  *
  */
-class ComponentContextImpl implements ComponentContext
+public class ComponentContextImpl implements ComponentContext
 {
 
     private AbstractComponentManager m_componentManager;
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/ComponentFactoryImpl.java b/scr/src/main/java/org/apache/felix/scr/impl/manager/ComponentFactoryImpl.java
similarity index 94%
rename from scr/src/main/java/org/apache/felix/scr/impl/ComponentFactoryImpl.java
rename to scr/src/main/java/org/apache/felix/scr/impl/manager/ComponentFactoryImpl.java
index 3c79515..f2ac918 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/ComponentFactoryImpl.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/manager/ComponentFactoryImpl.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.felix.scr.impl;
+package org.apache.felix.scr.impl.manager;
 
 import java.util.Dictionary;
 import java.util.HashMap;
@@ -24,6 +24,9 @@
 import java.util.IdentityHashMap;
 import java.util.Map;
 
+import org.apache.felix.scr.impl.BundleComponentActivator;
+import org.apache.felix.scr.impl.ComponentRegistry;
+import org.apache.felix.scr.impl.metadata.ComponentMetadata;
 import org.osgi.framework.Constants;
 import org.osgi.framework.ServiceRegistration;
 import org.osgi.service.cm.Configuration;
@@ -35,7 +38,7 @@
 /**
  * The <code>ComponentFactoryImpl</code> TODO
  */
-class ComponentFactoryImpl extends AbstractComponentManager implements ComponentFactory
+public class ComponentFactoryImpl extends AbstractComponentManager implements ComponentFactory
 {
 
     // The component registry used to retrieve component IDs
@@ -51,7 +54,7 @@
     private final Map m_createdComponents;
 
 
-    ComponentFactoryImpl( BundleComponentActivator activator, ComponentMetadata metadata,
+    public ComponentFactoryImpl( BundleComponentActivator activator, ComponentMetadata metadata,
         ComponentRegistry componentRegistry )
     {
         super( activator, metadata, componentRegistry );
@@ -142,7 +145,7 @@
 
     //---------- ManagedServiceFactory interface ------------------------------
 
-    void updated( String pid, Dictionary configuration )
+    public void updated( String pid, Dictionary configuration )
     {
         if ( getState() == STATE_FACTORY )
         {
@@ -173,7 +176,7 @@
         }
     }
 
-    void deleted( String pid )
+    public void deleted( String pid )
     {
         if ( getState() == STATE_FACTORY && m_configuredServices != null )
         {
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/DelayedComponentManager.java b/scr/src/main/java/org/apache/felix/scr/impl/manager/DelayedComponentManager.java
similarity index 87%
rename from scr/src/main/java/org/apache/felix/scr/impl/DelayedComponentManager.java
rename to scr/src/main/java/org/apache/felix/scr/impl/manager/DelayedComponentManager.java
index f959fa5..b5462db 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/DelayedComponentManager.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/manager/DelayedComponentManager.java
@@ -16,9 +16,12 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.felix.scr.impl;
+package org.apache.felix.scr.impl.manager;
 
 
+import org.apache.felix.scr.impl.BundleComponentActivator;
+import org.apache.felix.scr.impl.ComponentRegistry;
+import org.apache.felix.scr.impl.metadata.ComponentMetadata;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.ServiceFactory;
 import org.osgi.framework.ServiceRegistration;
@@ -27,7 +30,7 @@
 /**
  * The <code>DelayedComponentManager</code> TODO
  */
-class DelayedComponentManager extends ImmediateComponentManager implements ServiceFactory
+public class DelayedComponentManager extends ImmediateComponentManager implements ServiceFactory
 {
 
     /**
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/DependencyManager.java b/scr/src/main/java/org/apache/felix/scr/impl/manager/DependencyManager.java
similarity index 99%
rename from scr/src/main/java/org/apache/felix/scr/impl/DependencyManager.java
rename to scr/src/main/java/org/apache/felix/scr/impl/manager/DependencyManager.java
index 6033e6a..d0d2ec2 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/DependencyManager.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/manager/DependencyManager.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.felix.scr.impl;
+package org.apache.felix.scr.impl.manager;
 
 
 import java.lang.reflect.InvocationTargetException;
@@ -30,6 +30,8 @@
 import java.util.Map;
 
 import org.apache.felix.scr.Reference;
+import org.apache.felix.scr.impl.helper.ReflectionHelper;
+import org.apache.felix.scr.impl.metadata.ReferenceMetadata;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.Constants;
 import org.osgi.framework.Filter;
@@ -46,7 +48,7 @@
  * declared by a single <code>&lt;reference&gt;</code element in component
  * descriptor.
  */
-class DependencyManager implements ServiceListener, Reference
+public class DependencyManager implements ServiceListener, Reference
 {
     // mask of states ok to send events
     private static final int STATE_MASK = AbstractComponentManager.STATE_UNSATISFIED
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/ImmediateComponentManager.java b/scr/src/main/java/org/apache/felix/scr/impl/manager/ImmediateComponentManager.java
similarity index 97%
rename from scr/src/main/java/org/apache/felix/scr/impl/ImmediateComponentManager.java
rename to scr/src/main/java/org/apache/felix/scr/impl/manager/ImmediateComponentManager.java
index 10bc7b1..b7aa80b 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/ImmediateComponentManager.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/manager/ImmediateComponentManager.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.felix.scr.impl;
+package org.apache.felix.scr.impl.manager;
 
 
 import java.lang.reflect.InvocationTargetException;
@@ -25,6 +25,11 @@
 import java.util.Iterator;
 import java.util.List;
 
+import org.apache.felix.scr.impl.BundleComponentActivator;
+import org.apache.felix.scr.impl.ComponentRegistry;
+import org.apache.felix.scr.impl.helper.ReflectionHelper;
+import org.apache.felix.scr.impl.metadata.ComponentMetadata;
+import org.apache.felix.scr.impl.metadata.ReferenceMetadata;
 import org.osgi.service.cm.Configuration;
 import org.osgi.service.component.ComponentConstants;
 import org.osgi.service.component.ComponentContext;
@@ -35,7 +40,7 @@
  * The default ComponentManager. Objects of this class are responsible for managing
  * implementation object's lifecycle.
  */
-class ImmediateComponentManager extends AbstractComponentManager
+public class ImmediateComponentManager extends AbstractComponentManager
 {
 
     // The object that implements the service and that is bound to other services
@@ -67,7 +72,7 @@
      * @param activator
      * @param metadata
      */
-    ImmediateComponentManager( BundleComponentActivator activator, ComponentMetadata metadata,
+    public ImmediateComponentManager( BundleComponentActivator activator, ComponentMetadata metadata,
         ComponentRegistry componentRegistry )
     {
         super( activator, metadata, componentRegistry );
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/ServiceFactoryComponentManager.java b/scr/src/main/java/org/apache/felix/scr/impl/manager/ServiceFactoryComponentManager.java
similarity index 94%
rename from scr/src/main/java/org/apache/felix/scr/impl/ServiceFactoryComponentManager.java
rename to scr/src/main/java/org/apache/felix/scr/impl/manager/ServiceFactoryComponentManager.java
index 60204d7..3ea4b7a 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/ServiceFactoryComponentManager.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/manager/ServiceFactoryComponentManager.java
@@ -16,11 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.felix.scr.impl;
+package org.apache.felix.scr.impl.manager;
 
 
 import java.util.IdentityHashMap;
 
+import org.apache.felix.scr.impl.BundleComponentActivator;
+import org.apache.felix.scr.impl.ComponentRegistry;
+import org.apache.felix.scr.impl.metadata.ComponentMetadata;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.ServiceFactory;
 import org.osgi.framework.ServiceRegistration;
@@ -33,7 +36,7 @@
 /**
  * The <code>ServiceFactoryComponentManager</code> TODO
  */
-class ServiceFactoryComponentManager extends ImmediateComponentManager implements ServiceFactory
+public class ServiceFactoryComponentManager extends ImmediateComponentManager implements ServiceFactory
 {
 
     // maintain the map of ComponentContext objects created for the
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/ComponentMetadata.java b/scr/src/main/java/org/apache/felix/scr/impl/metadata/ComponentMetadata.java
similarity index 98%
rename from scr/src/main/java/org/apache/felix/scr/impl/ComponentMetadata.java
rename to scr/src/main/java/org/apache/felix/scr/impl/metadata/ComponentMetadata.java
index 7c3c6b5..9d4b11c 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/ComponentMetadata.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/metadata/ComponentMetadata.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.felix.scr.impl;
+package org.apache.felix.scr.impl.metadata;
 
 
 import java.util.ArrayList;
@@ -28,6 +28,7 @@
 import java.util.Set;
 import java.util.TreeSet;
 
+import org.apache.felix.scr.impl.helper.Logger;
 import org.osgi.service.component.ComponentException;
 import org.osgi.service.log.LogService;
 
@@ -495,7 +496,7 @@
     /**
      * Method used to verify if the semantics of this metadata are correct
      */
-    void validate( Logger logger )
+    public void validate( Logger logger )
     {
         // nothing to do if already validated
         if ( m_validated )
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/PropertyMetadata.java b/scr/src/main/java/org/apache/felix/scr/impl/metadata/PropertyMetadata.java
similarity index 99%
rename from scr/src/main/java/org/apache/felix/scr/impl/PropertyMetadata.java
rename to scr/src/main/java/org/apache/felix/scr/impl/metadata/PropertyMetadata.java
index 0c6e54f..c1e7d7c 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/PropertyMetadata.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/metadata/PropertyMetadata.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.felix.scr.impl;
+package org.apache.felix.scr.impl.metadata;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/ReferenceMetadata.java b/scr/src/main/java/org/apache/felix/scr/impl/metadata/ReferenceMetadata.java
similarity index 99%
rename from scr/src/main/java/org/apache/felix/scr/impl/ReferenceMetadata.java
rename to scr/src/main/java/org/apache/felix/scr/impl/metadata/ReferenceMetadata.java
index 2e158a2..a32e06d 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/ReferenceMetadata.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/metadata/ReferenceMetadata.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.felix.scr.impl;
+package org.apache.felix.scr.impl.metadata;
 
 import java.util.Set;
 import java.util.TreeSet;
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/ServiceMetadata.java b/scr/src/main/java/org/apache/felix/scr/impl/metadata/ServiceMetadata.java
similarity index 98%
rename from scr/src/main/java/org/apache/felix/scr/impl/ServiceMetadata.java
rename to scr/src/main/java/org/apache/felix/scr/impl/metadata/ServiceMetadata.java
index ce955b1..a047d77 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/ServiceMetadata.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/metadata/ServiceMetadata.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.felix.scr.impl;
+package org.apache.felix.scr.impl.metadata;
 
 import java.util.ArrayList;
 import java.util.Iterator;
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/XmlHandler.java b/scr/src/main/java/org/apache/felix/scr/impl/metadata/XmlHandler.java
similarity index 98%
rename from scr/src/main/java/org/apache/felix/scr/impl/XmlHandler.java
rename to scr/src/main/java/org/apache/felix/scr/impl/metadata/XmlHandler.java
index ce8febf..02953e4 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/XmlHandler.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/metadata/XmlHandler.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.felix.scr.impl;
+package org.apache.felix.scr.impl.metadata;
 
 
 import java.io.IOException;
@@ -29,6 +29,7 @@
 import java.util.Map;
 import java.util.Properties;
 
+import org.apache.felix.scr.impl.helper.Logger;
 import org.apache.felix.scr.impl.parser.KXml2SAXHandler;
 import org.apache.felix.scr.impl.parser.ParseException;
 import org.osgi.framework.Bundle;
@@ -101,7 +102,7 @@
 
     // creates an instance with the bundle owning the component descriptor
     // file parsed by this instance
-    XmlHandler( Bundle bundle, Logger logger )
+    public XmlHandler( Bundle bundle, Logger logger )
     {
         m_bundle = bundle;
         m_logger = logger;
@@ -109,6 +110,17 @@
 
 
     /**
+    * Called to retrieve the service descriptors
+    *
+    * @return   A list of service descriptors
+    */
+    public List getComponentMetadataList()
+    {
+        return m_components;
+    }
+
+
+    /**
      * Method called when a tag opens
      *
      * @param   uri
@@ -358,17 +370,6 @@
 
 
     /**
-    * Called to retrieve the service descriptors
-    *
-    * @return   A list of service descriptors
-    */
-    List getComponentMetadataList()
-    {
-        return m_components;
-    }
-
-
-    /**
      * @see org.apache.felix.scr.impl.parser.KXml2SAXHandler#characters(java.lang.String)
      */
     public void characters( String text )
diff --git a/scr/src/test/java/org/apache/felix/scr/impl/MockLogger.java b/scr/src/test/java/org/apache/felix/scr/impl/MockLogger.java
index 3bf9061..3a7d8a5 100644
--- a/scr/src/test/java/org/apache/felix/scr/impl/MockLogger.java
+++ b/scr/src/test/java/org/apache/felix/scr/impl/MockLogger.java
@@ -18,6 +18,9 @@
  */
 package org.apache.felix.scr.impl;
 
+import org.apache.felix.scr.impl.helper.Logger;
+import org.apache.felix.scr.impl.metadata.ComponentMetadata;
+
 
 public class MockLogger implements Logger
 {
diff --git a/scr/src/test/java/org/apache/felix/scr/impl/ReflectionHelperTest.java b/scr/src/test/java/org/apache/felix/scr/impl/helper/ReflectionHelperTest.java
similarity index 93%
rename from scr/src/test/java/org/apache/felix/scr/impl/ReflectionHelperTest.java
rename to scr/src/test/java/org/apache/felix/scr/impl/helper/ReflectionHelperTest.java
index 7f88f6e..5b22b5e 100644
--- a/scr/src/test/java/org/apache/felix/scr/impl/ReflectionHelperTest.java
+++ b/scr/src/test/java/org/apache/felix/scr/impl/helper/ReflectionHelperTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.felix.scr.impl;
+package org.apache.felix.scr.impl.helper;
 
 
 import java.lang.reflect.InvocationTargetException;
@@ -24,12 +24,13 @@
 
 import junit.framework.TestCase;
 
-import org.apache.felix.scr.impl.instances.AcceptMethod;
-import org.apache.felix.scr.impl.instances.BaseObject;
-import org.apache.felix.scr.impl.instances.Level1Object;
-import org.apache.felix.scr.impl.instances.Level3Object;
-import org.apache.felix.scr.impl.instances.MethodNameException;
-import org.apache.felix.scr.impl.instances2.Level2Object;
+import org.apache.felix.scr.impl.helper.ReflectionHelper;
+import org.apache.felix.scr.impl.metadata.instances.AcceptMethod;
+import org.apache.felix.scr.impl.metadata.instances.BaseObject;
+import org.apache.felix.scr.impl.metadata.instances.Level1Object;
+import org.apache.felix.scr.impl.metadata.instances.Level3Object;
+import org.apache.felix.scr.impl.metadata.instances.MethodNameException;
+import org.apache.felix.scr.impl.metadata.instances2.Level2Object;
 
 
 public class ReflectionHelperTest extends TestCase
@@ -139,7 +140,7 @@
         Class dpc = getClass().getClassLoader().loadClass( "DefaultPackageClass" );
         assertEquals( "", ReflectionHelper.getPackageName( dpc ) );
 
-        assertEquals( "org.apache.felix.scr.impl.instances", ReflectionHelper.getPackageName( base.getClass() ) );
+        assertEquals( "org.apache.felix.scr.impl.metadata.instances", ReflectionHelper.getPackageName( base.getClass() ) );
     }
 
 
diff --git a/scr/src/test/java/org/apache/felix/scr/impl/ComponentMetadataTest.java b/scr/src/test/java/org/apache/felix/scr/impl/metadata/ComponentMetadataTest.java
similarity index 98%
rename from scr/src/test/java/org/apache/felix/scr/impl/ComponentMetadataTest.java
rename to scr/src/test/java/org/apache/felix/scr/impl/metadata/ComponentMetadataTest.java
index e41ef22..57f56d7 100644
--- a/scr/src/test/java/org/apache/felix/scr/impl/ComponentMetadataTest.java
+++ b/scr/src/test/java/org/apache/felix/scr/impl/metadata/ComponentMetadataTest.java
@@ -16,11 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.felix.scr.impl;
+package org.apache.felix.scr.impl.metadata;
 
 
 import junit.framework.TestCase;
 
+import org.apache.felix.scr.impl.MockLogger;
+import org.apache.felix.scr.impl.metadata.ComponentMetadata;
+import org.apache.felix.scr.impl.metadata.ReferenceMetadata;
+import org.apache.felix.scr.impl.metadata.ServiceMetadata;
+import org.apache.felix.scr.impl.metadata.XmlHandler;
 import org.osgi.service.component.ComponentException;
 
 
diff --git a/scr/src/test/java/org/apache/felix/scr/impl/XmlHandlerTest.java b/scr/src/test/java/org/apache/felix/scr/impl/metadata/XmlHandlerTest.java
similarity index 95%
rename from scr/src/test/java/org/apache/felix/scr/impl/XmlHandlerTest.java
rename to scr/src/test/java/org/apache/felix/scr/impl/metadata/XmlHandlerTest.java
index 8cc0438..a206790 100644
--- a/scr/src/test/java/org/apache/felix/scr/impl/XmlHandlerTest.java
+++ b/scr/src/test/java/org/apache/felix/scr/impl/metadata/XmlHandlerTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.felix.scr.impl;
+package org.apache.felix.scr.impl.metadata;
 
 
 import java.io.BufferedReader;
@@ -27,6 +27,13 @@
 
 import junit.framework.TestCase;
 
+import org.apache.felix.scr.impl.MockBundle;
+import org.apache.felix.scr.impl.MockLogger;
+import org.apache.felix.scr.impl.metadata.ComponentMetadata;
+import org.apache.felix.scr.impl.metadata.PropertyMetadata;
+import org.apache.felix.scr.impl.metadata.ReferenceMetadata;
+import org.apache.felix.scr.impl.metadata.ServiceMetadata;
+import org.apache.felix.scr.impl.metadata.XmlHandler;
 import org.apache.felix.scr.impl.parser.KXml2SAXParser;
 import org.osgi.service.component.ComponentException;
 import org.xmlpull.v1.XmlPullParserException;
diff --git a/scr/src/test/java/org/apache/felix/scr/impl/instances/AcceptMethod.java b/scr/src/test/java/org/apache/felix/scr/impl/metadata/instances/AcceptMethod.java
similarity index 96%
rename from scr/src/test/java/org/apache/felix/scr/impl/instances/AcceptMethod.java
rename to scr/src/test/java/org/apache/felix/scr/impl/metadata/instances/AcceptMethod.java
index e31c601..c7485a8 100644
--- a/scr/src/test/java/org/apache/felix/scr/impl/instances/AcceptMethod.java
+++ b/scr/src/test/java/org/apache/felix/scr/impl/metadata/instances/AcceptMethod.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.felix.scr.impl.instances;
+package org.apache.felix.scr.impl.metadata.instances;
 
 
 /**
diff --git a/scr/src/test/java/org/apache/felix/scr/impl/instances/BaseObject.java b/scr/src/test/java/org/apache/felix/scr/impl/metadata/instances/BaseObject.java
similarity index 96%
rename from scr/src/test/java/org/apache/felix/scr/impl/instances/BaseObject.java
rename to scr/src/test/java/org/apache/felix/scr/impl/metadata/instances/BaseObject.java
index a30c84f..08ad1c7 100644
--- a/scr/src/test/java/org/apache/felix/scr/impl/instances/BaseObject.java
+++ b/scr/src/test/java/org/apache/felix/scr/impl/metadata/instances/BaseObject.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.felix.scr.impl.instances;
+package org.apache.felix.scr.impl.metadata.instances;
 
 
 import org.osgi.framework.BundleContext;
diff --git a/scr/src/test/java/org/apache/felix/scr/impl/instances/Level1Object.java b/scr/src/test/java/org/apache/felix/scr/impl/metadata/instances/Level1Object.java
similarity index 95%
rename from scr/src/test/java/org/apache/felix/scr/impl/instances/Level1Object.java
rename to scr/src/test/java/org/apache/felix/scr/impl/metadata/instances/Level1Object.java
index fbac013..4082b3e 100644
--- a/scr/src/test/java/org/apache/felix/scr/impl/instances/Level1Object.java
+++ b/scr/src/test/java/org/apache/felix/scr/impl/metadata/instances/Level1Object.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.felix.scr.impl.instances;
+package org.apache.felix.scr.impl.metadata.instances;
 
 
 import java.util.Map;
diff --git a/scr/src/test/java/org/apache/felix/scr/impl/instances/Level3Object.java b/scr/src/test/java/org/apache/felix/scr/impl/metadata/instances/Level3Object.java
similarity index 91%
rename from scr/src/test/java/org/apache/felix/scr/impl/instances/Level3Object.java
rename to scr/src/test/java/org/apache/felix/scr/impl/metadata/instances/Level3Object.java
index 732b030..72c3236 100644
--- a/scr/src/test/java/org/apache/felix/scr/impl/instances/Level3Object.java
+++ b/scr/src/test/java/org/apache/felix/scr/impl/metadata/instances/Level3Object.java
@@ -16,12 +16,12 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.felix.scr.impl.instances;
+package org.apache.felix.scr.impl.metadata.instances;
 
 
 import java.util.Map;
 
-import org.apache.felix.scr.impl.instances2.Level2Object;
+import org.apache.felix.scr.impl.metadata.instances2.Level2Object;
 import org.osgi.service.component.ComponentContext;
 
 
diff --git a/scr/src/test/java/org/apache/felix/scr/impl/instances/MethodNameException.java b/scr/src/test/java/org/apache/felix/scr/impl/metadata/instances/MethodNameException.java
similarity index 94%
rename from scr/src/test/java/org/apache/felix/scr/impl/instances/MethodNameException.java
rename to scr/src/test/java/org/apache/felix/scr/impl/metadata/instances/MethodNameException.java
index 3bfb7bb..8745490 100644
--- a/scr/src/test/java/org/apache/felix/scr/impl/instances/MethodNameException.java
+++ b/scr/src/test/java/org/apache/felix/scr/impl/metadata/instances/MethodNameException.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.felix.scr.impl.instances;
+package org.apache.felix.scr.impl.metadata.instances;
 
 
 public final class MethodNameException extends RuntimeException
diff --git a/scr/src/test/java/org/apache/felix/scr/impl/instances2/Level2Object.java b/scr/src/test/java/org/apache/felix/scr/impl/metadata/instances2/Level2Object.java
similarity index 87%
rename from scr/src/test/java/org/apache/felix/scr/impl/instances2/Level2Object.java
rename to scr/src/test/java/org/apache/felix/scr/impl/metadata/instances2/Level2Object.java
index 456f35e..0e4c8e0 100644
--- a/scr/src/test/java/org/apache/felix/scr/impl/instances2/Level2Object.java
+++ b/scr/src/test/java/org/apache/felix/scr/impl/metadata/instances2/Level2Object.java
@@ -16,13 +16,13 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.felix.scr.impl.instances2;
+package org.apache.felix.scr.impl.metadata.instances2;
 
 
 import java.util.Map;
 
-import org.apache.felix.scr.impl.instances.Level1Object;
-import org.apache.felix.scr.impl.instances.MethodNameException;
+import org.apache.felix.scr.impl.metadata.instances.Level1Object;
+import org.apache.felix.scr.impl.metadata.instances.MethodNameException;
 import org.osgi.service.component.ComponentContext;