Esempio n. 1
0
        /// <summary>
        /// Applies the <see cref="IConfigurationItem" />to list of <see cref="NotificationState" />s.
        /// </summary>
        /// <param name="notificationStates">The notification states.</param>
        /// <param name="configItem">The configuration item.</param>
        /// <param name="configItemAttribute">The configuration item attribute.</param>
        /// <param name="expander">The expander control.</param>
        private void ApplyConfigurationItemToNotificationStateList(IList <NotificationState> notificationStates, IConfigurationItem configItem, ConfigurationItemAttribute configItemAttribute, Expander expander)
        {
            var configItemValue   = configItem.GetOrCreateConnectorNotificationConfiguration();
            var observationStates = Enum.GetValues(typeof(ObservationState)).Cast <ObservationState>().ToList();

            if (configItemAttribute is NotificationConfigurationItemAttribute notificationConfigurationItemAttribute)
            {
                this.RemoveNotSupportedObservationStates(observationStates, notificationConfigurationItemAttribute);
            }

            var useGlobalNotificationState = notificationStates.FirstOrDefault(n => n.IsUseGlobalSettings);

            if (useGlobalNotificationState == null)
            {
                useGlobalNotificationState                     = new NotificationState(notificationStates);
                useGlobalNotificationState.IsActive            = configItemValue.UseGlobalNotificationSettings;
                useGlobalNotificationState.Caption             = "Use global configuration"; // TODO load from resources
                useGlobalNotificationState.PropertyChanged    += (s, e) => this.NotificationStateChanged(useGlobalNotificationState, configItem, e.PropertyName);
                useGlobalNotificationState.IsUseGlobalSettings = true;
                notificationStates.Add(useGlobalNotificationState);
            }
            else
            {
                var newActiveState = configItemValue.UseGlobalNotificationSettings;
                if (useGlobalNotificationState.IsActive != newActiveState)
                {
                    useGlobalNotificationState.IsActive = configItemValue.UseGlobalNotificationSettings;
                }
            }

            foreach (var observationState in observationStates)
            {
                var notificationState = notificationStates.FirstOrDefault(n => n.ObservationState == observationState);
                if (notificationState == null)
                {
                    notificationState                  = new NotificationState(notificationStates);
                    notificationState.IsActive         = configItemValue.AsObservationStateFlag(observationState);
                    notificationState.ObservationState = observationState;
                    notificationState.Caption          = observationState.ToString(); // TODO load from resources
                    notificationState.PropertyChanged += (s, e) => this.NotificationStateChanged(notificationState, configItem, e.PropertyName);
                    notificationState.PropertyChanged += (s, e) => this.UpdateExpanderHeader(expander, notificationStates);
                    notificationStates.Add(notificationState);
                }
                else
                {
                    var newActiveState = configItemValue.UseGlobalNotificationSettings;
                    if (notificationState.IsActive != newActiveState)
                    {
                        notificationState.IsActive = configItemValue.AsObservationStateFlag(observationState);
                    }
                }
            }
        }