Changeset 16520 for branches/2947_ConfigurableIndexedDataTable/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveResourceSelectorDialog.cs
- Timestamp:
- 01/08/19 15:39:49 (5 years ago)
- Location:
- branches/2947_ConfigurableIndexedDataTable
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2947_ConfigurableIndexedDataTable
- Property svn:mergeinfo changed
-
branches/2947_ConfigurableIndexedDataTable/HeuristicLab.Clients.Hive.JobManager
- Property svn:mergeinfo changed
-
branches/2947_ConfigurableIndexedDataTable/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveResourceSelectorDialog.cs
r15583 r16520 20 20 #endregion 21 21 22 using System; 22 23 using System.Collections.Generic; 23 using System.Threading.Tasks; 24 using System.ComponentModel; 25 using System.Linq; 24 26 using System.Windows.Forms; 25 using HeuristicLab.PluginInfrastructure; 27 using HeuristicLab.Clients.Hive.Views; 28 using HeuristicLab.MainForm; 29 using HeuristicLab.Core; 26 30 27 31 namespace HeuristicLab.Clients.Hive.JobManager.Views { 28 32 public partial class HiveResourceSelectorDialog : Form { 29 public HiveResourceSelectorDialog() { 33 private readonly object locker = new object(); 34 private bool updatingProjects = false; 35 36 public Project SelectedProject { 37 get { return hiveResourceSelector.SelectedProject; } 38 } 39 40 public IEnumerable<Resource> SelectedResources { 41 get { return hiveResourceSelector.AssignedResources; } 42 } 43 44 private Guid jobId; 45 public Guid JobId { 46 get { return hiveResourceSelector.JobId; } 47 set { jobId = value; } 48 } 49 50 // persisted projectId 51 private Guid? projectId; 52 public Guid? ProjectId { 53 get { return hiveResourceSelector.ProjectId; } 54 set { projectId = value; } 55 } 56 57 // currently selected projectId (initially the persisted projectId) 58 private Guid? selectedProjectId; 59 public Guid? SelectedProjectId { 60 get { return selectedProjectId; } 61 set { selectedProjectId = value; } 62 } 63 64 // currently selected resourceIds (if null, perform lookup in HiveResourceSelector) 65 private IEnumerable<Guid> selectedResourceIds; 66 public IEnumerable<Guid> SelectedResourceIds { 67 get { return selectedResourceIds; } 68 set { selectedResourceIds = value; } 69 } 70 71 72 73 public HiveResourceSelectorDialog(Guid jobId, Guid projectId) { 74 this.jobId = jobId; 75 this.projectId = projectId; 76 this.selectedProjectId = projectId; 30 77 InitializeComponent(); 31 78 } 32 79 33 public ISet<Resource> GetSelectedResources() { return hiveResourceSelector.SelectedResources; }34 35 private void HiveResourceSelectorDialog_Load(object sender, System.EventArgs e) {36 Hive AdminClient.Instance.Refreshed += new System.EventHandler(Instance_Refreshed);37 DownloadResources();80 #region Overrides 81 protected override void OnLoad(EventArgs e) { 82 HiveClient.Instance.Refreshing += HiveClient_Instance_Refreshing; 83 HiveClient.Instance.Refreshed += HiveClient_Instance_Refreshed; 84 base.OnLoad(e); 38 85 } 39 86 40 private void HiveResourceSelectorDialog_FormClosing(object sender, FormClosingEventArgs e) { 41 HiveAdminClient.Instance.Refreshed -= new System.EventHandler(Instance_Refreshed); 87 protected override void OnClosing(CancelEventArgs e) { 88 HiveClient.Instance.Refreshed -= HiveClient_Instance_Refreshed; 89 HiveClient.Instance.Refreshing -= HiveClient_Instance_Refreshing; 90 base.OnClosing(e); 91 } 92 #endregion 93 94 #region Event Handlers 95 private void HiveClient_Instance_Refreshing(object sender, EventArgs e) { 96 if (InvokeRequired) Invoke((Action<object, EventArgs>)HiveClient_Instance_Refreshing, sender, e); 97 else { 98 refreshButton.Enabled = false; 99 okButton.Enabled = false; 100 cancelButton.Enabled = false; 101 // Progress cannot be shown on dialog (no parent control), thus it is shown on the selector 102 Progress.Show(hiveResourceSelector, "Refreshing", ProgressMode.Indeterminate); 103 } 42 104 } 43 105 44 void Instance_Refreshed(object sender, System.EventArgs e) { 45 hiveResourceSelector.Content = HiveAdminClient.Instance.Resources; 106 private void HiveClient_Instance_Refreshed(object sender, EventArgs e) { 107 if (InvokeRequired) Invoke((Action<object, EventArgs>)HiveClient_Instance_Refreshed, sender, e); 108 else { 109 Progress.Hide(hiveResourceSelector); 110 okButton.Enabled = true; 111 cancelButton.Enabled = true; 112 refreshButton.Enabled = true; 113 } 46 114 } 47 115 48 private void refreshButton_Click(object sender, System.EventArgs e) { 49 DownloadResources(); 116 private async void HiveResourceSelectorDialog_Load(object sender, EventArgs e) { 117 lock (locker) { 118 if (updatingProjects) return; 119 updatingProjects = true; 120 } 121 122 await SecurityExceptionUtil.TryAsyncAndReportSecurityExceptions( 123 action: () => UpdateProjects(), 124 finallyCallback: () => updatingProjects = false); 50 125 } 51 126 52 private void DownloadResources() { 53 var task = System.Threading.Tasks.Task.Factory.StartNew(DownloadResourcesAsync); 54 task.ContinueWith(t => { 55 hiveResourceSelector.FinishProgressView(); 56 ErrorHandling.ShowErrorDialog(this, "An error occurred while downloading the tasks.", t.Exception); 57 }, TaskContinuationOptions.OnlyOnFaulted); 127 private async void refreshButton_Click(object sender, EventArgs e) { 128 lock (locker) { 129 if (updatingProjects) return; 130 updatingProjects = true; 131 } 132 133 await SecurityExceptionUtil.TryAsyncAndReportSecurityExceptions( 134 action: () => UpdateProjects(), 135 finallyCallback: () => updatingProjects = false); 58 136 } 59 137 60 private void DownloadResourcesAsync() { 61 hiveResourceSelector.StartProgressView(); 62 HiveAdminClient.Instance.Refresh(); 63 hiveResourceSelector.FinishProgressView(); 138 private void hiveResourceSelector_SelectedProjectChanged(object sender, EventArgs e) { 139 okButton.Enabled = hiveResourceSelector.SelectedProject != null && hiveResourceSelector.AssignedResources.Any(); 64 140 } 141 142 private void hiveResourceSelector_SelectedResourcesChanged(object sender, EventArgs e) { 143 okButton.Enabled = hiveResourceSelector.AssignedResources.Any(); 144 145 if (!hiveResourceSelector.AssignedResources.Any()) { 146 errorProvider.SetError(okButton, "Note: currently no resources are assigned"); 147 } else if (hiveResourceSelector.AssignedCores == 0) { 148 errorProvider.SetError(okButton, "Note: currently no resources with cores are assigned"); 149 } else { 150 errorProvider.SetError(okButton, string.Empty); 151 } 152 } 153 154 private void hiveResourceSelector_ProjectsTreeViewDoubleClicked(object sender, EventArgs e) { 155 if (hiveResourceSelector.SelectedProject == null) return; 156 if (!hiveResourceSelector.AssignedResources.Any()) return; 157 158 DialogResult = DialogResult.OK; 159 Close(); 160 } 161 #endregion 162 163 #region Helpers 164 private void UpdateProjects() { 165 HiveClient.Instance.RefreshProjectsAndResources(); 166 hiveResourceSelector.JobId = jobId; 167 hiveResourceSelector.ProjectId = projectId; 168 hiveResourceSelector.SelectedProjectId = selectedProjectId; 169 hiveResourceSelector.SelectedResourceIds = selectedResourceIds; 170 hiveResourceSelector.Content = HiveClient.Instance.Projects; 171 } 172 173 private void ShowHiveInformationDialog() { 174 if (InvokeRequired) Invoke((Action)ShowHiveInformationDialog); 175 else { 176 using (HiveInformationDialog dialog = new HiveInformationDialog()) { 177 dialog.ShowDialog(this); 178 } 179 } 180 } 181 #endregion 65 182 } 66 183 }
Note: See TracChangeset
for help on using the changeset viewer.