@Override public boolean equals(Object obj) { if (this == obj) return true; if (!super.equals(obj)) return false; if (getClass() != obj.getClass()) return false; ConfigLayerSpec other = (ConfigLayerSpec) obj; if (layerDeps == null) { if (other.layerDeps != null) return false; } else if (!layerDeps.equals(other.layerDeps)) return false; return true; }
private boolean isRelevant(ResolvedFeatureGroupConfig resolvedFg) { if(resolvedFg.fg.getId() == null) { return true; } for(int i = groupStack.size() - 1; i >= 0; --i) { final ResolvedFeatureGroupConfig stacked = groupStack.get(i); if (stacked.fg.getId() == null || stacked.producer == null || resolvedFg.producer == null || !stacked.producer.equals(resolvedFg.producer) || !stacked.fg.getId().equals(resolvedFg.fg.getId())) { continue; } return !resolvedFg.isSubsetOf(stacked); } return true; }
ResolvedFeatureGroupConfig resolveFeatureGroupConfig(ConfigModelStack configStack, FeatureGroupSupport fg) throws ProvisioningException { ProducerSpec fgOrigin = null; if(!(fg.isConfig() || fg.isLayer())) { final FeaturePackRuntimeBuilder originalOrigin = currentOrigin; getFeatureGroupSpec(fg.getName()); fgOrigin = currentOrigin.producer; currentOrigin = originalOrigin; resolvedFgc.inheritFeatures = fg.isInheritFeatures(); if(fg.hasExcludedSpecs()) { resolvedFgc.excludedSpecs = resolveSpecIds(resolvedFgc.excludedSpecs, fg.getExcludedSpecs()); if(fg.hasIncludedSpecs()) { resolvedFgc.includedSpecs = resolveSpecIds(resolvedFgc.includedSpecs, fg.getIncludedSpecs()); if(fg.hasExcludedFeatures()) { resolvedFgc.excludedFeatures = resolveExcludedIds(resolvedFgc.excludedFeatures, fg.getExcludedFeatures()); if(fg.hasIncludedFeatures()) { resolvedFgc.includedFeatures = resolveIncludedIds(resolvedFgc.includedFeatures, fg.getIncludedFeatures()); if(fg.hasExternalFeatureGroups()) { final FeaturePackRuntimeBuilder originalOrigin = currentOrigin; for (Map.Entry<String, FeatureGroup> entry : fg.getExternalFeatureGroups().entrySet()) { final FeatureGroup extFg = entry.getValue(); setOrigin(entry.getKey());
static void addFeatureGroupIncludeExclude(FeatureGroupSupport dep, String ns, final ElementNode depE) { if(dep.hasExcludedSpecs()) { for(SpecId spec : dep.getExcludedSpecs()) { final ElementNode excludeE = addElement(depE, Element.EXCLUDE.getLocalName(), ns); addAttribute(excludeE, Attribute.SPEC, spec.toString()); if(dep.hasExcludedFeatures()) { for(Map.Entry<FeatureId, String> excluded : dep.getExcludedFeatures().entrySet()) { final ElementNode excludeE = addElement(depE, Element.EXCLUDE.getLocalName(), ns); addAttribute(excludeE, Attribute.FEATURE_ID, excluded.getKey().toString()); if(dep.hasIncludedSpecs()) { for(SpecId spec : dep.getIncludedSpecs()) { final ElementNode includeE = addElement(depE, Element.INCLUDE.getLocalName(), ns); addAttribute(includeE, Attribute.SPEC, spec.toString()); if(dep.hasIncludedFeatures()) { for(Map.Entry<FeatureId, FeatureConfig> entry : dep.getIncludedFeatures().entrySet()) { final ElementNode includeE = addElement(depE, Element.INCLUDE.getLocalName(), ns); addAttribute(includeE, Attribute.FEATURE_ID, entry.getKey().toString());
public static void addFeatureGroupDepBody(FeatureGroupSupport dep, final ElementNode depE, String ns) { if(dep.getName() != null) { addAttribute(depE, Attribute.NAME, dep.getName()); } if(!dep.isInheritFeatures()) { addAttribute(depE, Attribute.INHERIT_FEATURES, FALSE); } addFeatureGroupIncludeExclude(dep, ns, depE); writeFeatureGroupSpecBody(depE, dep, ns); if(dep.hasExternalFeatureGroups()) { for(Map.Entry<String, FeatureGroup> entry : dep.getExternalFeatureGroups().entrySet()) { final ElementNode fpE = addElement(depE, Element.ORIGIN.getLocalName(), ns); addAttribute(fpE, Attribute.NAME, entry.getKey()); addFeatureGroupIncludeExclude(entry.getValue(), ns, fpE); } } if(dep.hasPackageDeps()) { PackageXmlWriter.writePackageDeps(dep, addElement(depE, Element.PACKAGES.getLocalName(), ns)); } }
private void processFeatureGroup(FeatureGroupSupport includedFg) throws ProvisioningException { final boolean pushed = configStack.pushGroup(includedFg); final FeaturePackRuntimeBuilder originalOrigin = currentOrigin; try { final FeatureGroupSupport originalFg = getFeatureGroupSpec(includedFg.getName()); if (originalFg.hasPackageDeps()) { processPackageDeps(originalFg, null); } if (!pushed) { return; } processConfigItemContainer(originalFg); } finally { currentOrigin = originalOrigin; } configStack.popGroup(); if(includedFg.hasItems()) { processConfigItemContainer(includedFg); } }
private void processConfigLayer(ConfigModelStack configStack, FeatureGroupSupport layer) throws ProvisioningException { this.configStack = configStack; try { if(layer.hasPackageDeps()) { processPackageDeps(layer, null); } processConfigItemContainer(layer); this.configStack = null; } catch (ProvisioningException e) { throw new ProvisioningException(Errors.failedToResolveConfigLayer(configStack.id.getModel(), layer.getName()), e); } }
private boolean isRelevant(ResolvedFeatureGroupConfig resolvedFg) { if(resolvedFg.fg.getId() == null) { return true; } if(!lastConfig.isRelevant(resolvedFg)) { return false; } if(configs.size() > 1) { for (int i = configs.size() - 2; i >= 0; --i) { if (!configs.get(i).isRelevant(resolvedFg)) { return false; } } } return true; } }
if (this == obj) return true; if (!super.equals(obj)) return false; if (getClass() != obj.getClass())
void processIncludedFeatures(final ResolvedFeatureGroupConfig pushedFgConfig) throws ProvisioningException { if (pushedFgConfig.includedFeatures.isEmpty()) { return; } for (Map.Entry<ResolvedFeatureId, FeatureConfig> feature : pushedFgConfig.includedFeatures.entrySet()) { final FeatureConfig includedFc = feature.getValue(); if (includedFc != null && includedFc.hasParams()) { final ResolvedFeatureId includedId = feature.getKey(); if (pushedFgConfig.configStack.isFilteredOut(includedId.specId, includedId)) { continue; } // make sure the included ID is in fact present on the feature group branch if (!pushedFgConfig.configStack.includes(includedId)) { throw new ProvisioningException(Errors.featureNotInScope(includedId, pushedFgConfig.fg.getId() == null ? "'anonymous'" : pushedFgConfig.fg.getId().toString(), currentOrigin == null ? null : currentOrigin.producer.getLocation().getFPID())); } resolveFeature(pushedFgConfig.configStack, includedFc); } } }