void addLayerDep(ConfigLayerDependency layerDep) { if(layerDeps == null) { layerDeps = Collections.singletonMap(layerDep.getName(), layerDep); } else { final ConfigLayerDependency existing = layerDeps.get(layerDep.getName()); if(existing == null || existing.isOptional() && !layerDep.isOptional()) { layerDeps = CollectionUtils.putLinked(layerDeps, layerDep.getName(), layerDep); } } }
protected ElementNode toElement(ConfigLayerSpec layer, String ns) { final ElementNode configE = addElement(null, Element.LAYER_SPEC.getLocalName(), ns); addAttribute(configE, Attribute.NAME, layer.getName()); if(layer.hasLayerDeps()) { final ElementNode layers = addElement(configE, Element.DEPENDENCIES.getLocalName(), ns); for(ConfigLayerDependency layerDep : layer.getLayerDeps()) { final ElementNode layerE = addElement(layers, Element.LAYER.getLocalName(), ns); addAttribute(layerE, Attribute.NAME, layerDep.getName()); if(layerDep.isOptional()) { addAttribute(layerE, Attribute.OPTIONAL, "true"); } } } FeatureGroupXmlWriter.addFeatureGroupDepBody(layer, configE, ns); return configE; } }
private void includeLayer(ConfigModelStack configStack, ConfigId layerId) throws ProvisioningException { if(!configStack.addLayer(layerId)) { return; } final ConfigModelStack layerStack = resolveConfigLayer(layerId); if(layerStack.hasLayerDeps()) { for(ConfigLayerDependency layerDep : layerStack.getLayerDeps()) { if(configStack.isLayerExcluded(layerDep.getName())) { if(layerDep.isOptional()) { continue; } throw new ProvisioningException(Errors.unsatisfiedLayerDependency(layerId.getName(), layerDep.getName())); } includeLayer(configStack, new ConfigId(configStack.id.getModel(), layerDep.getName())); } } configStack.includedLayer(layerId); for(ResolvedFeature feature : layerStack.orderFeatures(false)) { if(configStack.isFilteredOut(feature.getSpecId(), feature.getId())) { continue; } configStack.includeFeature(feature.id, feature.spec, feature.params, feature.deps); } }