/** * 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.model.Layout; import com.liferay.portal.kernel.theme.ThemeDisplay; import com.liferay.portal.kernel.util.ArrayUtil; import com.liferay.portal.kernel.util.ParamUtil; import com.liferay.portal.kernel.util.StringUtil; import com.liferay.portal.kernel.util.WebKeys; import java.io.Serializable; import java.util.HashMap; import java.util.Locale; import java.util.Map; import java.util.Objects; import java.util.TimeZone; import javax.servlet.http.HttpServletRequest; /** * @author Brian Wing Shun Chan */ public class SearchContextFactory { public static SearchContext getInstance(HttpServletRequest request) { SearchContext searchContext = new SearchContext(); // Theme display ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute( WebKeys.THEME_DISPLAY); searchContext.setCompanyId(themeDisplay.getCompanyId()); searchContext.setGroupIds(new long[] {themeDisplay.getScopeGroupId()}); searchContext.setLayout(themeDisplay.getLayout()); searchContext.setLocale(themeDisplay.getLocale()); searchContext.setTimeZone(themeDisplay.getTimeZone()); searchContext.setUserId(themeDisplay.getUserId()); // Attributes Map<String, Serializable> attributes = new HashMap<>(); Map<String, String[]> parameters = request.getParameterMap(); for (Map.Entry<String, String[]> entry : parameters.entrySet()) { String name = entry.getKey(); String[] values = entry.getValue(); if (ArrayUtil.isNotEmpty(values)) { if (values.length == 1) { attributes.put(name, values[0]); } else { attributes.put(name, values); } } } if (!parameters.containsKey("groupId")) { String[] scopes = parameters.get("scope"); if (scopes != null) { String groupId = "0"; if (Objects.equals(scopes[0], "this-site")) { groupId = String.valueOf(themeDisplay.getScopeGroupId()); } attributes.put("groupId", groupId); } } searchContext.setAttributes(attributes); // Asset long[] assetCategoryIds = StringUtil.split( ParamUtil.getString(request, "assetCategoryIds"), 0L); String[] assetTagNames = StringUtil.split( ParamUtil.getString(request, "assetTagNames")); searchContext.setAssetCategoryIds(assetCategoryIds); searchContext.setAssetTagNames(assetTagNames); // Keywords String keywords = ParamUtil.getString(request, "keywords"); searchContext.setKeywords(keywords); // Query config QueryConfig queryConfig = searchContext.getQueryConfig(); queryConfig.setLocale(themeDisplay.getLocale()); return searchContext; } public static SearchContext getInstance( long[] assetCategoryIds, String[] assetTagNames, Map<String, Serializable> attributes, long companyId, String keywords, Layout layout, Locale locale, long scopeGroupId, TimeZone timeZone, long userId) { SearchContext searchContext = new SearchContext(); // Theme display searchContext.setCompanyId(companyId); searchContext.setGroupIds(new long[] {scopeGroupId}); searchContext.setLayout(layout); searchContext.setLocale(locale); searchContext.setTimeZone(timeZone); searchContext.setUserId(userId); // Attributes if (attributes != null) { searchContext.setAttributes(attributes); } else { searchContext.setAttributes(new HashMap<String, Serializable>()); } // Asset searchContext.setAssetCategoryIds(assetCategoryIds); searchContext.setAssetTagNames(assetTagNames); // Keywords searchContext.setKeywords(keywords); // Query config QueryConfig queryConfig = searchContext.getQueryConfig(); queryConfig.setLocale(locale); return searchContext; } }