/// <summary>
        /// Initializes a new instance of the <see cref="FolderPermission"/> class.
        /// </summary>
        /// <param name="userId">The Id of the user  the permission applies to.</param>
        /// <param name="permissionLevel">The level of the permission.</param>
        public FolderPermission(UserId userId, FolderPermissionLevel permissionLevel)
        {
            EwsUtilities.ValidateParam(userId, "userId");

            this.userId          = userId;
            this.PermissionLevel = permissionLevel;
        }
        /// <summary>
        /// Loads from json.
        /// </summary>
        /// <param name="jsonProperty">The json property.</param>
        /// <param name="service"></param>
        internal override void LoadFromJson(JsonObject jsonProperty, ExchangeService service)
        {
            foreach (string key in jsonProperty.Keys)
            {
                switch (key)
                {
                case XmlElementNames.UserId:
                    this.UserId = new UserId();
                    this.UserId.LoadFromJson(jsonProperty.ReadAsJsonObject(key), service);
                    break;

                case XmlElementNames.CanCreateItems:
                    this.canCreateItems = jsonProperty.ReadAsBool(key);
                    break;

                case XmlElementNames.CanCreateSubFolders:
                    this.canCreateSubFolders = jsonProperty.ReadAsBool(key);
                    break;

                case XmlElementNames.IsFolderOwner:
                    this.isFolderOwner = jsonProperty.ReadAsBool(key);
                    break;

                case XmlElementNames.IsFolderVisible:
                    this.isFolderVisible = jsonProperty.ReadAsBool(key);
                    break;

                case XmlElementNames.IsFolderContact:
                    this.isFolderContact = jsonProperty.ReadAsBool(key);
                    break;

                case XmlElementNames.EditItems:
                    this.editItems = jsonProperty.ReadEnumValue <PermissionScope>(key);
                    break;

                case XmlElementNames.DeleteItems:
                    this.deleteItems = jsonProperty.ReadEnumValue <PermissionScope>(key);
                    break;

                case XmlElementNames.ReadItems:
                    this.readItems = jsonProperty.ReadEnumValue <FolderPermissionReadAccess>(key);
                    break;

                case XmlElementNames.PermissionLevel:
                case XmlElementNames.CalendarPermissionLevel:
                    this.permissionLevel = jsonProperty.ReadEnumValue <FolderPermissionLevel>(key);
                    break;

                default:
                    break;
                }
            }

            this.AdjustPermissionLevel();
        }
        /// <summary>
        /// Determines the permission level of this folder permission based on its individual settings,
        /// and sets the PermissionLevel property accordingly.
        /// </summary>
        private void AdjustPermissionLevel()
        {
            foreach (KeyValuePair <FolderPermissionLevel, FolderPermission> keyValuePair in defaultPermissions.Member)
            {
                if (this.IsEqualTo(keyValuePair.Value))
                {
                    this.permissionLevel = keyValuePair.Key;
                    return;
                }
            }

            this.permissionLevel = FolderPermissionLevel.Custom;
        }
        /// <summary>
        /// Tries to read element from XML.
        /// </summary>
        /// <param name="reader">The reader.</param>
        /// <returns>True if element was read.</returns>
        internal override bool TryReadElementFromXml(EwsServiceXmlReader reader)
        {
            switch (reader.LocalName)
            {
            case XmlElementNames.UserId:
                this.UserId = new UserId();
                this.UserId.LoadFromXml(reader, reader.LocalName);
                return(true);

            case XmlElementNames.CanCreateItems:
                this.canCreateItems = reader.ReadValue <bool>();
                return(true);

            case XmlElementNames.CanCreateSubFolders:
                this.canCreateSubFolders = reader.ReadValue <bool>();
                return(true);

            case XmlElementNames.IsFolderOwner:
                this.isFolderOwner = reader.ReadValue <bool>();
                return(true);

            case XmlElementNames.IsFolderVisible:
                this.isFolderVisible = reader.ReadValue <bool>();
                return(true);

            case XmlElementNames.IsFolderContact:
                this.isFolderContact = reader.ReadValue <bool>();
                return(true);

            case XmlElementNames.EditItems:
                this.editItems = reader.ReadValue <PermissionScope>();
                return(true);

            case XmlElementNames.DeleteItems:
                this.deleteItems = reader.ReadValue <PermissionScope>();
                return(true);

            case XmlElementNames.ReadItems:
                this.readItems = reader.ReadValue <FolderPermissionReadAccess>();
                return(true);

            case XmlElementNames.PermissionLevel:
            case XmlElementNames.CalendarPermissionLevel:
                this.permissionLevel = reader.ReadValue <FolderPermissionLevel>();
                return(true);

            default:
                return(false);
            }
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="FolderPermission"/> class.
 /// </summary>
 /// <param name="standardUser">The standard user the permission applies to.</param>
 /// <param name="permissionLevel">The level of the permission.</param>
 public FolderPermission(StandardUser standardUser, FolderPermissionLevel permissionLevel)
 {
     this.userId          = new UserId(standardUser);
     this.PermissionLevel = permissionLevel;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="FolderPermission"/> class.
 /// </summary>
 /// <param name="primarySmtpAddress">The primary SMTP address of the user the permission applies to.</param>
 /// <param name="permissionLevel">The level of the permission.</param>
 public FolderPermission(string primarySmtpAddress, FolderPermissionLevel permissionLevel)
 {
     this.userId          = new UserId(primarySmtpAddress);
     this.PermissionLevel = permissionLevel;
 }
        /// <summary>
        /// Translate the state of the form's controls into
        /// property values on the selected FolderPermission.
        /// </summary>
        private void FormStateToPermission()
        {
            // There shouldn't be more than one item selected
            if (lstUsers.SelectedItems.Count != 1)
            {
                return;
            }

            FolderPermission selectedPermission = lstUsers.SelectedItems[0].Tag as FolderPermission;

            selectedPermission.CanCreateItems      = chkCreateItems.Checked;
            selectedPermission.CanCreateSubFolders = chkCreateSubFolders.Checked;

            if (rdoDeleteAll.Checked)
            {
                selectedPermission.DeleteItems = PermissionScope.All;
            }
            else if (rdoDeleteNone.Checked)
            {
                selectedPermission.DeleteItems = PermissionScope.None;
            }
            else if (rdoDeleteOwn.Checked)
            {
                selectedPermission.DeleteItems = PermissionScope.Owned;
            }

            if (chkEditAll.Checked)
            {
                selectedPermission.EditItems = PermissionScope.All;
            }
            else if (chkEditOwn.Checked && !chkEditAll.Checked)
            {
                selectedPermission.EditItems = PermissionScope.Owned;
            }
            else if (!chkEditAll.Checked && !chkEditOwn.Checked)
            {
                selectedPermission.EditItems = PermissionScope.None;
            }

            selectedPermission.IsFolderContact = chkContact.Checked;
            selectedPermission.IsFolderOwner   = chkOwner.Checked;
            selectedPermission.IsFolderVisible = chkVisible.Checked;

            if (rdoReadFull.Checked)
            {
                selectedPermission.ReadItems = FolderPermissionReadAccess.FullDetails;
            }
            else if (rdoReadNone.Checked)
            {
                selectedPermission.ReadItems = FolderPermissionReadAccess.None;
            }
            else if (rdoTimeOnly.Checked)
            {
                selectedPermission.ReadItems = FolderPermissionReadAccess.TimeOnly;
            }
            else if (rdoTimeSubjectLocation.Checked)
            {
                selectedPermission.ReadItems = FolderPermissionReadAccess.TimeAndSubjectAndLocation;
            }

            // If the permission level was changed and is not custom, then it
            // trumps any individual settings on the form.
            FolderPermissionLevel permLevel = this.permissionLevelCombo.SelectedItem.Value;

            if (LastPermLevel.Value != permLevel)
            {
                if (permLevel != FolderPermissionLevel.Custom)
                {
                    selectedPermission.PermissionLevel = permLevel;
                }
            }
        }
 /// <summary>
 /// Tries to read element from XML.
 /// </summary>
 /// <param name="reader">The reader.</param>
 /// <returns>True if element was read.</returns>
 internal override bool TryReadElementFromXml(EwsServiceXmlReader reader)
 {
     switch (reader.LocalName)
     {
         case XmlElementNames.UserId:
             this.UserId = new UserId();
             this.UserId.LoadFromXml(reader, reader.LocalName);
             return true;
         case XmlElementNames.CanCreateItems:
             this.canCreateItems = reader.ReadValue<bool>();
             return true;
         case XmlElementNames.CanCreateSubFolders:
             this.canCreateSubFolders = reader.ReadValue<bool>();
             return true;
         case XmlElementNames.IsFolderOwner:
             this.isFolderOwner = reader.ReadValue<bool>();
             return true;
         case XmlElementNames.IsFolderVisible:
             this.isFolderVisible = reader.ReadValue<bool>();
             return true;
         case XmlElementNames.IsFolderContact:
             this.isFolderContact = reader.ReadValue<bool>();
             return true;
         case XmlElementNames.EditItems:
             this.editItems = reader.ReadValue<PermissionScope>();
             return true;
         case XmlElementNames.DeleteItems:
             this.deleteItems = reader.ReadValue<PermissionScope>();
             return true;
         case XmlElementNames.ReadItems:
             this.readItems = reader.ReadValue<FolderPermissionReadAccess>();
             return true;
         case XmlElementNames.PermissionLevel:
         case XmlElementNames.CalendarPermissionLevel:
             this.permissionLevel = reader.ReadValue<FolderPermissionLevel>();
             return true;
         default:
             return false;
     }
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="FolderPermission"/> class.
 /// </summary>
 /// <param name="standardUser">The standard user the permission applies to.</param>
 /// <param name="permissionLevel">The level of the permission.</param>
 public FolderPermission(StandardUser standardUser, FolderPermissionLevel permissionLevel)
 {
     this.userId = new UserId(standardUser);
     this.PermissionLevel = permissionLevel;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="FolderPermission"/> class.
 /// </summary>
 /// <param name="primarySmtpAddress">The primary SMTP address of the user the permission applies to.</param>
 /// <param name="permissionLevel">The level of the permission.</param>
 public FolderPermission(string primarySmtpAddress, FolderPermissionLevel permissionLevel)
 {
     this.userId = new UserId(primarySmtpAddress);
     this.PermissionLevel = permissionLevel;
 }
        /// <summary>
        /// Initializes a new instance of the <see cref="FolderPermission"/> class.
        /// </summary>
        /// <param name="userId">The Id of the user  the permission applies to.</param>
        /// <param name="permissionLevel">The level of the permission.</param>
        public FolderPermission(UserId userId, FolderPermissionLevel permissionLevel)
        {
            EwsUtilities.ValidateParam(userId, "userId");

            this.userId = userId;
            this.PermissionLevel = permissionLevel;
        }
        /// <summary>
        /// Determines the permission level of this folder permission based on its individual settings,
        /// and sets the PermissionLevel property accordingly.
        /// </summary>
        private void AdjustPermissionLevel()
        {
            foreach (KeyValuePair<FolderPermissionLevel, FolderPermission> keyValuePair in defaultPermissions.Member)
            {
                if (this.IsEqualTo(keyValuePair.Value))
                {
                    this.permissionLevel = keyValuePair.Key;
                    return;
                }
            }

            this.permissionLevel = FolderPermissionLevel.Custom;
        }