DirectoryNode CreatePropertiesFolderNodeWithParentProjectNodeCalledControllers()
		{
			var projectNode = CreateProjectNode(@"d:\projects\MyProject\Controllers.csproj", "Controllers");
			var propertiesNode = new DirectoryNode(@"d:\projects\MyProject\Properties");
			propertiesNode.AddTo(projectNode);
			return propertiesNode;
		}
		DirectoryNode CreateControllersChildFolderNode()
		{
			DirectoryNode controllersNode = CreateControllersFolderNode();
			
			string path = @"d:\projects\MyAspNetProject\Controllers\Child";
			var childNode = new DirectoryNode(path);
			childNode.AddTo(controllersNode);
			return childNode;
		}
		DirectoryNode CreateViewsChildFolderNode()
		{
			DirectoryNode viewsNode = CreateViewsFolderNode();
			
			string path = @"d:\projects\MyAspNetProject\Views\Child";
			var childNode = new DirectoryNode(path);
			childNode.AddTo(viewsNode);
			return childNode;
		}
 public override object Visit(DirectoryNode directoryNode, object data)
 {
     if (FileUtility.IsBaseDirectory(oldName, directoryNode.Directory)) {
         directoryNode.Directory = DirectoryName.Create(FileUtility.RenameBaseDirectory(directoryNode.Directory, oldName, newName));
         directoryNode.AcceptChildren(this, data);
     } else if (FileUtility.IsBaseDirectory(directoryNode.Directory, oldName)) {
         directoryNode.AcceptChildren(this, data);
     }
     return data;
 }
		void CreateSelectedFolderNode(string folder)
		{
			projectForSelectedFolder = TestableProject.CreateProject();
			projectNode = new ProjectNode(projectForSelectedFolder);
			
			directoryNode = new DirectoryNode(folder);
			directoryNode.AddTo(projectNode);
			
			selectedFolderNode = new SelectedFolderNodeInProjectsView(directoryNode);
		}
		public static DirectoryNode CreateDirectoryNode(ProjectItem item, FileNodeStatus status)
		{
			DirectoryNode node;
			if (item is WebReferencesProjectItem) {
				node = new WebReferencesFolderNode((WebReferencesProjectItem)item);
				node.FileNodeStatus = status;
			} else {
				node = new DirectoryNode(item.FileName.Trim('\\', '/'), status);
				node.ProjectItem = item;
			}
			return node;
		}
		public static DirectoryNode CreateDirectoryNode(TreeNode parent, IProject project, string directory)
		{
			DirectoryNode node = new DirectoryNode(directory);
			if (!string.IsNullOrEmpty(project.AppDesignerFolder)
			    && directory == Path.Combine(project.Directory, project.AppDesignerFolder))
			{
				node.SpecialFolder = SpecialFolder.AppDesigner;
			} else if (DirectoryNode.IsWebReferencesFolder(project, directory)) {
				node = new WebReferencesFolderNode(directory);
			} else if (parent != null && parent is WebReferencesFolderNode) {
				node = new WebReferenceNode(directory);
			}
			return node;
		}
		public override object Visit(DirectoryNode directoryNode, object data)
		{
			if (FileUtility.IsBaseDirectory(fileName, directoryNode.Directory)) {
				ExtTreeNode parent = directoryNode.Parent as ExtTreeNode;
				directoryNode.Remove();
				if (parent != null) {
					parent.Refresh();
				}
			} else {
				if (FileUtility.IsBaseDirectory(directoryNode.Directory, fileName)) {
					directoryNode.AcceptChildren(this, data);
				}
			}
			return data;
		}
		public override object Visit(DirectoryNode directoryNode, object data)
		{
			if (!ShouldVisitDirectoryNode(directoryNode))
				return null;
			
			if (IsImmediateParentForNewFile(directoryNode)) {
				if (IsChildFileNodeMissingForNewFile(directoryNode)) {
					AddFileOrDirectoryNodeTo(directoryNode);
				}
			} else if (IsChildDirectoryNodeMissingForNewFile(directoryNode)) {
				AddChildDirectoryNodeForNewFileTo(directoryNode);
			} else {
				return base.Visit(directoryNode, data);
			}
			return null;
		}
		public void AddParentFolder(string virtualName, string relativeDirectoryPath, Dictionary<string, DirectoryNode> directoryNodeList)
		{
			if ((relativeDirectoryPath.Length == 0)
			    || (string.Compare(virtualName, 0, relativeDirectoryPath, 0, relativeDirectoryPath.Length, StringComparison.InvariantCultureIgnoreCase) == 0))
			{
				int pos = virtualName.IndexOf('/', relativeDirectoryPath.Length + 1);
				if (pos > 0) {
					string subFolderName = virtualName.Substring(relativeDirectoryPath.Length, pos - relativeDirectoryPath.Length);
					DirectoryNode node;
					if (directoryNodeList.TryGetValue(subFolderName, out node)) {
						if (node.FileNodeStatus == FileNodeStatus.None) {
							node.FileNodeStatus = FileNodeStatus.InProject;
						}
					} else {
						node = new DirectoryNode(Path.Combine(this.Directory, subFolderName), FileNodeStatus.Missing);
						node.AddTo(this);
						directoryNodeList[subFolderName] = node;
					}
				}
			}
		}
		public void SetUpFixture()
		{
			MSBuildBasedProject project = WebReferenceTestHelper.CreateTestProject("C#");
			project.FileName = Path.Combine(projectDirectory, "foo.csproj");
			project.AppDesignerFolder = "Properties";
			
			WebReferencesProjectItem webReferencesItem = new WebReferencesProjectItem(project);
			webReferencesItem.Include = "Web References\\";
			ProjectService.AddProjectItem(project, webReferencesItem);
									
			FileProjectItem fileItem = new FileProjectItem(project, ItemType.Folder);
			fileItem.Include = "MissingFolder\\";
			ProjectService.AddProjectItem(project, fileItem);
			
			ProjectNode projectNode = new ProjectNode(project);

			appDesignerFolderNode = DirectoryNodeFactory.CreateDirectoryNode(projectNode, project, Path.Combine(projectDirectory, "Properties"));
			ordinaryFolderNode = DirectoryNodeFactory.CreateDirectoryNode(projectNode, project, Path.Combine(project.Directory, "Test"));
			webReferencesFolderNode = DirectoryNodeFactory.CreateDirectoryNode(projectNode, project, Path.Combine(project.Directory, webReferencesItem.Include));	
			webReferenceNode = DirectoryNodeFactory.CreateDirectoryNode(webReferencesFolderNode, project, Path.Combine(Path.Combine(project.Directory, webReferencesItem.Include), "localhost"));
			
			missingWebReferencesFolderNode = DirectoryNodeFactory.CreateDirectoryNode(webReferencesItem, FileNodeStatus.Missing);
			missingOrdinaryFolderNode = DirectoryNodeFactory.CreateDirectoryNode(fileItem, FileNodeStatus.Missing);
		}
		bool IsNewFileInsideDirectory(DirectoryNode directoryNode)
		{
			return FileUtility.IsBaseDirectory(directoryNode.Directory, DirectoryForNewFileAddedToProject);
		}
		bool ShouldVisitDirectoryNode(DirectoryNode directoryNode)
		{
			return directoryNode.IsInitialized && IsNewFileInsideDirectory(directoryNode);
		}
		bool DirectoryOfNewFileStartsWith(DirectoryNode directoryNode)
		{
			return FileUtility.IsBaseDirectory(directoryNode.Directory, DirectoryForNewFileAddedToProject);
		}
		bool IsChildDirectoryNodeAlreadyAddedForNewFile(DirectoryNode parentDirectoryNode)
		{
			return GetChildDirectoryNodes(parentDirectoryNode)
				.Any(childDirectoryNode => DirectoryOfNewFileStartsWith(childDirectoryNode));
		}
		bool IsChildDirectoryNodeMissingForNewFile(DirectoryNode parentDirectoryNode)
		{
			return !IsChildDirectoryNodeAlreadyAddedForNewFile(parentDirectoryNode);
		}
