예제 #1
0
        public async Task <OperationResultResponse <WorkspaceInfo> > ExecuteAsync(GetWorkspaceFilter filter)
        {
            DbWorkspace dbWorkspace = await _repository.GetAsync(filter);

            if (dbWorkspace is null)
            {
                return(_responseCreator.CreateFailureResponse <WorkspaceInfo>(HttpStatusCode.NotFound));
            }

            if (!dbWorkspace.Users.Select(u => u.UserId).Contains(_httpContextAccessor.HttpContext.GetUserId()))
            {
                return(_responseCreator.CreateFailureResponse <WorkspaceInfo>(HttpStatusCode.Forbidden));
            }

            OperationResultResponse <WorkspaceInfo> response = new();

            List <UserData> usersData = await GetUsersAsync(dbWorkspace.Users?.Select(u => u.UserId).ToList(), response.Errors);

            List <ImageInfo> imagesInfo = (await GetImagesAsync(
                                               usersData?.Where(u => u.ImageId.HasValue).Select(u => u.ImageId.Value).ToList(),
                                               response.Errors))
                                          ?.Select(_imageMapper.Map).ToList();

            response.Status = response.Errors.Any() ? OperationResultStatusType.PartialSuccess : OperationResultStatusType.FullSuccess;
            response.Body   = _workspaceInfoMapper.Map(
                dbWorkspace,
                usersData?.Select(u => _userMapper.Map(u, imagesInfo?.FirstOrDefault(i => i.Id == u.ImageId))).ToList());

            return(response);
        }
        public async Task <OperationResultResponse <bool> > ExecuteAsync(Guid workspaceId, JsonPatchDocument <EditWorkspaceRequest> request)
        {
            DbWorkspace dbWorkspace = await _repository.GetAsync(workspaceId);

            Guid editorId = _httpContextAccessor.HttpContext.GetUserId();

            if (dbWorkspace.CreatedBy != editorId &&
                (await _userRepository.GetAdminsAsync(workspaceId)).FirstOrDefault(wa => wa.UserId == editorId) == null &&
                !await _accessValidator.IsAdminAsync())
            {
                return(_responseCreator.CreateFailureResponse <bool>(HttpStatusCode.Forbidden));
            }

            if (!_validator.ValidateCustom(request, out List <string> errors))
            {
                return(_responseCreator.CreateFailureResponse <bool>(HttpStatusCode.BadRequest, errors));
            }

            OperationResultResponse <bool> response = new();

            response.Body = await _repository.EditAsync(dbWorkspace, await _mapper.MapAsync(request));

            response.Status = OperationResultStatusType.FullSuccess;

            if (!response.Body)
            {
                response = _responseCreator.CreateFailureResponse <bool>(HttpStatusCode.BadRequest);
            }

            return(response);
        }
예제 #3
0
        public WorkspaceInfo Map(DbWorkspace dbWorkspace, List <UserInfo> users)
        {
            if (dbWorkspace is null)
            {
                return(null);
            }

            ImageConsist image = dbWorkspace.ImageContent is null
        ? null
        : new() { Content = dbWorkspace.ImageContent, Extension = dbWorkspace.ImageExtension };

            return(new WorkspaceInfo
            {
                Id = dbWorkspace.Id,
                Name = dbWorkspace.Name,
                Description = dbWorkspace.Description,
                Image = image,
                CreatedAtUtc = dbWorkspace.CreatedAtUtc,
                CreatedBy = users?.FirstOrDefault(u => u.Id == dbWorkspace.CreatedBy),
                IsActive = dbWorkspace.IsActive,
                Channels = dbWorkspace.Channels?
                           .Select(_channelInfoMapper.Map).ToList(),
                Users = users?
                        .Where(u => dbWorkspace.Users.Any(wu => wu.UserId == u.Id)).ToList()
            });
        }
    }
        public async Task <Guid?> CreateAsync(DbWorkspace dbWorkspace)
        {
            if (dbWorkspace is null)
            {
                return(null);
            }

            _provider.Workspaces.Add(dbWorkspace);
            await _provider.SaveAsync();

            return(dbWorkspace.Id);
        }
        public async Task <bool> EditAsync(DbWorkspace dbWorkspace, JsonPatchDocument <DbWorkspace> request)
        {
            if (dbWorkspace is null || request is null)
            {
                return(false);
            }

            request.ApplyTo(dbWorkspace);
            dbWorkspace.ModifiedBy    = _httpContextAccessor.HttpContext.GetUserId();
            dbWorkspace.ModifiedAtUtc = DateTime.UtcNow;
            await _provider.SaveAsync();

            return(true);
        }
