Exemplo n.º 1
0
 public SearchByCriteriaWork(MetadataRepository metadataRepository, BookViewRepository bookRepository,
                             SearchCriteriaQueryCreator queryCreator, TermCriteriaPageConditionCreator termCriteriaCreator) : base(
         metadataRepository)
 {
     m_metadataRepository  = metadataRepository;
     m_bookRepository      = bookRepository;
     m_queryCreator        = queryCreator;
     m_termCriteriaCreator = termCriteriaCreator;
 }
Exemplo n.º 2
0
        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;
 }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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);
        }