Example #17
0
		public void CopyDirectoryHere(DirectoryNode node, bool performMove)
		{
			CopyDirectoryHere(node.Directory, performMove);
		}
		bool IsMatch(DirectoryNode directoryNode)
		{
			return MvcParentFolderName.Equals(directoryNode.Text, StringComparison.InvariantCultureIgnoreCase);
		}
		void AddDirectoryNodeTo(TreeNode parentNode, string directory)
		{
			var directoryNode = new DirectoryNode(directory, FileNodeStatus.InProject);
			directoryNode.InsertSorted(parentNode);
		}
		void AddChildDirectoryNodeForNewFileTo(DirectoryNode parentNode)
		{
			string childDirectory = GetMissingChildDirectory(parentNode.Directory);
			AddDirectoryNodeTo(parentNode, childDirectory);
		}
		public SelectedMvcViewFolder(DirectoryNode directoryNode)
			: base(directoryNode)
		{
		}
		public SelectedFolderNodeInProjectsView(DirectoryNode directoryNode)
		{
			this.directoryNode = directoryNode;
			this.project = new MvcProject(directoryNode.Project);
		}
 public override object Visit(DirectoryNode directoryNode, object data)
 {
     return data;
 }
Example #24
0
		void AddParentFolder(string virtualName, string relativeDirectoryPath, Dictionary<string, DirectoryNode> directoryNodeList)
		{
			if (relativeDirectoryPath.Length == 0
			    || string.Compare(virtualName, 0, relativeDirectoryPath, 0, relativeDirectoryPath.Length, StringComparison.OrdinalIgnoreCase) == 0)
			{
				// virtualName is a file in this folder, so we have to add its containing folder
				// to the project
				int pos = virtualName.IndexOf('/', relativeDirectoryPath.Length + 1);
				if (pos < 0)
					return;
				string subFolderName = virtualName.Substring(relativeDirectoryPath.Length, pos - relativeDirectoryPath.Length);
				DirectoryNode node;
				if (directoryNodeList.TryGetValue(subFolderName, out node)) {
					if (node.FileNodeStatus == FileNodeStatus.None) {
						node.FileNodeStatus = FileNodeStatus.InProject;
					}
				} else {
					node = new DirectoryNode(Path.Combine(Directory, subFolderName), FileNodeStatus.Missing);
					node.InsertSorted(this);
					directoryNodeList[subFolderName] = node;
				}
			}
		}