예제 #6
0
        public override bool Save(ISession session, DbWorkspace dbWorkspace)
        {
            var existingModifications = session.CreateCriteria <DbModification>()
                                        .Add(Restrictions.Eq("Workspace", dbWorkspace))
                                        .List <DbModification>()
                                        .ToDictionary(dbModification => dbModification.Symbol);

            return(SaveChangedEntities(session, existingModifications,
                                       dbModification => dbModification.DeltaMass,
                                       (dbModification, value) => dbModification.DeltaMass = value,
                                       key => new DbModification
            {
                Symbol = key,
                Workspace = dbWorkspace
            }));
        }
예제 #7
0
        public override bool Save(ISession session, DbWorkspace dbWorkspace)
        {
            var existingSettings = session.CreateCriteria <DbSetting>()
                                   .Add(Restrictions.Eq("Workspace", dbWorkspace))
                                   .List <DbSetting>()
                                   .ToDictionary(dbSetting => dbSetting.Name);

            return(SaveChangedEntities(session, existingSettings,
                                       dbSetting => dbSetting.Value,
                                       (dbSetting, value) => dbSetting.Value = value,
                                       key => new DbSetting
            {
                Name = key,
                Workspace = dbWorkspace,
            }));
        }
예제 #8
0
파일: TracerDefs.cs 프로젝트: zrolfs/pwiz
        public override bool Save(ISession session, DbWorkspace dbWorkspace)
        {
            var existing =
                session.CreateCriteria <DbTracerDef>()
                .Add(Restrictions.Eq("Workspace", dbWorkspace))
                .List <DbTracerDef>()
                .ToDictionary(dbTracerDef => dbTracerDef.Name);

            return(SaveChangedEntities(session, existing,
                                       dbTracerDef => new TracerDefData(dbTracerDef),
                                       UpdateDbTracerDef,
                                       key => new DbTracerDef
            {
                Name = key,
                Workspace = dbWorkspace,
            }));
        }
        public void OneTimeSetUp()
        {
            _dbWorkspaceToAdd = new DbWorkspace
            {
                Name        = "Name",
                Description = "Description",
                IsActive    = true,
            };

            _dbWorkspaceInDb = new DbWorkspace
            {
                Id       = Guid.NewGuid(),
                Name     = "Name",
                IsActive = true
            };

            CreateMemoryDb();
        }
예제 #10
0
        public ShortWorkspaceInfo Map(DbWorkspace dbWorkspace)
        {
            if (dbWorkspace is null)
            {
                return(null);
            }

            return(new ShortWorkspaceInfo
            {
                Id = dbWorkspace.Id,
                Name = dbWorkspace.Name,
                Description = dbWorkspace.Description,
                IsActive = dbWorkspace.IsActive,
                Image = new ImageConsist()
                {
                    Content = dbWorkspace.ImageContent,
                    Extension = dbWorkspace.ImageExtension
                }
            });
        }
예제 #11
0
        public static void InitWorkspace(ISessionFactory sessionFactory)
        {
            using (var session = sessionFactory.OpenSession())
            {
                var transaction = session.BeginTransaction();
                var dbWorkspace = new DbWorkspace
                {
                    ModificationCount = 1,
                    TracerDefCount    = 0,
                    SchemaVersion     = WorkspaceUpgrader.CurrentVersion,
                };
                session.Save(dbWorkspace);

                var modification = new DbModification
                {
                    DeltaMass = 57.021461,
                    Symbol    = "C",
                    Workspace = dbWorkspace
                };
                session.Save(modification);
                transaction.Commit();
            }
        }
