Ejemplo n.º 1
0
        protected override void ExecuteWorkImplementation()
        {
            var now = DateTime.UtcNow;
            var chapters = m_resourceRepository.GetProjectLatestChapters(m_projectId);
            var project = m_resourceRepository.Load<Project>(m_projectId);
            var user = m_resourceRepository.Load<User>(m_userId);

            // Fix levels
            var currentLevel = 0; // min level is 1
            foreach (var heading in m_pageWithHeadingsList.SelectMany(x => x.Item2))
            {
                if (heading.Level > currentLevel + 1)
                {
                    heading.Level = currentLevel + 1;
                }
                else
                {
                    currentLevel = heading.Level;
                }
            }

            // Update chapters
            var updatedResourceChapters = new List<Resource>();
            var currentChapterByLevel = new ChapterResource[7];
            var position = 0;
            
            foreach (var pageWithHeadings in m_pageWithHeadingsList)
            {
                var headings = pageWithHeadings.Item2;
                var resourcePage = m_resourceRepository.Load<Resource>(pageWithHeadings.Item1.Resource.Id);

                foreach (var markdownHeadingData in headings)
                {
                    position++;

                    // Find original Resource
                    ChapterResource originalChapterResource = null;
                    var originalChapters = chapters.Where(x => x.Name == markdownHeadingData.Heading).ToList();
                    if (originalChapters.Count == 1)
                    {
                        originalChapterResource = originalChapters[0];
                    }
                    else if (originalChapters.Count > 1)
                    {
                        originalChapterResource = originalChapters.FirstOrDefault(x => x.Position == position);
                    }

                    if (updatedResourceChapters.Contains(originalChapterResource?.Resource))
                    {
                        originalChapterResource = null;
                    }

                    // Create ChapterResource
                    var chapterResource = new ChapterResource
                    {
                        Comment = null,
                        CreateTime = now,
                        CreatedByUser = user,
                        Name = markdownHeadingData.Heading,
                        ParentResource = currentChapterByLevel[markdownHeadingData.Level - 1]?.Resource,
                        Position = position,
                        Resource = null, // is updated below
                        ResourceBeginningPage = resourcePage,
                        VersionNumber = 1, // is updated below
                    };

                    if (originalChapterResource != null)
                    {
                        chapterResource.Resource = originalChapterResource.Resource;
                        chapterResource.VersionNumber = originalChapterResource.VersionNumber + 1;

                        updatedResourceChapters.Add(chapterResource.Resource);
                    }
                    else
                    {
                        chapterResource.Resource = new Resource
                        {
                            ContentType = ContentTypeEnum.Chapter,
                            IsRemoved = false,
                            Name = chapterResource.Name,
                            Project = project,
                            ResourceType = ResourceTypeEnum.Chapter,
                        };
                    }

                    chapterResource.Resource.LatestVersion = chapterResource;
                    currentChapterByLevel[markdownHeadingData.Level] = chapterResource;

                    m_resourceRepository.Create(chapterResource);
                }
            }

            // Remove unused chapters
            var removeResourceSubwork = new RemoveResourceSubwork(m_resourceRepository);
            foreach (var chapterResource in chapters)
            {
                var resource = chapterResource.Resource;
                if (!updatedResourceChapters.Contains(resource))
                {
                    removeResourceSubwork.RemoveResource(resource.Id);
                }
            }
        }
