/// <summary>
 /// ОК.
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void okButton_Click(object sender, EventArgs e)
 {
     try
     {
         _CurrentDefinition.Validate();
     }
     catch (EmptyFormFieldException eex)
     {
         if (!WSSDeveloperPackage.ShowUserConfirmOkCancel(eex.Message + "\nПродолжить?", "Не заполнены поля"))
         {
             return;
         }
     }
     this.TypesManager.Add(_CurrentDefinition);
     this.DialogResult = DialogResult.OK;
     this.Close();
 }
        /// <summary>
        /// Выполняет деплой модуля.
        /// </summary>
        /// <param name="deployInfo"></param>
        internal override bool Deploy(DeployInfo deployInfo)
        {
            if (deployInfo == null)
            {
                throw new ArgumentNullException(nameof(deployInfo));
            }

            //получаем указанную папку
            string selectedPath = this.FolderPath.Text;

            if (String.IsNullOrEmpty(selectedPath))
            {
                throw new NotificationException("Не выбран путь для комплекта");
            }

            DirectoryInfo targetDir;

            if (!Directory.Exists(selectedPath))
            {
                if (WSSDeveloperPackage.ShowUserConfirmOkCancel("Папка " + selectedPath + " отсутствует.\nСоздать?", "Папка отсутствует"))
                {
                    targetDir = Directory.CreateDirectory(selectedPath);
                }
                else
                {
                    return(false);
                }
            }
            else
            {
                targetDir = new DirectoryInfo(selectedPath);
            }

            //деплоим в указанную папку
            deployInfo.CreateReleaseDirectory(targetDir, false);
            deployInfo.CreateSourcesDirectory(targetDir, false);

            this.Form.Command.Package.WriteToOutput(
                $"Сформирован комплект для проекта {deployInfo.Project.Name} по пути:\n<file://{targetDir.FullName.TrimStart('\\').Replace('\\', '/')}>");
            return(true);
        }
Exemple #3
0
        /// <summary>
        /// Создаёт XML описание элемента.
        /// </summary>
        /// <returns></returns>
        internal override string CreateXml()
        {
            StringBuilder sb = new StringBuilder(4096);

            using (DefinitionXmlBuilder xb = new DefinitionXmlBuilder(sb, "ListFormWebControlDefinition"))
            {
                xb.Append(_Type);
                xb.AppendClassName(this.Metadata);
                CodeClass factoryClass = this.FindControlFactory();
                if (factoryClass != null)
                {
                    xb.Append("FactoryClassName", this.Metadata.Class.FullName + "+" + factoryClass.Name);
                }
                else if (!WSSDeveloperPackage.ShowUserConfirmOkCancel("Фабрика контрола не задана, продолжить?", "Не задана фабрика"))
                {
                    throw new NotificationException("Операция прервана");
                }

                xb.Append(_DisplayName);
            }
            return(sb.ToString());
        }
        /// <summary>
        /// Добавляет определение в XML.
        /// </summary>
        /// <param name="definition"></param>
        public void Add(ItemDefinition definition)
        {
            if (definition == null)
            {
                throw new ArgumentNullException(nameof(definition));
            }

            string typesXmlPath = this.TypesXmlItem.GetFullPath();

            //грузим существующий XML
            XmlDocument xdoc = new XmlDocument();

            xdoc.PreserveWhitespace = false;
            xdoc.LoadXml(File.ReadAllText(typesXmlPath));

            XmlNode typeDefinitionsNode = xdoc.SelectSingleNode("TypeDefinitions");

            if (typeDefinitionsNode == null)
            {
                throw new Exception("Узел <TypeDefinitions> не найден");
            }

            //находим соответствующую секцию для типа
            XmlNode section = typeDefinitionsNode.SelectSingleNode(definition.SectionName);

            if (section == null)
            {
                //создаём секцию
                section = xdoc.CreateElement(definition.SectionName);
                typeDefinitionsNode.AppendChild(section);
            }
            else
            {
                //ищем дубликаты в секции
                XmlNode duplicateNode = section.SelectSingleNode(definition.UniqueNodeXPath);
                if (duplicateNode != null)
                {
                    if (WSSDeveloperPackage.ShowUserConfirmOkCancel($"В файле Types.xml уже есть определение по xpath: {definition.UniqueNodeXPath}.\n\nЗаменить?", "Дублирование"))
                    {
                        XmlNode parentNode;
                        if ((parentNode = duplicateNode.ParentNode) == null)
                        {
                            throw new NotificationException("Некорректный формат Types.xml");
                        }

                        section.RemoveChild(parentNode);
                    }
                    else
                    {
                        return;
                    }
                }
            }

            //вставляем XML-определение типа
            XmlDocument temp = new XmlDocument();

            temp.LoadXml(definition.CreateXml());
            section.AppendChild(xdoc.ImportNode(temp.FirstChild, true));

            //делаем чекаут Types.xml
            this.Cmd.DTE.CheckOutItem(this.TypesXmlItem);

            //сохраняем XML
            xdoc.Save(typesXmlPath);

            //открываем
            Window win = this.Cmd.DTE.ItemOperations.OpenFile(typesXmlPath, EnvDTE.Constants.vsViewKindTextView);
        }