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); } }
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); }
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); }
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); }