Ejemplo n.º 2
0
        protected override void ExecuteWorkImplementation()
        {
            var now        = DateTime.UtcNow;
            var user       = m_resourceRepository.Load <User>(m_userId);
            var dbChapters = m_resourceRepository.GetProjectLatestChapters(m_projectId);
            var updatedResourceChapterIds = new List <long>();

            foreach (var chapter in m_chapterData)
            {
                var resourceBeginningPage = m_resourceRepository.Load <Resource>(chapter.BeginningPageId);
                var resourceParentChapter = chapter.ParentChapterId != null
                    ? m_resourceRepository.Load <Resource>(chapter.ParentChapterId.Value)
                    : null;

                var chapterResource = new ChapterResource
                {
                    Name                  = chapter.Name,
                    Comment               = chapter.Comment,
                    Position              = chapter.Position,
                    Resource              = null,
                    ParentResource        = resourceParentChapter,
                    ResourceBeginningPage = resourceBeginningPage,
                    VersionNumber         = 0,
                    CreateTime            = now,
                    CreatedByUser         = user,
                };

                if (chapter.Id == null)
                {
                    var resource = new Resource
                    {
                        ContentType  = ContentTypeEnum.Chapter,
                        ResourceType = ResourceTypeEnum.Chapter,
                        Project      = m_resourceRepository.Load <Project>(m_projectId),
                    };

                    chapterResource.Resource      = resource;
                    chapterResource.VersionNumber = 1;
                }
                else
                {
                    var latestChapterResource = m_resourceRepository.GetLatestResourceVersion <ChapterResource>(chapter.Id.Value);
                    if (latestChapterResource == null)
                    {
                        throw new MainServiceException(MainServiceErrorCode.EntityNotFound, "The entity was not found.");
                    }

                    chapterResource.Resource      = latestChapterResource.Resource;
                    chapterResource.VersionNumber = latestChapterResource.VersionNumber + 1;

                    updatedResourceChapterIds.Add(chapter.Id.Value);
                }

                chapterResource.Resource.Name          = chapter.Name;
                chapterResource.Resource.LatestVersion = chapterResource;

                m_resourceRepository.Create(chapterResource);
            }

            var removeResourceSubwork = new RemoveResourceSubwork(m_resourceRepository);

            foreach (var dbChapter in dbChapters)
            {
                if (!updatedResourceChapterIds.Contains(dbChapter.Resource.Id))
                {
                    removeResourceSubwork.RemoveResource(dbChapter.Resource.Id);
                }
            }
        }
Ejemplo n.º 3
0
        protected override void ExecuteWorkImplementation()
        {
            var now     = DateTime.UtcNow;
            var user    = m_resourceRepository.Load <User>(m_userId);
            var dbPages = m_resourceRepository.GetProjectLatestPages(m_projectId);
            var updatedResourcePageIds = new List <long>();

            foreach (var newPage in m_newPages)
            {
                var pageResource = new PageResource
                {
                    Name          = newPage.Name,
                    Comment       = null,
                    Position      = newPage.Position,
                    Resource      = null,
                    VersionNumber = 0,
                    CreateTime    = now,
                    CreatedByUser = user,
                    Terms         = null, // Terms must be also updated
                };

                if (newPage.Id == null)
                {
                    var resource = new Resource
                    {
                        ContentType  = ContentTypeEnum.Page,
                        ResourceType = ResourceTypeEnum.Page,
                        Project      = m_resourceRepository.Load <Project>(m_projectId),
                    };

                    pageResource.Resource      = resource;
                    pageResource.VersionNumber = 1;
                }
                else
                {
                    var latestPageResource = m_resourceRepository.GetLatestResourceVersion <PageResource>(newPage.Id.Value);
                    if (latestPageResource == null)
                    {
                        throw new MainServiceException(MainServiceErrorCode.EntityNotFound, "The entity was not found.");
                    }

                    pageResource.Resource      = latestPageResource.Resource;
                    pageResource.VersionNumber = latestPageResource.VersionNumber + 1;
                    pageResource.Terms         = new List <Term>(latestPageResource.Terms); // Lazy fetch

                    updatedResourcePageIds.Add(newPage.Id.Value);
                }

                pageResource.Resource.Name          = newPage.Name;
                pageResource.Resource.LatestVersion = pageResource;

                m_resourceRepository.Create(pageResource);
            }

            var removeResourceSubwork = new RemoveResourceSubwork(m_resourceRepository);

            foreach (var dbPage in dbPages)
            {
                if (!updatedResourcePageIds.Contains(dbPage.Resource.Id))
                {
                    removeResourceSubwork.RemoveResource(dbPage.Resource.Id);
                }
            }
        }