ServiceData RegisterService(FinalConfiguration finalConfig, IServiceInfo s) { ServiceData data; if (_services.TryGetValue(s.ServiceFullName, out data)) { return(data); } //Set default status ConfigurationStatus serviceStatus = finalConfig.GetStatus(s.ServiceFullName); // Handle generalization. ServiceData dataGen = null; if (s.Generalization != null) { dataGen = RegisterService(finalConfig, s.Generalization); } Debug.Assert((s.Generalization == null) == (dataGen == null)); if (dataGen == null) { data = new ServiceData(this, s, serviceStatus); _serviceFamilies.Add(data.Family); } else { data = new ServiceData(s, dataGen, serviceStatus); } _services.Add(s.ServiceFullName, data); return(data); }
internal void OnRemoved() { Debug.Assert(_statusReason != null); _statusReason = null; _status = ConfigurationStatus.Optional; _impact = StartDependencyImpact.Unknown; }
/// <summary> /// This function encapsulates all configuration constraints regarding the <see cref="ConfigurationStatus"/> of an item. /// </summary> /// <param name="s1">Current <see cref="ConfigurationStatus"/></param> /// <param name="s2">Wanted <see cref="ConfigurationStatus"/></param> /// <param name="invalidCombination">string expliciting the error. Empty if all is well</param> /// <returns></returns> public static ConfigurationStatus Combine(ConfigurationStatus s1, ConfigurationStatus s2, out string invalidCombination) { invalidCombination = ""; if (s1 == s2) { return(s1); } if (s2 != ConfigurationStatus.Optional) { if (s1 == ConfigurationStatus.Optional || (s1 >= ConfigurationStatus.Runnable && s2 >= ConfigurationStatus.Runnable)) { return((s1 == ConfigurationStatus.Running) ? s1 : s2); } else if (s1 != s2) { invalidCombination = string.Format("Conflict for statuses {0} and {1}", s1, s2); return(s1); } else { invalidCombination = string.Format("Something went terribly, terribly wrong..."); return(s1); } } return(s1); }
/// <summary> /// Create a new OCPP change configuration response. /// </summary> /// <param name="Status">The success or failure of the change configuration command.</param> public ChangeConfigurationResponse(ConfigurationStatus Status) : base(Result.OK()) { this.Status = Status; }
private void ExecuteSetConfigItemStatus(object param) { if (_disposed) { return; } if (_isChangingConfig) { return; } _isChangingConfig = true; ComboBox box = (ComboBox)param; IConfigurationItem item = (IConfigurationItem)box.DataContext; ConfigurationStatus newStatus = (ConfigurationStatus)box.SelectedItem; var itemSetResult = item.SetStatus(newStatus, "ConfigurationEditor"); if (!itemSetResult.Success) { RaiseUserError("Couldn't set item", String.Format("Could not set {0} to {2}, as it would cause the following error:\n\n{1}", _serviceInfoManager.GetDescriptionOfServiceOrPluginFullName(item.ServiceOrPluginFullName), itemSetResult.Describe(), newStatus.ToString()) ); } _isChangingConfig = false; box.GetBindingExpression(ComboBox.SelectedItemProperty).UpdateTarget(); }
void SetCheckedConfigurationStatus(ConfigurationStatus?newStatus) { if (ConfigurationStatusMenu.ItemContainerGenerator.Status != System.Windows.Controls.Primitives.GeneratorStatus.ContainersGenerated) { return; } foreach (var item in this.ConfigurationStatusMenu.Items) { MenuItem childItem = ConfigurationStatusMenu.ItemContainerGenerator.ContainerFromItem(item) as MenuItem; if (newStatus == null) { childItem.IsChecked = false; continue; } else { ConfigurationStatus status = (ConfigurationStatus)item; ConfigurationStatus childStatus = (ConfigurationStatus)childItem.DataContext; if (childStatus == newStatus) { childItem.IsChecked = true; } else { childItem.IsChecked = false; } } } }
public static IYodiiEngineResult AddSuccess( this IConfigurationItemCollection @this, string name, ConfigurationStatus status, ConfigurationStatus? solvedStatusInFinalConfig = null ) { IYodiiEngineResult r = @this.Add( name, status ); r.CheckSuccess(); if( solvedStatusInFinalConfig != null ) Assert.That( @this.ParentLayer.ConfigurationManager.FinalConfiguration.GetStatus( name ), Is.EqualTo( solvedStatusInFinalConfig ) ); return r; }
private void ConfigurationStatusMenuItem_Click(object sender, RoutedEventArgs e) { MenuItem item = e.OriginalSource as MenuItem; ConfigurationStatus status = (ConfigurationStatus)item.DataContext; ChangeConfiguration(status); }
public async Task UpdateDeviceConfigurationStatus(string deviceEui, ConfigurationStatus configurationStatus) { Device device = await GetDevice(deviceEui); device.Configuration.Status = configurationStatus; await _context.SaveChangesAsync(); }
internal ServiceData(IConfigurationSolver solver, IServiceInfo s, ConfigurationStatus serviceStatus, StartDependencyImpact impact = StartDependencyImpact.Unknown) : this(s, serviceStatus, impact) { Family = new ServiceFamily(solver, this); _inheritedServicesWithThis = new ServiceData[] { this }; Initialize(); }
/// <summary> /// A FinalConfigurationItem is an immutable object that displays the latest configuration of an item. /// </summary> public FinalConfigurationItem( string serviceOrPluginFullName, ConfigurationStatus status, StartDependencyImpact impact = StartDependencyImpact.Unknown ) { Debug.Assert( !String.IsNullOrEmpty( serviceOrPluginFullName ) ); _serviceOrPluginFullName = serviceOrPluginFullName; _status = status; _impact = impact; }
/// <summary> /// A FinalConfigurationItem is an immutable object that displays the latest configuration of an item. /// </summary> public FinalConfigurationItem(string serviceOrPluginFullName, ConfigurationStatus status, StartDependencyImpact impact = StartDependencyImpact.Unknown) { Debug.Assert(!String.IsNullOrEmpty(serviceOrPluginFullName)); _serviceOrPluginFullName = serviceOrPluginFullName; _status = status; _impact = impact; }
public SolvedItemSnapshot(IYodiiItemData item) { _disabledReason = item.DisabledReason; _runningStatus = item.DynamicStatus; _configOriginalStatus = item.ConfigOriginalStatus; _configSolvedStatus = item.ConfigSolvedStatus; _configOriginalImpact = item.ConfigOriginalImpact; _configSolvedImpact = item.RawConfigSolvedImpact; }
public SolvedItemSnapshot( IYodiiItemData item ) { _disabledReason = item.DisabledReason; _runningStatus = item.DynamicStatus; _configOriginalStatus = item.ConfigOriginalStatus; _configSolvedStatus = item.ConfigSolvedStatus; _configOriginalImpact = item.ConfigOriginalImpact; _configSolvedImpact = item.RawConfigSolvedImpact; }
internal ConfigurationItem( ConfigurationLayer configurationLayer, string serviceOrPluginFullName, ConfigurationStatus initialStatus, StartDependencyImpact initialImpact, string initialStatusReason = "") { Debug.Assert( !String.IsNullOrEmpty( serviceOrPluginFullName ) ); Debug.Assert( configurationLayer != null ); Debug.Assert( initialStatusReason != null ); _owner = configurationLayer; _serviceOrPluginFullName = serviceOrPluginFullName; _status = initialStatus; _impact = initialImpact; _statusReason = initialStatusReason; }
internal ConfigurationItem(ConfigurationLayer configurationLayer, string serviceOrPluginFullName, ConfigurationStatus initialStatus, StartDependencyImpact initialImpact, string initialStatusReason = "") { Debug.Assert(!String.IsNullOrEmpty(serviceOrPluginFullName)); Debug.Assert(configurationLayer != null); Debug.Assert(initialStatusReason != null); _owner = configurationLayer; _serviceOrPluginFullName = serviceOrPluginFullName; _status = initialStatus; _impact = initialImpact; _statusReason = initialStatusReason; }
private void ChangeConfiguration(ConfigurationStatus status) { if (Vertex == null) { return; } string pluginOrServiceId = Vertex.IsPlugin ? Vertex.LabPluginInfo.PluginInfo.PluginFullName : Vertex.LabServiceInfo.ServiceInfo.ServiceFullName; // TODO: Better handling of config change. Current implementation: remove all matching entries, then add the new one. foreach (IConfigurationLayer layer in ConfigurationManager.Layers) { foreach (var item in layer.Items.ToList()) { if (item.ServiceOrPluginFullName == pluginOrServiceId) { layer.Items.Remove(pluginOrServiceId); } } } // Remove configuration when selecting Optional. if (status == ConfigurationStatus.Optional) { return; } IConfigurationLayer changedLayer; if (ConfigurationManager.Layers.Count == 0) { changedLayer = ConfigurationManager.Layers.Create("DefaultLayer"); } else { changedLayer = ConfigurationManager.Layers.First(); } var result = changedLayer.Items.Add(pluginOrServiceId, status, "Right-click change"); if (!result.Success) { MessageBox.Show(String.Format("Could not set {0} to {2}, as it would cause the following error:\n\n{1}", pluginOrServiceId, result.Describe(), status.ToString()), "Couldn't set item", MessageBoxButton.OK, MessageBoxImage.Exclamation, MessageBoxResult.OK ); } }
protected LiveYodiiItemInfo( YodiiEngine engine, IYodiiItemData d, string fullName ) { Debug.Assert( d != null && engine != null && !String.IsNullOrEmpty( fullName ) ); _engine = engine; _capability = new LiveRunCapability( d.FinalConfigSolvedStatus, d.FinalStartableStatus ); _fullName = fullName; Debug.Assert( d.DynamicStatus != null ); _disabledReason = d.DisabledReason; _runningStatus = d.DynamicStatus.Value; _configOriginalStatus = d.ConfigOriginalStatus; _configSolvedStatus = d.ConfigSolvedStatus; _configOriginalImpact = d.ConfigOriginalImpact; _configSolvedImpact = d.RawConfigSolvedImpact; }
protected LiveYodiiItemInfo(YodiiEngine engine, IYodiiItemData d, string fullName) { Debug.Assert(d != null && engine != null && !String.IsNullOrEmpty(fullName)); _engine = engine; _capability = new LiveRunCapability(d.FinalConfigSolvedStatus, d.FinalStartableStatus); _fullName = fullName; Debug.Assert(d.DynamicStatus != null); _disabledReason = d.DisabledReason; _runningStatus = d.DynamicStatus.Value; _configOriginalStatus = d.ConfigOriginalStatus; _configSolvedStatus = d.ConfigSolvedStatus; _configOriginalImpact = d.ConfigOriginalImpact; _configSolvedImpact = d.RawConfigSolvedImpact; }
private ConfigurationStatus GetMigrationConfigurationStatus(string projectPath, string optionalRepo) { var status = new ConfigurationStatus(); var configObject = TypeHandler.FindConfiguration(projectPath, optionalRepo); if (configObject == null) { status.Enabled = false; return(status); } status.Enabled = configObject.Enabled; status.MigrationType = configObject.MigrationType; return(status); }
internal ServiceData(IServiceInfo s, ServiceData generalization, ConfigurationStatus serviceStatus, StartDependencyImpact impact = StartDependencyImpact.Unknown) : this(s, serviceStatus, impact) { Family = generalization.Family; _inheritedServicesWithThis = new ServiceData[generalization._inheritedServicesWithThis.Length + 1]; generalization._inheritedServicesWithThis.CopyTo(_inheritedServicesWithThis, 0); _inheritedServicesWithThis[_inheritedServicesWithThis.Length - 1] = this; Generalization = generalization; NextSpecialization = Generalization.FirstSpecialization; Generalization.FirstSpecialization = this; Initialize(); if (!Disabled) { for (int i = 0; i < _inheritedServicesWithThis.Length - 1; ++i) { ++_inheritedServicesWithThis[i].AvailableServiceCount; } } }
private void ChangeConfiguration( ConfigurationStatus status ) { if( Vertex == null ) return; string pluginOrServiceId = Vertex.IsPlugin ? Vertex.LabPluginInfo.PluginInfo.PluginFullName : Vertex.LabServiceInfo.ServiceInfo.ServiceFullName; // TODO: Better handling of config change. Current implementation: remove all matching entries, then add the new one. foreach( IConfigurationLayer layer in ConfigurationManager.Layers ) { foreach( var item in layer.Items.ToList() ) { if( item.ServiceOrPluginFullName == pluginOrServiceId ) { layer.Items.Remove( pluginOrServiceId ); } } } // Remove configuration when selecting Optional. if( status == ConfigurationStatus.Optional ) return; IConfigurationLayer changedLayer; if( ConfigurationManager.Layers.Count == 0 ) { changedLayer = ConfigurationManager.Layers.Create( "DefaultLayer" ); } else { changedLayer = ConfigurationManager.Layers.First(); } var result = changedLayer.Items.Add( pluginOrServiceId, status, "Right-click change" ); if( !result.Success ) { MessageBox.Show( String.Format( "Could not set {0} to {2}, as it would cause the following error:\n\n{1}", pluginOrServiceId, result.Describe(), status.ToString() ), "Couldn't set item", MessageBoxButton.OK, MessageBoxImage.Exclamation, MessageBoxResult.OK ); } }
internal static string GetDavScriptMaps() { Role roleByName = RoleManager.GetRoleByName("MailboxRole"); ConfigurationStatus configurationStatus = new ConfigurationStatus("MailboxRole"); RolesUtility.GetConfiguringStatus(ref configurationStatus); string path; if (roleByName.IsInstalled || (roleByName.IsPartiallyInstalled && configurationStatus.Action != InstallationModes.Uninstall)) { path = "davex.dll"; } else { path = "exprox.dll"; } string str = Path.Combine(ConfigurationContext.Setup.BinPath, path); return("*," + str + ",1"); }
PluginData RegisterPlugin(FinalConfiguration finalConfig, IPluginInfo p) { PluginData data; if (_plugins.TryGetValue(p.PluginFullName, out data)) { return(data); } ConfigurationStatus pluginStatus = finalConfig.GetStatus(p.PluginFullName); ServiceData service = p.Service != null ? _services[p.Service.ServiceFullName] : null; if (service == null) { ++_independentPluginsCount; } data = new PluginData(this, p, service, pluginStatus); _plugins.Add(p.PluginFullName, data); return(data); }
public static String AsText(this ConfigurationStatus ConfigurationStatus) { switch (ConfigurationStatus) { case ConfigurationStatus.Accepted: return("Accepted"); case ConfigurationStatus.Rejected: return("Rejected"); case ConfigurationStatus.RebootRequired: return("RebootRequired"); case ConfigurationStatus.NotSupported: return("NotSupported"); default: return("unknown"); } }
/// <summary> /// Checks S3 bucket and the AWS-region configurations. /// </summary> /// <returns>a ConfigurationStatus object.</returns> private ConfigurationStatus GetConfigurationStatus() { ConfigurationStatus configurationStatus = new ConfigurationStatus { ContentBucket = context.AppSettings.SettingsConfig.AwsS3Bucket, AWSRegion = context.AppSettings.SettingsConfig.AwsRegion }; if (string.IsNullOrEmpty(configurationStatus.ContentBucket)) { configurationStatus.AddErrorMessage("Content bucket configuration not found."); configurationStatus.StatusRating = (int)StatusRating.Failed; } if (string.IsNullOrEmpty(configurationStatus.AWSRegion)) { configurationStatus.AddErrorMessage("AWS region configuration not found."); configurationStatus.StatusRating = (int)StatusRating.Failed; } return(configurationStatus); }
public IYodiiEngineResult Add(string serviceOrPluginFullName, ConfigurationStatus status, string statusReason = "", StartDependencyImpact impact = StartDependencyImpact.Unknown) { if (String.IsNullOrEmpty(serviceOrPluginFullName)) { throw new ArgumentException("serviceOrPluginFullName is null or empty"); } ConfigurationItem existing = _items.GetByKey(serviceOrPluginFullName); if (existing != null) { IYodiiEngineResult res = existing.SetStatus(status); if (res.Success) { return(existing.SetImpact(impact)); } return(res); } ConfigurationItem newItem = new ConfigurationItem(_layer, serviceOrPluginFullName, status, impact, statusReason); if (_layer._owner == null) { _items.Add(newItem); return(SuccessYodiiEngineResult.NullEngineSuccessResult); } IYodiiEngineResult result = _layer._owner.OnConfigurationItemAdding(newItem); if (result.Success) { _items.Add(newItem); _layer._owner.OnConfigurationChanged(); return(result); } newItem.OnRemoved(); return(result); }
public IYodiiEngineResult SetStatus(ConfigurationStatus newStatus, string statusReason = "") { if (_statusReason == null) { throw new InvalidOperationException(); } IYodiiEngineResult result = _owner.OnConfigurationItemChanging(this, new FinalConfigurationItem(_serviceOrPluginFullName, _status, _impact)); if (result.Success) { _status = newStatus; NotifyPropertyChanged("Status"); if (StatusReason != statusReason) { StatusReason = statusReason; } if (_owner.ConfigurationManager != null) { _owner.ConfigurationManager.OnConfigurationChanged(); } } return(result); }
/// <summary> /// This function encapsulates all configuration constraints regarding the <see cref="ConfigurationStatus"/> of an item. /// </summary> /// <param name="s1">Current <see cref="ConfigurationStatus"/></param> /// <param name="s2">Wanted <see cref="ConfigurationStatus"/></param> /// <param name="invalidCombination">string expliciting the error. Empty if all is well</param> /// <returns></returns> public static ConfigurationStatus Combine( ConfigurationStatus s1, ConfigurationStatus s2, out string invalidCombination ) { invalidCombination = ""; if( s1 == s2 ) return s1; if( s2 != ConfigurationStatus.Optional ) { if( s1 == ConfigurationStatus.Optional || (s1 >= ConfigurationStatus.Runnable && s2 >= ConfigurationStatus.Runnable) ) { return (s1 == ConfigurationStatus.Running) ? s1 : s2; } else if( s1 != s2 ) { invalidCombination = string.Format( "Conflict for statuses {0} and {1}", s1, s2 ); return s1; } else { invalidCombination = string.Format( "Something went terribly, terribly wrong..." ); return s1; } } return s1; }
ServiceData(IServiceInfo s, ConfigurationStatus serviceStatus, StartDependencyImpact impact) { _backReferences = new List <BackReference>(); ServiceInfo = s; ConfigOriginalStatus = serviceStatus; RawConfigSolvedImpact = ConfigOriginalImpact = impact; if (RawConfigSolvedImpact == StartDependencyImpact.Unknown && Generalization != null) { RawConfigSolvedImpact = Generalization.ConfigSolvedImpact; } _configSolvedImpact = RawConfigSolvedImpact; if (_configSolvedImpact == StartDependencyImpact.Unknown || (_configSolvedImpact & StartDependencyImpact.IsTryOnly) != 0) { _configSolvedImpact = StartDependencyImpact.Minimal; } if (ConfigSolvedImpact == StartDependencyImpact.Unknown) { if (Generalization != null) { _configSolvedImpact = Generalization.ConfigOriginalImpact; } } }
internal PluginData(IConfigurationSolver solver, IPluginInfo p, ServiceData service, ConfigurationStatus pluginStatus, StartDependencyImpact impact = StartDependencyImpact.Unknown) { _solver = solver; PluginInfo = p; Service = service; ConfigOriginalStatus = pluginStatus; switch (pluginStatus) { case ConfigurationStatus.Disabled: _configSolvedStatus = SolvedConfigurationStatus.Disabled; break; case ConfigurationStatus.Running: _configSolvedStatus = SolvedConfigurationStatus.Running; break; default: _configSolvedStatus = SolvedConfigurationStatus.Runnable; break; } _configSolvedStatusReason = PluginRunningRequirementReason.Config; RawConfigSolvedImpact = ConfigOriginalImpact = impact; if (RawConfigSolvedImpact == StartDependencyImpact.Unknown && Service != null) { RawConfigSolvedImpact = Service.ConfigSolvedImpact; } _configSolvedImpact = RawConfigSolvedImpact; if (_configSolvedImpact == StartDependencyImpact.Unknown || (_configSolvedImpact & StartDependencyImpact.IsTryOnly) != 0) { _configSolvedImpact = StartDependencyImpact.Minimal; } if (ConfigOriginalStatus == ConfigurationStatus.Disabled) { _configDisabledReason = PluginDisabledReason.Config; } else if (p.HasError) { _configDisabledReason = PluginDisabledReason.PluginInfoHasError; } else if (Service != null) { if (Service.Disabled) { _configDisabledReason = PluginDisabledReason.ServiceIsDisabled; } else if (Service.Family.RunningPlugin != null) { _configDisabledReason = PluginDisabledReason.AnotherRunningPluginExistsInFamilyByConfig; } } // Immediately check for Runnable references to Disabled Services: this disables us. if (!Disabled) { foreach (var sRef in PluginInfo.ServiceReferences) { if (sRef.Requirement >= DependencyRequirement.Runnable) { // If the required service is already disabled, we immediately disable this plugin. if (sRef.Reference.HasError && !Disabled) { _configDisabledReason = PluginDisabledReason.RunnableReferenceServiceIsOnError; break; } ServiceData sr = _solver.FindExistingService(sRef.Reference.ServiceFullName); if (sr.Disabled && !Disabled) { _configDisabledReason = PluginDisabledReason.RunnableReferenceIsDisabled; break; } } } } if (Service != null) { Service.AddPlugin(this); } if (!Disabled) { // If the plugin is not yet disabled, we register it: // whenever the referenced service is disabled (or stopped during dynamic resolution), this // will disable (or stop) the plugin according to its ConfigSolvedImpact. foreach (var sRef in PluginInfo.ServiceReferences) { _solver.FindExistingService(sRef.Reference.ServiceFullName).RegisterPluginReference(this, sRef.Requirement); } if (Service != null && ConfigOriginalStatus == ConfigurationStatus.Running) { Service.Family.SetRunningPlugin(this); } } }
internal ServiceData( IServiceInfo s, ServiceData generalization, ConfigurationStatus serviceStatus, StartDependencyImpact impact = StartDependencyImpact.Unknown ) : this(s, serviceStatus, impact) { Family = generalization.Family; _inheritedServicesWithThis = new ServiceData[generalization._inheritedServicesWithThis.Length + 1]; generalization._inheritedServicesWithThis.CopyTo( _inheritedServicesWithThis, 0 ); _inheritedServicesWithThis[_inheritedServicesWithThis.Length - 1] = this; Generalization = generalization; NextSpecialization = Generalization.FirstSpecialization; Generalization.FirstSpecialization = this; Initialize(); if( !Disabled ) for( int i = 0; i < _inheritedServicesWithThis.Length - 1; ++i ) ++_inheritedServicesWithThis[i].AvailableServiceCount; }
internal ServiceData( IConfigurationSolver solver, IServiceInfo s, ConfigurationStatus serviceStatus, StartDependencyImpact impact = StartDependencyImpact.Unknown ) : this(s, serviceStatus, impact) { Family = new ServiceFamily( solver, this ); _inheritedServicesWithThis = new ServiceData[] { this }; Initialize(); }
ServiceData( IServiceInfo s, ConfigurationStatus serviceStatus, StartDependencyImpact impact ) { _backReferences = new List<BackReference>(); ServiceInfo = s; ConfigOriginalStatus = serviceStatus; RawConfigSolvedImpact = ConfigOriginalImpact = impact; if( RawConfigSolvedImpact == StartDependencyImpact.Unknown && Generalization != null ) { RawConfigSolvedImpact = Generalization.ConfigSolvedImpact; } _configSolvedImpact = RawConfigSolvedImpact; if( _configSolvedImpact == StartDependencyImpact.Unknown || (_configSolvedImpact & StartDependencyImpact.IsTryOnly) != 0 ) { _configSolvedImpact = StartDependencyImpact.Minimal; } if( ConfigSolvedImpact == StartDependencyImpact.Unknown ) { if( Generalization != null ) _configSolvedImpact = Generalization.ConfigOriginalImpact; } }
public async Task SetDeviceConfigurationStatus(string deviceEui, ConfigurationStatus configurationStatus) { await _storage.UpdateDeviceConfigurationStatus(deviceEui, configurationStatus); }
void SetCheckedConfigurationStatus( ConfigurationStatus? newStatus ) { if( ConfigurationStatusMenu.ItemContainerGenerator.Status != System.Windows.Controls.Primitives.GeneratorStatus.ContainersGenerated ) return; foreach( var item in this.ConfigurationStatusMenu.Items ) { MenuItem childItem = ConfigurationStatusMenu.ItemContainerGenerator.ContainerFromItem( item ) as MenuItem; if( newStatus == null ) { childItem.IsChecked = false; continue; } else { ConfigurationStatus status = (ConfigurationStatus)item; ConfigurationStatus childStatus = (ConfigurationStatus)childItem.DataContext; if( childStatus == newStatus ) childItem.IsChecked = true; else childItem.IsChecked = false; } } }
public IYodiiEngineResult SetStatus( ConfigurationStatus newStatus, string statusReason = "" ) { if( _statusReason == null ) throw new InvalidOperationException(); IYodiiEngineResult result = _owner.OnConfigurationItemChanging( this, new FinalConfigurationItem(_serviceOrPluginFullName, _status, _impact ) ); if( result.Success ) { _status = newStatus; NotifyPropertyChanged( "Status" ); if( StatusReason != statusReason ) StatusReason = statusReason; if( _owner.ConfigurationManager != null ) _owner.ConfigurationManager.OnConfigurationChanged(); } return result; }
internal void OnRemoved() { Debug.Assert( _statusReason != null ); _statusReason = null; _status = ConfigurationStatus.Optional; _impact = StartDependencyImpact.Unknown; }
public static IYodiiEngineResult AddSuccess(this IConfigurationItemCollection @this, string name, ConfigurationStatus status, ConfigurationStatus?solvedStatusInFinalConfig = null) { IYodiiEngineResult r = @this.Add(name, status); r.CheckSuccess(); if (solvedStatusInFinalConfig != null) { Assert.That(@this.ParentLayer.ConfigurationManager.FinalConfiguration.GetStatus(name), Is.EqualTo(solvedStatusInFinalConfig)); } return(r); }
internal PluginData( IConfigurationSolver solver, IPluginInfo p, ServiceData service, ConfigurationStatus pluginStatus, StartDependencyImpact impact = StartDependencyImpact.Unknown ) { _solver = solver; PluginInfo = p; Service = service; ConfigOriginalStatus = pluginStatus; switch( pluginStatus ) { case ConfigurationStatus.Disabled: _configSolvedStatus = SolvedConfigurationStatus.Disabled; break; case ConfigurationStatus.Running: _configSolvedStatus = SolvedConfigurationStatus.Running; break; default: _configSolvedStatus = SolvedConfigurationStatus.Runnable; break; } _configSolvedStatusReason = PluginRunningRequirementReason.Config; RawConfigSolvedImpact = ConfigOriginalImpact = impact; if( RawConfigSolvedImpact == StartDependencyImpact.Unknown && Service != null ) { RawConfigSolvedImpact = Service.ConfigSolvedImpact; } _configSolvedImpact = RawConfigSolvedImpact; if( _configSolvedImpact == StartDependencyImpact.Unknown || (_configSolvedImpact & StartDependencyImpact.IsTryOnly) != 0 ) { _configSolvedImpact = StartDependencyImpact.Minimal; } if( ConfigOriginalStatus == ConfigurationStatus.Disabled ) { _configDisabledReason = PluginDisabledReason.Config; } else if( p.HasError ) { _configDisabledReason = PluginDisabledReason.PluginInfoHasError; } else if( Service != null ) { if( Service.Disabled ) { _configDisabledReason = PluginDisabledReason.ServiceIsDisabled; } else if( Service.Family.RunningPlugin != null ) { _configDisabledReason = PluginDisabledReason.AnotherRunningPluginExistsInFamilyByConfig; } } // Immediately check for Runnable references to Disabled Services: this disables us. if( !Disabled ) { foreach( var sRef in PluginInfo.ServiceReferences ) { if( sRef.Requirement >= DependencyRequirement.Runnable ) { // If the required service is already disabled, we immediately disable this plugin. if( sRef.Reference.HasError && !Disabled ) { _configDisabledReason = PluginDisabledReason.RunnableReferenceServiceIsOnError; break; } ServiceData sr = _solver.FindExistingService( sRef.Reference.ServiceFullName ); if( sr.Disabled && !Disabled ) { _configDisabledReason = PluginDisabledReason.RunnableReferenceIsDisabled; break; } } } } if( Service != null ) Service.AddPlugin( this ); if( !Disabled ) { // If the plugin is not yet disabled, we register it: // whenever the referenced service is disabled (or stopped during dynamic resolution), this // will disable (or stop) the plugin according to its ConfigSolvedImpact. foreach( var sRef in PluginInfo.ServiceReferences ) { _solver.FindExistingService( sRef.Reference.ServiceFullName ).RegisterPluginReference( this, sRef.Requirement ); } if( Service != null && ConfigOriginalStatus == ConfigurationStatus.Running ) { Service.Family.SetRunningPlugin( this ); } } }