FELIX-4070 remove getService state method

git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1486750 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/manager/AbstractComponentManager.java b/scr/src/main/java/org/apache/felix/scr/impl/manager/AbstractComponentManager.java
index 753b27c..e98ca54 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/manager/AbstractComponentManager.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/manager/AbstractComponentManager.java
@@ -496,13 +496,6 @@
         }
     }
 
-    /**
-     * Get the object that is implementing this descriptor
-     *
-     * @return the object that implements the services
-     */
-    abstract Object getInstance();
-
     // supports the ComponentInstance.dispose() method
     void dispose()
     {
@@ -1263,7 +1256,12 @@
         }
     }
 
-    //--------- State classes
+    boolean isEnabled()
+    {
+        return m_internalEnabled;
+    }
+    
+   //--------- State classes
 
     /**
      * There are 12 states in all. They are: Disabled, Unsatisfied,
@@ -1309,13 +1307,6 @@
             return m_state;
         }
 
-
-        Object getService( ImmediateComponentManager dcm )
-        {
-            throw new IllegalStateException("getService" + this);
-        }
-
-
         void ungetService( ImmediateComponentManager dcm )
         {
             throw new IllegalStateException("ungetService" + this);
@@ -1438,11 +1429,6 @@
             doDeactivate( acm, reason, disable );
         }
 
-        Object getService( ImmediateComponentManager dcm )
-        {
-            return null;
-        }
-
         void ungetService( ImmediateComponentManager dcm )
         {
             //do nothing, deactivate will unget all the services.
@@ -1576,12 +1562,6 @@
             acm.changeState( Disposed.getInstance() );
         }
 
-        Object getService( ImmediateComponentManager dcm )
-        {
-            //concurrent attempt to get service and remove dependency
-            return null;
-        }
-
         void ungetService( ImmediateComponentManager dcm )
         {
             //do nothing.  This can arise if component is deactivated concurrently with ungetService on a delayed component.
@@ -1656,12 +1636,6 @@
         }
 
 
-        Object getService( ImmediateComponentManager dcm )
-        {
-            return dcm.getInstance();
-        }
-
-
         void ungetService( ImmediateComponentManager dcm )
         {
             dcm.deleteComponent( ComponentConstants.DEACTIVATION_REASON_UNSPECIFIED );
@@ -1694,35 +1668,6 @@
             return m_inst;
         }
 
-
-        Object getService( ImmediateComponentManager dcm )
-        {
-            if ( dcm.createComponent() )
-            {
-                dcm.changeState( dcm.getActiveState() );
-                return dcm.getInstance();
-            }
-
-            // log that the delayed component cannot be created (we don't
-            // know why at this moment; this should already have been logged)
-            dcm.log( LogService.LOG_ERROR, "Failed creating the component instance; see log for reason", null );
-
-            // component could not really be created. This may be temporary
-            // so we stay in the registered state but ensure the component
-            // instance is deleted
-            try
-            {
-                dcm.deleteComponent( ComponentConstants.DEACTIVATION_REASON_UNSPECIFIED );
-            }
-            catch ( Throwable t )
-            {
-                dcm.log( LogService.LOG_DEBUG, "Cannot delete incomplete component instance. Ignoring.", t );
-            }
-
-            // no service can be returned (be prepared for more logging !!)
-            return null;
-        }
-
         void ungetService( ImmediateComponentManager dcm )
         {
             //do nothing.  This can arise if component is deactivated concurrently with ungetService on a delayed component.
@@ -1777,12 +1722,6 @@
             return m_inst;
         }
 
-        Object getService( ImmediateComponentManager dcm )
-        {
-            return dcm.getInstance();
-        }
-
-
         void ungetService( ImmediateComponentManager dcm )
         {
             dcm.deleteComponent( ComponentConstants.DEACTIVATION_REASON_UNSPECIFIED );
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/manager/ComponentContextImpl.java b/scr/src/main/java/org/apache/felix/scr/impl/manager/ComponentContextImpl.java
index 2203fed..dd4f1fa 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/manager/ComponentContextImpl.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/manager/ComponentContextImpl.java
@@ -40,7 +40,7 @@
  */
 public class ComponentContextImpl<S> implements ExtComponentContext {
 
-    private final AbstractComponentManager<S> m_componentManager;
+    private final ImmediateComponentManager<S> m_componentManager;
     
     private final EdgeInfo[] edgeInfos;
     
@@ -54,7 +54,7 @@
     
     private final CountDownLatch accessibleLatch = new CountDownLatch(1);
 
-    ComponentContextImpl( AbstractComponentManager<S> componentManager, Bundle usingBundle, S implementationObject )
+    ComponentContextImpl( ImmediateComponentManager<S> componentManager, Bundle usingBundle, S implementationObject )
     {
         m_componentManager = componentManager;
         m_usingBundle = usingBundle;
@@ -86,7 +86,7 @@
         Arrays.fill( edgeInfos, null );
     }
 
-    protected AbstractComponentManager<S> getComponentManager()
+    protected ImmediateComponentManager<S> getComponentManager()
     {
         return m_componentManager;
     }
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/manager/ComponentFactoryImpl.java b/scr/src/main/java/org/apache/felix/scr/impl/manager/ComponentFactoryImpl.java
index 3066c93..79e0b6a 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/manager/ComponentFactoryImpl.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/manager/ComponentFactoryImpl.java
@@ -202,13 +202,6 @@
     }
 
 
