public CapReqBuilder addAttributes(Map<? extends String, ? extends Object> attributes) throws Exception { for (Entry<? extends String, ? extends Object> e : attributes.entrySet()) { addAttribute(e.getKey(), e.getValue()); } return this; }
public CapReqBuilder(String ns, Attrs attrs) throws Exception { this.namespace = ns; for (Entry<String, String> entry : attrs.entrySet()) { String key = entry.getKey(); if (key.endsWith(":")) addDirective(key.substring(0, key.length() - 1), entry.getValue()); else addAttribute(key, entry.getValue()); } }
/** * In bnd, we only use one map for both directives & attributes. This method will properly * dispatch them AND take care of typing * * @param attrs * @throws Exception */ public void addAttributesOrDirectives(Attrs attrs) throws Exception { for (Entry<String, String> e : attrs.entrySet()) { String directive = Attrs.toDirective(e.getKey()); if (directive != null) { addDirective(directive, e.getValue()); } else { Object typed = attrs.getTyped(e.getKey()); if (typed instanceof aQute.bnd.version.Version) { typed = new Version(typed.toString()); } addAttribute(e.getKey(), typed); } } }
public void parseIndex( InputStream stream, URI baseUri, IRepositoryIndexProcessor listener, LogService log) throws Exception { XMLInputFactory inputFactory = XMLInputFactory.newInstance(); inputFactory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, true); inputFactory.setProperty(XMLInputFactory.IS_VALIDATING, false); inputFactory.setProperty(XMLInputFactory.SUPPORT_DTD, false); StreamSource source = new StreamSource(stream, baseUri.toString()); XMLStreamReader reader = inputFactory.createXMLStreamReader(source); ResourceBuilder resourceBuilder = null; CapReqBuilder capReqBuilder = null; while (reader.hasNext()) { int type = reader.next(); String localName; switch (type) { case START_ELEMENT: localName = reader.getLocalName(); if (TAG_REFERRAL.equals(localName)) { Referral referral = new Referral( reader.getAttributeValue(null, ATTR_REFERRAL_URL), parseInt(reader.getAttributeValue(null, ATTR_REFERRAL_DEPTH))); listener.processReferral(baseUri, referral, referral.getDepth(), 1); } else if (TAG_RESOURCE.equals(localName)) { resourceBuilder = new ResourceBuilder(); String bsn = reader.getAttributeValue(null, ATTR_RESOURCE_SYMBOLIC_NAME); String versionStr = reader.getAttributeValue(null, ATTR_RESOURCE_VERSION); Version version = Version.parseVersion(versionStr); String uri = reader.getAttributeValue(null, ATTR_RESOURCE_URI); URI resolvedUri = resolveUri(uri, baseUri); addBasicCapabilities(resourceBuilder, bsn, version, resolvedUri); } else if (TAG_CAPABILITY.equals(localName)) { String obrName = reader.getAttributeValue(null, ATTR_NAME); String namespace = mapObrNameToR5Namespace(obrName, false); capReqBuilder = new CapReqBuilder(namespace); } else if (TAG_REQUIRE.equals(localName)) { String obrName = reader.getAttributeValue(null, ATTR_NAME); boolean extend = "true".equalsIgnoreCase(reader.getAttributeValue(null, ATTR_EXTEND)); String namespace = mapObrNameToR5Namespace(obrName, extend); boolean optional = "true".equalsIgnoreCase(reader.getAttributeValue(null, ATTR_OPTIONAL)); capReqBuilder = new CapReqBuilder(namespace); if (optional) capReqBuilder.addDirective( Namespace.REQUIREMENT_RESOLUTION_DIRECTIVE, Namespace.RESOLUTION_OPTIONAL); String filter = translateObrFilter(namespace, reader.getAttributeValue(null, ATTR_FILTER), log); capReqBuilder.addDirective(Namespace.REQUIREMENT_FILTER_DIRECTIVE, filter); } else if (TAG_PROPERTY.equals(localName)) { String name = reader.getAttributeValue(null, ATTR_PROPERTY_NAME); String typeStr = reader.getAttributeValue(null, ATTR_PROPERTY_TYPE); String valueStr = reader.getAttributeValue(null, ATTR_PROPERTY_VALUE); if (capReqBuilder != null) { name = mapObrPropertyToR5(capReqBuilder.getNamespace(), name); if (PROPERTY_USES.equals(name)) capReqBuilder.addDirective(PROPERTY_USES, valueStr); else { Object value = convertProperty(valueStr, typeStr); capReqBuilder.addAttribute(name, value); } } } break; case END_ELEMENT: localName = reader.getLocalName(); if (TAG_RESOURCE.equals(localName)) { if (resourceBuilder != null) { Resource resource = resourceBuilder.build(); listener.processResource(resource); } } else if (TAG_CAPABILITY.equals(localName)) { if (resourceBuilder != null && capReqBuilder != null) resourceBuilder.addCapability(capReqBuilder); capReqBuilder = null; } else if (TAG_REQUIRE.equals(localName)) { if (resourceBuilder != null && capReqBuilder != null) resourceBuilder.addRequirement(capReqBuilder); capReqBuilder = null; } } } }