private void OnMetadataChanged(object sender, MetadataChangedEventArgs e)
        {
            var securityObject = sender as IManagementConsoleObject;

            if (securityObject != null)
            {
                if (MetadataUpdates.ContainsKey(securityObject))
                {
                    if (MetadataUpdates[securityObject].ContainsKey(e.Key))
                    {
                        MetadataUpdates[securityObject][e.Key] = e.Value;
                    }
                    else
                    {
                        MetadataUpdates[securityObject].Add(e.Key, e.Value);
                    }
                }
                else
                {
                    MetadataUpdates.Add(securityObject, new Dictionary <string, string>());
                    MetadataUpdates[securityObject].Add(e.Key, e.Value);
                }
                PermissionDetails.ApplyEnabled = true;
            }
        }
 private void UpdateSuccessful()
 {
     MetadataUpdates.Clear();
     Updates.Clear();
     PermissionDetails.ApplyEnabled   = false;
     ProcessIndicatorPanel.Visibility = Visibility.Collapsed;
 }
        private void XTreeView_SelectionChanged(object sender, Telerik.Windows.Controls.SelectionChangedEventArgs e)
        {
            if (sender == this)
            {
                return;
            }
            var isSkip = false;

            if (e.AddedItems.Count == 1)
            {
                var securityObject = e.AddedItems[0] as IManagementConsoleObject;
                if (securityObject != null)
                {
                    ProjectListViewControlPanel.DataContext = securityObject;
                    if (e.RemovedItems.Count == 1 && (Updates.Count > 0 || MetadataUpdates.Count > 0))
                    {
                        var oldItem = e.RemovedItems[0];
                        SuperMessageBoxService.ShowWarning("Confirmation",
                                                           "Do you want to apply your changes? \r\n\r\n" +
                                                           "Press YES to apply\r\n" +
                                                           "Press No to discard the changes you have made\r\n",
                                                           "Yes", "No", "Cancel",
                                                           ApplyChanges,
                                                           () =>
                        {
                            foreach (var update in Updates)
                            {
                                foreach (var updatePair in update.Value)
                                {
                                    update.Key.ResetChange(updatePair.Key);
                                }
                            }
                            Updates.Clear();
                            MetadataUpdates.Clear();
                            PermissionDetails.ApplyEnabled = false;
                            var oldObject = oldItem as IManagementConsoleObject;
                            if (oldObject != null)
                            {
                                oldObject.ReloadMetadata();
                            }
                            XTreeView.SelectedItem = e.AddedItems[0];
                        },
                                                           () =>
                        {
                            XTreeView.SelectedItem = oldItem;
                            isSkip = true;
                        });
                    }


                    if (!isSkip && App.PermissionLevel == PermissionLevel.SecurityManager)
                    {
                        if (securityObject is Project)
                        {
                            if (!securityObject.IsLoaded)
                            {
                                _securityManager.GetSecurityAssociationsAsync(securityObject,
                                                                              ClientOnGetSecurityAssociationsCompleted, AllSecurityGroups,
                                                                              new GlymaSecurableObject
                                {
                                    SecurableParentUid = Guid.Empty,
                                    SecurableObjectUid = securityObject.Id
                                });
                            }
                            foreach (var project in _projects)
                            {
                                if (project.Id != securityObject.Id)
                                {
                                    project.IsSelected = false;
                                }
                            }
                        }
                        else if (securityObject is RootMap)
                        {
                            if (!securityObject.IsLoaded)
                            {
                                _securityManager.GetSecurityAssociationsAsync(securityObject,
                                                                              ClientOnGetSecurityAssociationsCompleted, AllSecurityGroups,
                                                                              new GlymaSecurableObject
                                {
                                    SecurableParentUid = securityObject.ParentId,
                                    SecurableObjectUid = securityObject.Id
                                });
                            }
                            foreach (var project in _projects)
                            {
                                if (project.Id == securityObject.ParentId)
                                {
                                    foreach (var rootMap in project.RootMaps)
                                    {
                                        if (rootMap.Id != securityObject.Id)
                                        {
                                            rootMap.IsSelected = false;
                                        }
                                    }
                                }
                                else
                                {
                                    project.IsSelected = false;
                                }
                            }
                        }
                    }
                }
                Focus();
                XTreeView.Focus();
            }
        }