Exemplo n.º 1
0
        public virtual ListWithTotalCountResult <MetadataResource> GetMetadataByResponsiblePerson(int responsiblePersonId, int start, int count)
        {
            Resource resourceAlias = null;
            Project  projectAlias  = null;
            ProjectResponsiblePerson projectResponsiblePersonAlias = null;
            User userAlias = null;

            var query = GetSession().QueryOver <MetadataResource>()
                        .JoinAlias(x => x.Resource, () => resourceAlias)
                        .JoinAlias(() => resourceAlias.Project, () => projectAlias)
                        .JoinAlias(() => projectAlias.ResponsiblePersons, () => projectResponsiblePersonAlias)
                        .JoinAlias(() => projectAlias.CreatedByUser, () => userAlias) // fetch user
                        .Where(x => x.Id == resourceAlias.LatestVersion.Id && !resourceAlias.IsRemoved && projectResponsiblePersonAlias.ResponsiblePerson.Id == responsiblePersonId && projectAlias.IsRemoved == false)
                        .OrderBy(x => x.Title).Asc
                        .Take(count)
                        .Skip(start);

            var countFuture = query.ToRowCountQuery()
                              .FutureValue <int>();

            var metadata = query.Future()
                           .ToList();

            var projectIds = metadata.Select(x => x.Resource.Project.Id).ToList();

            FetchAuthorsAndResponsibles(projectIds);

            return(new ListWithTotalCountResult <MetadataResource>
            {
                List = metadata,
                Count = countFuture.Value,
            });
        }
Exemplo n.º 2
0
        public virtual IList <MetadataResource> GetMetadataByProjectIds(IList <long> projectIds, bool fetchAuthors, bool fetchResponsiblePersons, bool fetchBookTypes)
        {
            Resource resourceAlias = null;
            Project  projectAlias  = null;
            ProjectOriginalAuthor    projectOriginalAuthorAlias    = null;
            ProjectResponsiblePerson projectResponsiblePersonAlias = null;

            var metadataListFuture = GetSession().QueryOver <MetadataResource>()
                                     .JoinAlias(x => x.Resource, () => resourceAlias)
                                     .JoinAlias(() => resourceAlias.Project, () => projectAlias)
                                     .WhereRestrictionOn(() => projectAlias.Id).IsInG(projectIds)
                                     .Fetch(SelectMode.Fetch, x => x.Resource)
                                     .Fetch(SelectMode.Fetch, x => x.Resource.Project)
                                     .And(x => x.Id == resourceAlias.LatestVersion.Id && !resourceAlias.IsRemoved && projectAlias.IsRemoved == false)
                                     .Future();

            if (fetchAuthors)
            {
                GetSession().QueryOver <Project>()
                .WhereRestrictionOn(x => x.Id).IsInG(projectIds)
                .JoinAlias(x => x.Authors, () => projectOriginalAuthorAlias, JoinType.LeftOuterJoin)
                .Fetch(SelectMode.Fetch, x => x.Authors)
                .Fetch(SelectMode.Fetch, x => x.Authors[0].OriginalAuthor)
                .OrderBy(() => projectOriginalAuthorAlias.Sequence).Asc
                .Future();
            }

            if (fetchResponsiblePersons)
            {
                GetSession().QueryOver <Project>()
                .JoinAlias(x => x.ResponsiblePersons, () => projectResponsiblePersonAlias, JoinType.LeftOuterJoin)
                .WhereRestrictionOn(x => x.Id).IsInG(projectIds)
                .Fetch(SelectMode.Fetch, x => x.ResponsiblePersons)
                .Fetch(SelectMode.Fetch, x => x.ResponsiblePersons[0].ResponsiblePerson)
                .Fetch(SelectMode.Fetch, x => x.ResponsiblePersons[0].ResponsibleType)
                .OrderBy(() => projectResponsiblePersonAlias.Sequence).Asc
                .Future();
            }

            if (fetchBookTypes)
            {
                GetSession().QueryOver <Project>()
                .WhereRestrictionOn(x => x.Id).IsInG(projectIds)
                .Fetch(SelectMode.Fetch, x => x.LatestPublishedSnapshot)
                .Fetch(SelectMode.Fetch, x => x.LatestPublishedSnapshot.BookTypes)
                .Future();
            }

            return(metadataListFuture.ToList());
        }
        public void UpdateResponsiblePersonList(long projectId, BookData bookData)
        {
            if (bookData.Responsibles == null)
            {
                return;
            }

            var project        = m_projectRepository.Load <Project>(projectId);
            var dbResponsibles = m_projectRepository.GetProjectResponsibleList(projectId);

            var updatedResponsibles = new List <ProjectResponsiblePerson>();
            var comparer            = new ProjectResponsibleNameEqualityComparer();

            for (var i = 0; i < bookData.Responsibles.Count; i++)
            {
                var responsiblePerson   = bookData.Responsibles[i];
                var dbResponsiblePerson = GetOrCreateResponsiblePerson(responsiblePerson.NameText);
                var dbResponsibleTypes  = GetOrCreateResponsibleType(responsiblePerson.TypeText);

                foreach (var dbResponsibleType in dbResponsibleTypes)
                {
                    var newProjectResponsible = new ProjectResponsiblePerson
                    {
                        Project           = project,
                        ResponsiblePerson = dbResponsiblePerson,
                        ResponsibleType   = dbResponsibleType,
                        Sequence          = i + 1,
                    };

                    if (!dbResponsibles.Contains(newProjectResponsible, comparer))
                    {
                        m_projectRepository.Create(newProjectResponsible);
                    }
                    else
                    {
                        var dbResponsible = dbResponsibles.Single(x => comparer.Equals(x, newProjectResponsible));
                        dbResponsible.Sequence = i + 1;
                        m_projectRepository.Update(dbResponsible);

                        updatedResponsibles.Add(dbResponsible);
                    }
                }
            }

            var responsiblesToRemove = dbResponsibles.Except(updatedResponsibles);

            m_projectRepository.DeleteAll(responsiblesToRemove);
        }