예제 #12
0
        protected Workspace CreateWorkspace(string path, DbTracerDef dbTracerDef)
        {
            using (var sessionFactory = SessionFactoryFactory.CreateSessionFactory(path, SessionFactoryFlags.CreateSchema))
            {
                using (var session = sessionFactory.OpenSession())
                {
                    var transaction = session.BeginTransaction();
                    var dbWorkspace = new DbWorkspace
                    {
                        ModificationCount = 1,
                        TracerDefCount    = dbTracerDef == null ? 0 : 1,
                        SchemaVersion     = WorkspaceUpgrader.CurrentVersion,
                    };
                    session.Save(dbWorkspace);
                    if (dbTracerDef != null)
                    {
                        dbTracerDef.Workspace = dbWorkspace;
                        dbTracerDef.Name      = "Tracer";
                        session.Save(dbTracerDef);
                    }

                    var modification = new DbModification
                    {
                        DeltaMass = 57.021461,
                        Symbol    = "C",
                        Workspace = dbWorkspace
                    };
                    session.Save(modification);
                    transaction.Commit();
                }
            }
            var workspace = new Workspace(path);

            workspace.SetTaskScheduler(TaskScheduler.Default);
            workspace.DatabasePoller.LoadAndMergeChanges(null);
            return(workspace);
        }
예제 #13
0
        // TODO(nicksh): 2013-10-03: Re-enable this test once it reliably passes
        //[TestMethod]
        public void TestPeakFinder()
        {
            String dbPath = Path.Combine(TestContext.TestDir, "PeakFinderTest.tpg");

            using (var sessionFactory = SessionFactoryFactory.CreateSessionFactory(dbPath, SessionFactoryFlags.CreateSchema))
            {
                using (var session = sessionFactory.OpenSession())
                {
                    session.BeginTransaction();
                    DbWorkspace dbWorkspace = new DbWorkspace
                    {
                        TracerDefCount = 1,
                        SettingCount   = 2,
                        SchemaVersion  = WorkspaceUpgrader.CurrentVersion
                    };
                    session.Save(dbWorkspace);
                    DbTracerDef dbTracerDef = TracerDef.GetD3LeuEnrichment();
                    dbTracerDef.Workspace = dbWorkspace;
                    dbTracerDef.Name      = "Tracer";

                    session.Save(dbTracerDef);
                    session.Save(new DbSetting
                    {
                        Workspace = dbWorkspace,
                        Name      = SettingEnum.data_directory.ToString(),
                        Value     = GetDataDirectory()
                    });
                    session.Save(new DbSetting
                    {
                        Workspace = dbWorkspace,
                        Name      = SettingEnum.mass_accuracy.ToString(),
                        Value     = "100000"
                    });
                    session.Transaction.Commit();
                }
            }
            Workspace workspace = new Workspace(dbPath);

            workspace.SetTaskScheduler(TaskScheduler.Default);
            workspace.DatabasePoller.LoadAndMergeChanges(null);

            foreach (var peakFinderPeptide in peptides)
            {
                AddPeptide(workspace, peakFinderPeptide);
            }
            while (true)
            {
                string statusMessage;
                int    progress;
                workspace.ChromatogramGenerator.GetProgress(out statusMessage, out progress);
                if ("Idle" == statusMessage)
                {
                    break;
                }
                Thread.Sleep(100);
            }
            workspace.DatabasePoller.LoadAndMergeChanges(null);
            var exceptions = new List <Exception>();

            foreach (var peptide in peptides)
            {
                try
                {
                    TestPeptide(workspace, peptide);
                }
                catch (Exception exception)
                {
                    exceptions.Add(exception);
                    Trace.TraceError("{0}:{1}", peptide.PeptideSequence, exception);
                }
            }
            CollectionAssert.AreEqual(new Exception[0], exceptions);
        }
