Exemple #1
0
        public List <SearchResultContract> SearchByCriteria(AdvancedSearchRequestContract request, ProjectTypeContract projectType)
        {
            m_authorizationManager.AddAuthorizationCriteria(request.ConditionConjunction);

            var processedCriterias   = m_metadataSearchCriteriaProcessor.ProcessSearchCriterias(request.ConditionConjunction);
            var nonMetadataCriterias = processedCriterias.NonMetadataCriterias;
            var mainProjectTypeEnum  = m_mapper.Map <ProjectTypeEnum>(projectType);
            var projectTypeEnums     = new List <ProjectTypeEnum> {
                mainProjectTypeEnum
            };

            if (request.Parameters != null && request.Parameters.IncludeAdditionalProjectTypes)
            {
                projectTypeEnums.AddRange(request.Parameters.AdditionalProjectTypes.Select(x => m_mapper.Map <ProjectTypeEnum>(x)));
            }

            var queryCreator = new SearchCriteriaQueryCreator(processedCriterias.ConjunctionQuery, processedCriterias.MetadataParameters, projectTypeEnums)
            {
                Sort          = request.Sort,
                SortDirection = request.SortDirection,
                Start         = PagingHelper.GetStart(request.Start),
                Count         = PagingHelper.GetCountForProject(request.Count)
            };

            if (processedCriterias.NonMetadataCriterias.Count > 0)
            {
                // Search in fulltext DB

                // 1) search in metadata
                var projectIdentificatorList = m_bookRepository.InvokeUnitOfWork(x => x.SearchProjectIdByCriteriaQuery(queryCreator));
                if (projectIdentificatorList.Count == 0)
                {
                    return(new List <SearchResultContract>());
                }

                // 2) search in fulltext
                var fulltextStorage          = m_fulltextStorageProvider.GetFulltextStorage(projectType);
                var fulltextSearchResultData = fulltextStorage.SearchProjectIdByCriteria(queryCreator.GetStart(), queryCreator.GetCount(), request.Sort, request.SortDirection, nonMetadataCriterias, projectIdentificatorList);

                // 3) load paged result
                var termCriteria = CreateTermConditionCreatorOrDefault(request, processedCriterias);
                var searchByCriteriaFulltextResultWork = new SearchByCriteriaFulltextResultWork(m_metadataRepository, m_bookRepository, fulltextSearchResultData, termCriteria, mainProjectTypeEnum);
                var dbResult = searchByCriteriaFulltextResultWork.Execute();

                var resultList = MapToSearchResult(dbResult, searchByCriteriaFulltextResultWork.PageCounts, searchByCriteriaFulltextResultWork.TermHits);
                return(resultList);
            }
            else
            {
                // Search in relational DB

                var termCriteria         = CreateTermConditionCreatorOrDefault(request, processedCriterias);
                var searchByCriteriaWork = new SearchByCriteriaWork(m_metadataRepository, m_bookRepository, queryCreator, termCriteria);
                var dbResult             = searchByCriteriaWork.Execute();

                var resultList = MapToSearchResult(dbResult, searchByCriteriaWork.PageCounts, searchByCriteriaWork.TermHits);
                return(resultList);
            }
        }
Exemple #2
0
        public string GetPageText(long resourcePageId, TextFormatEnumContract format)
        {
            var textResource = m_resourceRepository.InvokeUnitOfWork(x => x.GetLatestPageText(resourcePageId));

            if (textResource == null)
            {
                return(null);
            }

            var fulltextStorage = m_fulltextStorageProvider.GetFulltextStorage(textResource.Resource.Project.ProjectType);

            return(fulltextStorage.GetPageText(textResource, format));
        }
        private FullTextContract GetTextResource(TextResource dbResult, TextFormatEnumContract formatValue)
        {
            var result = m_mapper.Map <FullTextContract>(dbResult);

            if (result != null)
            {
                var fulltextStorage = m_fulltextStorageProvider.GetFulltextStorage(dbResult.Resource.Project.ProjectType);

                var text = fulltextStorage.GetPageText(dbResult, formatValue);
                result.Text = text;
            }

            return(result);
        }
Exemple #4
0
        public string GetPageText(long resourcePageId, TextFormatEnumContract format, SearchPageRequestContract searchRequest = null)
        {
            m_authorizationManager.AuthorizeResource(resourcePageId);

            var textResourceList = m_bookRepository.InvokeUnitOfWork(x => x.GetPageText(resourcePageId));
            var textResource     = textResourceList.FirstOrDefault();

            if (textResource == null)
            {
                return(null);
            }

            var fulltextStorage = m_fulltextStorageProvider.GetFulltextStorage(textResource.Resource.Project.ProjectType);

            var result = searchRequest == null
                ? fulltextStorage.GetPageText(textResource, format)
                : fulltextStorage.GetPageTextFromSearch(textResource, format, searchRequest);

            return(result);
        }