Exemplo n.º 4
0
        protected override void ExecuteWorkImplementation()
        {
            var dbProjectResponsibles = m_projectRepository.GetProjectResponsibleList(m_projectId);
            var project = m_projectRepository.Load <Project>(m_projectId);

            var newDbProjectResponsibles = new List <ProjectResponsiblePerson>();

            for (var i = 0; i < m_projectResponsiblePersonIdList.Count; i++)
            {
                var projectPerson         = m_projectResponsiblePersonIdList[i];
                var responsiblePerson     = m_projectRepository.Load <ResponsiblePerson>(projectPerson.ResponsiblePersonId);
                var responsibleType       = m_projectRepository.Load <ResponsibleType>(projectPerson.ResponsibleTypeId);
                var newProjectResponsible = new ProjectResponsiblePerson
                {
                    Project           = project,
                    ResponsiblePerson = responsiblePerson,
                    ResponsibleType   = responsibleType,
                    Sequence          = i + 1,
                };

                newDbProjectResponsibles.Add(newProjectResponsible);
            }

            // Delete responsibles
            foreach (var dbProjectResponsible in dbProjectResponsibles)
            {
                if (!newDbProjectResponsibles.Contains(dbProjectResponsible))
                {
                    m_projectRepository.Delete(dbProjectResponsible);
                }
            }

            // Create or update new responsibles
            foreach (var newDbProjectResponsible in newDbProjectResponsibles)
            {
                if (!dbProjectResponsibles.Contains(newDbProjectResponsible))
                {
                    m_projectRepository.Create(newDbProjectResponsible);
                }
                else
                {
                    var dbProjectResponsible = dbProjectResponsibles.Single(x => x.Equals(newDbProjectResponsible));
                    dbProjectResponsible.Sequence = newDbProjectResponsible.Sequence;
                    m_projectRepository.Update(dbProjectResponsible);
                }
            }
        }
