/** * 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.search.web.internal.facet.display.builder; import com.liferay.portal.kernel.search.facet.Facet; import com.liferay.portal.kernel.search.facet.collector.FacetCollector; import com.liferay.portal.kernel.search.facet.collector.TermCollector; import com.liferay.portal.kernel.util.GetterUtil; import com.liferay.portal.kernel.util.StringPool; import com.liferay.portal.kernel.util.StringUtil; import com.liferay.portal.search.web.internal.facet.display.context.UserSearchFacetDisplayContext; import com.liferay.portal.search.web.internal.facet.display.context.UserSearchFacetTermDisplayContext; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Objects; /** * @author André de Oliveira */ public class UserSearchFacetDisplayBuilder { public UserSearchFacetDisplayContext build() { boolean nothingSelected = isNothingSelected(); List<TermCollector> termCollectors = getTermsCollectors(); boolean renderNothing = false; if (nothingSelected && termCollectors.isEmpty()) { renderNothing = true; } UserSearchFacetDisplayContext userSearchFacetDisplayContext = new UserSearchFacetDisplayContext(); userSearchFacetDisplayContext.setNothingSelected(nothingSelected); userSearchFacetDisplayContext.setParamName(_paramName); userSearchFacetDisplayContext.setParamValue(getFirstParamValue()); userSearchFacetDisplayContext.setParamValues(_paramValues); userSearchFacetDisplayContext.setRenderNothing(renderNothing); userSearchFacetDisplayContext.setTermDisplayContexts( buildTermDisplayContexts(termCollectors)); return userSearchFacetDisplayContext; } public void setFacet(Facet facet) { _facet = facet; } public void setFrequenciesVisible(boolean frequenciesVisible) { _frequenciesVisible = frequenciesVisible; } public void setFrequencyThreshold(int frequencyThreshold) { _frequencyThreshold = frequencyThreshold; } public void setMaxTerms(int maxTerms) { _maxTerms = maxTerms; } public void setParamName(String paramName) { _paramName = paramName; } public void setParamValue(String paramValue) { paramValue = StringUtil.trim(Objects.requireNonNull(paramValue)); if (paramValue.isEmpty()) { return; } _paramValues = Collections.singletonList(paramValue); } public void setParamValues(List<String> paramValues) { _paramValues = paramValues; } protected UserSearchFacetTermDisplayContext buildTermDisplayContext( TermCollector termCollector) { String term = GetterUtil.getString(termCollector.getTerm()); UserSearchFacetTermDisplayContext userSearchFacetTermDisplayContext = new UserSearchFacetTermDisplayContext(); userSearchFacetTermDisplayContext.setFrequency( termCollector.getFrequency()); userSearchFacetTermDisplayContext.setFrequencyVisible( _frequenciesVisible); userSearchFacetTermDisplayContext.setSelected(isSelected(term)); userSearchFacetTermDisplayContext.setUserName(term); return userSearchFacetTermDisplayContext; } protected List<UserSearchFacetTermDisplayContext> buildTermDisplayContexts(List<TermCollector> termCollectors) { if (termCollectors.isEmpty()) { return getEmptyTermDisplayContexts(); } List<UserSearchFacetTermDisplayContext> userSearchFacetTermDisplayContexts = new ArrayList<>( termCollectors.size()); for (int i = 0; i < termCollectors.size(); i++) { TermCollector termCollector = termCollectors.get(i); if (((_maxTerms > 0) && (i >= _maxTerms)) || ((_frequencyThreshold > 0) && (_frequencyThreshold > termCollector.getFrequency()))) { break; } userSearchFacetTermDisplayContexts.add( buildTermDisplayContext(termCollector)); } return userSearchFacetTermDisplayContexts; } protected List<UserSearchFacetTermDisplayContext> getEmptyTermDisplayContexts() { if (_paramValues.isEmpty()) { return Collections.emptyList(); } UserSearchFacetTermDisplayContext userSearchFacetTermDisplayContext = new UserSearchFacetTermDisplayContext(); userSearchFacetTermDisplayContext.setFrequency(0); userSearchFacetTermDisplayContext.setFrequencyVisible( _frequenciesVisible); userSearchFacetTermDisplayContext.setSelected(true); userSearchFacetTermDisplayContext.setUserName(_paramValues.get(0)); return Collections.singletonList(userSearchFacetTermDisplayContext); } protected String getFirstParamValue() { if (_paramValues.isEmpty()) { return StringPool.BLANK; } return _paramValues.get(0); } protected List<TermCollector> getTermsCollectors() { FacetCollector facetCollector = _facet.getFacetCollector(); if (facetCollector != null) { return facetCollector.getTermCollectors(); } return Collections.<TermCollector>emptyList(); } protected boolean isNothingSelected() { if (_paramValues.isEmpty()) { return true; } return false; } protected boolean isSelected(String value) { if (_paramValues.contains(value)) { return true; } return false; } private Facet _facet; private boolean _frequenciesVisible; private int _frequencyThreshold; private int _maxTerms; private String _paramName; private List<String> _paramValues = Collections.emptyList(); }