package test.lib; import java.io.File; import java.net.URI; import java.net.URISyntaxException; import java.util.HashMap; import java.util.List; import java.util.Map; import org.osgi.resource.Capability; import org.osgi.resource.Resource; import org.osgi.service.repository.Repository; import aQute.bnd.deployer.repository.AbstractIndexedRepo; import aQute.bnd.deployer.repository.FixedIndexedRepo; public class Utils { public static Repository createRepo(File index) { return createRepo(index, null); } public static Repository createRepo(URI uri) { return createRepo(uri, null); } public static Repository createRepo(File index, String name) { FixedIndexedRepo repo = new FixedIndexedRepo(); Map<String,String> props = new HashMap<String,String>(); props.put(FixedIndexedRepo.PROP_LOCATIONS, index.toURI().toString()); if (name != null) props.put(AbstractIndexedRepo.PROP_NAME, name); repo.setProperties(props); return repo; } public static Repository createRepo(String uriStr, String name) { try { URI uri = new URI(uriStr); return createRepo(uri, name); } catch (URISyntaxException e) { throw new RuntimeException(e); } } public static Repository createRepo(URI uri, String name) { FixedIndexedRepo repo = new FixedIndexedRepo(); Map<String,String> props = new HashMap<String,String>(); props.put(FixedIndexedRepo.PROP_LOCATIONS, uri.toString()); if (name != null) props.put(AbstractIndexedRepo.PROP_NAME, name); repo.setProperties(props); return repo; } public static URI findContentURI(Resource resource) { List<Capability> contentCaps = resource.getCapabilities("osgi.content"); if (contentCaps == null || contentCaps.isEmpty()) throw new IllegalArgumentException("Resource has no content capability"); if (contentCaps.size() > 1) throw new IllegalArgumentException("Resource has more than one content capability"); Object uriObj = contentCaps.get(0).getAttributes().get("url"); if (uriObj == null) throw new IllegalArgumentException("Resource content capability has no 'url' attribute."); if (uriObj instanceof URI) return (URI) uriObj; else try { return new URI(uriObj.toString()); } catch (URISyntaxException e) { throw new IllegalArgumentException("Resource content capability has invalid 'url' attribute.", e); } } }