public void FromYaml(YamlNode yamlNode)
        {
            YamlMappingNode node = yamlNode as YamlMappingNode;

            Enabled           = (node["enabled"] as YamlScalarNode).Value == "true";
            MaxQueuedMessages = Convert.ToInt32((node["max-queued-messages"] as YamlScalarNode).Value);
            ConnectUrl        = (node["server-address"] as YamlScalarNode).Value;
            ClientId          = (node["client-id"] as YamlScalarNode).Value;
            ConnectRetryMs    = Convert.ToInt32((node["connect-retry-delay-ms"] as YamlScalarNode).Value);

            var security = node.GetValueByKey("security") as YamlMappingNode;

            if (security != null)
            {
                try
                {
                    Security.SecurityType = (SecurityType)Enum.Parse(typeof(SecurityType), (security["security-type"] as YamlScalarNode).Value);
                    Security.CertFile     = (security["ca-trusted-cert-file"] as YamlScalarNode).Value;
                    Security.ClientKey    = (security["client-private-key-file"] as YamlScalarNode).Value;
                    Security.ClientCert   = (security["client-cert-chain-file"] as YamlScalarNode).Value;
                    Security.Username     = (security["username"] as YamlScalarNode).Value;
                    Security.Password     = (security["password"] as YamlScalarNode).Value;
                }
                catch { }
            }

            Publishes.Clear();

            var publishes = node["publish"] as YamlSequenceNode;

            foreach (YamlMappingNode p in publishes)
            {
                Publishes.Add(new Publish()
                {
                    Profile = (p["profile"] as YamlScalarNode).Value,
                    Subject = (p["topic-suffix"] as YamlScalarNode).Value
                });
            }

            Subscribes.Clear();

            var subscribes = node["subscribe"] as YamlSequenceNode;

            foreach (YamlMappingNode p in subscribes)
            {
                Subscribes.Add(new Subscribe()
                {
                    Profile = (p["profile"] as YamlScalarNode).Value,
                    Subject = (p["topic-suffix"] as YamlScalarNode).Value
                });
            }
        }
        public PublishViewModel()
        {
            MOYABAZAEntities model = App.MOYABAZA;

            model.Издательства.Load();
            Publishes = CollectionViewSource.GetDefaultView(model.Издательства.Local);

            AddModeCommand = new RelayCommand(
                (param) =>
            {
                SelectedPublish = null;
                EditAllowed     = true;
            },
                (param) => App.ActiveUser.Пользователи_Объекты.Count(uo => uo.Объекты.SName == Constants.PublishThesaurusName && uo.W == 1) != 0);

            ChangeModeCommand = new RelayCommand(
                (param) =>
            {
                EditAllowed ^= true;
            },
                (param) => App.ActiveUser.Пользователи_Объекты.Count(uo => uo.Объекты.SName == Constants.PublishThesaurusName && uo.E == 1) != 0 && param != null);

            SaveCommand = new RelayCommand(
                (param) =>
            {
                if (SelectedPublish != null)
                {
                    if (PublishTextBox != String.Empty)        //Изменение существующего
                    {
                        try
                        {
                            SelectedPublish.Название = PublishTextBox;
                            model.SaveChanges();
                            Publishes.Refresh();
                            EditAllowed = false;
                        }
                        catch (Exception e)
                        {
                            MessageBox.Show($"Такое издательство уже существует! \n {e.Message}");
                        }
                    }
                    else
                    {
                        MessageBox.Show("Название не может быть пустым!");
                        PublishTextBox = SelectedPublish.Название;
                    }
                }
                else
                {
                    if (PublishTextBox != String.Empty)        //Добавление нового
                    {
                        Издательства publish = new Издательства();
                        try
                        {
                            publish.Название = PublishTextBox;
                            model.Издательства.Local.Add(publish);
                            model.SaveChanges();
                            EditAllowed    = false;
                            PublishTextBox = String.Empty;
                        }
                        catch (DbUpdateException e)
                        {
                            model.Издательства.Local.Remove(publish);
                            MessageBox.Show($"Такое издательство уже существует! \n {e.Message}");
                        }
                    }
                    else
                    {
                        MessageBox.Show("Название не может быть пустым!");
                    }
                }
            },
                (param) => App.ActiveUser.Пользователи_Объекты.Count(uo => uo.Объекты.SName == Constants.PublishThesaurusName && (uo.E == 1 || uo.R == 1)) != 0 && Convert.ToBoolean(param) == true);

            DeleteCommand = new RelayCommand(
                (param) =>
            {
                if (MessageBox.Show("Уверен?", "Назад дороги не будет", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No) == MessageBoxResult.Yes)
                {
                    var deletedPublish = _selectedPublish;

                    try
                    {
                        if (deletedPublish.Книги.Count != 0)
                        {
                            throw new DbUpdateException("В издательстве есть книги!!!!");
                        }
                        model.Издательства.Local.Remove(deletedPublish);
                        model.SaveChanges();
                    }
                    catch (DbUpdateException ex)
                    {
                        model.Издательства.Local.Add(deletedPublish);
                        Publishes.MoveCurrentTo(deletedPublish);
                        Publishes.Refresh();
                        MessageBox.Show($"Произошла ошибка при удалении данных: {Environment.CommandLine}{ex.Message}", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error);
                    }
                }
            },
                (param) => App.ActiveUser.Пользователи_Объекты.Count(uo => uo.Объекты.SName == Constants.PublishThesaurusName && uo.D == 1) != 0 && param != null);
            Publishes.Filter = FilterFunction;
        }