public override void LinkItemAndFile(ProjectBase project, ItemUri itemUri, string relativeFileName, bool saveProject = true)
        {
            Assert.ArgumentNotNull(project, nameof(project));
            Assert.ArgumentNotNull(itemUri, nameof(itemUri));
            Assert.ArgumentNotNull(relativeFileName, nameof(relativeFileName));

            var projectItem = project.ProjectItems.OfType <ProjectFileItem>().FirstOrDefault(i => string.Compare(i.File, relativeFileName, StringComparison.InvariantCultureIgnoreCase) == 0);

            if (projectItem == null)
            {
                projectItem = new ProjectFileItem(project)
                {
                    File = relativeFileName
                };

                project.Add(projectItem);
            }

            if (projectItem.Items.Contains(itemUri))
            {
                return;
            }

            projectItem.Items.Add(itemUri);

            if (saveProject)
            {
                project.Save();
            }
        }
        public static bool AddToVisualStudioProject([NotNull] this ProjectFileItem projectFile)
        {
            Assert.ArgumentNotNull(projectFile, nameof(projectFile));

            var project = projectFile.Project.GetVisualStudioProject();

            if (project == null)
            {
                return(false);
            }

            var folder = Path.GetDirectoryName(projectFile.Path);

            if (folder == null)
            {
                return(false);
            }

            var parent = CreateVisualStudioFolder(project, folder);

            if (parent == null)
            {
                project.ProjectItems.AddFromFile(projectFile.AbsoluteFileName);
            }
            else
            {
                parent.ProjectItems.AddFromFile(projectFile.AbsoluteFileName);
            }

            return(true);
        }
Esempio n. 3
0
        private ProjectItem Add([NotNull] CreateItem element)
        {
            Debug.ArgumentNotNull(element, nameof(element));

            var project  = element.Project;
            var fileName = project.GetProjectItemFileName(element.Item);

            var result = ProjectFileItem.Load(project, fileName);

            project.Add(result);

            foreach (var item in element.Item.ProjectItems)
            {
                var subitem = item as EnvDTE.ProjectItem;
                if (subitem == null)
                {
                    continue;
                }

                fileName = project.GetProjectItemFileName(subitem);
                project.Add(ProjectFileItem.Load(project, fileName));
            }

            return(result);
        }
Esempio n. 4
0
 private void FindProjectItem(Type declaringType, Project project)
 {
     // TODO: Besser suchen (prüfen ob der Type in dem Item enthalten ist oder so)
     ProjectFileItem = project.GetItems("Compile").FirstOrDefault(item => item.EvaluatedInclude.Contains(declaringType.Name));
     if (ProjectFileItem != null && (ProjectFileItem.GetFile().Exists))
     {
         UpdateLineColumnInfo();
     }
 }
        private void LinkItems()
        {
            var selectedItems = TreeView.SelectedItems;

            if (selectedItems.Count != 1)
            {
                return;
            }

            var selectedItem = selectedItems[0] as ItemTreeViewItem;

            if (selectedItem == null)
            {
                return;
            }

            var itemUri = selectedItem.ItemUri;

            var projects = new List <Project>();

            foreach (var item in Items)
            {
                var project = ProjectManager.GetProject(item);
                if (project == null)
                {
                    continue;
                }

                var projectItem = project.GetProjectItem(item);
                if (projectItem == null)
                {
                    var fileName = project.GetProjectItemFileName(item);
                    projectItem = ProjectFileItem.Load(project, fileName);

                    project.Add(projectItem);
                }

                var projectFile = projectItem as ProjectFileItem;
                if (projectFile == null)
                {
                    continue;
                }

                projectFile.Items.Add(itemUri);

                if (!projects.Contains(project))
                {
                    projects.Add(project);
                }
            }

            foreach (var project in projects)
            {
                project.Save();
            }
        }
