public void ViewBuilds() { //get all build definitions if not leaf. BaseHierarchyNode node = NodePriority != (int)TeamExplorerNodePriority.Leaf ? FindAssociated.AssociatedNode("All Build Definitions", this, separator) : FindAssociated.AssociatedNode(this, separator); node.ParentHierarchy.CallMethod("ViewBuilds", node); }
private void RecursiveBuildNodes(IBuildDefinitionTreeNode root, BaseHierarchyNode teNode, char sep) { //create nodes on this level and call recursive on children. foreach (var buildNode in root.Children.Select(node => new BuildDefinitionExplorerNode(node, sep, TFS))) { buildNode.AddChildren(); teNode.AddChild(buildNode); } teNode.Expand(false); }
public void QueueNewBuild() { //get all build definitions if not leaf. BaseHierarchyNode node = NodePriority != (int)TeamExplorerNodePriority.Leaf ? FindAssociated.AssociatedNode("All Build Definitions", this, separator) : FindAssociated.AssociatedNode(this, separator); if (!(NodePriority == (int)TeamExplorerNodePriority.Leaf && IsDisabled)) { node.ParentHierarchy.CallMethod("QueueBuild", node); } }
public void QueueDefaultSubFolderBuilds() { // if (NodePriority == (int)TeamExplorerNodePriority.Leaf) // return; // just ignore, we should never be here IBuildServer buildServer = GetBuildServer(); foreach (IBuildDefinition buildDef in FindAssociated.AssociatedNodes(CanonicalName, this, separator).Select( item => buildServer.GetBuildDefinition(item.ProjectName, item.Name))) { if (buildDef.Enabled) { buildServer.QueueBuild(buildDef); } } BaseHierarchyNode node = FindAssociated.AssociatedNode("All Build Definitions", this, separator); node.ParentHierarchy.CallMethod("ViewBuilds", node); }
internal static BaseHierarchyNode AssociatedNode(string nodeName, BaseHierarchyNode hierarchyNode, char sep) { var folderChars = new[] { '$', sep }; lock (_syncLock) { try { string nodeNameToFind = nodeName.TrimEnd(folderChars); var nodes = hierarchyNode.ParentHierarchy.ParentHierarchy.GetFieldValue("m_hierarchyManager").GetFieldValue( "m_hierarchyNodes") as Dictionary <uint, BaseHierarchyNode>; foreach (var build in from baseHierarchyNode in nodes where baseHierarchyNode.Value.CanonicalName.EndsWith("/Builds") select baseHierarchyNode.Value into node select node.NestedHierarchy as BaseUIHierarchy into buildHier select buildHier.GetFieldValue("m_hierarchyManager").GetFieldValue( "m_hierarchyNodes") as Dictionary <uint, BaseHierarchyNode> into builds from build in builds.Where(build => Compare(nodeNameToFind, build.Value.Name)) select build) { //this is the origional builddefinition node. return(build.Value); } } catch { } // BuildDefinitionUIHierarchy.Hierarchy.RefreshTree(); throw new ArgumentException("Build definition with path name '" + nodeName + "' does not exist!"); } }
/// <summary> /// Finds multiple matching build nodes, based on a partly name, like the name of the folder. /// </summary> /// <param name="canonicalnodeName"></param> /// <param name="hierarchyNode"></param> /// <param name="sep"></param> /// <returns></returns> internal static List <BaseHierarchyNode> AssociatedNodes(string canonicalnodeName, BaseHierarchyNode hierarchyNode, char sep) { var folderChars = new[] { '$', sep }; string nodeName = canonicalnodeName.Split('/')[0]; lock (_syncLock) { string nodeNameToFind = nodeName.TrimEnd(folderChars); var nodes = hierarchyNode.ParentHierarchy.ParentHierarchy.GetFieldValue("m_hierarchyManager").GetFieldValue( "m_hierarchyNodes") as Dictionary <uint, BaseHierarchyNode>; var nodeList = new List <BaseHierarchyNode>(); foreach (var node in nodes) { if (node.Value.CanonicalName.EndsWith("/Builds")) { var nodeNH = node.Value.NestedHierarchy as BaseUIHierarchy; var buildHier = nodeNH.GetFieldValue("m_hierarchyManager").GetFieldValue("m_hierarchyNodes") as Dictionary <uint, BaseHierarchyNode>; foreach (var build in buildHier) { if (build.Value != null && build.Value.Name != null && build.Value.Name.Contains(nodeNameToFind)) { nodeList.Add(build.Value); } } } } return(nodeList); } }
internal static BaseHierarchyNode AssociatedNode(BaseHierarchyNode node, char sep) { //split at leaf level return(AssociatedNode(node.CanonicalName.Split('/')[0], node, sep)); }
public void ViewAllBuilds() { BaseHierarchyNode node = FindAssociated.AssociatedNode("All Build Definitions", this, separator); node.ParentHierarchy.CallMethod("ViewBuilds", node); }
public void GotoTeamExplorerBuildNode() { BaseHierarchyNode node = FindAssociated.AssociatedNode(this, separator); node.Select(); }
public void OpenEditBuildDefintion() { BaseHierarchyNode node = FindAssociated.AssociatedNode(this, separator); node.ParentHierarchy.CallMethod("OpenBuildDefinition", node); }
protected override void InstallNewTree(BaseUIHierarchy hierarchy, BaseHierarchyNode newRoot) { base.InstallNewTree(hierarchy, newRoot); }
protected override System.Collections.ArrayList[] DoTreeMerge(BaseUIHierarchy hierarchy, BaseHierarchyNode newRoot) { return(base.DoTreeMerge(hierarchy, newRoot)); }
public int PopulateTree(BaseHierarchyNode teNode) { var options = new Options(this, TFS); var sep = options.SeparatorToken; var root = BuildDefinitionTreeNodeFactory.CreateOrMergeIntoTree("root", sep, null, false); int noOfBuilds = 0; try { //This code uses reflection since this is the only way to get hold of the associated build nodes. //The code goes up the hierarchy and finds the 'Builds' plugin and then get hold of its build nodes. var nodes = teNode.ParentHierarchy.ParentHierarchy .GetFieldValue("m_hierarchyManager") .GetFieldValue("m_hierarchyNodes") as Dictionary <uint, BaseHierarchyNode>; foreach (var builds in from baseHierarchyNode in nodes where baseHierarchyNode.Value.CanonicalName.EndsWith("/Builds") select baseHierarchyNode.Value into node select node.NestedHierarchy as BaseUIHierarchy into buildHier select buildHier.GetFieldValue("m_hierarchyManager").GetFieldValue("m_hierarchyNodes") as Dictionary <uint, BaseHierarchyNode> ) { foreach (var buildNodeKV in builds.Reverse().Where(buildNodeKV => buildNodeKV.Value != null && !String.IsNullOrEmpty(buildNodeKV.Value.Name))) { bool disabled = buildNodeKV.Value.OverlayIconIndex == 6; // Number found through investigation, we only look in the Build folder, we dont access the Build definitions, in order to keep performance up BuildDefinitionTreeNodeFactory.CreateOrMergeIntoTree("root" + sep + buildNodeKV.Value.Name, sep, root, disabled); noOfBuilds++; } break; } //merge tree with UI nodes. if (noOfBuilds > 0) { RecursiveBuildNodes(root, teNode, sep); } } catch (Exception ex) { System.Diagnostics.Trace.WriteLine(ex); try { //clean up while (HierarchyNode.FirstChild != null) { HierarchyNode.FirstChild.Remove(); } } catch { //ignore something is very wrong. } throw; } return(noOfBuilds); }