예제 #14
0
 public abstract bool Save(ISession session, DbWorkspace dbWorkspace);
        public void TestChromatogramGenerator()
        {
            String dbPath = Path.Combine(TestContext.TestDir, "test" + Guid.NewGuid() + ".tpg");
            using (var sessionFactory = SessionFactoryFactory.CreateSessionFactory(dbPath, SessionFactoryFlags.CreateSchema))
            {
                using (var session = sessionFactory.OpenSession())
                {
                    session.BeginTransaction();
                    DbWorkspace dbWorkspace = new DbWorkspace
                    {
                        TracerDefCount = 1,
                    };
                    session.Save(dbWorkspace);
                    DbTracerDef dbTracerDef = TracerDef.GetN15Enrichment();
                    dbTracerDef.Workspace = dbWorkspace;
                    dbTracerDef.Name = "Tracer";

                    session.Save(dbTracerDef);
                    session.Save(new DbSetting
                                     {
                                         Workspace = dbWorkspace,
                                         Name = SettingEnum.data_directory.ToString(),
                                         Value = GetDataDirectory()
                                     });
                    session.Transaction.Commit();
                }
            }
            Workspace workspace = new Workspace(dbPath);
            workspace.SetTaskScheduler(TaskScheduler.Default);
            var dbMsDataFile = new DbMsDataFile
                {
                    Name = "20090724_HT3_0",
                };
            using (var session = workspace.OpenWriteSession())
            {
                session.BeginTransaction();
                session.Save(dbMsDataFile);
                session.Transaction.Commit();
            }
            workspace.DatabasePoller.LoadAndMergeChanges(null);
            var msDataFile = workspace.MsDataFiles.FindByKey(dbMsDataFile.GetId());
            Assert.IsTrue(MsDataFileUtil.InitMsDataFile(workspace, msDataFile));
            DbPeptide dbPeptide;
            using (var session = workspace.OpenWriteSession())
            {
                session.BeginTransaction();
                dbPeptide = new DbPeptide
                {
                    Protein = "TestProtein",
                    Sequence = "YLAAYLLLVQGGNAAPSAADIK",
                    FullSequence = "K.YLAAYLLLVQGGNAAPSAADIK.A",
                };
                session.Save(dbPeptide);
                var searchResult = new DbPeptideSpectrumMatch
                {
                    Peptide = dbPeptide,
                    MsDataFile = session.Load<DbMsDataFile>(msDataFile.Id),
                    PrecursorCharge = 3,
                    RetentionTime = 20.557 * 60,
                };
                session.Save(searchResult);
                session.Transaction.Commit();
            }
            var peptide = new Peptide(workspace, dbPeptide);
            var peptideAnalysis = peptide.EnsurePeptideAnalysis();
            peptideAnalysis.IncChromatogramRefCount();
            var peptideFileAnalysis = PeptideFileAnalysis.EnsurePeptideFileAnalysis(peptideAnalysis, msDataFile);
            workspace.DatabasePoller.LoadAndMergeChanges(null);
            peptideAnalysis.IncChromatogramRefCount();
            var chromatogramGenerator = new ChromatogramGenerator(workspace);
            chromatogramGenerator.Start();
            while (peptideFileAnalysis.ChromatogramSet == null)
            {
                Thread.Sleep(100);
            }
            var chromatogramDatas = peptideFileAnalysis.GetChromatograms();
            Assert.IsFalse(chromatogramDatas.Chromatograms.Count == 0);
            chromatogramGenerator.Stop();
            while (chromatogramGenerator.IsThreadAlive)
            {
                Thread.Sleep(100);
            }
        }
