import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
import org.osgi.util.tracker.ServiceTracker;
import org.osgi.util.tracker.ServiceTrackerCustomizer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import ....scenario.cpa.api.ISimple;

/**
 * <code>SimpleServiceConsumer</code>TODO , please write javadoc for class
 * 'SimpleServiceConsumer'!
 * 
 * @author Marcel Hanser 
 */
public class SimpleServiceConsumer
{

   private static final Logger LOGGER = LoggerFactory.getLogger( SimpleServiceConsumer.class );

   BundleContext               context;
   Object                      service;
   ServiceTracker              tracker;

   public SimpleServiceConsumer()
   {

   }

   public void bindRef( final ServiceReference ref )
   {
      LOGGER.info( "injected with blueprint : " + ref + " | " );

      final ServiceReference ref2 = context.getServiceReference( ISimple.class.getName() );
      LOGGER.info( "received from bundlecontext : " + " | " + ref2 );

      final ServiceReference ref3 = tracker.getServiceReference();
      LOGGER.info( "received from tracker : " + ref3 + " | " + tracker );
   }

   public void unbindRef( final ServiceReference ref )
   {

      LOGGER.info( "unbind injected with blueprint : " + ref + " | " );

      final ServiceReference ref2 = context.getServiceReference( ISimple.class.getName() );
      LOGGER.info( "unbind received from bundlecontext : " + " | " + ref2 );

      final ServiceReference ref3 = tracker.getServiceReference();
      LOGGER.info( "unbind received from tracker : " + ref3 + " | " + tracker );
   }

   public BundleContext getContext()
   {
      return context;
   }

   public void setContext( final BundleContext context )
   {

      this.context = context;
      tracker = new ServiceTracker( context, ISimple.class.getName(), new SimpleCustomizer() );
      tracker.open();

   }

   private class SimpleCustomizer implements ServiceTrackerCustomizer
   {

      public Object addingService( final ServiceReference reference )
      {
         LOGGER.info( "SimpleCustomizer added from tracker : " + reference + " | " + tracker );
         return context.getService( reference );

      }

      public void modifiedService( final ServiceReference reference, final Object service )
      {
         LOGGER.info( "SimpleCustomizer modified from tracker : " + reference + " | " + tracker );

      }

      public void removedService( final ServiceReference reference, final Object service )
      {
         LOGGER.info( "SimpleCustomizer removed from tracker : " + reference + " | " + tracker );

      }
   }
}
