private List<CircularRefInfo> orderCapabilityProviders(ResolvedFeature feature, List<CircularRefInfo> circularRefs) throws ProvisioningException { for (CapabilitySpec capSpec : feature.spec.xmlSpec.getRequiredCapabilities()) { final List<String> resolvedCaps = capResolver.resolve(capSpec, feature); if (resolvedCaps.isEmpty()) { continue; } for (String resolvedCap : resolvedCaps) { final CapabilityProviders providers; try { providers = getProviders(resolvedCap, false); } catch (ProvisioningException e) { throw new ProvisioningException(Errors.noCapabilityProvider(feature, capSpec, resolvedCap)); } final List<CircularRefInfo> circles = orderProviders(providers); if (circularRefs == null) { circularRefs = circles; } else { if (circularRefs.size() == 1) { final CircularRefInfo first = circularRefs.get(0); circularRefs = new ArrayList<>(1 + circles.size()); circularRefs.add(first); } circularRefs.addAll(circles); } } } return circularRefs; }
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); } }
private List<CircularRefInfo> orderCapabilityProviders(ResolvedFeature feature, List<CircularRefInfo> circularRefs) throws ProvisioningException { for (CapabilitySpec capSpec : feature.spec.xmlSpec.getRequiredCapabilities()) { final List<String> resolvedCaps = capResolver.resolve(capSpec, feature); if (resolvedCaps.isEmpty()) { continue; } for (String resolvedCap : resolvedCaps) { final CapabilityProviders providers; try { providers = getProviders(resolvedCap, false); } catch (ProvisioningException e) { throw new ProvisioningException(Errors.noCapabilityProvider(feature, capSpec, resolvedCap)); } circularRefs = CollectionUtils.addAll(circularRefs, orderProviders(providers)); if(providers.isProvided()) { feature.addBranchDep(providers.branches.iterator().next(), false); //System.out.println("added branch dep on cap provider " + feature.getId() + " -> " + providers.branches); } else { providers.addBranchDependee(feature); } } } return circularRefs; }
} else { for(ResolvedFeature feature : specFeatures.getFeatures()) { final List<String> resolvedCaps = capResolver.resolve(cap, feature); if(resolvedCaps.isEmpty()) { continue;