private CapabilitySpec(List<String> elems, List<Boolean> elemTypes, boolean optional) throws ProvisioningDescriptionException { this.elems = elems.toArray(new String[elems.size()]); this.isElemStatic = elemTypes.toArray(new Boolean[elemTypes.size()]); this.optional = optional; if(optional && isStatic()) { throw new ProvisioningDescriptionException("Static capability cannot be optional: " + toString()); } }
static String noCapabilityProvider(ResolvedFeature feature, CapabilitySpec capSpec, String resolvedCap) { final StringBuilder buf = new StringBuilder(); buf.append("No provider found for capability ").append(resolvedCap); buf.append(" required by "); if(feature.hasId()) { buf.append(feature.getId()); } else { buf.append(" an instance of ").append(feature.getSpecId()); } if(!capSpec.isStatic()) { buf.append(" as ").append(capSpec.toString()); } return buf.toString(); }
List<String> resolve(CapabilitySpec capSpec, ResolvedFeature feature) throws ProvisioningException { if(capSpec.isStatic()) { return Collections.singletonList(capSpec.toString()); } if(capBuf == null) { capBuf = new StringBuilder(); } this.feature = feature; this.capSpec = capSpec; try { if(!capSpec.resolve(this)) { return Collections.emptyList(); } if(capList == null) { return capBuf.length() == 0 ? Collections.emptyList() : Collections.singletonList(capBuf.toString()); } List<String> resolved = new ArrayList<>(capList.size()); for (int i = 0; i < capList.size(); ++i) { resolved.add(capList.get(i).toString()); } return resolved; } catch(ProvisioningException e) { throw new ProvisioningException(Errors.failedToResolveCapability(feature, capSpec), e); } finally { reset(); } }
private void doOrder(ProvisioningRuntimeBuilder rt) throws ProvisioningException { for (SpecFeatures features : specFeatures.values()) { // resolve references features.spec.resolveRefMappings(rt); // resolve and register capability providers if(features.spec.xmlSpec.providesCapabilities()) { for(CapabilitySpec cap : features.spec.xmlSpec.getProvidedCapabilities()) { if(cap.isStatic()) { getProviders(cap.toString(), true).add(features); } else { for(ResolvedFeature feature : features.getFeatures()) { final List<String> resolvedCaps = capResolver.resolve(cap, feature); if(resolvedCaps.isEmpty()) { continue; } for(String resolvedCap : resolvedCaps) { getProviders(resolvedCap, true).add(feature); } } } } } } orderedFeatures = new ArrayList<>(features.size()); for(SpecFeatures features : specFeatures.values()) { orderFeaturesInSpec(features, false); } }
if(cap.isStatic()) { getProviders(cap.toString(), true).add(specFeatures); } else {