Esempio n. 6
0
        /// <summary>
        /// 保存项目对话框已经加载。
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void SaveProjectDialog_Load(object sender, EventArgs e)
        {
            // 将数据源和文件项目关联起来。
            dgvFiles.DataSource = FilesItems;

            foreach (DataGridViewRow row in dgvFiles.Rows)
            {
                ProjectFileItem item = row.DataBoundItem as ProjectFileItem;

                row.Cells["colCopy"].ReadOnly = !item.IsUnderProjectFolder;
            }
        }
        protected override void Process(DuplicateItemPipeline pipeline)
        {
            Debug.ArgumentNotNull(pipeline, nameof(pipeline));

            if (pipeline.NewItemUri == ItemUri.Empty)
            {
                return;
            }

            var projectFileItem = ProjectManager.GetProjectFileItem(pipeline.ItemUri);

            if (projectFileItem == null)
            {
                return;
            }

            var project = projectFileItem.Project;

            var source       = projectFileItem.AbsoluteFileName;
            var sourceFolder = Path.GetDirectoryName(source) ?? string.Empty;
            var extension    = Path.GetExtension(source);
            var target       = Path.Combine(sourceFolder, pipeline.NewName) + extension;

            if (!AppHost.Files.FileExists(target))
            {
                AppHost.Files.Copy(source, target, false);
            }

            EnvDTE.ProjectItem newProjectItem;
            try
            {
                newProjectItem = SitecorePackage.Instance.Dte.ItemOperations.AddExistingItem(target);
            }
            catch (Exception ex)
            {
                AppHost.Output.LogException(ex);
                return;
            }

            var fileName    = project.GetProjectItemFileName(newProjectItem);
            var projectItem = ProjectFileItem.Load(project, fileName);

            projectItem.Items.Add(pipeline.NewItemUri);
            project.Add(projectItem);
            project.Save();

            var fileItemHandler = FileItemManager.GetFileItemHandler(source);

            if (fileItemHandler != null)
            {
                fileItemHandler.UpdateItemPath(pipeline.NewItemUri, projectItem.Path);
            }
        }
Esempio n. 8
0
        private ProjectFileItem AddToProject([NotNull] Project project, [NotNull] EnvDTE.ProjectItem item)
        {
            Debug.ArgumentNotNull(project, nameof(project));
            Debug.ArgumentNotNull(item, nameof(item));

            var fileName = project.GetProjectItemFileName(item);

            var projectItem = ProjectFileItem.Load(project, fileName);

            project.Add(projectItem);

            return(projectItem);
        }
Esempio n. 9
0
        private void UpdateLineColumnInfo()
        {
            var lines = File.ReadAllLines(ProjectFileItem.GetFile().FullName);
            var line  = lines.FirstOrDefault(s => s.ToLower().Contains(string.Format("public void {0}", TestMethodName).ToLower()));

            if (!string.IsNullOrEmpty(line))
            {
                Line = lines.IndexOf(line) + 1;
                if (Line > 1)
                {
                    Column = line.IndexOf(TestMethodName, StringComparison.InvariantCultureIgnoreCase);
                }
            }
        }
Esempio n. 10
0
        private void Add()
        {
            var logWindow = new ProjectLogWindow
            {
                Maximum = addItems.Count
            };

            logWindow.AutoStart = delegate
            {
                var iterator = new ElementIterator <AddItem>(addItems);

                iterator.Process = delegate(AddItem element)
                {
                    logWindow.Increment();
                    if (!element.IsChecked)
                    {
                        iterator.Next();
                        return;
                    }

                    var project = element.Project;

                    var fileName    = project.GetProjectItemFileName(element.Item);
                    var projectItem = ProjectFileItem.Load(project, fileName);
                    project.Add(projectItem);

                    logWindow.Write(projectItem.Path, Rocks.Resources.AddWindow_Add_added, string.Empty);

                    logWindow.Increment();
                    iterator.Next();
                };

                iterator.Finish = delegate
                {
                    logWindow.Write(Rocks.Resources.Finished, string.Empty, string.Empty);
                    logWindow.Finish();
                };

                iterator.Start();
            };

            AppHost.Shell.ShowDialog(logWindow);

            SaveProjects();
        }
Esempio n. 11
0
        private void CopyFile([NotNull] List <ProjectBase> projects, [NotNull] DragCopyPipeline.NewItem item)
        {
            Debug.ArgumentNotNull(projects, nameof(projects));
            Debug.ArgumentNotNull(item, nameof(item));

            var projectFileItem = ProjectManager.GetProjectFileItem(item.Item.ItemUri);

            if (projectFileItem == null)
            {
                return;
            }

            var project = projectFileItem.Project;

            var source       = projectFileItem.AbsoluteFileName;
            var sourceFolder = Path.GetDirectoryName(source) ?? string.Empty;
            var extension    = Path.GetExtension(source);
            var target       = Path.Combine(sourceFolder, item.NewName) + extension;

            AppHost.Files.Copy(source, target, false);

            var newProjectItem = SitecorePackage.Instance.Dte.ItemOperations.AddExistingItem(target);

            var fileName    = project.GetProjectItemFileName(newProjectItem);
            var projectItem = ProjectFileItem.Load(project, fileName);

            projectItem.Items.Add(item.NewItemUri);
            project.Add(projectItem);

            if (!projects.Contains(project))
            {
                projects.Add(project);
            }

            var fileItemHandler = FileItemManager.GetFileItemHandler(source);

            if (fileItemHandler == null)
            {
                return;
            }

            fileItemHandler.UpdateItemPath(item.NewItemUri, projectItem.Path);
        }