Exemplo n.º 5
0
        public virtual IList <Project> FetchAuthorsAndResponsibles(IList <long> projectIds)
        {
            ProjectOriginalAuthor    projectOriginalAuthorAlias    = null;
            ProjectResponsiblePerson projectResponsiblePersonAlias = null;

            GetSession().QueryOver <Project>()
            .WhereRestrictionOn(x => x.Id).IsInG(projectIds)
            .JoinAlias(x => x.Authors, () => projectOriginalAuthorAlias, JoinType.LeftOuterJoin)
            .Fetch(SelectMode.Fetch, x => x.Authors)
            .Fetch(SelectMode.Fetch, x => x.Authors[0].OriginalAuthor)
            .OrderBy(x => x.Id).Asc
            .ThenBy(() => projectOriginalAuthorAlias.Sequence).Asc
            .Future();

            return(GetSession().QueryOver <Project>()
                   .WhereRestrictionOn(x => x.Id).IsInG(projectIds)
                   .JoinAlias(x => x.ResponsiblePersons, () => projectResponsiblePersonAlias, JoinType.LeftOuterJoin)
                   .Fetch(SelectMode.Fetch, x => x.ResponsiblePersons)
                   .Fetch(SelectMode.Fetch, x => x.ResponsiblePersons[0].ResponsiblePerson)
                   .Fetch(SelectMode.Fetch, x => x.ResponsiblePersons[0].ResponsibleType)
                   .OrderBy(x => x.Id).Asc
                   .ThenBy(() => projectResponsiblePersonAlias.Sequence).Asc
                   .Future().ToList());
        }
Exemplo n.º 6
0
        public virtual Project GetAdditionalProjectMetadata(long projectId, bool includeAuthors, bool includeResponsibles, bool includeKind, bool includeGenre, bool includeOriginal, bool includeKeyword, bool includeCategory)
        {
            var session = GetSession();

            if (includeAuthors)
            {
                ProjectOriginalAuthor projectAuthorAlias = null;
                OriginalAuthor        authorAlias        = null;

                session.QueryOver <Project>()
                .JoinAlias(x => x.Authors, () => projectAuthorAlias, JoinType.LeftOuterJoin)
                .JoinAlias(() => projectAuthorAlias.OriginalAuthor, () => authorAlias, JoinType.LeftOuterJoin)
                .Where(x => x.Id == projectId)
                .OrderBy(() => projectAuthorAlias.Sequence).Asc
                .Fetch(SelectMode.Fetch, x => x.Authors)
                .FutureValue();
            }
            if (includeResponsibles)
            {
                ProjectResponsiblePerson projectResponsiblePersonAlias = null;

                session.QueryOver <Project>()
                .JoinAlias(x => x.ResponsiblePersons, () => projectResponsiblePersonAlias, JoinType.LeftOuterJoin)
                .Where(x => x.Id == projectId)
                .Fetch(SelectMode.Fetch, x => x.ResponsiblePersons)
                .Fetch(SelectMode.Fetch, x => x.ResponsiblePersons[0].ResponsiblePerson)
                .Fetch(SelectMode.Fetch, x => x.ResponsiblePersons[0].ResponsibleType)
                .OrderBy(() => projectResponsiblePersonAlias.Sequence).Asc
                .FutureValue();
            }
            if (includeKind)
            {
                session.QueryOver <Project>()
                .Where(x => x.Id == projectId)
                .Fetch(SelectMode.Fetch, x => x.LiteraryKinds)
                .FutureValue();
            }
            if (includeGenre)
            {
                session.QueryOver <Project>()
                .Where(x => x.Id == projectId)
                .Fetch(SelectMode.Fetch, x => x.LiteraryGenres)
                .FutureValue();
            }
            if (includeOriginal)
            {
                session.QueryOver <Project>()
                .Where(x => x.Id == projectId)
                .Fetch(SelectMode.Fetch, x => x.LiteraryOriginals)
                .FutureValue();
            }
            if (includeKeyword)
            {
                session.QueryOver <Project>()
                .Where(x => x.Id == projectId)
                .Fetch(SelectMode.Fetch, x => x.Keywords)
                .FutureValue();
            }
            if (includeCategory)
            {
                session.QueryOver <Project>()
                .Where(x => x.Id == projectId)
                .Fetch(SelectMode.Fetch, x => x.Categories)
                .FutureValue();
            }
            return(session.QueryOver <Project>()
                   .Where(x => x.Id == projectId && x.IsRemoved == false)
                   .FutureValue().Value);
        }