-    public Object getInstance()
-    {
-        // this does not return the component instance actually
-        return null;
-    }
-
-
     public boolean hasConfiguration()
     {
         return m_hasConfiguration;
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/manager/ImmediateComponentManager.java b/scr/src/main/java/org/apache/felix/scr/impl/manager/ImmediateComponentManager.java
index f5834c5..edb4a77 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/manager/ImmediateComponentManager.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/manager/ImmediateComponentManager.java
@@ -180,7 +180,7 @@
      *
      * @return the object that implements the services
      */
-    Object getInstance()
+    S getInstance()
     {
         return m_componentContext == null? null: m_componentContext.getImplementationObject( true );
     }
@@ -763,7 +763,7 @@
                     if ( m_componentContext == null )
                     {
                         //state should be "Registered"
-                        S result = (S) Registered.getInstance().getService( this );
+                        S result = getService( );
                         if ( result == null )
                         {
                             success = false;;
@@ -784,6 +784,41 @@
         }
     }
 
+    private S getService()
+    {
+        //should be write locked
+        if (!isEnabled())
+        {
+            return null;
+        }
+
+        if ( createComponent() )
+        {
+            changeState( getActiveState() );
+            return getInstance();
+        }
+
+        // log that the delayed component cannot be created (we don't
+        // know why at this moment; this should already have been logged)
+        log( LogService.LOG_ERROR, "Failed creating the component instance; see log for reason", null );
+
+        // component could not really be created. This may be temporary
+        // so we stay in the registered state but ensure the component
+        // instance is deleted
+        try
+        {
+            deleteComponent( ComponentConstants.DEACTIVATION_REASON_UNSPECIFIED );
+        }
+        catch ( Throwable t )
+        {
+            log( LogService.LOG_DEBUG, "Cannot delete incomplete component instance. Ignoring.", t );
+        }
+
+        // no service can be returned (be prepared for more logging !!)
+        return null;
+
+    }
+
     public void ungetService( Bundle bundle, ServiceRegistration<S> serviceRegistration, S o )
     {
         // the framework should not call ungetService more than it calls
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/manager/ServiceFactoryComponentManager.java b/scr/src/main/java/org/apache/felix/scr/impl/manager/ServiceFactoryComponentManager.java
index 4d214aa..dede66a 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/manager/ServiceFactoryComponentManager.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/manager/ServiceFactoryComponentManager.java
@@ -94,7 +94,7 @@
     /* (non-Javadoc)
      * @see org.apache.felix.scr.AbstractComponentManager#getInstance()
      */
-    Object getInstance()
+    S getInstance()
     {
         // this method is not expected to be called as the base call is
         // overwritten in the ComponentContextImpl class