/*
* (C) Copyright 2006-2011 Nuxeo SA (http://nuxeo.com/) and others.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* Contributors:
* Nuxeo - initial API and implementation
*
* $Id$
*/
package org.nuxeo.osgi;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.Dictionary;
import org.nuxeo.osgi.services.ServiceReferenceImpl;
import org.nuxeo.osgi.services.ServiceRegistrationImpl;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
import org.osgi.framework.BundleException;
import org.osgi.framework.BundleListener;
import org.osgi.framework.Filter;
import org.osgi.framework.FrameworkListener;
import org.osgi.framework.InvalidSyntaxException;
import org.osgi.framework.ServiceListener;
import org.osgi.framework.ServiceReference;
import org.osgi.framework.ServiceRegistration;
/**
* @author <a href="mailto:bs@nuxeo.com">Bogdan Stefanescu</a>
*/
public class OSGiBundleContext implements BundleContext {
final BundleImpl bundle;
public OSGiBundleContext(BundleImpl bundle) {
this.bundle = bundle;
}
public OSGiAdapter getOSGiAdapter() {
return bundle.osgi;
}
@Override
public void addBundleListener(BundleListener listener) {
bundle.osgi.addBundleListener(listener);
}
@Override
public void addFrameworkListener(FrameworkListener listener) {
bundle.osgi.addFrameworkListener(listener);
}
@Override
public void addServiceListener(ServiceListener listener) {
bundle.osgi.addServiceListener(listener);
}
@Override
public void addServiceListener(ServiceListener listener, String filter) throws InvalidSyntaxException {
bundle.osgi.addServiceListener(listener, filter);
}
@Override
public Filter createFilter(String filter) throws InvalidSyntaxException {
throw new UnsupportedOperationException("BundleContext.createFilter() was not yet implemented");
}
@Override
public ServiceReference[] getAllServiceReferences(String clazz, String filter) throws InvalidSyntaxException {
// TODO Auto-generated method stub
return null;
}
@Override
public Bundle getBundle() {
return bundle;
}
@Override
public Bundle getBundle(long id) {
return bundle.osgi.registry.getBundle(id);
}
@Override
public Bundle[] getBundles() {
return bundle.osgi.registry.getInstalledBundles();
}
@Override
public File getDataFile(String filename) {
return new File(bundle.osgi.getWorkingDir(), filename);
}
@Override
public String getProperty(String key) {
return bundle.osgi.getProperty(key);
}
@Override
public Object getService(ServiceReference reference) {
return ((ServiceReferenceImpl) reference).getService();
}
@Override
public ServiceReference getServiceReference(String clazz) {
ServiceRegistration reg = bundle.osgi.services.get(clazz);
return reg != null ? reg.getReference() : null;
}
@Override
public ServiceReference[] getServiceReferences(String clazz, String filter) throws InvalidSyntaxException {
ServiceRegistration reg = bundle.osgi.services.get(clazz);
return reg != null ? new ServiceReference[] { reg.getReference() } : null;
}
@Override
public Bundle installBundle(String location) throws BundleException {
File file = new File(location);
try {
BundleFile bf = file.isDirectory() ? new DirectoryBundleFile(file) : new JarBundleFile(file);
BundleImpl b = new BundleImpl(bundle.osgi, bf, bundle.loader);
if (b.getSymbolicName() != null) {
bundle.osgi.install(b);
}
return b;
} catch (IOException e) {
throw new BundleException("Failed to install bundle at " + location, e);
}
}
@Override
public Bundle installBundle(String location, InputStream input) throws BundleException {
// TODO Auto-generated method stub
return null;
}
@SuppressWarnings("rawtypes")
@Override
public ServiceRegistration registerService(String[] clazzes, Object service, Dictionary properties) {
ServiceRegistrationImpl reg = new ServiceRegistrationImpl(bundle.osgi, bundle, clazzes, service);
if (properties != null) {
reg.setProperties(properties);
return reg;
}
for (String c : clazzes) {
bundle.osgi.services.put(c, reg);
}
return reg;
}
@SuppressWarnings("rawtypes")
@Override
public ServiceRegistration registerService(String clazz, Object service, Dictionary properties) {
return registerService(new String[] { clazz }, service, properties);
}
@Override
public void removeBundleListener(BundleListener listener) {
bundle.osgi.removeBundleListener(listener);
}
@Override
public void removeFrameworkListener(FrameworkListener listener) {
bundle.osgi.removeFrameworkListener(listener);
}
@Override
public void removeServiceListener(ServiceListener listener) {
bundle.osgi.removeServiceListener(listener);
}
@Override
public boolean ungetService(ServiceReference reference) {
// not impl.
return false;
}
}