Esempio n. 12
0
        private ProjectItem CreateProjectItem([NotNull] Project project, [NotNull] FileTreeViewItem fileTreeViewItem)
        {
            Debug.ArgumentNotNull(project, nameof(project));
            Debug.ArgumentNotNull(fileTreeViewItem, nameof(fileTreeViewItem));

            var file = fileTreeViewItem.FileUri.FileName;

            if (project.Contains(file))
            {
                return(null);
            }

            var result = new ProjectFileItem(project)
            {
                File = file
            };

            return(result);
        }
Esempio n. 13
0
        protected override void Process(NewItemWizardPipeline pipeline)
        {
            Debug.ArgumentNotNull(pipeline, nameof(pipeline));

            var project = ProjectManager.GetProject(pipeline.Item);

            if (project == null)
            {
                return;
            }

            var extension = Path.GetExtension(pipeline.Item.GetFileName()) ?? string.Empty;

            if (string.Compare(extension, ".package", StringComparison.InvariantCultureIgnoreCase) != 0)
            {
                return;
            }

            var fileName = project.GetProjectItemFileName(pipeline.Item);

            var projectItem = ProjectFileItem.Load(project, fileName);

            project.Add(projectItem);
        }
Esempio n. 14
0
        public override void Execute(object parameter)
        {
            var context = parameter as IItemSelectionContext;

            if (context == null)
            {
                return;
            }

            var item = context.Items.FirstOrDefault();

            if (item == null)
            {
                return;
            }

            if (AppHost.MessageBox("Are you sure you want to rebind any unbound files?", "Rebind File Items", MessageBoxButton.OKCancel, MessageBoxImage.Question) != MessageBoxResult.OK)
            {
                return;
            }

            ExecuteCompleted callback = delegate(string response, ExecuteResult executeResult)
            {
                if (!DataService.HandleExecute(response, executeResult))
                {
                    return;
                }

                var root = response.ToXElement();
                if (root == null)
                {
                    return;
                }

                var project = GetProject(item.ItemUri);
                if (project == null)
                {
                    return;
                }

                var total = 0;
                var added = 0;

                foreach (var element in root.Elements())
                {
                    total++;
                    var id   = element.GetAttributeValue("id");
                    var path = element.GetAttributeValue("path");

                    if (project.Contains(path))
                    {
                        continue;
                    }

                    var projectItem = new ProjectFileItem(project);
                    projectItem.Items.Add(new ItemUri(item.ItemUri.DatabaseUri, new ItemId(new Guid(id))));
                    projectItem.File = path;

                    project.Add(projectItem);
                    added++;
                }

                project.Save();
                AppHost.MessageBox(string.Format("Rebound {0} of {1} file-based item(s).", added, total), "Information", MessageBoxButton.OK, MessageBoxImage.Information);
            };

            var itemUri = item.ItemUri;

            itemUri.Site.DataService.ExecuteAsync("Projects.RebindFileItems", callback, itemUri.DatabaseUri.DatabaseName.ToString(), itemUri.ItemId.ToString());
        }
