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); } } }
/** * Creates a dependency on a layer. * * @param name layer name * @param optional whether the dependency is optional * @return dependency spec */ public static ConfigLayerDependency forLayer(String name, boolean optional) { return new ConfigLayerDependency(name, optional); }
private static Map<String, Map<String, Set<String>>> getAllLayers(ProvisioningLayout<FeaturePackLayout> pLayout, boolean includeDependencies) throws ProvisioningException, IOException { Map<String, Map<String, Set<String>>> layersMap = new HashMap<>(); for (FeaturePackLayout fp : pLayout.getOrderedFeaturePacks()) { for (ConfigId layer : fp.loadLayers()) { String model = layer.getModel(); Map<String, Set<String>> names = layersMap.get(model); if (names == null) { names = new HashMap<>(); layersMap.put(model, names); } Set<String> dependencies = new TreeSet<>(); if (includeDependencies) { ConfigLayerSpec spec = fp.loadConfigLayerSpec(model, layer.getName()); for (ConfigLayerDependency dep : spec.getLayerDeps()) { dependencies.add(dep.getName()); } } names.put(layer.getName(), dependencies); } } return layersMap; }
public Builder addLayerDep(String layerName, boolean optional) { layerDeps = CollectionUtils.putLinked(layerDeps, layerName, ConfigLayerDependency.forLayer(layerName, optional)); return this; }
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); } }
/** * Creates a required dependency on a layer. * * @param name layer name * @return dependency spec */ public static ConfigLayerDependency forLayer(String name) { return new ConfigLayerDependency(name, false); }
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; } }