Changeset 15642 for branches/HiveProjectManagement/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveResourceSelector.cs
- Timestamp:
- 01/23/18 14:00:03 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HiveProjectManagement/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveResourceSelector.cs
r15627 r15642 72 72 private string currentSearchString; 73 73 74 private void resetHiveResourceSelector() { 75 lastSelectedProject = null; 76 selectedProject = null; 77 projectId = null; 78 } 79 74 80 private Guid jobId; 75 81 public Guid JobId { … … 78 84 if (jobId == value) return; 79 85 jobId = value; 86 resetHiveResourceSelector(); 80 87 } 81 88 } … … 99 106 } 100 107 101 public bool ChangedProject { 102 get { 103 return (selectedProject == null || selectedProject.Id == projectId) ? false : true; 108 private IEnumerable<Guid> selectedResourceIds; 109 public IEnumerable<Guid> SelectedResourceIds { 110 get { return selectedResourceIds; } 111 set { 112 if (selectedResourceIds == value) return; 113 selectedResourceIds = value; 104 114 } 105 115 } … … 128 138 selectedProject = value; 129 139 UpdateResourceTree(); 140 ExtractStatistics(); 130 141 OnSelectedProjectChanged(); 131 142 } 132 143 } 144 133 145 public IEnumerable<Resource> AssignedResources { 134 146 get { return newAssignedResources; } … … 142 154 } 143 155 156 144 157 public new IItemList<Project> Content { 145 158 get { return (IItemList<Project>)base.Content; } … … 164 177 UpdateResourceGenealogy(); 165 178 166 if (SelectedProjectId.HasValue ) {179 if (SelectedProjectId.HasValue && SelectedProjectId.Value != Guid.Empty) { 167 180 SelectedProject = GetSelectedProjectById(SelectedProjectId.Value); 168 181 } else { 169 182 SelectedProject = null; 170 183 } 184 //ExtractStatistics(); 171 185 UpdateProjectTree(); 172 186 173 187 } else { 188 lastSelectedProject = null; 189 selectedProject = null; 190 selectedProjectId = null; 174 191 projectsTreeView.Nodes.Clear(); 175 192 resourcesTreeView.Nodes.Clear(); … … 183 200 projectsTreeView.Nodes.Clear(); 184 201 resourcesTreeView.Nodes.Clear(); 185 //SelectedProject = null;186 202 } 187 203 … … 213 229 } 214 230 215 SelectedProject = node;216 } 217 218 ExtractStatistics();231 232 } 233 SelectedProject = node; 234 //ExtractStatistics(); 219 235 } 220 236 … … 243 259 244 260 UpdateNewResourceTree(); 261 ExtractStatistics(); 245 262 //ExtractStatistics((Resource)resourcesTreeView.SelectedNode?.Tag); 246 263 OnAssignedResourcesChanged(); … … 483 500 } 484 501 } 485 ExtractStatistics();502 //ExtractStatistics(); 486 503 //OnAssignedResourcesChanged(); 487 504 } 488 505 489 506 private void UpdateAssignedResources() { 490 491 if (JobId == Guid.Empty && ChangedProjectSelection) { // new, unchanged jobs get all avaialable resources 507 assignedResources.Clear(); 508 newAssignedResources.Clear(); 509 510 if (JobId == Guid.Empty || JobId == null) { // new, unchanged jobs get all avaialable resources 492 511 // update new assigned resources 493 assignedResources.Clear(); 494 newAssignedResources.Clear(); 495 foreach (var resource in availableResources 496 .Where(x => !x.ParentResourceId.HasValue 497 || !availableResources.Select(y => y.Id).Contains(x.ParentResourceId.Value))) { 498 newAssignedResources.Add(resource); 499 } 500 501 } else if(JobId != Guid.Empty) { // existent, unchanged jobs get all assigned resources 512 if(selectedResourceIds == null) { 513 foreach (var resource in availableResources 514 .Where(x => !x.ParentResourceId.HasValue 515 || !availableResources.Select(y => y.Id).Contains(x.ParentResourceId.Value))) { 516 newAssignedResources.Add(resource); 517 } 518 } else { 519 foreach(var resource in availableResources.Where(x => selectedResourceIds.Contains(x.Id))) { 520 newAssignedResources.Add(resource); 521 } 522 } 523 } else { // existent, unchanged jobs get all assigned resources 502 524 // update assigned resources 503 525 var assignedJobResources = GetAssignedResourcesForJob(JobId); 504 526 foreach (var resource in assignedJobResources) { 505 527 assignedResources.Add(resource); 506 } 507 508 if(ChangedProjectSelection) { 509 newAssignedResources.Clear(); 510 foreach (var resource in assignedJobResources) { 528 if (selectedResourceIds == null) { 511 529 newAssignedResources.Add(resource); 512 530 } 513 531 } 514 } else { 515 var newAssignedResourceIds = newAssignedResources.Select(x => x.Id).ToList();516 newAssignedResources.Clear();517 foreach(var r in availableResources.Where(x => newAssignedResourceIds.Contains(x.Id))) {518 newAssignedResources.Add(r);519 } 520 } 521 522 ExtractStatistics();532 533 if(selectedResourceIds != null) { 534 foreach (var resource in availableResources.Where(x => selectedResourceIds.Contains(x.Id))) { 535 newAssignedResources.Add(resource); 536 } 537 } 538 } 539 540 //ExtractStatistics(); 523 541 OnAssignedResourcesChanged(); 524 542 } … … 535 553 includedResources.Clear(); 536 554 newIncludedResources.Clear(); 555 537 556 if (JobId != Guid.Empty) { 538 557 foreach (var item in assignedResources) { 539 558 foreach (var descendant in resourceDescendants[item.Id]) { 540 559 includedResources.Add(descendant); 541 newIncludedResources.Add(descendant); 542 } 543 } 544 } else { 545 foreach (var item in newAssignedResources) { 546 foreach (var descendant in resourceDescendants[item.Id]) { 547 newIncludedResources.Add(descendant); 548 } 560 } 561 } 562 } 563 564 foreach (var item in newAssignedResources) { 565 foreach (var descendant in resourceDescendants[item.Id]) { 566 newIncludedResources.Add(descendant); 549 567 } 550 568 } … … 722 740 } 723 741 724 private void ExtractStatistics(Resource resource = null) { 725 ISet<Slave> selectedSlaves = null; 742 private void ExtractStatistics(Resource resource = null) { 743 HashSet<Slave> newAssignedSlaves = new HashSet<Slave>(newAssignedResources.OfType<Slave>()); 744 foreach (var slaveGroup in newAssignedResources.OfType<SlaveGroup>()) { 745 foreach(var slave in resourceDescendants[slaveGroup.Id].OfType<Slave>()) { 746 newAssignedSlaves.Add(slave); 747 } 748 } 749 750 HashSet<Slave> selectedSlaves = null; 726 751 727 752 if (resource != null) { 728 729 730 753 var slaveGroup = resource as SlaveGroup; 731 754 if (slaveGroup != null) { 732 755 selectedSlaves = new HashSet<Slave>(resourceDescendants[slaveGroup.Id].OfType<Slave>()); 733 selectedSlaves.IntersectWith(newAssignedResources.OfType<Slave>());756 //selectedSlaves.IntersectWith(newAssignedSlaves); 734 757 } else { 735 758 selectedSlaves = new HashSet<Slave>(new[] { resource as Slave }); 736 759 } 737 760 } else { 738 selectedSlaves = new HashSet<Slave>(newAssignedResources.OfType<Slave>());739 } 740 741 int sumCores = selectedSlaves. OfType<Slave>().Sum(x => x.Cores.GetValueOrDefault());742 int sumFreeCores = selectedSlaves. OfType<Slave>().Sum(x => x.FreeCores.GetValueOrDefault());743 double sumMemory = selectedSlaves. OfType<Slave>().Sum(x => x.Memory.GetValueOrDefault()) / 1024.0;744 double sumFreeMemory = selectedSlaves. OfType<Slave>().Sum(x => x.FreeMemory.GetValueOrDefault()) / 1024.0;761 selectedSlaves = newAssignedSlaves; 762 } 763 764 int sumCores = selectedSlaves.Sum(x => x.Cores.GetValueOrDefault()); 765 int sumFreeCores = selectedSlaves.Sum(x => x.FreeCores.GetValueOrDefault()); 766 double sumMemory = selectedSlaves.Sum(x => x.Memory.GetValueOrDefault()) / 1024.0; 767 double sumFreeMemory = selectedSlaves.Sum(x => x.FreeMemory.GetValueOrDefault()) / 1024.0; 745 768 746 769 coresSummaryLabel.Text = $"{sumCores} Total ({sumFreeCores} Free / {sumCores - sumFreeCores} Used)"; … … 760 783 } 761 784 762 private void ExtractStatistics_Old(Resource resource = null) {763 ISet<Slave> selectedSlaves = null;764 765 if (resource != null) {766 var slaveGroup = resource as SlaveGroup;767 if (slaveGroup != null) {768 var children = new HashSet<Resource>(availableResources.Where(x => x.ParentResourceId == slaveGroup.Id));769 int nrOfChildren = children.Count;770 do {771 var newChildren = availableResources.Where(x => children.Any(y => y.Id == x.ParentResourceId));772 foreach (var newChild in newChildren)773 children.Add(newChild);774 } while (children.Count > nrOfChildren);775 selectedSlaves = new HashSet<Slave>(children.OfType<Slave>());776 selectedSlaves.IntersectWith(assignedResources.OfType<Slave>());777 } else {778 selectedSlaves = new HashSet<Slave>(new[] { resource as Slave });779 }780 } else {781 selectedSlaves = new HashSet<Slave>(assignedResources.OfType<Slave>());782 }783 784 int sumCores = selectedSlaves.OfType<Slave>().Sum(x => x.Cores.GetValueOrDefault());785 int sumFreeCores = selectedSlaves.OfType<Slave>().Sum(x => x.FreeCores.GetValueOrDefault());786 double sumMemory = selectedSlaves.OfType<Slave>().Sum(x => x.Memory.GetValueOrDefault()) / 1024.0;787 double sumFreeMemory = selectedSlaves.OfType<Slave>().Sum(x => x.FreeMemory.GetValueOrDefault()) / 1024.0;788 789 coresSummaryLabel.Text = $"{sumCores} Total ({sumFreeCores} Free / {sumCores - sumFreeCores} Used)";790 memorySummaryLabel.Text = $"{sumMemory:0.00} GB Total ({sumFreeMemory:0.00} GB Free / {(sumMemory - sumFreeMemory):0.00} GB Used)";791 }792 793 private Resource BuildResourceTree_Old(IEnumerable<Resource> resources) {794 resourcesTreeView.Nodes.Clear();795 if (!resources.Any()) return null;796 797 var mainResources = new HashSet<Resource>(resources.Where(x => x.ParentResourceId == null));798 var subResources = new HashSet<Resource>(resources.Except(mainResources));799 800 var stack = new Stack<Resource>(mainResources.OrderByDescending(x => x.Name));801 var top = stack.Peek();802 803 TreeNode currentNode = null;804 Resource currentResource = null;805 806 while (stack.Any()) {807 var newResource = stack.Pop();808 var newNode = new TreeNode(newResource.Name) {809 Checked = true,810 ImageIndex = newResource is Slave ? slaveImageIndex : slaveGroupImageIndex,811 Tag = newResource812 };813 814 while (currentNode != null && newResource.ParentResourceId != currentResource.Id) {815 currentNode = currentNode.Parent;816 currentResource = currentNode == null ? null : (Resource)currentNode.Tag;817 }818 819 if (currentNode == null) {820 resourcesTreeView.Nodes.Add(newNode);821 } else {822 currentNode.Nodes.Add(newNode);823 }824 825 newNode.SelectedImageIndex = newNode.ImageIndex;826 827 var childResources = subResources.Where(x => x.ParentResourceId == newResource.Id);828 if (childResources.Any()) {829 foreach (var resource in childResources.OrderByDescending(x => x.Name)) {830 subResources.Remove(resource);831 stack.Push(resource);832 }833 currentNode = newNode;834 currentResource = newResource;835 }836 }837 838 resourcesTreeView.ExpandAll();839 840 return top;841 }842 843 785 #endregion 844 786
Note: See TracChangeset
for help on using the changeset viewer.