Package org.knopflerfish.tutorial.dateserviceuserlistener.impl

Source Code of org.knopflerfish.tutorial.dateserviceuserlistener.impl.Activator

package org.knopflerfish.tutorial.dateserviceuserlistener.impl;

import java.util.Date;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.Constants;
import org.osgi.framework.ServiceReference;
import org.osgi.framework.ServiceListener;
import org.osgi.framework.ServiceEvent;

import org.knopflerfish.tutorial.dateservice.DateService;
import org.knopflerfish.tutorial.common.ServiceUserThread;

public class Activator implements BundleActivator {
  public static BundleContext bc = null;

  DateService       dateService;
  ServiceUserThread thread;

  public void start(BundleContext bc) throws Exception  {
    Activator.bc = bc;
    log("starting");
   
    String filter = "(objectclass=" + DateService.class.getName() + ")";
    bc.addServiceListener(listener, filter);
   
    ServiceReference references[] = bc.getServiceReferences(null, filter);
    for (int i = 0; references != null && i < references.length; i++)
      {
        listener.serviceChanged(new ServiceEvent(ServiceEvent.REGISTERED,
                                                 references[i]));
      }
  }

  public void stop(BundleContext bc) throws Exception {
    log("stopping");
    Activator.bc = null;
  }
 
  private void log(String message) {
    System.out.println(Activator.bc.getBundle().getHeaders()
                       .get(Constants.BUNDLE_NAME)
                       + ": " + message);
  }

  ServiceListener listener = new ServiceListener() {     
      public void serviceChanged(ServiceEvent event) {
        switch (event.getType()) {
        case ServiceEvent.REGISTERED:
          log("ServiceEvent.REGISTERED");
          dateService = (DateService) Activator.bc.getService(event
                                                               .getServiceReference());
          startUsingService();
          break;
        case ServiceEvent.MODIFIED:
          log("ServiceEvent.MODIFIED received");
          stopUsingService();
          dateService = (DateService) Activator.bc.getService(event
                                                          .getServiceReference());
          startUsingService();
          break;
        case ServiceEvent.UNREGISTERING:
          log("ServiceEvent.UNREGISTERING");
          stopUsingService();
          break;
        }
      }
      private void stopUsingService() {
        thread.stopThread();
        try {
          thread.join();
        } catch (InterruptedException e) {
          e.printStackTrace();
        }
        dateService = null;
      }

      private void startUsingService() {
        thread = new ServiceUserThread(dateService, "listener example");
        thread.start();
      }
     
    };

 
}
TOP

Related Classes of org.knopflerfish.tutorial.dateserviceuserlistener.impl.Activator

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.