示例#1
0
        public List <string> GetHeadwordAutocomplete(string query, ProjectTypeContract projectType, BookTypeEnumContract?bookType = null,
                                                     IList <int> selectedCategoryIds = null, IList <long> selectedProjectIds = null)
        {
            try
            {
                var url = UrlQueryBuilder.Create("headword/autocomplete")
                          .AddParameter("query", query)
                          .AddParameter("projectType", projectType)
                          .AddParameter("bookType", bookType)
                          .AddParameterList("selectedCategoryIds", selectedCategoryIds)
                          .AddParameterList("selectedProjectIds", selectedProjectIds)
                          .ToResult();

                var result = m_client.Get <List <string> >(url);
                return(result);
            }
            catch (HttpRequestException e)
            {
                if (m_logger.IsErrorEnabled())
                {
                    m_logger.LogError("{0} failed with {1}", m_client.GetCurrentMethod(), e);
                }

                throw;
            }
        }
示例#2
0
        public ImportResultContract ProcessSession(string sessionId, long?projectId, int userId, string uploadMessage,
                                                   ProjectTypeContract projectType, FulltextStoreTypeContract storeType,
                                                   IList <PermissionFromAuthContract> autoImportPermissions)
        {
            if (!m_activeSessionManager.ContainsSessionId(sessionId))
            {
                return(new ImportResultContract {
                    Success = false
                });
            }

            ResourceSessionDirector director = m_activeSessionManager.GetDirectorBySessionId(sessionId);

            director.SetSessionInfoValue(SessionInfo.Message, uploadMessage);
            director.SetSessionInfoValue(SessionInfo.CreateTime, DateTime.UtcNow);
            director.SetSessionInfoValue(SessionInfo.ProjectId, projectId);
            director.SetSessionInfoValue(SessionInfo.UserId, userId);
            director.SetSessionInfoValue(SessionInfo.AutoImportPermissions, autoImportPermissions);
            director.SetSessionInfoValue(SessionInfo.ProjectType, projectType);
            director.SetSessionInfoValue(SessionInfo.StoreType, storeType);
            bool result = m_resourceProcessorManager.ProcessSessionResources(director);
            ImportResultContract importResult = new ImportResultContract(
                director.GetSessionInfoValue <long>(SessionInfo.ProjectId),
                result
                );

            m_activeSessionManager.FinalizeSession(sessionId);
            return(importResult);
        }
        public CreateOrUpdateProjectBasicDataWork(ProjectRepository projectRepository, ResourceSessionDirector resourceDirector) : base(projectRepository)
        {
            m_projectRepository = projectRepository;

            m_nullableProjectId = resourceDirector.GetSessionInfoValue <long?>(SessionInfo.ProjectId);
            m_bookData          = resourceDirector.GetSessionInfoValue <BookData>(SessionInfo.BookData);
            m_userId            = resourceDirector.GetSessionInfoValue <int>(SessionInfo.UserId);
            m_projectType       = resourceDirector.GetSessionInfoValue <ProjectTypeContract>(SessionInfo.ProjectType);
        }
示例#4
0
        public string TranslatePortalShort(ProjectTypeContract projectType)
        {
            switch (projectType)
            {
            case ProjectTypeContract.Research:
                return(m_localizationService.Translate("ResearchPortalShort", "BibliographyModule"));

            case ProjectTypeContract.Community:
                return(m_localizationService.Translate("CommunityPortalShort", "BibliographyModule"));

            case ProjectTypeContract.Bibliography:
                return(m_localizationService.Translate("BibliographicRecordsShort", "BibliographyModule"));

            default:
                return(projectType.ToString());
            }
        }
示例#5
0
        public long SearchByCriteriaCount(AdvancedSearchRequestContract request, ProjectTypeContract projectType)
        {
            m_authorizationManager.AddAuthorizationCriteria(request.ConditionConjunction);

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

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

                // 2) search in fulltext
                var fulltextStorage = m_fulltextStorageProvider.GetFulltextStorage(projectType);
                var result          = fulltextStorage.SearchByCriteriaCount(processedCriterias.NonMetadataCriterias, projectIdentificatorList);
                return(result);
            }
            else
            {
                // Search in relational DB

                var result = m_bookRepository.InvokeUnitOfWork(x => x.SearchByCriteriaQueryCount(queryCreator));
                return(result);
            }
        }
