Skip to content

Commit

Permalink
Added Advanced Search for 7.3
Browse files Browse the repository at this point in the history
  • Loading branch information
mario-softbless committed Dec 18, 2020
1 parent 69bc8c2 commit ed2c86e
Show file tree
Hide file tree
Showing 4 changed files with 503 additions and 17 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,12 @@ import com.liferay.friendly.url.service.FriendlyURLEntryLocalService;
import com.liferay.petra.string.StringPool;
import com.liferay.portal.aop.AopService;
import com.liferay.portal.kernel.comment.CommentManagerUtil;
import com.liferay.portal.kernel.dao.orm.DynamicQuery;
import com.liferay.portal.kernel.dao.orm.DynamicQueryFactoryUtil;
import com.liferay.portal.kernel.dao.orm.Junction;
import com.liferay.portal.kernel.dao.orm.QueryUtil;
import com.liferay.portal.kernel.dao.orm.PropertyFactoryUtil;
import com.liferay.portal.kernel.dao.orm.RestrictionsFactoryUtil;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.json.JSONFactoryUtil;
Expand Down Expand Up @@ -47,6 +52,7 @@ import com.liferay.portal.kernel.workflow.WorkflowConstants;
import com.liferay.portal.kernel.workflow.WorkflowHandlerRegistryUtil;
import ${packageName}.exception.${capFirstModel}ValidateException;
import ${packageName}.model.${capFirstModel};
import ${packageName}.model.impl.${capFirstModel}Impl;
import ${packageName}.service.base.${capFirstModel}LocalServiceBaseImpl;
import ${packageName}.service.util.${capFirstModel}Validator;
import com.liferay.trash.exception.RestoreEntryException;
Expand Down Expand Up @@ -1266,6 +1272,156 @@ public class ${capFirstModel}LocalServiceImpl extends ${capFirstModel}LocalServi
${capFirstModel}.class.getName(), entry.getPrimaryKey(), entry,
serviceContext, workflowContext);
}

/**
* advanceSearchInGroup
*
* @param advSearchKeywords
* @param groupId
* @param start
* @param end
* @param orderByComparator
* @param states
* @return search result list
*/
public List<${capFirstModel}> advanceSearchInGroup(Map<String, Object> advSearchKeywords, long groupId,
int start, int end, OrderByComparator<${capFirstModel}> orderByComparator, int[] states) {
DynamicQuery dynamicQuery = getDynamicQuery(advSearchKeywords, states);
dynamicQuery.add(PropertyFactoryUtil.forName("groupId").eq(groupId));

return dynamicQuery(dynamicQuery, start, end, orderByComparator);
}

/**
* countAdvanceSearchInGroup
*
* @param advSearchKeywords
* @param groupId
* @param states
* @return search result size
*/
public int countAdvanceSearchInGroup(Map<String, Object> advSearchKeywords, long groupId, int[] states) {
DynamicQuery dynamicQuery = getDynamicQuery(advSearchKeywords, states);
dynamicQuery.add(PropertyFactoryUtil.forName("groupId").eq(groupId));

return dynamicQuery(dynamicQuery).size();
}

/**
* advanceSearchInUser
*
* @param advSearchKeywords
* @param userId
* @param start
* @param end
* @param orderByComparator
* @param states
* @return search result list
*/
public List<${capFirstModel}> advanceSearchInUser(Map<String, Object> advSearchKeywords, long userId,
int start, int end, OrderByComparator<${capFirstModel}> orderByComparator, int[] states) {
DynamicQuery dynamicQuery = getDynamicQuery(advSearchKeywords, states);
dynamicQuery.add(PropertyFactoryUtil.forName("userId").eq(userId));

return dynamicQuery(dynamicQuery, start, end, orderByComparator);
}

/**
* countAdvanceSearchInUser
*
* @param advSearchKeywords
* @param userId
* @param states
* @return search result size
*/
public int countAdvanceSearchInUser(Map<String, Object> advSearchKeywords, long userId, int[] states) {
DynamicQuery dynamicQuery = getDynamicQuery(advSearchKeywords, states);
dynamicQuery.add(PropertyFactoryUtil.forName("userId").eq(userId));

return dynamicQuery(dynamicQuery).size();
}

/**
* advanceSearchInUserAndGroup
*
* @param advSearchKeywords
* @param userId
* @param groupId
* @param start
* @param end
* @param orderByComparator
* @param states
* @return search result list
*/
public List<${capFirstModel}> advanceSearchInUserAndGroup(Map<String, Object> advSearchKeywords, long userId,
long groupId, int start, int end, OrderByComparator<${capFirstModel}> orderByComparator, int[] states) {
DynamicQuery dynamicQuery = getDynamicQuery(advSearchKeywords, states);
dynamicQuery.add(PropertyFactoryUtil.forName("userId").eq(userId));
dynamicQuery.add(PropertyFactoryUtil.forName("groupId").eq(groupId));

return dynamicQuery(dynamicQuery, start, end, orderByComparator);
}

/**
* countAdvanceSearchInUserAndGroup
*
* @param advSearchKeywords
* @param userId
* @param groupId
* @param states
* @return search result size
*/
public int countAdvanceSearchInUserAndGroup(Map<String, Object> advSearchKeywords, long userId,
long groupId, int[] states) {
DynamicQuery dynamicQuery = getDynamicQuery(advSearchKeywords, states);
dynamicQuery.add(PropertyFactoryUtil.forName("userId").eq(userId));
dynamicQuery.add(PropertyFactoryUtil.forName("groupId").eq(groupId));

return dynamicQuery(dynamicQuery).size();
}

