SenseNet.ContentRepository.SavingAction.CheckOutAndSaveAndCheckIn C# (CSharp) Method

CheckOutAndSaveAndCheckIn() public method

public CheckOutAndSaveAndCheckIn ( ) : void
return void
        public void CheckOutAndSaveAndCheckIn()
        {
            if (CurrentVersion == null)
            {
                Create();
                return;
            }
            AssertValidAction(StateAction.SaveAndCheckIn);
            //-- Expected version
            if (!HasApproving)
            {
                //-- Approving OFF
                switch (VersioningMode)
                {
                    case VersioningMode.None:
                        DeleteVersionsAndApprove();
                        break;
                    case VersioningMode.Major:
                        //remove all working versions, except current
                        var irrelevantIds = GetLastWorkingVersions().Select(x => x.VersionId);

                        DeletableVersionIds.AddRange(irrelevantIds);
                        DeletableVersionIds.Remove(CurrentVersionId);

                        var lastApproved = GetLastApprovedVersion();

                        ExpectedVersion = lastApproved != null ?
                            GetNextPublicVersion(lastApproved.VersionNumber, VersionStatus.Approved) :
                            ComputeNewVersion();

                        //preserve last working version
                        if (CurrentVersion.Status != VersionStatus.Approved && CurrentVersion.Status != VersionStatus.Rejected)
                            ExpectedVersionId = CurrentVersionId;

                        break;
                    case VersioningMode.Full:
                        this.ExpectedVersion = GetNextNonpublicVersion(VersionStatus.Draft);
                        this.LockerUserId = 0;
                        ExpectedVersionId = 0;
                        break;
                }
            }
            else
            {
                //-- Approving ON
                switch (VersioningMode)
                {
                    case VersioningMode.None:
                        DeleteVersionsAndPreserveLastWorking();
                        break;
                    case VersioningMode.Major:
                        switch (CurrentVersion.Status)
                        {
                            case VersionStatus.Approved: // raise
                            case VersionStatus.Rejected: // raise
                                this.ExpectedVersion = GetNextNonpublicVersion(VersionStatus.Pending);
                                break;
                            case VersionStatus.Draft:    // preserve
                            case VersionStatus.Pending:  // preserve
                                ExpectedVersion = CurrentVersion.ChangeStatus(VersionStatus.Pending);
                                ExpectedVersionId = CurrentVersionId;
                                break;
                            default:
                                throw new NotSupportedException();
                        }
                        break;
                    case VersioningMode.Full:
                        this.ExpectedVersion = GetNextNonpublicVersion(VersionStatus.Draft);
                        ExpectedVersionId = 0;
                        break;
                }
            }

            //-- Unlock
            this.LockerUserId = 0;
        }