示例#6
0
        public long SearchCorpusTotalResultCount(SearchRequestContractBase request, ProjectTypeContract projectType)
        {
            try
            {
                var result = m_client.Post <long>($"bookpagedcorpus/search-count?projectType={projectType}", request);
                return(result);
            }
            catch (HttpRequestException e)
            {
                if (m_logger.IsErrorEnabled())
                {
                    m_logger.LogError("{0} failed with {1}", m_client.GetCurrentMethod(), e);
                }

                throw;
            }
        }
示例#7
0
        public long SearchHeadwordCount(HeadwordSearchRequestContract request, ProjectTypeContract projectType)
        {
            try
            {
                var result = m_client.Post <long>($"headword/search-count?projectType={projectType}", request);
                return(result);
            }
            catch (HttpRequestException e)
            {
                if (m_logger.IsErrorEnabled())
                {
                    m_logger.LogError("{0} failed with {1}", m_client.GetCurrentMethod(), e);
                }

                throw;
            }
        }
示例#8
0
        public long SearchCorpusTotalResultCount(SearchRequestContractBase request, ProjectTypeContract projectType)
        {
            var processedCriterias   = GetAuthorizatedProcessedCriterias(request.ConditionConjunction);
            var nonMetadataCriterias = processedCriterias.NonMetadataCriterias;

            var projectIdentificatorList = GetProjectIdentificatorList(processedCriterias.ConjunctionQuery, processedCriterias.MetadataParameters, projectType);

            if (projectIdentificatorList.Count == 0)
            {
                return(0);
            }

            //Search in fulltext DB
            var fulltextStorage = m_fulltextStorageProvider.GetFulltextStorage(projectType);
            var resultCount     = fulltextStorage.SearchCorpusTotalResultCount(nonMetadataCriterias, projectIdentificatorList);

            return(resultCount);
        }
示例#9
0
        public BookContract GetBookInfoByExternalId(string projectExternalId, ProjectTypeContract projectType)
        {
            // Authorize after getting projectId

            var projectTypeEnum = m_mapper.Map <ProjectTypeEnum>(projectType);
            var metadataResult  = m_metadataRepository.InvokeUnitOfWork(x => x.GetLatestMetadataResourceByExternalId(projectExternalId, projectTypeEnum));

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

            m_authorizationManager.AuthorizeBook(metadataResult.Resource.Project.Id, PermissionFlag.ShowPublished);

            var result = m_mapper.Map <BookContract>(metadataResult);

            return(result);
        }
示例#10
0
        public List <string> GetHeadwordAutocomplete(string query, ProjectTypeContract projectType, BookTypeEnumContract?bookType,
                                                     IList <int> selectedCategoryIds,
                                                     IList <long> selectedProjectIds)
        {
            var userId          = m_authorizationManager.GetCurrentUserId();
            var bookTypeEnum    = m_mapper.Map <BookTypeEnum?>(bookType);
            var projectTypeEnum = m_mapper.Map <ProjectTypeEnum>(projectType);
            var result          = m_bookRepository.InvokeUnitOfWork(x =>
            {
                var allCategoryIds = selectedCategoryIds.Count > 0
                    ? m_categoryRepository.GetAllSubcategoryIds(selectedCategoryIds)
                    : selectedCategoryIds;
                return(x.GetHeadwordAutocomplete(query, projectTypeEnum, bookTypeEnum, allCategoryIds, selectedProjectIds,
                                                 DefaultValues.AutocompleteCount,
                                                 userId));
            });

            return(result.ToList());
        }
