private static Repository readRepository(Object repository) throws BundleException { List<Resource> resources = new ArrayList<>(); Collection<Map<String, List<String>>> metadatas; if (repository instanceof Map) { metadatas = ((Map<String, Map<String, List<String>>>) repository).values(); } else { metadatas = (Collection<Map<String, List<String>>>) repository; } for (Map<String, List<String>> metadata : metadatas) { ResourceImpl res = new ResourceImpl(); for (String cap : metadata.get("capabilities")) { res.addCapabilities(ResourceBuilder.parseCapability(res, cap)); } if (metadata.containsKey("requirements")) { for (String req : metadata.get("requirements")) { res.addRequirements(ResourceBuilder.parseRequirement(res, req)); } } resources.add(res); } return new BaseRepository(resources); }
public void requireFeature(String name, String range, boolean mandatory) { if (mandatory) { ResourceUtils.addIdentityRequirement(this, name, TYPE_FEATURE, range); } else { ResourceImpl res = new ResourceImpl(); ResourceUtils.addIdentityRequirement(res, name, TYPE_FEATURE, range, false); dependentFeatures.addAll(res.getRequirements(null)); } }
private List<Capability> calculateSystemCapabilities(final Map<String,String> fwkProps) throws IOException { Map<String, String> mf = new HashMap<>(); mf.put(Constants.PROVIDE_CAPABILITY, Stream.of( fwkProps.get(Constants.FRAMEWORK_SYSTEMCAPABILITIES), fwkProps.get(Constants.FRAMEWORK_SYSTEMCAPABILITIES_EXTRA) ) .filter(Objects::nonNull) .collect(Collectors.joining(","))); mf.put(Constants.EXPORT_PACKAGE, Stream.of( fwkProps.get(Constants.FRAMEWORK_SYSTEMPACKAGES), fwkProps.get(Constants.FRAMEWORK_SYSTEMPACKAGES_EXTRA) ).filter(Objects::nonNull) .collect(Collectors.joining(","))); mf.put(Constants.BUNDLE_SYMBOLICNAME, Constants.SYSTEM_BUNDLE_SYMBOLICNAME); mf.put(Constants.BUNDLE_MANIFESTVERSION, "2"); try { return ResourceBuilder.build(null, mf).getCapabilities(null); } catch (Exception ex) { throw new IOException(ex); } }
throw new IllegalStateException("Unexpected attribute '" + reader.getAttributeLocalName(0) + "'"); ResourceImpl resource = new ResourceImpl(); int event; while ((event = reader.nextTag()) == START_ELEMENT) { resource.addCapability(cap); break; case REQUIREMENT: resource.addRequirement(parseRequirement(reader, resource)); break; default:
attrs.put(IdentityNamespace.CAPABILITY_VERSION_ATTRIBUTE, bundleVersion); CapabilityImpl identity = new CapabilityImpl(resource, IdentityNamespace.IDENTITY_NAMESPACE, Collections.<String, String>emptyMap(), attrs); resource.addCapability(identity); resource.addCapability(new CapabilityImpl(resource, ContentNamespace.CONTENT_NAMESPACE, Collections.<String, String>emptyMap(), Collections.<String, Object>singletonMap(ContentNamespace.CAPABILITY_URL_ATTRIBUTE, uri))); resource.addCapability(new CapabilityImpl(resource, BundleRevision.BUNDLE_NAMESPACE, bundleCap.dirs, bundleCap.attrs)); resource.addCapability(new CapabilityImpl( resource, BundleRevision.HOST_NAMESPACE, bundleCap.dirs, resource.addCapabilities(exportCaps); resource.addCapabilities(provideCaps); resource.addRequirements(hostReqs); resource.addRequirements(importReqs); resource.addRequirements(rbReqs); resource.addRequirements(requireReqs); resource.addRequirements(dynamicReqs);
ResourceImpl dummy = new ResourceImpl("dummy", "dummy", Version.emptyVersion); for (BundleRevision res : entry.getValue()) { Resource tmp = ResourceBuilder.build(res.getBundle().getLocation(), headers); for (Capability cap : tmp.getCapabilities(ServiceNamespace.SERVICE_NAMESPACE)) { dummy.addCapability(new CapabilityImpl(dummy, cap.getNamespace(), cap.getDirectives(), cap.getAttributes())); environmentResource = new ResourceImpl("environment", "karaf.environment", Version.emptyVersion); environmentResource.addCapabilities(ResourceBuilder.parseCapability(environmentResource, provideCaps)); root.addSystemResource(environmentResource);
public static ResourceImpl build(String uri, Map<String, String> headerMap) throws BundleException { return build(new ResourceImpl(), uri, headerMap, false); }
protected void analyze() throws IOException { final String name = this.manifest.getMainAttributes().getValue(Constants.BUNDLE_SYMBOLICNAME); if ( name != null ) { final String version = this.manifest.getMainAttributes().getValue(Constants.BUNDLE_VERSION); if ( version == null ) { throw new IOException("Unable to get bundle version from artifact " + getArtifact().getId().toMvnId()); } this.symbolicName = name; this.bundleVersion = version; final String newBundleName = this.getArtifact().getMetadata().get("bundle:rename-bsn"); if (newBundleName != null) { this.symbolicName = newBundleName; } this.getExportedPackages().addAll(extractExportedPackages(this.manifest)); this.getImportedPackages().addAll(extractImportedPackages(this.manifest)); this.getDynamicImportedPackages().addAll(extractDynamicImportedPackages(this.manifest)); try { ResourceImpl resource = ResourceBuilder.build(null, this.manifest.getMainAttributes().entrySet().stream() .collect(Collectors.toMap(entry -> entry.getKey().toString(), entry -> entry.getValue().toString()))); this.getCapabilities().addAll(resource.getCapabilities(null)); this.getRequirements().addAll(resource.getRequirements(null)); } catch (Exception ex) { throw new IOException(ex); } } else { throw new IOException("Unable to get bundle symbolic name from artifact " + getArtifact().getId().toMvnId()); } }
public static RequirementImpl addIdentityRequirement(ResourceImpl resource, String name, String type, VersionRange range, boolean mandatory, boolean conditional) { Map<String, String> dirs = new StringArrayMap<>((mandatory ? 0 : 1) + (conditional ? 1 : 0)); Map<String, Object> attrs = new StringArrayMap<>((name != null ? 1 : 0) + (type != null ? 1 : 0) + (range != null ? 1 : 0)); if (!mandatory) { dirs.put(REQUIREMENT_RESOLUTION_DIRECTIVE, RESOLUTION_OPTIONAL); } if (conditional) { dirs.put(REQUIREMENT_CONDITIONAL_DIRECTIVE, CONDITIONAL_TRUE); } if (name != null) { attrs.put(IDENTITY_NAMESPACE, name); } if (type != null) { attrs.put(CAPABILITY_TYPE_ATTRIBUTE, type); } if (range != null) { attrs.put(CAPABILITY_VERSION_ATTRIBUTE, range); } RequirementImpl requirement = new RequirementImpl(resource, IDENTITY_NAMESPACE, dirs, attrs); resource.addRequirement(requirement); return requirement; }
private RequirementImpl getFirstIdentityReq(ResourceImpl resource) { for (Requirement r : resource.getRequirements(null)) { if (IDENTITY_NAMESPACE.equals(r.getNamespace())) { return (RequirementImpl) r; } } return null; }
throw new IllegalStateException("Unexpected attribute '" + reader.getAttributeLocalName(0) + "'"); ResourceImpl resource = new ResourceImpl(); int event; while ((event = reader.nextTag()) == START_ELEMENT) { resource.addCapability(cap); break; case REQUIREMENT: resource.addRequirement(parseRequirement(reader, resource)); break; default:
attrs.put(IdentityNamespace.CAPABILITY_VERSION_ATTRIBUTE, bundleVersion); CapabilityImpl identity = new CapabilityImpl(resource, IdentityNamespace.IDENTITY_NAMESPACE, Collections.<String, String>emptyMap(), attrs); resource.addCapability(identity); resource.addCapability(new CapabilityImpl(resource, ContentNamespace.CONTENT_NAMESPACE, Collections.<String, String>emptyMap(), Collections.<String, Object>singletonMap(ContentNamespace.CAPABILITY_URL_ATTRIBUTE, uri))); resource.addCapability(new CapabilityImpl(resource, BundleRevision.BUNDLE_NAMESPACE, bundleCap.dirs, bundleCap.attrs)); resource.addCapability(new CapabilityImpl( resource, BundleRevision.HOST_NAMESPACE, bundleCap.dirs, resource.addCapabilities(exportCaps); resource.addCapabilities(provideCaps); resource.addRequirements(hostReqs); resource.addRequirements(importReqs); resource.addRequirements(rbReqs); resource.addRequirements(requireReqs); resource.addRequirements(dynamicReqs);
public static ResourceImpl build(String uri, Map<String, String> headerMap, boolean removeServiceRequirements) throws BundleException { return build(new ResourceImpl(), uri, headerMap, removeServiceRequirements); }
public static void addIdentityRequirement(ResourceImpl resource, Resource required, boolean mandatory) { for (Capability cap : required.getCapabilities(null)) { if (cap.getNamespace().equals(IDENTITY_NAMESPACE)) { Map<String, Object> attributes = cap.getAttributes(); Map<String, String> dirs = new StringArrayMap<>(1); dirs.put(REQUIREMENT_RESOLUTION_DIRECTIVE, mandatory ? RESOLUTION_MANDATORY : RESOLUTION_OPTIONAL); Version version = (Version) attributes.get(CAPABILITY_VERSION_ATTRIBUTE); Map<String, Object> attrs = new StringArrayMap<>(version != null ? 3 : 2); attrs.put(IDENTITY_NAMESPACE, attributes.get(IDENTITY_NAMESPACE)); attrs.put(CAPABILITY_TYPE_ATTRIBUTE, attributes.get(CAPABILITY_TYPE_ATTRIBUTE)); if (version != null) { attrs.put(CAPABILITY_VERSION_ATTRIBUTE, new VersionRange(version, true)); } resource.addRequirement(new RequirementImpl(resource, IDENTITY_NAMESPACE, dirs, attrs)); } } }
private void wrap(Map<Capability, Capability> map, Subsystem subsystem, Resource resource) { ResourceImpl wrapped = new ResourceImpl(); for (Capability cap : resource.getCapabilities(null)) { CapabilityImpl wCap = new CapabilityImpl(wrapped, cap.getNamespace(), cap.getDirectives(), cap.getAttributes()); map.put(cap, wCap); wrapped.addCapability(wCap); } for (Requirement req : resource.getRequirements(null)) { RequirementImpl wReq = new RequirementImpl(wrapped, req.getNamespace(), req.getDirectives(), req.getAttributes()); wrapped.addRequirement(wReq); } addIdentityRequirement(wrapped, subsystem, false); resToSub.put(wrapped, subsystem); try { downloader.download(getUri(wrapped), null); } catch (MalformedURLException e) { throw new IllegalStateException("Unable to download resource: " + getUri(wrapped)); } } }
public static ResourceImpl build(String uri, Map<String, String> headerMap) throws BundleException { return build(new ResourceImpl(), uri, headerMap, false); }
ResourceImpl cloneResource(Resource resource) { ResourceImpl res = new ResourceImpl(); for (Capability cap : resource.getCapabilities(null)) { res.addCapability(new CapabilityImpl(res, cap.getNamespace(), new StringArrayMap<>(cap.getDirectives()), new StringArrayMap<>(cap.getAttributes()))); } for (Requirement req : resource.getRequirements(null)) { SimpleFilter sf; if (req instanceof RequirementImpl) { sf = ((RequirementImpl) req).getFilter(); } else if (req.getDirectives().containsKey(REQUIREMENT_FILTER_DIRECTIVE)) { sf = SimpleFilter.parse(req.getDirectives().get(REQUIREMENT_FILTER_DIRECTIVE)); } else { sf = SimpleFilter.convert(req.getAttributes()); } res.addRequirement(new RequirementImpl(res, req.getNamespace(), new StringArrayMap<>(req.getDirectives()), new StringArrayMap<>(req.getAttributes()), sf)); } return res; }
public static ResourceImpl build(String uri, Map<String, String> headerMap, boolean removeServiceRequirements) throws BundleException { return build(new ResourceImpl(), uri, headerMap, removeServiceRequirements); }