public SearchByCriteriaWork(MetadataRepository metadataRepository, BookViewRepository bookRepository, SearchCriteriaQueryCreator queryCreator, TermCriteriaPageConditionCreator termCriteriaCreator) : base( metadataRepository) { m_metadataRepository = metadataRepository; m_bookRepository = bookRepository; m_queryCreator = queryCreator; m_termCriteriaCreator = termCriteriaCreator; }
public virtual IList <PageResource> GetPagesWithTerms(TermCriteriaPageConditionCreator creator) { var query = GetSession().CreateQuery(creator.GetQueryString()) .SetParameters(creator) .SetResultTransformer(Transformers.DistinctRootEntity); var result = query.List <PageResource>(); return(result); }
public SearchByCriteriaFulltextResultWork(MetadataRepository metadataRepository, BookViewRepository bookRepository, FulltextSearchResultData fulltextSearchResultData, TermCriteriaPageConditionCreator termCriteriaCreator, ProjectTypeEnum projectType) : base(metadataRepository) { m_metadataRepository = metadataRepository; m_bookRepository = bookRepository; m_fulltextSearchResultData = fulltextSearchResultData; m_termCriteriaCreator = termCriteriaCreator; m_projectType = projectType; }
private TermCriteriaPageConditionCreator CreateTermConditionCreatorOrDefault(SearchRequestContract request, FilteredCriterias processedCriterias) { TermCriteriaPageConditionCreator termCriteria = null; if (request.FetchTerms && request.ConditionConjunction.Any(x => x.Key == CriteriaKey.Term)) { termCriteria = new TermCriteriaPageConditionCreator(); termCriteria.AddCriteria(processedCriterias.MetadataCriterias); } return(termCriteria); }
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); }