private List<CircularRefInfo> orderProviders(CapabilityProviders providers) throws ProvisioningException { if(!providers.isProvided()) { List<CircularRefInfo> firstLoop = null; if(!providers.specs.isEmpty()) { for(SpecFeatures specFeatures : providers.specs) { final List<CircularRefInfo> loop = orderFeaturesInSpec(specFeatures, !specFeatures.isFree()); if(providers.isProvided()) { return null; } if(firstLoop == null) { firstLoop = loop; } } } if (!providers.features.isEmpty()) { for (ResolvedFeature provider : providers.features) { final List<CircularRefInfo> loop = orderFeature(provider); if(providers.isProvided()) { return null; } if(firstLoop == null) { firstLoop = loop; } } } return firstLoop; } return null; }
private List<CircularRefInfo> orderProviders(CapabilityProviders providers) throws ProvisioningException { if(providers.isProvided()) { return Collections.emptyList(); } List<CircularRefInfo> firstLoop = null; if (!providers.specs.isEmpty()) { for (SpecFeatures specFeatures : providers.specs) { final List<CircularRefInfo> loop = orderFeaturesInSpec(specFeatures, !specFeatures.isFree()); if (providers.isProvided()) { return Collections.emptyList(); } if (firstLoop == null) { firstLoop = loop; } } } if (!providers.features.isEmpty()) { for (ResolvedFeature provider : providers.features) { final List<CircularRefInfo> loop = orderFeature(provider); if (providers.isProvided()) { return Collections.emptyList(); } if (firstLoop == null) { firstLoop = loop; } } } return firstLoop == null ? Collections.emptyList() : firstLoop; }
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; }