Esempio n. 1
0
        private void GetNextPendingItemRequest(IDictionary <string, LoadedXMLProvisioningTemplate> loadedTemplates)
        {
            while (this.pendingProjectItemRequests.Count > 0)
            {
                var pendingItem = this.pendingProjectItemRequests.Dequeue();

                LoadedXMLProvisioningTemplate loadedTemplate = null;

                if (loadedTemplates.ContainsKey(pendingItem.TemplateInfo.TemplatePath))
                {
                    loadedTemplate = loadedTemplates[pendingItem.TemplateInfo.TemplatePath];
                }
                else
                {
                    loadedTemplate = pendingItem.TemplateInfo.LoadXmlTemplate();
                    if (loadedTemplate.Template != null)
                    {
                        loadedTemplates.Add(pendingItem.TemplateInfo.TemplatePath, loadedTemplate);
                    }
                }

                if (loadedTemplate.Template != null)
                {
                    switch (pendingItem.RequestType)
                    {
                    case ProjectItemRequestType.Add:
                        AddItemToTemplate(pendingItem.ItemPath, loadedTemplate);
                        break;

                    case ProjectItemRequestType.Remove:
                        RemoveItemFromTemplate(pendingItem.ItemPath, pendingItem.ItemKind, loadedTemplate);
                        break;

                    case ProjectItemRequestType.Rename:
                        var renameItem = (ProjectItemRequestRename)pendingItem;
                        RenameTemplateItem(renameItem.ItemPath, renameItem.ItemKind, renameItem.OldName, loadedTemplate);
                        break;

                    default:
                        LogService.Warn("Unknown ProjectItemRequestType: " + pendingItem.RequestType);
                        break;
                    }
                }
                else
                {
                    LogService.Warn("No template loaded for item ({0}) {1}", pendingItem.RequestType, pendingItem.ItemPath);
                }

                GetNextPendingItemRequest(loadedTemplates);
            }
        }
Esempio n. 2
0
        private bool AddItemToTemplate(string projectItemFullPath, LoadedXMLProvisioningTemplate loadedTemplate)
        {
            if (loadedTemplate != null && loadedTemplate.Template != null)
            {
                // Item is PnP resource.
                var src          = ProvisioningHelper.MakeRelativePath(projectItemFullPath, loadedTemplate.ResourcesPath);
                var targetFolder = String.Join("/", Path.GetDirectoryName(src).Split('\\'));

                loadedTemplate.Template.Files.Add(new OfficeDevPnP.Core.Framework.Provisioning.Model.File()
                {
                    Src       = src,
                    Folder    = targetFolder,
                    Overwrite = true,
                    Security  = null
                });

                LogService.Info("Item added to template: " + src);
                return(true);
            }

            return(false);
        }
Esempio n. 3
0
        private bool RenameTemplateItem(string projectItemFullPath, string projectItemKind, string oldName, LoadedXMLProvisioningTemplate loadedTemplate)
        {
            if (loadedTemplate != null && loadedTemplate.Template != null)
            {
                var src = ProvisioningHelper.MakeRelativePath(projectItemFullPath, loadedTemplate.ResourcesPath);

                if (projectItemKind == EnvDTE.Constants.vsProjectItemKindPhysicalFolder)
                {
                    var oldSrc = Path.Combine(src.Substring(0, src.TrimEnd('\\').LastIndexOf('\\')), oldName) + "\\";

                    // Remove all files where src path starts with given folder path
                    var filesToRename = loadedTemplate.Template.Files.Where(f => f.Src.StartsWith(oldSrc, StringComparison.InvariantCultureIgnoreCase));

                    foreach (var file in filesToRename)
                    {
                        file.Src = Regex.Replace(file.Src, Regex.Escape(oldSrc), src, RegexOptions.IgnoreCase);
                    }
                }
                else if (projectItemKind == EnvDTE.Constants.vsProjectItemKindPhysicalFile)
                {
                    var oldSrc = Path.Combine(Path.GetDirectoryName(src), oldName);

                    var file =
                        loadedTemplate.Template.Files.Where(
                            f => f.Src.Equals(oldSrc, StringComparison.InvariantCultureIgnoreCase))
                        .FirstOrDefault();

                    if (file != null)
                    {
                        file.Src = src;
                    }
                }
                else
                {
                    return(false); //terminate, wrong item type
                }

                LogService.Info("Item renamed in template: " + src);
                return(true);
            }

            return(false);
        }
Esempio n. 4
0
        private bool RemoveItemFromTemplate(string projectItemFullPath, string projectItemKind, LoadedXMLProvisioningTemplate loadedTemplate)
        {
            if (loadedTemplate != null && loadedTemplate.Template != null)
            {
                var src = ProvisioningHelper.MakeRelativePath(projectItemFullPath, loadedTemplate.ResourcesPath);

                if (projectItemKind == EnvDTE.Constants.vsProjectItemKindPhysicalFolder)
                {
                    // Remove all files where src path starts with given folder path
                    loadedTemplate.Template.Files.RemoveAll(f => f.Src.StartsWith(src, StringComparison.InvariantCultureIgnoreCase));
                }
                else if (projectItemKind == EnvDTE.Constants.vsProjectItemKindPhysicalFile)
                {
                    // Remove all files where src path equals item path
                    loadedTemplate.Template.Files.RemoveAll(f => f.Src.Equals(src, StringComparison.InvariantCultureIgnoreCase));
                }
                else
                {
                    return(false); //terminate, wrong "kind"
                }

                LogService.Info("Item removed from template: " + src);
                return(true);
            }

            return(false);
        }