- Timestamp:
- 10/07/17 10:32:07 (6 years ago)
- Location:
- branches/HiveProjectManagement/HeuristicLab.Clients.Hive.Administrator/3.3/Views
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HiveProjectManagement/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectView.Designer.cs
r15401 r15412 85 85 this.ownerComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; 86 86 this.ownerComboBox.FormattingEnabled = true; 87 this.ownerComboBox.Location = new System.Drawing.Point( 72, 138);87 this.ownerComboBox.Location = new System.Drawing.Point(102, 138); 88 88 this.ownerComboBox.Name = "ownerComboBox"; 89 89 this.ownerComboBox.Size = new System.Drawing.Size(434, 21); … … 170 170 // refreshButton 171 171 // 172 this.refreshButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));173 172 this.refreshButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Refresh; 174 this.refreshButton.Location = new System.Drawing.Point( 512, 136);173 this.refreshButton.Location = new System.Drawing.Point(72, 136); 175 174 this.refreshButton.Name = "refreshButton"; 176 175 this.refreshButton.Size = new System.Drawing.Size(24, 24); -
branches/HiveProjectManagement/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectView.cs
r15401 r15412 25 25 using System.Windows.Forms; 26 26 using HeuristicLab.Clients.Access; 27 using HeuristicLab.Clients.Hive.Views; 27 28 using HeuristicLab.Core.Views; 28 29 using HeuristicLab.MainForm; 29 using Tasks = System.Threading.Tasks;30 30 31 31 namespace HeuristicLab.Clients.Hive.Administrator.Views { … … 48 48 } 49 49 50 #region Overrides 50 51 protected override void OnClosing(FormClosingEventArgs e) { 51 52 AccessClient.Instance.Refreshed -= AccessClient_Instance_Refreshed; … … 62 63 Content.PropertyChanged -= Content_PropertyChanged; 63 64 base.DeregisterContentEvents(); 64 }65 66 private void Content_PropertyChanged(object sender, PropertyChangedEventArgs e) {67 OnContentChanged();68 65 } 69 66 … … 73 70 nameTextBox.Clear(); 74 71 descriptionTextBox.Clear(); 75 ownerComboBox.DataSource = null;76 72 ownerComboBox.SelectedItem = null; 77 73 createdTextBox.Clear(); … … 82 78 nameTextBox.Text = Content.Name; 83 79 descriptionTextBox.Text = Content.Description; 84 ownerComboBox.DataSource = AccessClient.Instance.UsersAndGroups.OfType<LightweightUser>().ToList();85 80 ownerComboBox.SelectedItem = AccessClient.Instance.UsersAndGroups.FirstOrDefault(x => x.Id == Content.OwnerUserId); 86 81 createdTextBox.Text = Content.DateCreated.ToString("ddd, dd.MM.yyyy, HH:mm:ss"); … … 99 94 nameTextBox.Enabled = enabled; 100 95 descriptionTextBox.Enabled = enabled; 96 refreshButton.Enabled = enabled; 101 97 ownerComboBox.Enabled = enabled; 102 98 createdTextBox.Enabled = enabled; … … 104 100 endDateTimePicker.Enabled = enabled && Content.EndDate.HasValue; 105 101 indefiniteCheckBox.Enabled = enabled; 102 } 103 #endregion 104 105 #region Event Handlers 106 private void Content_PropertyChanged(object sender, PropertyChangedEventArgs e) { 107 OnContentChanged(); 106 108 } 107 109 … … 125 127 126 128 private async void ProjectView_Load(object sender, EventArgs e) { 127 lock (locker) { 128 if (updatingUsers) return; 129 updatingUsers = true; 130 } 131 try { 132 await Tasks.Task.Run(() => UpdateUsers()); 133 } finally { 134 updatingUsers = false; 135 } 129 await SecurityExceptionUtil.TryAsyncAndReportSecurityExceptions( 130 action: () => UpdateUsers(), 131 finallyCallback: () => { 132 ownerComboBox.SelectedIndexChanged -= ownerComboBox_SelectedIndexChanged; 133 ownerComboBox.DataSource = AccessClient.Instance.UsersAndGroups.OfType<LightweightUser>().ToList(); 134 ownerComboBox.SelectedIndexChanged += ownerComboBox_SelectedIndexChanged; 135 }); 136 136 } 137 137 … … 141 141 updatingUsers = true; 142 142 } 143 try { 144 await Tasks.Task.Run(() => UpdateUsers()); 145 } finally { 146 updatingUsers = false; 147 } 148 } 149 150 private void UpdateUsers() { 151 ownerComboBox.DataSource = null; 152 AccessClient.Instance.Refresh(); 153 if (Content != null) { 154 ownerComboBox.DataSource = AccessClient.Instance.UsersAndGroups.OfType<LightweightUser>().ToList(); 155 ownerComboBox.SelectedItem = AccessClient.Instance.UsersAndGroups.FirstOrDefault(x => x.Id == Content.OwnerUserId); 156 } 143 144 await SecurityExceptionUtil.TryAsyncAndReportSecurityExceptions( 145 action: () => UpdateUsers(), 146 finallyCallback: () => { 147 ownerComboBox.SelectedIndexChanged -= ownerComboBox_SelectedIndexChanged; 148 ownerComboBox.DataSource = AccessClient.Instance.UsersAndGroups.OfType<LightweightUser>().ToList(); 149 ownerComboBox.SelectedItem = AccessClient.Instance.UsersAndGroups.FirstOrDefault(x => x.Id == Content.OwnerUserId); 150 ownerComboBox.SelectedIndexChanged += ownerComboBox_SelectedIndexChanged; 151 updatingUsers = false; 152 }); 157 153 } 158 154 … … 192 188 Content.EndDate = indefiniteCheckBox.Checked ? (DateTime?)null : Content.StartDate; 193 189 } 190 #endregion 191 192 #region Helpers 193 private void UpdateUsers() { 194 try { 195 AccessClient.Instance.Refresh(); 196 } catch (AnonymousUserException) { 197 ShowHiveInformationDialog(); 198 } 199 } 200 201 private void ShowHiveInformationDialog() { 202 if (InvokeRequired) Invoke((Action)ShowHiveInformationDialog); 203 else { 204 using (HiveInformationDialog dialog = new HiveInformationDialog()) { 205 dialog.ShowDialog(this); 206 } 207 } 208 } 209 #endregion 194 210 } 195 211 } -
branches/HiveProjectManagement/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectsView.cs
r15401 r15412 104 104 removeButton.Enabled = enabled; 105 105 saveProjectButton.Enabled = enabled; 106 savePermissionsButton.Enabled = enabled && permissionsView. FetchSelectedUsers != null;107 permissionsView.Enabled = enabled && permissionsView. FetchSelectedUsers != null;106 savePermissionsButton.Enabled = enabled && permissionsView.Content != null && permissionsView.FetchSelectedUsers != null; 107 permissionsView.Enabled = enabled && permissionsView.Content != null && permissionsView.FetchSelectedUsers != null; 108 108 } 109 109 #endregion … … 111 111 #region Event Handlers 112 112 private void Content_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IndexedItem<Project>> e) { 113 OnContentChanged(); 113 if (InvokeRequired) Invoke((Action<object, CollectionItemsChangedEventArgs<IndexedItem<Project>>>)Content_ItemsAdded, sender, e); 114 else { 115 OnContentChanged(); 116 } 114 117 } 115 118 116 119 private void Content_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<IndexedItem<Project>> e) { 117 OnContentChanged(); 120 if (InvokeRequired) Invoke((Action<object, CollectionItemsChangedEventArgs<IndexedItem<Project>>>)Content_ItemsRemoved, sender, e); 121 else { 122 OnContentChanged(); 123 } 118 124 } 119 125 120 126 private void ProjectViewContent_PropertyChanged(object sender, PropertyChangedEventArgs e) { 121 OnContentChanged(); 127 if (InvokeRequired) Invoke((Action<object, PropertyChangedEventArgs>)ProjectViewContent_PropertyChanged, sender, e); 128 else { 129 OnContentChanged(); 130 } 122 131 } 123 132 … … 159 168 160 169 private async void ProjectsView_Load(object sender, EventArgs e) { 161 lock (locker) {162 if (updatingProjects) return;163 updatingProjects = true;164 }165 166 170 await SecurityExceptionUtil.TryAsyncAndReportSecurityExceptions( 167 171 action: () => UpdateProjects(), 168 finallyCallback: () => updatingProjects = false);172 finallyCallback: () => Content = HiveAdminClient.Instance.Projects); 169 173 } 170 174 … … 177 181 await SecurityExceptionUtil.TryAsyncAndReportSecurityExceptions( 178 182 action: () => UpdateProjects(), 179 finallyCallback: () => updatingProjects = false); 183 finallyCallback: () => { 184 Content = HiveAdminClient.Instance.Projects; 185 updatingProjects = false; 186 }); 180 187 } 181 188 … … 194 201 } 195 202 196 await SecurityExceptionUtil.TryAsyncAndReportSecurityExceptions( 197 action: () => RemoveProject(), 198 finallyCallback: () => removingProjects = false); 203 var selectedNode = projectsTreeView.SelectedNode; 204 if (selectedNode == null || selectedNode.Tag == null) return; 205 206 var project = (Project)selectedNode.Tag; 207 var result = MessageBox.Show( 208 "Do you really want to delete " + project.Name + "?", 209 "HeuristicLab Hive Administrator", 210 MessageBoxButtons.YesNo, 211 MessageBoxIcon.Question); 212 213 if (result == DialogResult.Yes) { 214 if (Content.Any(x => x.ParentProjectId == project.Id)) { 215 MessageBox.Show( 216 "Only empty projects can be deleted.", 217 "HeuristicLab Hive Administrator", 218 MessageBoxButtons.OK, 219 MessageBoxIcon.Error); 220 } else { 221 await SecurityExceptionUtil.TryAsyncAndReportSecurityExceptions( 222 action: () => RemoveProject(project), 223 finallyCallback: () => { 224 Content.Remove(project); 225 removingProjects = false; 226 }); 227 } 228 } 199 229 } 200 230 … … 222 252 projectView.Content = selectedProject; 223 253 224 selectedProject.PropertyChanged += ProjectViewContent_PropertyChanged; 225 226 await SecurityExceptionUtil.TryAsyncAndReportSecurityExceptions( 227 action: () => UpdatePermissions()); 254 if (selectedProject != null) 255 selectedProject.PropertyChanged += ProjectViewContent_PropertyChanged; 256 257 if (IsAuthorized(selectedProject)) { 258 if (!tabControl.TabPages.Contains(permissionsTabPage)) 259 tabControl.TabPages.Add(permissionsTabPage); 260 261 permissionsView.FetchSelectedUsers = () => 262 HiveServiceLocator.Instance.CallHiveService(s => s.GetProjectPermissions(selectedProject.Id)) 263 .Select(x => x.GrantedUserId) 264 .ToList(); 265 266 if (tabControl.SelectedIndex == 1 && permissionsView.Content != null && permissionsView.FetchSelectedUsers != null) 267 await SecurityExceptionUtil.TryAsyncAndReportSecurityExceptions( 268 action: () => UpdatePermissions()); 269 } else { 270 if (tabControl.TabPages.Contains(permissionsTabPage)) 271 tabControl.TabPages.Remove(permissionsTabPage); 272 permissionsView.FetchSelectedUsers = null; 273 } 228 274 } 229 275 … … 273 319 } 274 320 275 private void tabControl_SelectedIndexChanged(object sender, EventArgs e) {276 if (tabControl.SelectedIndex == 1 ) {277 UpdatePermissions();278 }321 private async void tabControl_SelectedIndexChanged(object sender, EventArgs e) { 322 if (tabControl.SelectedIndex == 1 && permissionsView.Content != null && permissionsView.FetchSelectedUsers != null) 323 await SecurityExceptionUtil.TryAsyncAndReportSecurityExceptions( 324 action: () => UpdatePermissions()); 279 325 } 280 326 … … 341 387 private void UpdateProjects() { 342 388 try { 343 389 HiveAdminClient.Instance.Refresh(); 344 390 } catch (AnonymousUserException) { 345 391 ShowHiveInformationDialog(); 346 392 } 347 HiveAdminClient.Instance.Refresh(); 348 Content = HiveAdminClient.Instance.Projects; 349 } 350 351 private void RemoveProject() { 352 var selectedNode = projectsTreeView.SelectedNode; 353 if (selectedNode == null || selectedNode.Tag == null) return; 354 355 var project = (Project)selectedNode.Tag; 356 var result = MessageBox.Show( 357 "Do you really want to delete " + project.Name + "?", 358 "HeuristicLab Hive Administrator", 359 MessageBoxButtons.YesNo, 360 MessageBoxIcon.Question); 361 362 if (result == DialogResult.Yes) { 363 if (Content.Any(x => x.ParentProjectId == project.Id)) { 364 MessageBox.Show( 365 "Only empty projects can be deleted.", 366 "HeuristicLab Hive Administrator", 367 MessageBoxButtons.OK, 368 MessageBoxIcon.Error); 369 } else { 370 Content.Remove(project); 371 HiveAdminClient.Delete(project); 372 } 393 } 394 395 private void RemoveProject(Project project) { 396 try { 397 HiveAdminClient.Delete(project); 398 } catch (AnonymousUserException) { 399 ShowHiveInformationDialog(); 373 400 } 374 401 } 375 402 376 403 private void UpdatePermissions() { 377 var selectedNode = projectsTreeView.SelectedNode; 378 var project = (Project)selectedNode?.Tag; 379 380 if (IsAuthorized(project)) { 381 permissionsView.FetchSelectedUsers = () => 382 HiveServiceLocator.Instance.CallHiveService(s => s.GetProjectPermissions(project.Id)) 383 .Select(x => x.GrantedUserId) 384 .ToList(); 385 386 savePermissionsButton.Enabled = true; 387 388 if (!tabControl.TabPages.Contains(permissionsTabPage)) 389 tabControl.TabPages.Add(permissionsTabPage); 390 391 if (tabControl.SelectedIndex == 1 && permissionsView.Content != null && permissionsView.FetchSelectedUsers != null) 392 permissionsView.ManualRefresh(); 393 } else { 394 permissionsView.FetchSelectedUsers = null; 395 savePermissionsButton.Enabled = false; 396 397 if (tabControl.TabPages.Contains(permissionsTabPage)) 398 tabControl.TabPages.Remove(permissionsTabPage); 404 try { 405 permissionsView.ManualRefresh(); 406 } catch (AnonymousUserException) { 407 ShowHiveInformationDialog(); 399 408 } 400 409 } -
branches/HiveProjectManagement/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ResourcesView.Designer.cs
r15401 r15412 53 53 private void InitializeComponent() { 54 54 this.components = new System.ComponentModel.Container(); 55 System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ResourcesView));56 55 this.imageListSlaveGroups = new System.Windows.Forms.ImageList(this.components); 57 56 this.splitSlaves = new System.Windows.Forms.SplitContainer(); … … 63 62 this.tabSlaveGroup = new System.Windows.Forms.TabControl(); 64 63 this.tabDetails = new System.Windows.Forms.TabPage(); 64 this.tabSchedule = new System.Windows.Forms.TabPage(); 65 this.toolTip = new System.Windows.Forms.ToolTip(this.components); 65 66 this.slaveView = new HeuristicLab.Clients.Hive.Administrator.Views.SlaveView(); 66 this.tabSchedule = new System.Windows.Forms.TabPage();67 67 this.scheduleView = new HeuristicLab.Clients.Hive.Administrator.Views.ScheduleView(); 68 this.toolTip = new System.Windows.Forms.ToolTip(this.components);69 68 ((System.ComponentModel.ISupportInitialize)(this.splitSlaves)).BeginInit(); 70 69 this.splitSlaves.Panel1.SuspendLayout(); … … 194 193 this.tabDetails.UseVisualStyleBackColor = true; 195 194 // 196 // slaveView197 //198 this.slaveView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)199 | System.Windows.Forms.AnchorStyles.Left)200 | System.Windows.Forms.AnchorStyles.Right)));201 this.slaveView.Caption = "SlaveView";202 this.slaveView.Content = null;203 this.slaveView.Location = new System.Drawing.Point(6, 6);204 this.slaveView.Name = "slaveView";205 this.slaveView.ReadOnly = false;206 this.slaveView.Size = new System.Drawing.Size(565, 503);207 this.slaveView.TabIndex = 0;208 //209 195 // tabSchedule 210 196 // … … 217 203 this.tabSchedule.Text = "Schedule"; 218 204 this.tabSchedule.UseVisualStyleBackColor = true; 205 // 206 // slaveView 207 // 208 this.slaveView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 209 | System.Windows.Forms.AnchorStyles.Left) 210 | System.Windows.Forms.AnchorStyles.Right))); 211 this.slaveView.Caption = "SlaveView"; 212 this.slaveView.Content = null; 213 this.slaveView.Location = new System.Drawing.Point(6, 6); 214 this.slaveView.Name = "slaveView"; 215 this.slaveView.ReadOnly = false; 216 this.slaveView.Size = new System.Drawing.Size(565, 503); 217 this.slaveView.TabIndex = 0; 219 218 // 220 219 // scheduleView -
branches/HiveProjectManagement/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ResourcesView.cs
r15401 r15412 27 27 using HeuristicLab.Clients.Access; 28 28 using HeuristicLab.Clients.Hive.Views; 29 using HeuristicLab.Collections; 29 30 using HeuristicLab.Common.Resources; 30 31 using HeuristicLab.Core; … … 144 145 145 146 #region Event Handlers 146 private void Content_ItemsAdded(object sender, Collections.CollectionItemsChangedEventArgs<Collections.IndexedItem<Resource>> e) { 147 OnContentChanged(); 148 } 149 150 private void Content_ItemsRemoved(object sender, Collections.CollectionItemsChangedEventArgs<Collections.IndexedItem<Resource>> e) { 151 OnContentChanged(); 147 private void Content_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IndexedItem<Resource>> e) { 148 if (InvokeRequired) Invoke((Action<object, CollectionItemsChangedEventArgs<IndexedItem<Resource>>>)Content_ItemsAdded, sender, e); 149 else { 150 OnContentChanged(); 151 } 152 } 153 154 private void Content_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<IndexedItem<Resource>> e) { 155 if (InvokeRequired) Invoke((Action<object, CollectionItemsChangedEventArgs<IndexedItem<Resource>>>)Content_ItemsRemoved, sender, e); 156 else { 157 OnContentChanged(); 158 } 152 159 } 153 160 154 161 private void SlaveViewContent_PropertyChanged(object sender, PropertyChangedEventArgs e) { 155 OnContentChanged(); 156 if (e.PropertyName == "HbInterval") { 157 UpdateChildHbIntervall(slaveView.Content); 162 if (InvokeRequired) Invoke((Action<object, PropertyChangedEventArgs>)SlaveViewContent_PropertyChanged, sender, e); 163 else { 164 OnContentChanged(); 165 if (e.PropertyName == "HbInterval") { 166 UpdateChildHbIntervall(slaveView.Content); 167 } 158 168 } 159 169 } … … 196 206 197 207 private async void ResourcesView_Load(object sender, EventArgs e) { 198 lock (locker) {199 if (updatingResources) return;200 updatingResources = true;201 }202 203 208 await SecurityExceptionUtil.TryAsyncAndReportSecurityExceptions( 204 action: () => UpdateResources(), 205 finallyCallback: () => updatingResources = false); 209 action: () => UpdateResources()); 206 210 } 207 211 … … 259 263 slaveView.Content = selectedResource; 260 264 261 if (selectedResource is SlaveGroup) 262 slaveView.Content.PropertyChanged += SlaveViewContent_PropertyChanged; 263 264 await SecurityExceptionUtil.TryAsyncAndReportSecurityExceptions( 265 action: () => UpdateSchedule()); 265 if (selectedResource != null && selectedResource is SlaveGroup) 266 selectedResource.PropertyChanged += SlaveViewContent_PropertyChanged; 267 268 if (IsAuthorized(selectedResource)) { 269 if (!tabSlaveGroup.TabPages.Contains(tabSchedule)) 270 tabSlaveGroup.TabPages.Add(tabSchedule); 271 272 HiveAdminClient.Instance.DowntimeForResourceId = selectedResource.Id; 273 274 if (tabSlaveGroup.SelectedIndex == 1) { 275 await SecurityExceptionUtil.TryAsyncAndReportSecurityExceptions( 276 action: () => UpdateSchedule(), 277 finallyCallback: () => scheduleView.Content = HiveAdminClient.Instance.Downtimes); 278 } 279 } else { 280 if (tabSlaveGroup.TabPages.Contains(tabSchedule)) 281 tabSlaveGroup.TabPages.Remove(tabSchedule); 282 HiveAdminClient.Instance.DowntimeForResourceId = Guid.Empty; 283 } 266 284 } 267 285 … … 412 430 413 431 private void UpdateResources() { 414 try { 415 ResetView(); 416 HiveAdminClient.Instance.Refresh(); 417 Content = HiveAdminClient.Instance.Resources; 418 } catch (AnonymousUserException) { 419 ShowHiveInformationDialog(); 420 } 432 HiveAdminClient.Instance.Refresh(); 433 Content = HiveAdminClient.Instance.Resources; 421 434 } 422 435 … … 452 465 453 466 private void UpdateSchedule() { 454 var selectedNode = treeSlaveGroup.SelectedNode; 455 var resource = (Resource)selectedNode?.Tag; 456 457 if (IsAuthorized(resource)) { 458 if (!tabSlaveGroup.TabPages.Contains(tabSchedule)) 459 tabSlaveGroup.TabPages.Add(tabSchedule); 460 461 if (tabSlaveGroup.SelectedIndex == 1) { 462 HiveAdminClient.Instance.DowntimeForResourceId = resource.Id; 463 HiveAdminClient.Instance.RefreshCalendar(); 464 scheduleView.Invoke((Action)(() => { 465 scheduleView.Content = HiveAdminClient.Instance.Downtimes; 466 SetEnabledStateOfControls(); 467 })); 468 } 469 } else { 470 if (tabSlaveGroup.TabPages.Contains(tabSchedule)) 471 tabSlaveGroup.TabPages.Remove(tabSchedule); 467 try { 468 HiveAdminClient.Instance.RefreshCalendar(); 469 } catch (AnonymousUserException) { 470 ShowHiveInformationDialog(); 472 471 } 473 472 } -
branches/HiveProjectManagement/HeuristicLab.Clients.Hive.Administrator/3.3/Views/SlaveView.cs
r14185 r15412 125 125 protected override void SetEnabledStateOfControls() { 126 126 base.SetEnabledStateOfControls(); 127 bool enabled = Content != null; 128 txtName.Enabled = enabled; 129 txtHbIntervall.Enabled = enabled; 130 cbxPublic.Enabled = enabled; 127 131 } 128 132 … … 139 143 int interval = int.Parse(txtHbIntervall.Text); 140 144 Content.HbInterval = interval; 141 } 142 catch (Exception) { 145 } catch (Exception) { 143 146 MessageBox.Show("Please enter a numeric value for the Heartbeat Interval.", "HeuristicLab Hive Administrator", MessageBoxButtons.OK, MessageBoxIcon.Error); 144 147 txtHbIntervall.Text = "10";
Note: See TracChangeset
for help on using the changeset viewer.