Exemple #5
0
        public long CreateSnapshot(CreateSnapshotContract data)
        {
            var userId           = m_authenticationManager.GetCurrentUserId();
            var bookTypes        = m_mapper.Map <IList <BookTypeEnum> >(data.BookTypes);
            var defaultBookTypes = m_mapper.Map <BookTypeEnum>(data.DefaultBookType);

            var projectInfo     = m_projectRepository.InvokeUnitOfWork(x => x.GetProject(data.ProjectId));
            var fulltextStorage = m_fulltextStorageProvider.GetFulltextStorage(projectInfo.ProjectType);

            var snapshotId = new CreateSnapshotWork(m_projectRepository, m_resourceRepository, data.ProjectId, userId,
                                                    data.ResourceVersionIds, data.Comment, bookTypes, defaultBookTypes, fulltextStorage).Execute();

            return(snapshotId);
        }
Exemple #6
0
        private EditionNoteContract GetEditionNoteContract(EditionNoteResource editionNoteResource, TextFormatEnumContract format)
        {
            if (editionNoteResource == null)
            {
                return(null);
            }

            var contract = m_mapper.Map <EditionNoteContract>(editionNoteResource);

            if (editionNoteResource.Text != null)
            {
                contract.Text = ConvertTextFormat(format, editionNoteResource.Text);
            }
            else
            {
                var fulltextStorage = m_fulltextStorageProvider.GetFulltextStorage(editionNoteResource.Resource.Project.ProjectType);
                contract.Text = fulltextStorage.GetEditionNote(editionNoteResource, format);
            }

            return(contract);
        }
        public List <PageContract> SearchPage(long projectId, SearchPageRequestContract request)
        {
            m_authorizationManager.AuthorizeBook(projectId, PermissionFlag.ShowPublished);

            var termConditions     = new List <SearchCriteriaContract>();
            var fulltextConditions = new List <SearchCriteriaContract>();

            foreach (var searchCriteriaContract in request.ConditionConjunction)
            {
                if (searchCriteriaContract.Key == CriteriaKey.Term)
                {
                    termConditions.Add(searchCriteriaContract);
                }
                else if (m_supportedSearchPageCriteria.Contains(searchCriteriaContract.Key))
                {
                    fulltextConditions.Add(searchCriteriaContract);
                }
                else
                {
                    throw new MainServiceException(MainServiceErrorCode.NotSupportedCriteriaKey,
                                                   $"Not supported criteria key: {searchCriteriaContract.Key}",
                                                   HttpStatusCode.BadRequest,
                                                   new object[] { searchCriteriaContract.Key }
                                                   );
                }
            }

            IList <PageResource> pagesByMetadata = null;

            if (termConditions.Count > 0)
            {
                var termConditionCreator = new TermCriteriaPageConditionCreator();
                termConditionCreator.AddCriteria(termConditions);
                termConditionCreator.SetProjectIds(new[] { projectId });

                pagesByMetadata = m_bookRepository.InvokeUnitOfWork(x => x.GetPagesWithTerms(termConditionCreator));
            }

            IList <PageResource> pagesByFulltext = null;

            if (fulltextConditions.Count > 0)
            {
                var projectIdentification = m_bookRepository.InvokeUnitOfWork(x => x.GetProjectIdentification(projectId));

                var fulltextStorage = m_fulltextStorageProvider.GetFulltextStorage(projectIdentification.ProjectType);
                var fulltextResult  = fulltextStorage.SearchPageByCriteria(fulltextConditions, projectIdentification);

                switch (fulltextResult.SearchResultType)
                {
                case PageSearchResultType.TextId:
                    pagesByFulltext = m_bookRepository.InvokeUnitOfWork(x => x.GetPagesByTextVersionId(fulltextResult.LongList));
                    break;

                case PageSearchResultType.TextExternalId:
                    pagesByFulltext = m_bookRepository.InvokeUnitOfWork(x => x.GetPagesByTextExternalId(fulltextResult.StringList, projectId));
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }
            }

            IList <PageResource> resultPages;

            if (pagesByMetadata != null && pagesByFulltext != null)
            {
                resultPages = pagesByMetadata.Intersect(pagesByFulltext)
                              .OrderBy(x => x.Position)
                              .ToList();
            }
            else if (pagesByFulltext != null)
            {
                resultPages = pagesByFulltext;
            }
            else if (pagesByMetadata != null)
            {
                resultPages = pagesByMetadata;
            }
            else
            {
                throw new MainServiceException(MainServiceErrorCode.NoSupportedSearch,
                                               "No supported search criteria was specified"
                                               );
            }

            var result = m_mapper.Map <List <PageContract> >(resultPages);

            return(result);
        }