Example #1
0
        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);
        }
Example #2
0
 internal void OnRemoved()
 {
     Debug.Assert(_statusReason != null);
     _statusReason = null;
     _status       = ConfigurationStatus.Optional;
     _impact       = StartDependencyImpact.Unknown;
 }
Example #3
0
        /// <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;
        }
Example #5
0
        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();
        }
Example #6
0
        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;
 }
Example #8
0
        private void ConfigurationStatusMenuItem_Click(object sender, RoutedEventArgs e)
        {
            MenuItem            item   = e.OriginalSource as MenuItem;
            ConfigurationStatus status = (ConfigurationStatus)item.DataContext;

            ChangeConfiguration(status);
        }
Example #9
0
        public async Task UpdateDeviceConfigurationStatus(string deviceEui, ConfigurationStatus configurationStatus)
        {
            Device device = await GetDevice(deviceEui);

            device.Configuration.Status = configurationStatus;
            await _context.SaveChangesAsync();
        }
Example #10
0
 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;
        }
Example #12
0
        /// <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;
        }
Example #13
0
 public SolvedItemSnapshot(IYodiiItemData item)
 {
     _disabledReason       = item.DisabledReason;
     _runningStatus        = item.DynamicStatus;
     _configOriginalStatus = item.ConfigOriginalStatus;
     _configSolvedStatus   = item.ConfigSolvedStatus;
     _configOriginalImpact = item.ConfigOriginalImpact;
     _configSolvedImpact   = item.RawConfigSolvedImpact;
 }
Example #14
0
 public SolvedItemSnapshot( IYodiiItemData item )
 {
     _disabledReason = item.DisabledReason;
     _runningStatus = item.DynamicStatus;
     _configOriginalStatus = item.ConfigOriginalStatus;
     _configSolvedStatus = item.ConfigSolvedStatus;
     _configOriginalImpact = item.ConfigOriginalImpact;
     _configSolvedImpact = item.RawConfigSolvedImpact;
 }
Example #15
0
        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;
        }
Example #16
0
        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;
        }
Example #17
0
        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
                                );
            }
        }
Example #18
0
        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;
        }
Example #19
0
        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;
        }
Example #20
0
        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);
        }
Example #21
0
 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
                    );
            }
        }
Example #23
0
        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");
        }
Example #24
0
        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);
        }
Example #25
0
        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);
        }
Example #27
0
            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);
            }
Example #28
0
        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;
        }
Example #30
0
        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;
                }
            }
        }
Example #31
0
        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);
                }
            }
        }
Example #32
0
 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;
 }
Example #33
0
 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();
 }
Example #34
0
        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;
            }
        }
Example #35
0
 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;
                }
            }
        }
Example #37
0
 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;
 }
Example #38
0
 internal void OnRemoved()
 {
     Debug.Assert( _statusReason != null );
     _statusReason = null;
     _status = ConfigurationStatus.Optional;
     _impact = StartDependencyImpact.Unknown;
 }
Example #39
0
        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);
        }
Example #40
0
        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 );
                }
            }
        }