示例#11
0
        public BookContract GetBookInfoByExternalId(string externalId, ProjectTypeContract projectType)
        {
            try
            {
                var url = UrlQueryBuilder.Create("book/info")
                          .AddParameter("externalId", externalId)
                          .AddParameter("projectType", projectType)
                          .ToResult();
                var result = m_client.Get <BookContract>(url);
                return(result);
            }
            catch (HttpRequestException e)
            {
                if (m_logger.IsErrorEnabled())
                {
                    m_logger.LogError("{0} failed with {1}", m_client.GetCurrentMethod(), e);
                }

                throw;
            }
        }
 public ImportResultContract ProcessSession(string sessionId, long?projectId, int userId, string uploadMessage,
                                            ProjectTypeContract projectType, FulltextStoreTypeContract storeType, IList <PermissionFromAuthContract> autoImportPermissions)
 {
     try
     {
         return(Channel.ProcessSession(sessionId, projectId, userId, uploadMessage, projectType, storeType, autoImportPermissions));
     }
     catch (FaultException ex)
     {
         throw new FileProcessingImportFailedException("File processing failed. See inner exception.", ex);
     }
     catch (TimeoutException ex)
     {
         throw new FileProcessingException("Communication with FileProcessing service failed. See inner exception.", ex);
     }
     catch (CommunicationException ex)
     {
         throw new FileProcessingException(String.Format("Communication with FileProcessing service failed. See inner exception: {0}", ex.Message), ex);
     }
     catch (ObjectDisposedException ex)
     {
         throw new FileProcessingException("Communication with FileProcessing service failed. See inner exception.", ex);
     }
 }
示例#13
0
        public List <AudioBookSearchResultContract> SearchAudioByCriteria(SearchRequestContract request, ProjectTypeContract projectType)
        {
            m_authorizationManager.AddAuthorizationCriteria(request.ConditionConjunction);

            var processedCriterias = m_metadataSearchCriteriaProcessor.ProcessSearchCriterias(request.ConditionConjunction);
            var projectTypeEnum    = m_mapper.Map <ProjectTypeEnum>(projectType);

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

            // Search only in relational DB

            var searchByCriteriaWork = new SearchAudioByCriteriaWork(m_metadataRepository, m_bookRepository, queryCreator);
            var dbResult             = searchByCriteriaWork.Execute();

            //var resultList = MapToSearchResult(dbResult, searchByCriteriaWork.PageCounts);
            var resultList = new List <AudioBookSearchResultContract>(dbResult.Count);

            foreach (var dbMetadata in dbResult)
            {
                var resultItem = m_mapper.Map <AudioBookSearchResultContract>(dbMetadata);
                resultList.Add(resultItem);

                if (searchByCriteriaWork.FullBookRecordingsByProjectId.TryGetValue(dbMetadata.Resource.Project.Id, out var audioList))
                {
                    resultItem.FullBookRecordings = m_mapper.Map <List <AudioContract> >(audioList);
                }
                else
                {
                    resultItem.FullBookRecordings = new List <AudioContract>();
                }
            }

            return(resultList);
        }
示例#14
0
 public IFulltextStorage GetFulltextStorage(ProjectTypeContract projectType)
 {
     return(GetFulltextStorage((ProjectTypeEnum)projectType));
 }
示例#15
0
        public CorpusSearchSnapshotsResultContract SearchCorpusGetSnapshotList(BookPagedCorpusSearchRequestContract request, ProjectTypeContract projectType)
        {
            try
            {
                var result = m_client.Post <CorpusSearchSnapshotsResultContract>($"bookpagedcorpus/search?projectType={projectType}", request);
                return(result);
            }
            catch (HttpRequestException e)
            {
                if (m_logger.IsErrorEnabled())
                {
                    m_logger.LogError("{0} failed with {1}", m_client.GetCurrentMethod(), e);
                }

                throw;
            }
        }
示例#16
0
        public long SearchHeadwordRowNumber(HeadwordRowNumberSearchRequestContract request, ProjectTypeContract projectType)
        {
            var userId          = m_authorizationManager.GetCurrentUserId();
            var projectTypeEnum = m_mapper.Map <ProjectTypeEnum>(projectType);

            if (request.Category.BookType == null)
            {
                throw new MainServiceException(MainServiceErrorCode.NullBookTypeNotSupported, "Null value of BookType is not supported");
            }

            var searchHeadwordRowNumberWork =
                new SearchHeadwordRowNumberWork(m_bookRepository, m_categoryRepository, request, userId, projectTypeEnum, m_mapper);
            var result = searchHeadwordRowNumberWork.Execute();

            return(result);
        }
示例#17
0
        public List <AudioBookSearchResultContract> SearchAudioBook(SearchRequestContract request, ProjectTypeContract projectType)
        {
            try
            {
                var result = m_client.Post <List <AudioBookSearchResultContract> >($"audiobook/search?projectType={projectType}", request);
                return(result);
            }
            catch (HttpRequestException e)
            {
                if (m_logger.IsErrorEnabled())
                {
                    m_logger.LogError("{0} failed with {1}", m_client.GetCurrentMethod(), e);
                }

                throw;
            }
        }
