BExIS.Dlm.Services.Data.DatasetManager.checkInDataset C# (CSharp) Method

checkInDataset() private method

private checkInDataset ( System.Int64 datasetId, string comment, string username, bool adminMode ) : void
datasetId System.Int64
comment string
username string
adminMode bool if true, the check for current user is bypassed
return void
        private void checkInDataset(Int64 datasetId, string comment, string username, bool adminMode)
        {
            using (IUnitOfWork uow = this.GetUnitOfWork())
            {
                IRepository<Dataset> repo = uow.GetRepository<Dataset>();
                Dataset ds = null;
                if (adminMode)
                    ds = repo.Get(p => p.Id == datasetId && p.Status == DatasetStatus.CheckedOut).FirstOrDefault();
                else
                    ds = repo.Get(p => p.Id == datasetId && p.Status == DatasetStatus.CheckedOut && p.CheckOutUser.Equals(getUserIdentifier(username))).FirstOrDefault();
                if (ds != null)
                {
                    DatasetVersion previousCheckIn = ds.Versions.FirstOrDefault(p => p.Status == DatasetVersionStatus.CheckedIn);
                    if (previousCheckIn != null)
                        previousCheckIn.Status = DatasetVersionStatus.Old;

                    DatasetVersion dsv = ds.Versions.OrderByDescending(t => t.Timestamp).First(p => p.Status == DatasetVersionStatus.CheckedOut);
                    dsv.ChangeDescription = comment;
                    dsv.Status = DatasetVersionStatus.CheckedIn;

                    ds.Status = DatasetStatus.CheckedIn;
                    ds.LastCheckIOTimestamp = DateTime.UtcNow;
                    ds.CheckOutUser = string.Empty;

                    repo.Put(ds);
                    uow.Commit();
                    // when everything is OK, check if a materialized view is created for the datsets, if yes: refresh it to the lateset changes
                    // if not: try creating a materialized view and refresh it
                    // This only works for the latest versions of datasets, so any function that returns the lateset versions' tuples, must use the materialized views
                    updateMaterializedView(datasetId);
                }
            }
        }