/// <summary>
        ///
        /// </summary>
        /// <param name="filter"></param>
        /// <param name="include"></param>
        private void GetPermissionTargets(Oltp.AccountRow account)
        {
            Oltp.AccountRow currentAccount = account == null ? this.Window.CurrentAccount : account;

            if (currentAccount == null)
            {
                return;
            }

            Oltp.UserGroupDataTable groupsWith    = null;
            Oltp.UserDataTable      usersWith     = null;
            Oltp.UserGroupDataTable groupsWithout = null;
            Oltp.UserDataTable      usersWithout  = null;

            // Set to null if we need to retrieve it from db
            _copyToAccounts = Window.CurrentUser.AccountAdmin ?
                              Window.AvailableAccounts :
                              null;

            Window.AsyncOperation(delegate()
            {
                using (OltpProxy proxy = new OltpProxy())
                {
                    groupsWith    = proxy.Service.UserGroup_GetGroupsWithPermissions(currentAccount.ID);
                    usersWith     = proxy.Service.User_GetUsersWithPermissions(currentAccount.ID);
                    groupsWithout = proxy.Service.UserGroup_GetGroupsWithoutPermissions(currentAccount.ID);
                    usersWithout  = proxy.Service.User_GetUsersWithoutPermissions(currentAccount.ID);

                    _copyToAccounts =
                        // If not null
                        _copyToAccounts
                        ??
                        // else
                        proxy.Service.Account_GetByPermission(this.PageData.Path);
                }
            },
                                  delegate()
            {
                // Get an empty new list
                if (_items == null)
                {
                    _items = new ObservableCollection <DataRow>();
                }
                else
                {
                    _items.Clear();
                }

                // Add all items
                foreach (DataRow r in groupsWith.Rows)
                {
                    _items.Add(r);
                }
                foreach (DataRow r in usersWith.Rows)
                {
                    _items.Add(r);
                }

                _listTable.ListView.ItemsSource = _items;

                //-------------------------------//

                // Populate 'add' combo boxes
                if (_groupsToAdd == null)
                {
                    _groupsToAdd = new ObservableCollection <object>();
                }
                else
                {
                    _groupsToAdd.Clear();
                }

                if (_usersToAdd == null)
                {
                    _usersToAdd = new ObservableCollection <object>();
                }
                else
                {
                    _usersToAdd.Clear();
                }

                _groupsToAdd.Add("Add group");
                _usersToAdd.Add("Add user");

                foreach (DataRow r in groupsWithout.Rows)
                {
                    _groupsToAdd.Add(r);
                }
                foreach (DataRow r in usersWithout.Rows)
                {
                    _usersToAdd.Add(r);
                }

                _comboAddGroup.ItemsSource = _groupsToAdd;
                _comboAddUser.ItemsSource  = _usersToAdd;

                _comboAddGroup.SelectedIndex = 0;
                _comboAddUser.SelectedIndex  = 0;

                if (_copyToAccountsListBox != null)
                {
                    _copyToAccountsListBox.DataContext = Filter(_copyToAccounts);
                }
            });
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="filter"></param>
        /// <param name="include"></param>
        private void GetPermissionTargets(Oltp.AccountRow account)
        {
            Oltp.AccountRow currentAccount = account == null ? this.Window.CurrentAccount : account;

            if (currentAccount == null)
            {
                return;
            }

            Oltp.UserGroupDataTable groupsWith    = null;
            Oltp.UserDataTable      usersWith     = null;
            Oltp.UserGroupDataTable groupsWithout = null;
            Oltp.UserDataTable      usersWithout  = null;

            Window.AsyncOperation(delegate()
            {
                using (OltpProxy proxy = new OltpProxy())
                {
                    groupsWith    = proxy.Service.UserGroup_GetGroupsWithPermissions(currentAccount.ID);
                    usersWith     = proxy.Service.User_GetUsersWithPermissions(currentAccount.ID);
                    groupsWithout = proxy.Service.UserGroup_GetGroupsWithoutPermissions(currentAccount.ID);
                    usersWithout  = proxy.Service.User_GetUsersWithoutPermissions(currentAccount.ID);
                }
            },
                                  delegate()
            {
                // Get an empty new list
                if (_items == null)
                {
                    _items = new ObservableCollection <DataRow>();
                }
                else
                {
                    _items.Clear();
                }

                // Add all items
                foreach (DataRow r in groupsWith.Rows)
                {
                    _items.Add(r);
                }
                foreach (DataRow r in usersWith.Rows)
                {
                    _items.Add(r);
                }

                _listTable.ListView.ItemsSource = _items;

                //-------------------------------//

                // Populate 'add' combo boxes
                if (_groupsToAdd == null)
                {
                    _groupsToAdd = new ObservableCollection <object>();
                }
                else
                {
                    _groupsToAdd.Clear();
                }

                if (_usersToAdd == null)
                {
                    _usersToAdd = new ObservableCollection <object>();
                }
                else
                {
                    _usersToAdd.Clear();
                }

                _groupsToAdd.Add("Add group");
                _usersToAdd.Add("Add user");

                foreach (DataRow r in groupsWithout.Rows)
                {
                    _groupsToAdd.Add(r);
                }
                foreach (DataRow r in usersWithout.Rows)
                {
                    _usersToAdd.Add(r);
                }

                _comboAddGroup.ItemsSource = _groupsToAdd;
                _comboAddUser.ItemsSource  = _usersToAdd;

                _comboAddGroup.SelectedIndex = 0;
                _comboAddUser.SelectedIndex  = 0;;
            });
        }