private void mergeFgScope() throws ProvisioningException { if(lastFg <= 0) { return; } final Map<ResolvedFeatureId, ResolvedFeature> endedGroup = fgFeatures.get(lastFg--); final Map<ResolvedFeatureId, ResolvedFeature> parentGroup = fgFeatures.get(lastFg); for (Map.Entry<ResolvedFeatureId, ResolvedFeature> entry : endedGroup.entrySet()) { final ResolvedFeature parentFeature = parentGroup.get(entry.getKey()); if (parentFeature == null) { parentGroup.put(entry.getKey(), entry.getValue()); if (lastFg == 0) { addToSpecFeatures(entry.getValue()); } } else { parentFeature.merge(entry.getValue(), true); } } endedGroup.clear(); features = parentGroup; }
ResolvedFeature includeFeature(ResolvedFeatureId id, ResolvedFeatureSpec spec, Map<String, Object> resolvedParams, Map<ResolvedFeatureId, FeatureDependencySpec> resolvedDeps) throws ProvisioningException { if(id != null) { final ResolvedFeature feature = features.get(id); if(feature != null) { feature.merge(resolvedDeps, resolvedParams, true); return feature; } } final ResolvedFeature feature = new ResolvedFeature(id, spec, resolvedParams, resolvedDeps, ++featureIncludeCount); addFeature(feature); return feature; }
void merge(ResolvedFeature other, boolean overwriteParams) throws ProvisioningException { merge(other.deps, other.getResolvedParams(), overwriteParams); if(!other.unsetParams.isEmpty()) { unsetAllParams(other.unsetParams, overwriteParams); } if(overwriteParams) { if(!other.resetParams.isEmpty()) { resetAllParams(other.resetParams); } } }
localFeature.merge(feature, false);