package sk.stuba.fiit.perconik.osgi.framework; import java.util.List; import java.util.Map; import org.eclipse.core.runtime.Platform; import org.osgi.framework.Bundle; import org.osgi.framework.FrameworkUtil; import sk.stuba.fiit.perconik.utilities.MoreMaps; import sk.stuba.fiit.perconik.utilities.reflect.resolver.ClassResolver; import static java.util.Arrays.asList; import static com.google.common.base.Preconditions.checkArgument; import static sk.stuba.fiit.perconik.utilities.MoreLists.newArrayListSuitableFor; /** * Static utility methods pertaining to {@code Bundle} instances. * * @author Pavol Zbell * @since 1.0 */ public final class Bundles { private Bundles() {} public static Bundle forClass(final Class<?> type) { return FrameworkUtil.getBundle(type); } public static Bundle forName(final String name) throws BundleNotFoundException { checkArgument(!name.isEmpty()); Bundle bundle = Platform.getBundle(name); if (bundle != null) { return bundle; } throw new BundleNotFoundException(name + " not found"); } public static List<Bundle> forNames(final String ... names) throws BundleNotFoundException { return forNames(asList(names)); } public static List<Bundle> forNames(final Iterable<String> names) throws BundleNotFoundException { List<Bundle> bundles = newArrayListSuitableFor(names); for (String name: names) { bundles.add(forName(name)); } return bundles; } public static ClassResolver newClassResolver(final Bundle bundle) { return new BundleClassResolver(bundle); } public static List<ClassResolver> newClassResolvers(final Bundle ... bundles) { return newClassResolvers(asList(bundles)); } public static List<ClassResolver> newClassResolvers(final Iterable<Bundle> bundles) { List<ClassResolver> resolvers = newArrayListSuitableFor(bundles); for (Bundle bundle: bundles) { resolvers.add(newClassResolver(bundle)); } return resolvers; } public static Map<String, String> getHeaders(final Bundle bundle) { return MoreMaps.fromDictionary(bundle.getHeaders()); } public static String getName(final Bundle bundle) { return bundle.getHeaders().get("Bundle-Name"); } }