001    /**
002     * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
014    
015    package com.liferay.portlet.workflowtasks.search;
016    
017    import com.liferay.portal.kernel.dao.search.SearchContainer;
018    import com.liferay.portal.kernel.util.OrderByComparator;
019    import com.liferay.portal.kernel.util.ParamUtil;
020    import com.liferay.portal.kernel.workflow.WorkflowTask;
021    import com.liferay.portal.kernel.workflow.comparator.WorkflowComparatorFactoryUtil;
022    
023    import java.util.ArrayList;
024    import java.util.HashMap;
025    import java.util.List;
026    import java.util.Map;
027    
028    import javax.portlet.PortletRequest;
029    import javax.portlet.PortletURL;
030    
031    /**
032     * @author Marcellus Tavares
033     */
034    public class WorkflowTaskSearch extends SearchContainer<WorkflowTask> {
035    
036            public static List<String> headerNames = new ArrayList<String>();
037            public static Map<String, String> orderableHeaders =
038                    new HashMap<String, String>();
039    
040            static {
041                    headerNames.add("task");
042                    headerNames.add("asset-title");
043                    headerNames.add("last-activity-date");
044                    headerNames.add("due-date");
045                    headerNames.add("state");
046    
047                    orderableHeaders.put("task", "task");
048                    orderableHeaders.put("due-date", "due-date");
049            }
050    
051            public WorkflowTaskSearch(
052                    PortletRequest portletRequest, PortletURL iteratorURL) {
053    
054                    this(portletRequest, DEFAULT_CUR_PARAM, iteratorURL);
055            }
056    
057            public WorkflowTaskSearch(
058                    PortletRequest portletRequest, String curParam,
059                    PortletURL iteratorURL) {
060    
061                    super(
062                            portletRequest, new WorkflowTaskDisplayTerms(portletRequest),
063                            new WorkflowTaskDisplayTerms(portletRequest), curParam,
064                            DEFAULT_DELTA, iteratorURL, headerNames, null);
065    
066                    WorkflowTaskDisplayTerms displayTerms =
067                            (WorkflowTaskDisplayTerms)getDisplayTerms();
068    
069                    iteratorURL.setParameter(
070                            WorkflowTaskDisplayTerms.NAME, displayTerms.getName());
071                    iteratorURL.setParameter(
072                            WorkflowTaskDisplayTerms.TYPE, displayTerms.getType());
073    
074                    String orderByCol = ParamUtil.getString(portletRequest, "orderByCol");
075                    String orderByType = ParamUtil.getString(portletRequest, "orderByType");
076    
077                    OrderByComparator<WorkflowTask> orderByComparator =
078                            getOrderByComparator(orderByCol, orderByType);
079    
080                    setOrderableHeaders(orderableHeaders);
081                    setOrderByCol(orderByCol);
082                    setOrderByType(orderByType);
083                    setOrderByComparator(orderByComparator);
084            }
085    
086            protected OrderByComparator<WorkflowTask> getOrderByComparator(
087                    String orderByCol, String orderByType) {
088    
089                    boolean orderByAsc = false;
090    
091                    if (orderByType.equals("asc")) {
092                            orderByAsc = true;
093                    }
094    
095                    OrderByComparator<WorkflowTask> orderByComparator = null;
096    
097                    if (orderByCol.equals("name")) {
098                            orderByComparator =
099                                    WorkflowComparatorFactoryUtil.getTaskNameComparator(orderByAsc);
100                    }
101                    else {
102                            orderByComparator =
103                                    WorkflowComparatorFactoryUtil.getTaskDueDateComparator(
104                                            orderByAsc);
105                    }
106    
107                    return orderByComparator;
108            }
109    
110    }