예제 #16
0
        protected Workspace CreateWorkspace(string path, DbTracerDef dbTracerDef)
        {
            using (var sessionFactory = SessionFactoryFactory.CreateSessionFactory(path, SessionFactoryFlags.CreateSchema))
            {
                using (var session = sessionFactory.OpenSession())
                {
                    var transaction = session.BeginTransaction();
                    var dbWorkspace = new DbWorkspace
                    {
                        ModificationCount = 1,
                        TracerDefCount = dbTracerDef == null ? 0 : 1,
                        SchemaVersion = WorkspaceUpgrader.CurrentVersion,
                    };
                    session.Save(dbWorkspace);
                    if (dbTracerDef != null)
                    {
                        dbTracerDef.Workspace = dbWorkspace;
                        dbTracerDef.Name = "Tracer";
                        session.Save(dbTracerDef);
                    }

                    var modification = new DbModification
                    {
                        DeltaMass = 57.021461,
                        Symbol = "C",
                        Workspace = dbWorkspace
                    };
                    session.Save(modification);
                    transaction.Commit();
                }

            }
            var workspace = new Workspace(path);
            workspace.SetTaskScheduler(TaskScheduler.Default);
            workspace.DatabasePoller.LoadAndMergeChanges(null);
            return workspace;
        }
예제 #17
0
        public void TestChromatogramGenerator()
        {
            String dbPath = Path.Combine(TestContext.TestDir, "test" + Guid.NewGuid() + ".tpg");

            using (var sessionFactory = SessionFactoryFactory.CreateSessionFactory(dbPath, SessionFactoryFlags.CreateSchema))
            {
                using (var session = sessionFactory.OpenSession())
                {
                    session.BeginTransaction();
                    DbWorkspace dbWorkspace = new DbWorkspace
                    {
                        TracerDefCount = 1,
                    };
                    session.Save(dbWorkspace);
                    DbTracerDef dbTracerDef = TracerDef.GetN15Enrichment();
                    dbTracerDef.Workspace = dbWorkspace;
                    dbTracerDef.Name      = "Tracer";

                    session.Save(dbTracerDef);
                    session.Save(new DbSetting
                    {
                        Workspace = dbWorkspace,
                        Name      = SettingEnum.data_directory.ToString(),
                        Value     = GetDataDirectory()
                    });
                    session.Transaction.Commit();
                }
            }
            Workspace workspace = new Workspace(dbPath);

            workspace.SetTaskScheduler(TaskScheduler.Default);
            var dbMsDataFile = new DbMsDataFile
            {
                Name = "20090724_HT3_0",
            };

            using (var session = workspace.OpenWriteSession())
            {
                session.BeginTransaction();
                session.Save(dbMsDataFile);
                session.Transaction.Commit();
            }
            workspace.DatabasePoller.LoadAndMergeChanges(null);
            var msDataFile = workspace.MsDataFiles.FindByKey(dbMsDataFile.GetId());

            Assert.IsTrue(MsDataFileUtil.InitMsDataFile(workspace, msDataFile));
            DbPeptide dbPeptide;

            using (var session = workspace.OpenWriteSession())
            {
                session.BeginTransaction();
                dbPeptide = new DbPeptide
                {
                    Protein      = "TestProtein",
                    Sequence     = "YLAAYLLLVQGGNAAPSAADIK",
                    FullSequence = "K.YLAAYLLLVQGGNAAPSAADIK.A",
                };
                session.Save(dbPeptide);
                var searchResult = new DbPeptideSpectrumMatch
                {
                    Peptide         = dbPeptide,
                    MsDataFile      = session.Load <DbMsDataFile>(msDataFile.Id),
                    PrecursorCharge = 3,
                    RetentionTime   = 20.557 * 60,
                };
                session.Save(searchResult);
                session.Transaction.Commit();
            }
            var peptide         = new Peptide(workspace, dbPeptide);
            var peptideAnalysis = peptide.EnsurePeptideAnalysis();

            peptideAnalysis.IncChromatogramRefCount();
            var peptideFileAnalysis = PeptideFileAnalysis.EnsurePeptideFileAnalysis(peptideAnalysis, msDataFile);

            workspace.DatabasePoller.LoadAndMergeChanges(null);
            peptideAnalysis.IncChromatogramRefCount();
            var chromatogramGenerator = new ChromatogramGenerator(workspace);

            chromatogramGenerator.Start();
            while (peptideFileAnalysis.ChromatogramSet == null)
            {
                Thread.Sleep(100);
            }
            var chromatogramDatas = peptideFileAnalysis.GetChromatograms();

            Assert.IsFalse(chromatogramDatas.Chromatograms.Count == 0);
            chromatogramGenerator.Stop();
            while (chromatogramGenerator.IsThreadAlive)
            {
                Thread.Sleep(100);
            }
        }