Esempio n. 15
0
        protected override void Process(NewItemWizardPipeline pipeline)
        {
            Debug.ArgumentNotNull(pipeline, nameof(pipeline));

            string fileType;

            if (!pipeline.Tokens.TryGetValue("$filetype$", out fileType))
            {
                return;
            }

            if (fileType != FileType)
            {
                return;
            }

            pipeline.Abort();

            var project = ProjectManager.GetProject(pipeline.Item) ?? GetProject(pipeline);

            if (project == null)
            {
                return;
            }

            var site = project.Site;

            if (site == null)
            {
                return;
            }

            var itemPath = string.Empty;

            if (pipeline.DatabaseName == null)
            {
                var d = new NewItemWizardDialog();
                d.Initialize(site, TemplateName);

                if (AppHost.Shell.ShowDialog(d) != true)
                {
                    return;
                }

                var itemUri = d.ItemUri;
                if (itemUri == null || itemUri == ItemUri.Empty)
                {
                    return;
                }

                pipeline.DatabaseName = itemUri.DatabaseName;

                itemPath = d.SelectedPath ?? string.Empty;
                if (!string.IsNullOrEmpty(itemPath))
                {
                    itemPath += "/" + Path.GetFileNameWithoutExtension(pipeline.Item.Name);
                }
            }

            var fileName    = project.GetProjectItemFileName(pipeline.Item);
            var projectItem = ProjectFileItem.Load(project, fileName);

            project.Add(projectItem);

            var busy = true;

            Handle(pipeline, pipeline.DatabaseName, projectItem, itemPath, (sender, args) => busy = false);

            AppHost.DoEvents(ref busy);

            pipeline.ProjectItem = projectItem;
        }
        protected override void Process(NewItemWizardPipeline pipeline)
        {
            Debug.ArgumentNotNull(pipeline, nameof(pipeline));

            var template = pipeline.Template.Replace(@"xmlns=""http://schemas.microsoft.com/developer/vstemplate/2005""", string.Empty);

            var doc = XDocument.Parse(template);

            var itemElements = doc.XPathSelectElements(@"/VSTemplate/SitecoreItems/Item").ToList();

            if (!itemElements.Any())
            {
                itemElements = doc.XPathSelectElements(@"/VSTemplate/WizardData/SitecoreItems/Item").ToList();
            }

            if (!itemElements.Any())
            {
                return;
            }

            var project = ProjectManager.GetProject(pipeline.Item) ?? GetProject(pipeline);

            if (project == null)
            {
                return;
            }

            var site = project.Site;

            if (site == null)
            {
                return;
            }

            foreach (var element in itemElements)
            {
                var databaseName = Expand(pipeline, element.GetAttributeValue("DatabaseName"));
                var path         = Expand(pipeline, element.GetAttributeValue("Path"));
                var name         = Expand(pipeline, element.GetAttributeValue("Name"));
                var templateName = Expand(pipeline, element.GetAttributeValue("TemplateName"));

                var fields = new StringBuilder();
                var first  = true;

                foreach (var field in element.Elements())
                {
                    if (first)
                    {
                        first = false;
                    }
                    else
                    {
                        fields.Append('|');
                    }

                    fields.Append(Expand(pipeline, field.GetAttributeValue("Name")));
                    fields.Append('|');
                    fields.Append(Expand(pipeline, field.GetAttributeValue("Value")));
                }

                ExecuteCompleted completed = delegate(string response, ExecuteResult result)
                {
                    if (!DataService.HandleExecute(response, result))
                    {
                        return;
                    }

                    var parts = response.Split('|');
                    if (parts.Length != 2)
                    {
                        return;
                    }

                    Guid itemId;
                    if (!Guid.TryParse(parts[0], out itemId))
                    {
                        return;
                    }

                    Guid parentId;
                    if (!Guid.TryParse(parts[1], out parentId))
                    {
                        return;
                    }

                    var databaseUri = new DatabaseUri(site, new DatabaseName(databaseName));
                    var itemUri     = new ItemUri(databaseUri, new ItemId(itemId));
                    var parentUri   = new ItemUri(itemUri.DatabaseUri, new ItemId(parentId));

                    var fileName    = project.GetProjectItemFileName(pipeline.Item);
                    var projectItem = ProjectFileItem.Load(project, fileName);
                    project.Add(projectItem);
                    projectItem.Items.Add(itemUri);

                    project.Save();

                    Notifications.RaiseItemAdded(this, new ItemVersionUri(itemUri, LanguageManager.CurrentLanguage, Data.Version.Latest), parentUri);
                };

                site.DataService.ExecuteAsync("Items.CreateItem", completed, databaseName, path, name, templateName, fields.ToString());
            }
        }
        private static void Drop([NotNull] object sender, [NotNull] ItemTreeViewItem item, [NotNull] DragEventArgs args)
        {
            Debug.ArgumentNotNull(sender, nameof(sender));
            Debug.ArgumentNotNull(item, nameof(item));
            Debug.ArgumentNotNull(args, nameof(args));

            if (!args.Data.GetDataPresent(@"CF_VSSTGPROJECTITEMS"))
            {
                return;
            }

            var fileName = args.Data.GetData(@"Text") as string ?? string.Empty;

            try
            {
                if (!File.Exists(fileName))
                {
                    return;
                }
            }
            catch
            {
                return;
            }

            var fileItemHandler = FileItemManager.GetFileItemHandler(fileName);

            if (fileItemHandler == null)
            {
                return;
            }

            Project project          = null;
            string  relativeFileName = null;

            foreach (var proj in ProjectManager.Projects)
            {
                relativeFileName = proj.GetRelativeFileName(fileName);
                if (relativeFileName == fileName)
                {
                    continue;
                }

                if (proj.Site != item.ItemUri.Site)
                {
                    continue;
                }

                project = proj;
                break;
            }

            if (project == null)
            {
                return;
            }

            var projectItem = project.GetProjectItem(relativeFileName) as ProjectFileItem;

            if (projectItem != null)
            {
                if (projectItem.Items.Any())
                {
                    return;
                }
            }

            projectItem = ProjectFileItem.Load(project, fileName);
            project.Add(projectItem);
            project.Save();

            var itemPath = Path.Combine(item.GetPath(), Path.GetFileNameWithoutExtension(fileName) ?? string.Empty);

            fileItemHandler.Handle(item.ItemUri.DatabaseName, projectItem, itemPath, (s, e) => item.Refresh());
        }