Example #25
0
		public SelectedMvcFolder(DirectoryNode directoryNode)
			: this(
				new SelectedFolderNodeInProjectsView(directoryNode),
				new MvcFileService())
		{
		}
		void AddFileOrDirectoryNodeTo(DirectoryNode directoryNode)
		{
			if (newFileAddedToProject.ItemType == ItemType.Folder) {
				AddDirectoryNodeTo(directoryNode, newFileAddedToProject.FileName);
			} else {
				AddFileNodeTo(directoryNode);
			}
		}
		public SelectedMvcControllerFolder(DirectoryNode directoryNode)
			: base(directoryNode)
		{
		}
		bool IsChildFileNodeAlreadyAddedForNewFile(DirectoryNode parentDirectoryNode)
		{
			return GetChildFileNodes(parentDirectoryNode)
				.Any(childFileNode => FileNodeMatchesNewFileAdded(childFileNode));
		}
Example #29
0
        protected override void Initialize()
        {
            if (removeMe != null)
            {
                Nodes.Remove(removeMe);
                removeMe = null;
            }

            LoggingService.Info("Initialize DirectoryNode " + Directory);

            Dictionary <string, FileNode> fileNodeDictionary
                = new Dictionary <string, FileNode>(StringComparer.OrdinalIgnoreCase);
            Dictionary <FileNode, string>      dependendFileDictionary = new Dictionary <FileNode, string>();
            Dictionary <string, DirectoryNode> directoryNodeList       = new Dictionary <string, DirectoryNode>(StringComparer.OrdinalIgnoreCase);

            // Add files found in file system

            if (System.IO.Directory.Exists(Directory))
            {
                foreach (string subDirectory in System.IO.Directory.GetDirectories(Directory))
                {
                    if (Path.GetFileName(subDirectory) != ".svn")
                    {
                        DirectoryNode newDirectoryNode = DirectoryNodeFactory.CreateDirectoryNode(this, Project, subDirectory);
                        newDirectoryNode.InsertSorted(this);
                        directoryNodeList[Path.GetFileName(subDirectory)] = newDirectoryNode;
                    }
                }

                foreach (string file in System.IO.Directory.GetFiles(Directory))
                {
                    FileNode fileNode = new FileNode(file);
                    fileNodeDictionary[Path.GetFileName(file)] = fileNode;
                    fileNode.InsertSorted(this);
                }
            }
            if (Nodes.Count == 0)
            {
                SetClosedImage();
            }

            string relativeDirectoryPath = this.RelativePath;

            if (relativeDirectoryPath.Length > 0)
            {
                relativeDirectoryPath = relativeDirectoryPath.Replace('\\', '/') + '/';
            }

            // Add project items

            foreach (ProjectItem item in Project.Items)
            {
                if (item.ItemType == ItemType.WebReferenceUrl)
                {
                    DirectoryNode node;
                    if (directoryNodeList.TryGetValue(Path.GetFileName(item.FileName), out node))
                    {
                        if (node.FileNodeStatus == FileNodeStatus.None)
                        {
                            node.FileNodeStatus = FileNodeStatus.InProject;
                        }
                        node.ProjectItem = item;
                    }
                    continue;
                }
                FileProjectItem fileItem = item as FileProjectItem;
                if (fileItem == null)
                {
                    continue;
                }
                string virtualName = fileItem.VirtualName.Replace('\\', '/');
                if (virtualName.EndsWith("/"))
                {
                    virtualName = virtualName.Substring(0, virtualName.Length - 1);
                }
                string fileName = Path.GetFileName(virtualName);
                if (!string.Equals(virtualName, relativeDirectoryPath + fileName, StringComparison.OrdinalIgnoreCase))
                {
                    AddParentFolder(virtualName, relativeDirectoryPath, directoryNodeList);
                    continue;
                }

                if (item.ItemType == ItemType.Folder || item.ItemType == ItemType.WebReferences)
                {
                    DirectoryNode node;
                    if (directoryNodeList.TryGetValue(fileName, out node))
                    {
                        if (node.FileNodeStatus == FileNodeStatus.None)
                        {
                            node.FileNodeStatus = FileNodeStatus.InProject;
                        }
                        node.ProjectItem = item;
                    }
                    else
                    {
                        node = DirectoryNodeFactory.CreateDirectoryNode(item, FileNodeStatus.Missing);
                        node.InsertSorted(this);
                        directoryNodeList[fileName] = node;
                    }
                }
                else
                {
                    FileNode node;
                    if (fileItem.IsLink)
                    {
                        node = new FileNode(fileItem.FileName, FileNodeStatus.InProject);
                        node.InsertSorted(this);
                        fileNodeDictionary[fileName] = node;
                    }
                    else
                    {
                        if (fileNodeDictionary.TryGetValue(fileName, out node))
                        {
                            if (node.FileNodeStatus == FileNodeStatus.None)
                            {
                                node.FileNodeStatus = FileNodeStatus.InProject;
                            }
                        }
                        else
                        {
                            node = new FileNode(fileItem.FileName, FileNodeStatus.Missing);
                            node.InsertSorted(this);
                            fileNodeDictionary[fileName] = node;
                        }
                    }

                    node.ProjectItem = fileItem;
                    if (fileItem != null && fileItem.DependentUpon != null && fileItem.DependentUpon.Length > 0)
                    {
                        dependendFileDictionary[node] = fileItem.DependentUpon;
                    }
                }
            }

            // Insert 'code behind files'
            foreach (KeyValuePair <FileNode, string> pair in dependendFileDictionary)
            {
                string fileName = Path.GetFileName(pair.Value);
                if (!fileNodeDictionary.ContainsKey(fileName))
                {
                    continue;
                }
                AbstractProjectBrowserTreeNode parentNode = fileNodeDictionary[fileName];
                pair.Key.Parent.Nodes.Remove(pair.Key);
                if (NodeIsParent(parentNode, pair.Key))
                {
                    // is pair.Key a parent of parentNode?
                    // if yes, we have a parent cycle - break it by adding one node to the directory
                    pair.Key.InsertSorted(this);
                }
                else
                {
                    pair.Key.InsertSorted(parentNode);
                    if (pair.Key.FileNodeStatus != FileNodeStatus.Missing)
                    {
                        pair.Key.FileNodeStatus = FileNodeStatus.BehindFile;
                    }
                }
            }
            base.Initialize();
        }
Example #30
0
		public static IDataObject CreateDataObject(DirectoryNode node, bool performMove)
		{
			return new DataObject(typeof(DirectoryNode).ToString(),
			                      new FileOperationClipboardObject(node.Directory, performMove));
		}
		bool IsImmediateParentForNewFile(DirectoryNode directoryNode)
		{
			return FileUtility.IsBaseDirectory(DirectoryForNewFileAddedToProject, directoryNode.Directory);
		}
 public virtual object Visit(DirectoryNode directoryNode, object data)
 {
     directoryNode.AcceptChildren(this, data);
     return(data);
 }