/**
* getDynamicQuery
*
* @param advSearchKeywords
* @param states
* @return dynamicQuery
*/
@SuppressWarnings("unchecked")
private DynamicQuery getDynamicQuery(Map<String, Object> advSearchKeywords, int[] states) {
DynamicQuery dynamicQuery = DynamicQueryFactoryUtil.forClass(${capFirstModel}Impl.class);

Junction conJunction = RestrictionsFactoryUtil.conjunction();
for(String key : advSearchKeywords.keySet()) {
String column = key.replaceFirst("search","");
column = column.substring(0, 1).toLowerCase() + column.substring(1, column.length());

if(advSearchKeywords.get(key) instanceof Map) {
Map<String, Object> map = (Map<String, Object>) advSearchKeywords.get(key);

if(map.get("start") instanceof Calendar && map.get("end") instanceof Calendar) {
conJunction.add(RestrictionsFactoryUtil.ge(column, ((Calendar)map.get("start")).getTime()));
conJunction.add(RestrictionsFactoryUtil.le(column, ((Calendar)map.get("end")).getTime()));
} else if((map.get("start") instanceof Long && map.get("end") instanceof Long) ||
(map.get("start") instanceof Double && map.get("end") instanceof Double) ||
(map.get("start") instanceof Integer && map.get("end") instanceof Integer)) {
conJunction.add(RestrictionsFactoryUtil.ge(column, map.get("start")));
conJunction.add(RestrictionsFactoryUtil.le(column, map.get("end")));
}
} else if(advSearchKeywords.get(key) instanceof String) {
conJunction.add(RestrictionsFactoryUtil.ilike(column, "%" + advSearchKeywords.get(key) + "%"));
}
}
dynamicQuery.add(conJunction);

Junction disJunction = RestrictionsFactoryUtil.disjunction();
for(int state : states) {
disJunction.add(RestrictionsFactoryUtil.eq("status", state));
}
dynamicQuery.add(disJunction);

return dynamicQuery;
}

private static final int[] STATUS_ANY = {
WorkflowConstants.STATUS_APPROVED, WorkflowConstants.STATUS_DENIED,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import com.liferay.portal.kernel.portlet.PortletPreferencesFactoryUtil;
import com.liferay.portal.kernel.portlet.PortletURLUtil;
import com.liferay.portal.kernel.security.permission.ActionKeys;
import com.liferay.portal.kernel.theme.ThemeDisplay;
import com.liferay.portal.kernel.util.HtmlUtil;
import com.liferay.portal.kernel.util.ParamUtil;
import com.liferay.portal.kernel.util.Validator;
import com.liferay.portal.kernel.util.WebKeys;
Expand All @@ -26,9 +27,11 @@ import ${packageName}.constants.${capFirstModel}PortletKeys;
import ${packageName}.model.${capFirstModel};
import ${packageName}.web.internal.security.permission.resource.${capFirstModel}EntryPermission;
import ${packageName}.web.util.${capFirstModel}ViewHelper;
import ${packageName}.web.portlet.action.${capFirstModel}Configuration;
import com.liferay.trash.TrashHelper;

import java.text.ParseException;
import java.text.SimpleDateFormat;

import java.util.Collections;
import java.util.HashMap;
Expand All @@ -37,6 +40,7 @@ import java.util.Map;

import javax.portlet.PortletException;
import javax.portlet.PortletURL;
import javax.portlet.PortletPreferences;

import javax.servlet.http.HttpServletRequest;

Expand Down Expand Up @@ -145,6 +149,26 @@ public class ${capFirstModel}DisplayContext {
navigationPortletURL.setParameter(
SearchContainer.DEFAULT_ORDER_BY_TYPE_PARAM, orderByType);


<#if advancedSearch>
${capFirstModel}Configuration ${uncapFirstModel}Configuration =
(${capFirstModel}Configuration)
_liferayPortletRequest.getAttribute(${capFirstModel}Configuration.class.getName());

PortletPreferences portletPreferences = _liferayPortletRequest.getPreferences();

SimpleDateFormat dateFormat = new SimpleDateFormat(
HtmlUtil.escape(
portletPreferences.getValue(
"dateFormat", ${uncapFirstModel}Configuration.dateFormat())));

Map<String, String> advSearchKeywords = _${uncapFirstModel}ViewHelper.getAdvSearchKeywords(_liferayPortletRequest, dateFormat);

for(String key : advSearchKeywords.keySet()) {
navigationPortletURL.setParameter(key, advSearchKeywords.get(key));
}
</#if>

SearchContainer<${capFirstModel}> _searchContainer = new SearchContainer<>(
_liferayPortletRequest,
PortletURLUtil.clone(navigationPortletURL, _liferayPortletResponse),
Expand All @@ -171,7 +195,15 @@ public class ${capFirstModel}DisplayContext {

_searchContainer.setTotal(searchContainerResults.getTotal());
_searchContainer.setResults(searchContainerResults.getResults());


<#if advancedSearch>
if(!advSearchKeywords.isEmpty()) {
PortletURL iteratorURL = _searchContainer.getIteratorURL();
iteratorURL.setParameter(DisplayTerms.KEYWORDS, "");
_searchContainer.setIteratorURL(iteratorURL);
}
</#if>

return _searchContainer;
}

Expand Down

0 comments on commit ed2c86e

Please sign in to comment.