示例#18
0
        public List <CorpusSearchResultContract> SearchCorpusByCriteria(CorpusSearchRequestContract request, ProjectTypeContract projectType)
        {
            var processedCriterias = GetAuthorizatedProcessedCriterias(request.ConditionConjunction);

            var nonMetadataCriterias = processedCriterias.NonMetadataCriterias;

            var projectIdentificatorList = GetProjectIdentificatorList(processedCriterias.ConjunctionQuery, processedCriterias.MetadataParameters, projectType);

            if (projectIdentificatorList.Count == 0)
            {
                return(new List <CorpusSearchResultContract>());
            }

            // Search in fulltext DB
            var fulltextStorage = m_fulltextStorageProvider.GetFulltextStorage(projectType);
            var start           = m_corpusSearchManager.GetCorpusStart(request.Start);
            var count           = m_corpusSearchManager.GetCorpusCount(request.Count);
            var result          = fulltextStorage.SearchCorpusByCriteria(start, count, request.ContextLength, request.Sort, request.SortDirection, nonMetadataCriterias, projectIdentificatorList);

            var projectTypeEnum = m_mapper.Map <ProjectTypeEnum>(projectType);

            switch (result.SearchResultType)
            {
            case FulltextSearchResultType.ProjectId:
                return(m_corpusSearchManager.GetCorpusSearchResultByStandardIds(result.List));

            case FulltextSearchResultType.ProjectExternalId:
                return(m_corpusSearchManager.GetCorpusSearchResultByExternalIds(result.List, projectTypeEnum));

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
示例#19
0
        private IList <ProjectIdentificationResult> GetProjectIdentificatorList(List <SearchCriteriaQuery> processedCriteriasConjunctionQuery, Dictionary <string, object> processedCriteriasMetadataParameters, ProjectTypeContract projectType)
        {
            var projectTypeEnum = m_mapper.Map <ProjectTypeEnum>(projectType);

            var queryCreator             = new SearchCriteriaQueryCreator(processedCriteriasConjunctionQuery, processedCriteriasMetadataParameters, projectTypeEnum);
            var projectIdentificatorList = m_bookRepository.InvokeUnitOfWork(x => x.SearchProjectIdByCriteriaQuery(queryCreator));

            return(projectIdentificatorList);
        }
示例#20
0
        public CorpusSearchSnapshotsResultContract SearchCorpusGetSnapshotListByCriteria(BookPagedCorpusSearchRequestContract request,
                                                                                         ProjectTypeContract projectType)
        {
            var processedCriterias   = GetAuthorizatedProcessedCriterias(request.ConditionConjunction);
            var nonMetadataCriterias = processedCriterias.NonMetadataCriterias;

            var projectIdentificatorList = GetProjectIdentificatorList(processedCriterias.ConjunctionQuery, processedCriterias.MetadataParameters, projectType);

            if (projectIdentificatorList.Count == 0)
            {
                return(new CorpusSearchSnapshotsResultContract
                {
                    TotalCount = 0,
                    SnapshotList = new List <CorpusSearchSnapshotContract>(),
                });
            }

            // Search in fulltext DB
            var fulltextStorage = m_fulltextStorageProvider.GetFulltextStorage(projectType);
            var start           = m_corpusSearchManager.GetCorpusStart(request.Start);
            var count           = m_corpusSearchManager.GetCorpusCount(request.Count);

            var result = fulltextStorage.SearchCorpusGetSnapshotListByCriteria(start, count, request.Sort, request.SortDirection, nonMetadataCriterias, projectIdentificatorList, request.FetchNumberOfResults);

            return(result);
        }
示例#21
0
        public long SearchHeadwordByCriteriaCount(HeadwordSearchRequestContract request, ProjectTypeContract projectType)
        {
            m_authorizationManager.AddAuthorizationCriteria(request.ConditionConjunction);

            var processedCriterias = m_metadataSearchCriteriaProcessor.ProcessSearchCriterias(request.ConditionConjunction);
            var projectTypeEnum    = m_mapper.Map <ProjectTypeEnum>(projectType);

            var queryCreator = new SearchCriteriaQueryCreator(processedCriterias.ConjunctionQuery, processedCriterias.MetadataParameters, projectTypeEnum)
            {
                Start = PagingHelper.GetStart(request.Start),
                Count = PagingHelper.GetCount(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(0);
                }

                // 2) search in fulltext
                var fulltextStorage = m_fulltextStorageProvider.GetFulltextStorage(projectType);
                var result          = fulltextStorage.SearchHeadwordByCriteriaCount(processedCriterias.NonMetadataCriterias, projectIdentificatorList);
                return(result);
            }
            else
            {
                // Search in relational DB

                var result = m_bookRepository.InvokeUnitOfWork(x => x.SearchHeadwordByCriteriaQueryCount(queryCreator));
                return(result);
            }
        }
示例#22
0
        public List <HeadwordContract> SearchHeadwordByCriteria(HeadwordSearchRequestContract request, ProjectTypeContract projectType)
        {
            m_authorizationManager.AddAuthorizationCriteria(request.ConditionConjunction);

            var processedCriterias   = m_metadataSearchCriteriaProcessor.ProcessSearchCriterias(request.ConditionConjunction);
            var nonMetadataCriterias = processedCriterias.NonMetadataCriterias;
            var projectTypeEnum      = m_mapper.Map <ProjectTypeEnum>(projectType);

            var queryCreator = new SearchCriteriaQueryCreator(processedCriterias.ConjunctionQuery, processedCriterias.MetadataParameters, projectTypeEnum)
            {
                Start = PagingHelper.GetStart(request.Start),
                Count = PagingHelper.GetCount(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 <HeadwordContract>());
                }

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

                // 3) load paged result
                switch (fulltextSearchResultData.SearchResultType)
                {
                case FulltextSearchResultType.ProjectId:
                    return(m_headwordSearchManager.GetHeadwordSearchResultByStandardIds(fulltextSearchResultData.List));

                case FulltextSearchResultType.ProjectExternalId:
                    return(m_headwordSearchManager.GetHeadwordSearchResultByExternalIds(fulltextSearchResultData.List, projectTypeEnum));

                default:
                    throw new ArgumentOutOfRangeException();
                }
            }
            else
            {
                // Search in relational DB

                var searchByCriteriaWork = new SearchHeadwordByCriteriaWork(m_resourceRepository, m_bookRepository, queryCreator);
                var dbResult             = searchByCriteriaWork.Execute();

                var resultList = m_mapper.Map <List <HeadwordContract> >(dbResult);
                return(resultList);
            }
        }
示例#23
0
 public ImportResultContract ProcessSession(string sessionId, long?projectId, int userId, string uploadMessage, ProjectTypeContract projectType, FulltextStoreTypeContract storeType, IList <PermissionFromAuthContract> autoImportPermissions)
 {
     return(m_sessionManager.ProcessSession(sessionId, projectId, userId, uploadMessage, projectType, storeType, autoImportPermissions));
 }
示例#24
0
        public PagedResultList <ProjectDetailContract> GetProjectList(int start, int count, ProjectTypeContract projectType,
                                                                      ProjectOwnerTypeContract projectOwnerType = ProjectOwnerTypeContract.AllProjects, string filterByName = null, bool fetchPageCount = false,
                                                                      bool fetchLatestChangedResource           = false, bool fetchPermissions = false)
        {
            try
            {
                var url = UrlQueryBuilder.Create("project")
                          .AddParameter("start", start)
                          .AddParameter("count", count)
                          .AddParameter("projectType", projectType)
                          .AddParameter("projectOwnerType", projectOwnerType)
                          .AddParameter("filterByName", filterByName)
                          .AddParameter("fetchPageCount", fetchPageCount)
                          .AddParameter("fetchLatestChangedResource", fetchLatestChangedResource)
                          .AddParameter("fetchPermissions", fetchPermissions)
                          .ToResult();
                var result = m_client.GetPagedList <ProjectDetailContract>(url);
                return(result);
            }
            catch (HttpRequestException e)
            {
                if (m_logger.IsErrorEnabled())
                {
                    m_logger.LogError("{0} failed with {1}", m_client.GetCurrentMethod(), e);
                }

                throw;
            }
        }
示例#25
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);
            }
        }