Package org.foo.shell.tty

Source Code of org.foo.shell.tty.Activator

package org.foo.shell.tty;

import org.foo.shell.Binding;
import org.foo.shell.Command;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
import org.osgi.util.tracker.ServiceTracker;
import org.osgi.util.tracker.ServiceTrackerCustomizer;

public class Activator implements BundleActivator {

  private volatile Binding m_binding;
  private volatile ServiceTracker tracker;

  public void start(final BundleContext context) throws Exception {
    tracker = new ServiceTracker(context, Command.class.getName(), new ServiceTrackerCustomizer() {
     
      public Object addingService(ServiceReference ref) {
        Command command = (Command) context.getService(ref);
        startTty(context, command);
        return command;
      }
     
      public void modifiedService(ServiceReference ref, Object service) {
      }
     
      public void removedService(ServiceReference ref, Object service) {
        stopTty();
        context.ungetService(ref);
      }
     
    });

    tracker.open();
  }

  public void stop(BundleContext context) throws Exception {
    tracker.close();
  }

  private void startTty(BundleContext context, Command command) {
    System.out.println("Bundle: " + context.getBundle().getSymbolicName() + " started with bundle id " +
        context.getBundle().getBundleId());
    m_binding = getTtyBinding(command);
    m_binding.start();
  }

  private void stopTty() {
    if ( m_binding != null ) {
      try {
        m_binding.stop();
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
    }
  }

  private Binding getTtyBinding(Command execute) {
    return new TtyBinding(execute);
  }
}
TOP

Related Classes of org.foo.shell.tty.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.