Exemplo n.º 7
0
        public virtual MetadataResource GetMetadataWithDetail(long projectId)
        {
            Resource resourceAlias = null;
            Project  projectAlias  = null;
            Snapshot snapshotAlias = null;
            BookType bookTypeAlias = null;
            ProjectOriginalAuthor    projectOriginalAuthorAlias    = null;
            OriginalAuthor           originalAuthorAlias           = null;
            ProjectResponsiblePerson projectResponsiblePersonAlias = null;
            ResponsiblePerson        responsiblePersonAlias        = null;
            ResponsibleType          responsibleTypeAlias          = null;

            var session = GetSession();

            var result = session.QueryOver <MetadataResource>()
                         .JoinAlias(x => x.Resource, () => resourceAlias)
                         .JoinAlias(() => resourceAlias.Project, () => projectAlias)
                         .JoinAlias(() => projectAlias.LatestPublishedSnapshot, () => snapshotAlias, JoinType.LeftOuterJoin)
                         .JoinAlias(() => snapshotAlias.DefaultBookType, () => bookTypeAlias, JoinType.LeftOuterJoin)
                         .Where(x => x.Id == resourceAlias.LatestVersion.Id && !resourceAlias.IsRemoved && resourceAlias.Project.Id == projectId && projectAlias.IsRemoved == false)
                         .FutureValue();

            session.QueryOver <Project>()
            .Where(x => x.Id == projectId)
            .Fetch(SelectMode.Fetch, x => x.Keywords)
            .Future();

            session.QueryOver <Project>()
            .Where(x => x.Id == projectId)
            .Fetch(SelectMode.Fetch, x => x.LiteraryGenres)
            .Future();

            session.QueryOver <Project>()
            .Where(x => x.Id == projectId)
            .Fetch(SelectMode.Fetch, x => x.LiteraryKinds)
            .Future();

            session.QueryOver <Project>()
            .Where(x => x.Id == projectId)
            .Fetch(SelectMode.Fetch, x => x.LiteraryOriginals)
            .Future();

            session.QueryOver <Project>()
            .Where(x => x.Id == projectId)
            .JoinAlias(x => x.Authors, () => projectOriginalAuthorAlias, JoinType.LeftOuterJoin)
            .JoinAlias(() => projectOriginalAuthorAlias.OriginalAuthor, () => originalAuthorAlias, JoinType.LeftOuterJoin)
            .Fetch(SelectMode.Fetch, x => x.Authors)
            .Fetch(SelectMode.Fetch, x => x.Authors[0].OriginalAuthor)
            .OrderBy(() => projectOriginalAuthorAlias.Sequence).Asc
            .Future();

            session.QueryOver <Project>()
            .Where(x => x.Id == projectId)
            .JoinAlias(x => x.ResponsiblePersons, () => projectResponsiblePersonAlias, JoinType.LeftOuterJoin)
            .JoinAlias(() => projectResponsiblePersonAlias.ResponsiblePerson, () => responsiblePersonAlias, JoinType.LeftOuterJoin)
            .JoinAlias(() => projectResponsiblePersonAlias.ResponsibleType, () => responsibleTypeAlias, JoinType.LeftOuterJoin)
            .Fetch(SelectMode.Fetch, x => x.ResponsiblePersons)
            .Fetch(SelectMode.Fetch, x => x.ResponsiblePersons[0].ResponsiblePerson)
            .Fetch(SelectMode.Fetch, x => x.ResponsiblePersons[0].ResponsibleType)
            .OrderBy(() => projectResponsiblePersonAlias.Sequence).Asc
            .Future();

            return(result.Value);
        }