SenseNet.ContentRepository.SavingAction.ValidateAction C# (CSharp) Метод

ValidateAction() приватный Метод

private ValidateAction ( StateAction stateAction ) : ActionValidationResult
stateAction StateAction
Результат ActionValidationResult
        private ActionValidationResult ValidateAction(StateAction stateAction)
        {
            if (!HasPermission(stateAction))
                return ActionValidationResult.Invalid;

            if (this.Node.Id == 0)
            {
                if (stateAction == StateAction.Save || stateAction == StateAction.SaveAndCheckIn)
                    return ActionValidationResult.Valid;
                return ActionValidationResult.InvalidOnNewNode;
            }

            var action = 0;
            switch (stateAction)
            {
                case StateAction.Save: action = 0; break;
                case StateAction.CheckOut: action = 1; break;
                case StateAction.CheckIn: action = 2; break;
                case StateAction.UndoCheckOut: action = 3; break;
                case StateAction.Publish: action = 4; break;
                case StateAction.Approve: action = 5; break;
                case StateAction.Reject: action = 6; break;
                case StateAction.SaveAndCheckIn: action = 7; break;
                default:
                    throw new NotImplementedException("Unknown StateAction: " + stateAction);
            }

            var status = 0;
            var versionStatus = this.Node.Locked ? VersionStatus.Locked : this.CurrentVersion.Status;

            switch (versionStatus)
            {
                case VersionStatus.Approved: status = 0; break;
                case VersionStatus.Locked: status = 1; break;
                case VersionStatus.Draft: status = 2; break;
                case VersionStatus.Rejected: status = 3; break;
                case VersionStatus.Pending: status = 4; break;
                default:
                    throw new NotImplementedException("Unknown VersionStatus: " + this.CurrentVersion.Status);
            }

            var mode = 0;
            switch (this.VersioningMode)
            {
                case VersioningMode.None: mode = 0; break;
                case VersioningMode.Major: mode = 1; break;
                case VersioningMode.Full: mode = 2; break;
                default:
                    throw new NotImplementedException("Unknown VersioningMode: " + this.VersioningMode);
            }
            var approving = this.HasApproving ? 1 : 0;

            if (!EnabledActions[15 * approving + 5 * mode + status][action])
                return ActionValidationResult.Invalid;
            return ActionValidationResult.Valid;
        }