001/* 002 * (C) Copyright 2006-2011 Nuxeo SA (http://nuxeo.com/) and others. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 * 016 * Contributors: 017 * Nuxeo - initial API and implementation 018 * 019 * $Id$ 020 */ 021 022package org.nuxeo.osgi; 023 024import java.io.File; 025import java.io.IOException; 026import java.io.InputStream; 027import java.util.Dictionary; 028 029import org.nuxeo.osgi.services.ServiceReferenceImpl; 030import org.nuxeo.osgi.services.ServiceRegistrationImpl; 031import org.osgi.framework.Bundle; 032import org.osgi.framework.BundleContext; 033import org.osgi.framework.BundleException; 034import org.osgi.framework.BundleListener; 035import org.osgi.framework.Filter; 036import org.osgi.framework.FrameworkListener; 037import org.osgi.framework.InvalidSyntaxException; 038import org.osgi.framework.ServiceListener; 039import org.osgi.framework.ServiceReference; 040import org.osgi.framework.ServiceRegistration; 041 042/** 043 * @author <a href="mailto:[email protected]">Bogdan Stefanescu</a> 044 */ 045public class OSGiBundleContext implements BundleContext { 046 047 final BundleImpl bundle; 048 049 public OSGiBundleContext(BundleImpl bundle) { 050 this.bundle = bundle; 051 } 052 053 public OSGiAdapter getOSGiAdapter() { 054 return bundle.osgi; 055 } 056 057 @Override 058 public void addBundleListener(BundleListener listener) { 059 bundle.osgi.addBundleListener(listener); 060 } 061 062 @Override 063 public void addFrameworkListener(FrameworkListener listener) { 064 bundle.osgi.addFrameworkListener(listener); 065 } 066 067 @Override 068 public void addServiceListener(ServiceListener listener) { 069 bundle.osgi.addServiceListener(listener); 070 } 071 072 @Override 073 public void addServiceListener(ServiceListener listener, String filter) throws InvalidSyntaxException { 074 bundle.osgi.addServiceListener(listener, filter); 075 } 076 077 @Override 078 public Filter createFilter(String filter) throws InvalidSyntaxException { 079 throw new UnsupportedOperationException("BundleContext.createFilter() was not yet implemented"); 080 } 081 082 @Override 083 public ServiceReference[] getAllServiceReferences(String clazz, String filter) throws InvalidSyntaxException { 084 // TODO Auto-generated method stub 085 return null; 086 } 087 088 @Override 089 public Bundle getBundle() { 090 return bundle; 091 } 092 093 @Override 094 public Bundle getBundle(long id) { 095 return bundle.osgi.registry.getBundle(id); 096 } 097 098 @Override 099 public Bundle[] getBundles() { 100 return bundle.osgi.registry.getInstalledBundles(); 101 } 102 103 @Override 104 public File getDataFile(String filename) { 105 return new File(bundle.osgi.getWorkingDir(), filename); 106 } 107 108 @Override 109 public String getProperty(String key) { 110 return bundle.osgi.getProperty(key); 111 } 112 113 @Override 114 public Object getService(ServiceReference reference) { 115 return ((ServiceReferenceImpl) reference).getService(); 116 } 117 118 @Override 119 public ServiceReference getServiceReference(String clazz) { 120 ServiceRegistration reg = bundle.osgi.services.get(clazz); 121 return reg != null ? reg.getReference() : null; 122 } 123 124 @Override 125 public ServiceReference[] getServiceReferences(String clazz, String filter) throws InvalidSyntaxException { 126 ServiceRegistration reg = bundle.osgi.services.get(clazz); 127 return reg != null ? new ServiceReference[] { reg.getReference() } : null; 128 } 129 130 @Override 131 public Bundle installBundle(String location) throws BundleException { 132 File file = new File(location); 133 try { 134 BundleFile bf = file.isDirectory() ? new DirectoryBundleFile(file) : new JarBundleFile(file); 135 BundleImpl b = new BundleImpl(bundle.osgi, bf, bundle.loader); 136 if (b.getSymbolicName() != null) { 137 bundle.osgi.install(b); 138 } 139 return b; 140 } catch (IOException e) { 141 throw new BundleException("Failed to install bundle at " + location, e); 142 } 143 } 144 145 @Override 146 public Bundle installBundle(String location, InputStream input) throws BundleException { 147 // TODO Auto-generated method stub 148 return null; 149 } 150 151 @SuppressWarnings("rawtypes") 152 @Override 153 public ServiceRegistration registerService(String[] clazzes, Object service, Dictionary properties) { 154 ServiceRegistrationImpl reg = new ServiceRegistrationImpl(bundle.osgi, bundle, clazzes, service); 155 if (properties != null) { 156 reg.setProperties(properties); 157 return reg; 158 } 159 for (String c : clazzes) { 160 bundle.osgi.services.put(c, reg); 161 } 162 return reg; 163 } 164 165 @SuppressWarnings("rawtypes") 166 @Override 167 public ServiceRegistration registerService(String clazz, Object service, Dictionary properties) { 168 return registerService(new String[] { clazz }, service, properties); 169 } 170 171 @Override 172 public void removeBundleListener(BundleListener listener) { 173 bundle.osgi.removeBundleListener(listener); 174 } 175 176 @Override 177 public void removeFrameworkListener(FrameworkListener listener) { 178 bundle.osgi.removeFrameworkListener(listener); 179 } 180 181 @Override 182 public void removeServiceListener(ServiceListener listener) { 183 bundle.osgi.removeServiceListener(listener); 184 } 185 186 @Override 187 public boolean ungetService(ServiceReference reference) { 188 // not impl. 189 return false; 190 } 191 192}