Changeset 7951 for branches/HiveResourcePermissionManagement (trunk integration)/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ResourcesView.cs
- Timestamp:
- 06/04/12 14:48:55 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HiveResourcePermissionManagement (trunk integration)/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ResourcesView.cs
r7259 r7951 21 21 22 22 using System; 23 using System.Collections.Generic; 23 24 using System.Drawing; 24 25 using System.Linq; … … 27 28 using System.Threading.Tasks; 28 29 using System.Windows.Forms; 30 using HeuristicLab.Clients.Access; 29 31 using HeuristicLab.Clients.Hive.Views; 30 32 using HeuristicLab.Core; … … 45 47 private const int slaveImageIndex = 0; 46 48 private const int slaveGroupImageIndex = 1; 49 private readonly Color ownedResourceColor = Color.LightGreen; 47 50 private TS.Task progressTask; 48 51 private bool stopProgressTask; 52 private bool currentlyAuthorized; 49 53 50 54 … … 56 60 HiveAdminClient.Instance.Refreshing += new EventHandler(Instance_Refreshing); 57 61 HiveAdminClient.Instance.Refreshed += new EventHandler(Instance_Refreshed); 62 63 Access.AccessClient.Instance.Refreshing += new EventHandler(Content_Refreshing); 64 Access.AccessClient.Instance.Refreshed += new EventHandler(Content_Refreshed); 58 65 } 59 66 … … 61 68 HiveAdminClient.Instance.Refreshing -= new EventHandler(Instance_Refreshing); 62 69 HiveAdminClient.Instance.Refreshed -= new EventHandler(Instance_Refreshed); 70 71 Access.AccessClient.Instance.Refreshing -= new EventHandler(Content_Refreshing); 72 Access.AccessClient.Instance.Refreshed -= new EventHandler(Content_Refreshed); 63 73 } 64 74 … … 87 97 progressTask = new TS.Task(UpdateProgress); 88 98 progressTask.Start(); 99 SetEnabledStateOfControls(false); 89 100 } 90 101 91 102 void Instance_Refreshed(object sender, EventArgs e) { 92 103 stopProgressTask = true; 104 SetEnabledStateOfControls(true); 105 } 106 107 void Content_Refreshing(object sender, EventArgs e) { 108 stopProgressTask = false; 109 progressTask = new TS.Task(UpdateProgress); 110 progressTask.Start(); 111 SetEnabledStateOfControls(false); 112 } 113 114 void Content_Refreshed(object sender, EventArgs e) { 115 stopProgressTask = true; 116 SetEnabledStateOfControls(true); 93 117 } 94 118 … … 110 134 if (Content == null) { 111 135 slaveView.Content = null; 136 scheduleView.Content = null; 137 permissionView.Content = null; 138 permissionView.FetchSelectedUsers = null; 112 139 treeSlaveGroup.Nodes.Clear(); 113 140 } else { 141 permissionView.Content = Access.AccessClient.Instance; 114 142 treeSlaveGroup.Nodes.Clear(); 115 143 … … 134 162 tn.Tag = g; 135 163 tn.Text = g.Name; 164 if (g.OwnerUserId == Access.UserInformation.Instance.User.Id) tn.BackColor = ownedResourceColor; 136 165 137 166 BuildSlaveGroupTree(g, tn); … … 144 173 stn.SelectedImageIndex = stn.ImageIndex; 145 174 stn.Tag = g; 175 if (g.OwnerUserId == Access.UserInformation.Instance.User.Id) stn.BackColor = ownedResourceColor; 146 176 ungrp.Nodes.Add(stn); 147 177 } … … 162 192 stn.SelectedImageIndex = stn.ImageIndex; 163 193 stn.Tag = r; 194 if (r.OwnerUserId == Access.UserInformation.Instance.User.Id) stn.BackColor = ownedResourceColor; 164 195 tn.Nodes.Add(stn); 165 196 … … 174 205 btnRemoveGroup.Enabled = false; 175 206 btnSave.Enabled = false; 207 btnPermissionsSave.Enabled = false; 208 permissionView.Enabled = false; 176 209 } else { 177 210 btnAddGroup.Enabled = true; … … 181 214 } 182 215 183 private void treeSlaveGroup_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) { 184 if (slaveView.Content != null && slaveView.Content is SlaveGroup) { 185 slaveView.Content.PropertyChanged -= new System.ComponentModel.PropertyChangedEventHandler(SlaveViewContent_PropertyChanged); 186 } 187 188 slaveView.Content = (Resource)e.Node.Tag; 189 HiveAdminClient.Instance.DowntimeForResourceId = ((Resource)e.Node.Tag).Id; 190 191 if (e.Node.Tag is SlaveGroup) { 192 slaveView.Content.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(SlaveViewContent_PropertyChanged); 193 } 194 195 if (tabSlaveGroup.SelectedIndex == 1) { 196 UpdateScheduleAsync(); 216 public virtual void SetEnabledStateOfControls(bool state) { 217 if (InvokeRequired) { 218 Invoke(new Action(() => SetEnabledStateOfControls(state))); 219 } else { 220 if (Content == null) state = false; 221 btnAddGroup.Enabled = state; 222 btnRemoveGroup.Enabled = state; 223 btnSave.Enabled = state; 224 scheduleView.SetEnabledStateOfControls(state && IsAuthorized(slaveView.Content)); 225 btnPermissionsSave.Enabled = state && permissionView.FetchSelectedUsers != null && Content != null; 226 permissionView.Enabled = state && permissionView.FetchSelectedUsers != null && Content != null; 227 } 228 } 229 230 private bool IsAuthorized(Resource resource) { 231 return resource != null 232 && resource.Name != UngroupedGroupName 233 && resource.Id != Guid.Empty 234 && HiveServiceLocator.Instance.CallHiveService<bool>(service => { return service.AuthorizesForResourceAdministration(resource.Id); }); 235 } 236 237 private void treeSlaveGroup_AfterSelect(object sender, TreeViewEventArgs e) { 238 if (e.Action != TreeViewAction.Unknown) { 239 Resource selectedResource = ((Resource)e.Node.Tag); 240 currentlyAuthorized = IsAuthorized(selectedResource); 241 if (currentlyAuthorized) { 242 permissionView.FetchSelectedUsers = new Func<List<Guid>>(() => { 243 return HiveServiceLocator.Instance.CallHiveService<List<ResourcePermission>>(service => { 244 return service.GetResourcePermissions(selectedResource.Id); 245 }).Select(x => x.GrantedUserId).ToList(); 246 }); 247 if (!tabSlaveGroup.TabPages.Contains(tabPermissions)) tabSlaveGroup.TabPages.Add(tabPermissions); 248 } else { 249 permissionView.FetchSelectedUsers = null; 250 btnPermissionsSave.Enabled = false; 251 if (selectedResource.Id == Guid.Empty) { 252 if (!tabSlaveGroup.TabPages.Contains(tabPermissions)) tabSlaveGroup.TabPages.Add(tabPermissions); 253 } else tabSlaveGroup.TabPages.Remove(tabPermissions); 254 } 255 256 if (slaveView.Content != null && slaveView.Content is SlaveGroup) { 257 slaveView.Content.PropertyChanged -= new System.ComponentModel.PropertyChangedEventHandler(SlaveViewContent_PropertyChanged); 258 } 259 260 slaveView.Content = selectedResource; 261 HiveAdminClient.Instance.DowntimeForResourceId = selectedResource.Id; 262 263 if (selectedResource is SlaveGroup) { 264 slaveView.Content.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(SlaveViewContent_PropertyChanged); 265 } 266 267 if (tabSlaveGroup.SelectedIndex == 1) { 268 UpdateScheduleAsync(); 269 } else if (tabSlaveGroup.SelectedIndex == 2) { 270 UpdatePermissionsAsync(); 271 } 197 272 } 198 273 } … … 217 292 SlaveGroup newGroup = new SlaveGroup(); 218 293 newGroup.Name = "New Group"; 294 newGroup.OwnerUserId = UserInformation.Instance.User.Id; 219 295 Content.Add(newGroup); 220 296 } … … 269 345 if (destNode.TreeView == newNode.TreeView) { 270 346 if (destNode.Text == UngroupedGroupName || (destNode.Parent != null && destNode.Parent.Text == UngroupedGroupName)) { 271 MessageBox.Show( String.Format("You can't drag items to the {0} group.{1}This group only contains slaves which haven't yet been assigned to a real group.",347 MessageBox.Show(string.Format("You can't drag items to the group \"{0}\".{1}This group only contains slaves which haven't yet been assigned to a real group.", 272 348 UngroupedGroupName, Environment.NewLine), "HeuristicLab Hive Administrator", MessageBoxButtons.OK, MessageBoxIcon.Information); 273 349 return; … … 285 361 286 362 if (newNode.Tag is SlaveGroup && CheckParentsEqualsMovedNode(parentNode, newNode)) { 363 return; 364 } 365 366 SlaveGroup parent = (SlaveGroup)parentNode.Tag; 367 368 if (parent.OwnerUserId != null && !IsAuthorized(parent)) { 369 MessageBox.Show(string.Format("You don't have the permissions to drag items to the group \"{0}\".", ((Resource)parentNode.Tag).Name), 370 "HeuristicLab Hive Administrator", MessageBoxButtons.OK, MessageBoxIcon.Error); 287 371 return; 288 372 } … … 330 414 private void treeSlaveGroup_ItemDrag(object sender, ItemDragEventArgs e) { 331 415 TreeNode sourceNode = (TreeNode)e.Item; 332 DoDragDrop(sourceNode, DragDropEffects.All); 416 if (IsAuthorized((Resource)sourceNode.Tag)) 417 DoDragDrop(sourceNode, DragDropEffects.All); 333 418 } 334 419 … … 403 488 private void UpdateSchedule() { 404 489 HiveAdminClient.Instance.RefreshCalendar(); 405 scheduleView.Invoke(new Action(() => scheduleView.Content = HiveAdminClient.Instance.Downtimes)); 490 scheduleView.Invoke(new Action(() => { 491 scheduleView.Content = HiveAdminClient.Instance.Downtimes; 492 SetEnabledStateOfControls(currentlyAuthorized); 493 })); 406 494 } 407 495 … … 412 500 } 413 501 502 private void UpdatePermissions() { 503 if (permissionView.Content != null && permissionView.FetchSelectedUsers != null) 504 permissionView.Invoke(new Action(() => permissionView.ManualRefresh())); 505 } 506 507 private void UpdatePermissionsAsync() { 508 TS.Task.Factory.StartNew(UpdatePermissions).ContinueWith((t) => { 509 DisplayError(t.Exception); 510 }, TaskContinuationOptions.OnlyOnFaulted); 511 } 512 513 414 514 private void DisplayError(Exception ex) { 415 515 MessageBox.Show(string.Format("An error occured while updating: {0} {1}", Environment.NewLine, ex.Message), "HeuristicLab Hive Administrator", MessageBoxButtons.OK, MessageBoxIcon.Error); … … 419 519 if (tabSlaveGroup.SelectedIndex == 1) { 420 520 UpdateScheduleAsync(); 521 } else if (tabSlaveGroup.SelectedIndex == 2) { 522 UpdatePermissionsAsync(); 421 523 } 422 524 } … … 429 531 UpdateResourcesAsync(); 430 532 } 533 534 private void btnPermissionsSave_Click(object sender, EventArgs e) { 535 SetEnabledStateOfControls(false); 536 HiveServiceLocator.Instance.CallHiveService(service => { 537 service.GrantResourcePermissions(((Resource)treeSlaveGroup.SelectedNode.Tag).Id, permissionView.GetAddedUsers().Select(x => x.Id).ToList()); 538 service.RevokeResourcePermissions(((Resource)treeSlaveGroup.SelectedNode.Tag).Id, permissionView.GetDeletedUsers().Select(x => x.Id).ToList()); 539 }); 540 SetEnabledStateOfControls(true); 541 } 431 542 } 432 543 }
Note: See TracChangeset
for help on using the changeset viewer.