@Override public Collection<Resource> getMandatoryResources() { List<Resource> resources = new ArrayList<>(); Requirement req = new RequirementImpl( null, IDENTITY_NAMESPACE, Collections.emptyMap(), Collections.emptyMap(), SimpleFilter.parse("(" + IDENTITY_NAMESPACE + "=root)")); Collection<Capability> identities = repository.findProviders(Collections.singleton(req)).get(req); for (Capability identity : identities) { resources.add(identity.getResource()); } return resources; }
private static RequirementImpl parseRequirement(XMLStreamReader reader, ResourceImpl resource) throws XMLStreamException { String[] namespace = new String[1]; Map<String, String> directives = new HashMap<>(); Map<String, Object> attributes = new HashMap<>(); parseClause(reader, namespace, directives, attributes); sanityCheckEndElement(reader, reader.getEventType(), REQUIREMENT); String filterStr = directives.get(Constants.FILTER_DIRECTIVE); SimpleFilter sf = (filterStr != null) ? SimpleFilter.parse(filterStr) : SimpleFilter.convert(attributes); return new RequirementImpl(resource, namespace[0], directives, attributes, sf); }
private static RequirementImpl parseRequirement(XMLStreamReader reader, ResourceImpl resource) throws XMLStreamException { String[] namespace = new String[1]; Map<String, String> directives = new HashMap<>(); Map<String, Object> attributes = new HashMap<>(); parseClause(reader, namespace, directives, attributes); sanityCheckEndElement(reader, reader.getEventType(), REQUIREMENT); String filterStr = directives.get(Constants.FILTER_DIRECTIVE); SimpleFilter sf = (filterStr != null) ? SimpleFilter.parse(filterStr) : SimpleFilter.convert(attributes); return new RequirementImpl(resource, namespace[0], directives, attributes, sf); }
reqList.add(new RequirementImpl( resource, ServiceNamespace.SERVICE_NAMESPACE,
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; }
reqList.add(new RequirementImpl( resource, ServiceNamespace.SERVICE_NAMESPACE,
reqList.add(new RequirementImpl(resource, BundleRevision.BUNDLE_NAMESPACE, newDirs, newAttrs));
reqList.add(new RequirementImpl(resource, BundleRevision.BUNDLE_NAMESPACE, newDirs, newAttrs));
private static List<Requirement> convertRequireCapabilities( List<ParsedHeaderClause> clauses, Resource resource) throws BundleException { // Now convert generic header clauses into requirements. List<Requirement> reqList = new ArrayList<>(); for (ParsedHeaderClause clause : clauses) { try { String filterStr = clause.dirs.get(Constants.FILTER_DIRECTIVE); SimpleFilter sf = (filterStr != null) ? SimpleFilter.parse(filterStr) : SimpleFilter.convert(clause.attrs); for (String path : clause.paths) { // Create requirement and add to requirement list. reqList.add(new RequirementImpl( resource, path, clause.dirs, clause.attrs, sf)); } } catch (Exception ex) { throw new BundleException("Error creating requirement: " + ex, ex); } } return reqList; }
private static List<Requirement> convertRequireCapabilities( List<ParsedHeaderClause> clauses, Resource resource) throws BundleException { // Now convert generic header clauses into requirements. List<Requirement> reqList = new ArrayList<>(); for (ParsedHeaderClause clause : clauses) { try { String filterStr = clause.dirs.get(Constants.FILTER_DIRECTIVE); SimpleFilter sf = (filterStr != null) ? SimpleFilter.parse(filterStr) : SimpleFilter.convert(clause.attrs); for (String path : clause.paths) { // Create requirement and add to requirement list. reqList.add(new RequirementImpl( resource, path, clause.dirs, clause.attrs, sf)); } } catch (Exception ex) { throw new BundleException("Error creating requirement: " + ex, ex); } } return reqList; }
new RequirementImpl( resource, BundleRevision.PACKAGE_NAMESPACE,
newDirs.put(Constants.FILTER_DIRECTIVE, sf.toString()); reqs.add(new RequirementImpl( resource, BundleRevision.HOST_NAMESPACE, newDirs,
new RequirementImpl( resource, BundleRevision.PACKAGE_NAMESPACE,
/** * Changes feature identifier (<code>name[/version]</code>) into a requirement specification. * The OSGi manifest header for a feature will be: <code>osgi.identity;osgi.identity=feature-name;type=karaf.feature[;version=feature-version];filter:=filter-from-attrs</code>. * * @param feature The feature name. * @return The feature requirement. */ public static String toFeatureRequirement(String feature) { String[] parts = feature.split("/"); Map<String, Object> attrs = new StringArrayMap<>(parts.length > 1 ? 3 : 2); attrs.put(IDENTITY_NAMESPACE, parts[0]); attrs.put(CAPABILITY_TYPE_ATTRIBUTE, TYPE_FEATURE); if (parts.length > 1) { attrs.put(CAPABILITY_VERSION_ATTRIBUTE, new VersionRange(parts[1])); } Map<String, String> dirs = Collections.singletonMap( Constants.FILTER_DIRECTIVE, SimpleFilter.convert(attrs).toString()); return new RequirementImpl(null, IDENTITY_NAMESPACE, dirs, attrs).toString(); }
newDirs.put(Constants.FILTER_DIRECTIVE, sf.toString()); reqs.add(new RequirementImpl( resource, BundleRevision.HOST_NAMESPACE, newDirs,
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 static Object toJson(Repository repository) { Requirement req = new RequirementImpl( null, IDENTITY_NAMESPACE, Collections.emptyMap(), Collections.emptyMap(), SimpleFilter.MATCH_ALL_FILTER); Collection<Capability> identities = repository.findProviders(Collections.singleton(req)).get(req); List<Object> resources = new ArrayList<>(); for (Capability identity : identities) { String id = ResourceUtils.toString(null, identity.getNamespace(), identity.getAttributes(), identity.getDirectives()); resources.add(toJson(identity.getResource())); } return resources; }
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)); } } }
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; }
final Requirement c = new RequirementImpl(null, r.getNamespace(), r.getDirectives(), r.getAttributes()); result.getRequirements().add(c);