/** * Copyright (c) 2000-present Liferay, Inc. All rights reserved. * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. */ package com.liferay.portal.kernel.search; import com.liferay.portal.kernel.search.filter.BooleanFilter; import com.liferay.portal.kernel.search.filter.QueryFilter; import com.liferay.portal.kernel.search.generic.BooleanQueryImpl; import com.liferay.portal.kernel.util.ArrayUtil; import com.liferay.portal.kernel.util.PortalUtil; /** * @author Michael C. Han */ public class BaseRelatedEntryIndexer implements RelatedEntryIndexer { @Override public void addRelatedClassNames( BooleanFilter contextBooleanFilter, SearchContext searchContext) throws Exception { searchContext.setAttribute("relatedClassName", Boolean.TRUE); String[] relatedEntryClassNames = (String[])searchContext.getAttribute( "relatedEntryClassNames"); if (ArrayUtil.isEmpty(relatedEntryClassNames)) { return; } BooleanFilter relatedBooleanFilters = new BooleanFilter(); for (String relatedEntryClassName : relatedEntryClassNames) { Indexer<?> indexer = IndexerRegistryUtil.getIndexer( relatedEntryClassName); if (indexer == null) { continue; } BooleanFilter relatedBooleanFilter = new BooleanFilter(); indexer.postProcessContextBooleanFilter( relatedBooleanFilter, searchContext); for (IndexerPostProcessor indexerPostProcessor : indexer.getIndexerPostProcessors()) { indexerPostProcessor.postProcessContextBooleanFilter( relatedBooleanFilter, searchContext); } postProcessContextQuery( relatedBooleanFilter, searchContext, indexer); relatedBooleanFilter.addRequiredTerm( Field.CLASS_NAME_ID, PortalUtil.getClassNameId(relatedEntryClassName)); relatedBooleanFilters.add( relatedBooleanFilter, BooleanClauseOccur.SHOULD); } if (relatedBooleanFilters.hasClauses()) { contextBooleanFilter.add( relatedBooleanFilters, BooleanClauseOccur.MUST); } searchContext.setAttribute("relatedClassName", Boolean.FALSE); } @Override public void addRelatedEntryFields(Document document, Object obj) throws Exception { } @Override public void updateFullQuery(SearchContext searchContext) { } /** * @deprecated As of 7.0.0, added strictly to support backwards * compatibility of {@link * Indexer#postProcessContextQuery(BooleanQuery, SearchContext)} */ @Deprecated protected void postProcessContextQuery( BooleanFilter relatedBooleanFilter, SearchContext searchContext, Indexer<?> indexer) throws Exception { BooleanQuery entityQuery = new BooleanQueryImpl(); indexer.postProcessContextQuery(entityQuery, searchContext); for (IndexerPostProcessor indexerPostProcessor : indexer.getIndexerPostProcessors()) { indexerPostProcessor.postProcessContextQuery( entityQuery, searchContext); } if (entityQuery.hasClauses()) { QueryFilter queryFilter = new QueryFilter(entityQuery); relatedBooleanFilter.add(queryFilter, BooleanClauseOccur.MUST); } } }