package org.infinispan.it.osgi.util; import java.io.File; import java.net.URL; import org.osgi.framework.Bundle; import org.osgi.framework.BundleContext; import org.osgi.framework.FrameworkUtil; import org.osgi.framework.ServiceReference; public class OSGiTestUtils { public static BundleContext getBundleContext(Object object) { return getBundleContext(object.getClass()); } public static BundleContext getBundleContext(Class<?> clss) { if (clss == null) { throw new IllegalArgumentException("Class cannot be null."); } Bundle bundle = FrameworkUtil.getBundle(clss); if (bundle == null) { throw new IllegalArgumentException(String.format("Failed to find bundle for class '%s'.", clss)); } BundleContext bundleContext = bundle.getBundleContext(); if (bundleContext == null) { throw new IllegalArgumentException(String.format("Failed to retrieve bundle context for class '%s'.", clss)); } return bundleContext; } public static <S> S getService(BundleContext bundleContext, Class<S> serviceClss) { ServiceReference<S> serviceReference = bundleContext.getServiceReference(serviceClss); if (serviceReference == null) { throw new IllegalArgumentException(String.format("Unable to retrieve service reference for class '%s'.", serviceClss)); } S service = bundleContext.getService(serviceReference); if (service == null) { throw new IllegalArgumentException(String.format("Unable to retrieve service from reference for class '%s'.", serviceClss)); } return service; } public static File getResourceFile(String resource) { URL url = OSGiTestUtils.class.getClassLoader().getResource(resource); if (url == null || !"file".equalsIgnoreCase(url.getProtocol())) { throw new IllegalArgumentException("Cannot find file resource: " + resource); } return new File(url.getFile()); } }