/*
* This code is distributed under The GNU Lesser General Public License (LGPLv3)
* Please visit GNU site for LGPLv3 http://www.gnu.org/copyleft/lesser.html
*
* Copyright Denis Pavlov 2009
* Web: http://www.genericdtoassembler.org
* SVN: https://svn.code.sf.net/p/geda-genericdto/code/trunk/
* SVN (mirror): http://geda-genericdto.googlecode.com/svn/trunk/
*/
package com.inspiresoftware.lib.dto.geda.osgi.impl;
import com.inspiresoftware.lib.dto.geda.assembler.extension.DisposableContainer;
import com.inspiresoftware.lib.dto.geda.osgi.DTOSupportAnnotationsService;
import com.inspiresoftware.lib.dto.geda.osgi.GeDAFacade;
import org.osgi.framework.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* User: denispavlov
* Date: 13-02-18
* Time: 3:44 PM
*/
public class Activator implements BundleActivator {
private static final Logger LOG = LoggerFactory.getLogger(Activator.class);
private ServiceRegistration serviceRegistration;
/** {@inheritDoc} */
public void start(final BundleContext bundleContext) throws Exception {
LOG.info("Starting GeDA bundle");
LOG.info("GeDA registering OSGi service {}", DTOSupportAnnotationsService.class.getCanonicalName());
serviceRegistration =
bundleContext.registerService(
GeDAFacade.class.getCanonicalName(),
new GeDAFacadeImpl(bundleContext),
null);
bundleContext.addServiceListener(new ServiceListener() {
public void serviceChanged(final ServiceEvent event) {
if (event.getType() == ServiceEvent.UNREGISTERING) {
final ServiceReference ref = event.getServiceReference();
if (ref == serviceRegistration.getReference()) {
// Flush all resources that might have been missed
final DisposableContainer facade =
(DisposableContainer) bundleContext.getService(ref);
facade.releaseResources();
}
}
}
});
LOG.info("GeDA bundle started");
}
public void stop(final BundleContext bundleContext) throws Exception {
LOG.info("GeDA bundle stopping");
serviceRegistration.unregister();
LOG.info("GeDA bundle stopped");
}
}