/*******************************************************************************
* Copyright (c) 2008 Cambridge Semantics Incorporated.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* File: $Source$
* Created by: Matthew Roy ( <a href="mailto:mroy@cambridgesemantics.com">mroy@cambridgesemantics.com </a>)
* Created on: Sep 8, 2008
* Revision: $Id$
*
* Contributors:
* Cambridge Semantics Incorporated - initial API and implementation
*******************************************************************************/
package org.openanzo.services;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.SAXParserFactory;
import javax.xml.stream.XMLEventFactory;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLOutputFactory;
import org.openanzo.services.serialization.XMLFactoryFinder;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
import org.osgi.util.tracker.ServiceTracker;
/**
* @author Matthew Roy ( <a href="mailto:mroy@cambridgesemantics.com">mroy@cambridgesemantics.com</a>)
*
*/
public class ServicesActivator implements BundleActivator {
private ServiceTracker eventTracker;
private ServiceTracker inputTracker;
private ServiceTracker outputTracker;
private ServiceTracker documentTracker;
private ServiceTracker saxTracker;
public void start(BundleContext context) throws Exception {
eventTracker = new ServiceTracker(context, XMLEventFactory.class.getName(), null) {
@Override
public Object addingService(ServiceReference reference) {
XMLEventFactory service = (XMLEventFactory) context.getService(reference);
XMLFactoryFinder.addXMLEventFactory(service);
return service;
}
@Override
public void removedService(ServiceReference reference, Object serviceObject) {
XMLEventFactory service = (XMLEventFactory) context.getService(reference);
XMLFactoryFinder.removeXMLEventFactory(service);
context.ungetService(reference);
}
};
eventTracker.open();
inputTracker = new ServiceTracker(context, XMLInputFactory.class.getName(), null) {
@Override
public Object addingService(ServiceReference reference) {
XMLInputFactory service = (XMLInputFactory) context.getService(reference);
XMLFactoryFinder.addXMLInputFactory(service);
return service;
}
@Override
public void removedService(ServiceReference reference, Object serviceObject) {
XMLInputFactory service = (XMLInputFactory) context.getService(reference);
XMLFactoryFinder.removeXMLInputFactory(service);
context.ungetService(reference);
}
};
inputTracker.open();
outputTracker = new ServiceTracker(context, XMLOutputFactory.class.getName(), null) {
@Override
public Object addingService(ServiceReference reference) {
XMLOutputFactory service = (XMLOutputFactory) context.getService(reference);
XMLFactoryFinder.addXMLOutputFactory(service);
return service;
}
@Override
public void removedService(ServiceReference reference, Object serviceObject) {
XMLOutputFactory service = (XMLOutputFactory) context.getService(reference);
XMLFactoryFinder.removeXMLOutputFactory(service);
context.ungetService(reference);
}
};
outputTracker.open();
saxTracker = new ServiceTracker(context, SAXParserFactory.class.getName(), null) {
@Override
public Object addingService(ServiceReference reference) {
SAXParserFactory service = (SAXParserFactory) context.getService(reference);
XMLFactoryFinder.addSAXParserFactory(service);
return service;
}
@Override
public void removedService(ServiceReference reference, Object serviceObject) {
SAXParserFactory service = (SAXParserFactory) context.getService(reference);
XMLFactoryFinder.removeSAXParserFactory(service);
context.ungetService(reference);
}
};
saxTracker.open();
documentTracker = new ServiceTracker(context, DocumentBuilderFactory.class.getName(), null) {
@Override
public Object addingService(ServiceReference reference) {
DocumentBuilderFactory service = (DocumentBuilderFactory) context.getService(reference);
XMLFactoryFinder.addDocumentBuilderFactory(service);
return service;
}
@Override
public void removedService(ServiceReference reference, Object serviceObject) {
DocumentBuilderFactory service = (DocumentBuilderFactory) context.getService(reference);
XMLFactoryFinder.removeDocumentBuilderFactory(service);
context.ungetService(reference);
}
};
documentTracker.open();
}
public void stop(BundleContext context) throws Exception {
if (eventTracker != null) {
eventTracker.close();
eventTracker = null;
}
if (inputTracker != null) {
inputTracker.close();
inputTracker = null;
}
if (outputTracker != null) {
outputTracker.close();
outputTracker = null;
}
if (saxTracker != null) {
saxTracker.close();
saxTracker = null;
}
if (documentTracker != null) {
documentTracker.close();
documentTracker = null;
}
}
}