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);
}
}
}