예제 #18
0
        public static void InitWorkspace(ISessionFactory sessionFactory)
        {
            using (var session = sessionFactory.OpenSession())
            {
                var transaction = session.BeginTransaction();
                var dbWorkspace = new DbWorkspace
                                      {
                                          ModificationCount = 1,
                                          TracerDefCount = 0,
                                          SchemaVersion = WorkspaceUpgrader.CurrentVersion,
                                      };
                session.Save(dbWorkspace);

                var modification = new DbModification
                                       {
                                           DeltaMass = 57.021461,
                                           Symbol = "C",
                                           Workspace = dbWorkspace
                                       };
                session.Save(modification);
                transaction.Commit();
            }
        }
예제 #19
0
        // TODO(nicksh): 2013-10-03: Re-enable this test once it reliably passes
        //[TestMethod]
        public void TestPeakFinder()
        {
            String dbPath = Path.Combine(TestContext.TestDir, "PeakFinderTest.tpg");
            using (var sessionFactory = SessionFactoryFactory.CreateSessionFactory(dbPath, SessionFactoryFlags.CreateSchema))
            {
                using (var session = sessionFactory.OpenSession())
                {
                    session.BeginTransaction();
                    DbWorkspace dbWorkspace = new DbWorkspace
                    {
                        TracerDefCount = 1,
                        SettingCount = 2,
                        SchemaVersion = WorkspaceUpgrader.CurrentVersion
                    };
                    session.Save(dbWorkspace);
                    DbTracerDef dbTracerDef = TracerDef.GetD3LeuEnrichment();
                    dbTracerDef.Workspace = dbWorkspace;
                    dbTracerDef.Name = "Tracer";

                    session.Save(dbTracerDef);
                    session.Save(new DbSetting
                                     {
                                         Workspace = dbWorkspace,
                                         Name = SettingEnum.data_directory.ToString(),
                                         Value = GetDataDirectory()
                                     });
                    session.Save(new DbSetting
                                     {
                                         Workspace = dbWorkspace,
                                         Name = SettingEnum.mass_accuracy.ToString(),
                                         Value = "100000"
                                     });
                    session.Transaction.Commit();
                }
            }
            Workspace workspace = new Workspace(dbPath);
            workspace.SetTaskScheduler(TaskScheduler.Default);
            workspace.DatabasePoller.LoadAndMergeChanges(null);

            foreach (var peakFinderPeptide in peptides)
            {
                AddPeptide(workspace, peakFinderPeptide);
            }
            while (true)
            {
                string statusMessage;
                int progress;
                workspace.ChromatogramGenerator.GetProgress(out statusMessage, out progress);
                if ("Idle" == statusMessage)
                {
                    break;
                }
                Thread.Sleep(100);
            }
            workspace.DatabasePoller.LoadAndMergeChanges(null);
            var exceptions = new List<Exception>();
            foreach (var peptide in peptides)
            {
                try
                {
                    TestPeptide(workspace, peptide);
                }
                catch (Exception exception)
                {
                    exceptions.Add(exception);
                    Trace.TraceError("{0}:{1}", peptide.PeptideSequence, exception);
                }
            }
            CollectionAssert.AreEqual(new Exception[0], exceptions);
        }