/**
* 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.workflow.definition.web.internal.display.context;
import com.liferay.portal.kernel.dao.orm.QueryUtil;
import com.liferay.portal.kernel.dao.search.SearchContainer;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.language.LanguageUtil;
import com.liferay.portal.kernel.theme.ThemeDisplay;
import com.liferay.portal.kernel.util.AggregatePredicateFilter;
import com.liferay.portal.kernel.util.HtmlUtil;
import com.liferay.portal.kernel.util.ListUtil;
import com.liferay.portal.kernel.util.OrderByComparator;
import com.liferay.portal.kernel.util.ParamUtil;
import com.liferay.portal.kernel.util.PredicateFilter;
import com.liferay.portal.kernel.util.Validator;
import com.liferay.portal.kernel.workflow.WorkflowDefinition;
import com.liferay.portal.kernel.workflow.WorkflowDefinitionManagerUtil;
import com.liferay.portal.workflow.definition.web.internal.display.context.util.WorkflowDefinitionRequestHelper;
import com.liferay.portal.workflow.definition.web.internal.search.WorkflowDefinitionSearchTerms;
import com.liferay.portal.workflow.definition.web.internal.util.WorkflowDefinitionPortletUtil;
import com.liferay.portal.workflow.definition.web.internal.util.filter.WorkflowDefinitionNamePredicateFilter;
import com.liferay.portal.workflow.definition.web.internal.util.filter.WorkflowDefinitionTitlePredicateFilter;
import java.util.List;
import javax.portlet.RenderRequest;
import javax.servlet.http.HttpServletRequest;
/**
* @author Leonardo Barros
*/
public class WorkflowDefinitionDisplayContext {
public WorkflowDefinitionDisplayContext(RenderRequest renderRequest) {
_workflowDefinitionRequestHelper = new WorkflowDefinitionRequestHelper(
renderRequest);
}
public String getActive(WorkflowDefinition workflowDefinition) {
HttpServletRequest request =
_workflowDefinitionRequestHelper.getRequest();
if (workflowDefinition.isActive()) {
return LanguageUtil.get(request, "yes");
}
return LanguageUtil.get(request, "no");
}
public String getName(WorkflowDefinition workflowDefinition) {
return HtmlUtil.escape(workflowDefinition.getName());
}
public List<WorkflowDefinition> getSearchContainerResults(
SearchContainer<WorkflowDefinition> searchContainer)
throws PortalException {
List<WorkflowDefinition> workflowDefinitions =
WorkflowDefinitionManagerUtil.getWorkflowDefinitions(
_workflowDefinitionRequestHelper.getCompanyId(),
QueryUtil.ALL_POS, QueryUtil.ALL_POS,
getWorkflowDefinitionOrderByComparator());
WorkflowDefinitionSearchTerms searchTerms =
(WorkflowDefinitionSearchTerms)searchContainer.getSearchTerms();
if (searchTerms.isAdvancedSearch()) {
workflowDefinitions = filter(
workflowDefinitions, searchTerms.getName(),
searchTerms.getTitle(), searchTerms.isAndOperator());
}
else {
workflowDefinitions = filter(
workflowDefinitions, searchTerms.getKeywords(),
searchTerms.getKeywords(), false);
}
searchContainer.setTotal(workflowDefinitions.size());
if (workflowDefinitions.size() >
(searchContainer.getEnd() - searchContainer.getStart())) {
workflowDefinitions = ListUtil.subList(
workflowDefinitions, searchContainer.getStart(),
searchContainer.getEnd());
}
return workflowDefinitions;
}
public String getTitle(WorkflowDefinition workflowDefinition) {
ThemeDisplay themeDisplay =
_workflowDefinitionRequestHelper.getThemeDisplay();
return HtmlUtil.escape(
workflowDefinition.getTitle(themeDisplay.getLanguageId()));
}
public String getVersion(WorkflowDefinition workflowDefinition) {
return String.valueOf(workflowDefinition.getVersion());
}
public List<WorkflowDefinition> getWorkflowDefinitions(String name)
throws PortalException {
return WorkflowDefinitionManagerUtil.getWorkflowDefinitions(
_workflowDefinitionRequestHelper.getCompanyId(), name,
QueryUtil.ALL_POS, QueryUtil.ALL_POS, null);
}
protected PredicateFilter<WorkflowDefinition> createPredicateFilter(
String name, String title, boolean andOperator) {
AggregatePredicateFilter<WorkflowDefinition> aggregatePredicateFilter =
new AggregatePredicateFilter<>(
new WorkflowDefinitionNamePredicateFilter(name));
if (andOperator) {
aggregatePredicateFilter.and(
new WorkflowDefinitionTitlePredicateFilter(title));
}
else {
aggregatePredicateFilter.or(
new WorkflowDefinitionTitlePredicateFilter(title));
}
return aggregatePredicateFilter;
}
protected List<WorkflowDefinition> filter(
List<WorkflowDefinition> workflowDefinitions, String name, String title,
boolean andOperator) {
if (Validator.isNull(name) && Validator.isNull(title)) {
return workflowDefinitions;
}
PredicateFilter<WorkflowDefinition> predicateFilter =
createPredicateFilter(name, title, andOperator);
return ListUtil.filter(workflowDefinitions, predicateFilter);
}
protected OrderByComparator<WorkflowDefinition>
getWorkflowDefinitionOrderByComparator() {
String orderByCol = ParamUtil.getString(
_workflowDefinitionRequestHelper.getRequest(), "orderByCol",
"name");
String orderByType = ParamUtil.getString(
_workflowDefinitionRequestHelper.getRequest(), "orderByType",
"asc");
return WorkflowDefinitionPortletUtil.
getWorkflowDefitionOrderByComparator(
orderByCol, orderByType,
_workflowDefinitionRequestHelper.getLocale());
}
private final WorkflowDefinitionRequestHelper
_workflowDefinitionRequestHelper;
}