ConfigurationFailureResult FillFromConfiguration(string currentOperation, Dictionary <string, FinalConfigurationItem> final, Func <ConfigurationItem, bool> filter = null) { foreach (ConfigurationLayer layer in _configurationLayerCollection) { FinalConfigurationItem data; ConfigurationStatus combinedStatus; StartDependencyImpact combinedImpact; string invalidCombination; foreach (ConfigurationItem item in layer.Items) { if (filter == null || filter(item)) { if (final.TryGetValue(item.ServiceOrPluginFullName, out data)) { combinedStatus = FinalConfigurationItem.Combine(item.Status, data.Status, out invalidCombination); if (string.IsNullOrEmpty(invalidCombination)) { combinedImpact = FinalConfigurationItem.Combine(item.Impact, data.Impact, out invalidCombination); if (string.IsNullOrEmpty(invalidCombination)) { final[item.ServiceOrPluginFullName] = new FinalConfigurationItem(item.ServiceOrPluginFullName, combinedStatus, combinedImpact); } else { return(new ConfigurationFailureResult(String.Format("{0}: {1} for {2}", currentOperation, invalidCombination, item.ServiceOrPluginFullName))); } } else { return(new ConfigurationFailureResult(String.Format("{0}: {1} for {2}", currentOperation, invalidCombination, item.ServiceOrPluginFullName))); } } else { final.Add(item.ServiceOrPluginFullName, new FinalConfigurationItem(item.ServiceOrPluginFullName, item.Status, item.Impact)); } } } } return(new ConfigurationFailureResult()); }
internal IYodiiEngineResult OnConfigurationItemChanging(ConfigurationItem item, FinalConfigurationItem data) { Debug.Assert(item != null && _finalConfiguration != null && _configurationLayerCollection.Count != 0); if (_currentEventArgs != null) { throw new InvalidOperationException("Another change is in progress"); } Dictionary <string, FinalConfigurationItem> final = new Dictionary <string, FinalConfigurationItem>(); final.Add(item.ServiceOrPluginFullName, data); ConfigurationFailureResult internalResult = FillFromConfiguration("Item changing", final, c => c != item); if (!internalResult.Success) { return(new YodiiEngineResult(internalResult, Engine)); } if (item.Status != data.Status) { return(OnConfigurationChanging(final, finalConf => new ConfigurationChangingEventArgs(finalConf, FinalConfigurationChange.StatusChanged, item))); } return(OnConfigurationChanging(final, finalConf => new ConfigurationChangingEventArgs(finalConf, FinalConfigurationChange.ImpactChanged, item))); }
internal IYodiiEngineResult OnConfigurationItemChanging(ConfigurationItem item, FinalConfigurationItem data) { Debug.Assert(item != null && item.Layer == this && _configurationItemCollection.Items.Contains(item)); if (_owner == null) { return(SuccessYodiiEngineResult.NullEngineSuccessResult); } return(_owner.OnConfigurationItemChanging(item, data)); }