libreccm-legacy/ccm-cms/src/com/arsdigita/cms/ui/contentcenter/TasksPanel.java

744 lines
29 KiB
Java
Executable File

/*
* Copyright (C) 2001-2004 Red Hat 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.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
package com.arsdigita.cms.ui.contentcenter;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.Iterator;
import javax.servlet.ServletException;
import org.apache.log4j.Logger;
import com.arsdigita.bebop.ActionLink;
import com.arsdigita.bebop.BoxPanel;
import com.arsdigita.bebop.ControlLink;
import com.arsdigita.bebop.Image;
import com.arsdigita.bebop.Label;
import com.arsdigita.bebop.Page;
import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.PaginationModelBuilder;
import com.arsdigita.bebop.Paginator;
import com.arsdigita.bebop.RequestLocal;
import com.arsdigita.bebop.SimpleComponent;
import com.arsdigita.bebop.SimpleContainer;
import com.arsdigita.bebop.event.ActionEvent;
import com.arsdigita.bebop.event.ActionListener;
import com.arsdigita.bebop.event.ChangeEvent;
import com.arsdigita.bebop.event.ChangeListener;
import com.arsdigita.bebop.event.PrintEvent;
import com.arsdigita.bebop.event.PrintListener;
import com.arsdigita.bebop.parameters.StringParameter;
import com.arsdigita.cms.CMS;
import com.arsdigita.cms.ContentItem;
import com.arsdigita.cms.ContentSection;
import com.arsdigita.cms.ContentType;
import com.arsdigita.cms.Folder;
import com.arsdigita.cms.ui.CMSContainer;
import com.arsdigita.cms.ui.ContentItemPage;
import com.arsdigita.cms.ui.authoring.CreationSelector;
import com.arsdigita.cms.ui.folder.FolderSelectionModel;
import com.arsdigita.cms.util.GlobalizationUtil;
import com.arsdigita.cms.workflow.CMSEngine;
import com.arsdigita.cms.workflow.CMSTask;
import com.arsdigita.cms.workflow.CMSTaskType;
import com.arsdigita.domain.DataObjectNotFoundException;
import com.arsdigita.domain.DomainObjectFactory;
import com.arsdigita.kernel.Kernel;
import com.arsdigita.kernel.Party;
import com.arsdigita.kernel.User;
import com.arsdigita.kernel.permissions.PermissionService;
import com.arsdigita.kernel.permissions.PrivilegeDescriptor;
import com.arsdigita.kernel.ui.ACSObjectSelectionModel;
import com.arsdigita.persistence.CompoundFilter;
import com.arsdigita.persistence.DataQuery;
import com.arsdigita.persistence.Filter;
import com.arsdigita.persistence.FilterFactory;
import com.arsdigita.persistence.OID;
import com.arsdigita.persistence.SessionManager;
import com.arsdigita.util.Assert;
import com.arsdigita.util.UncheckedWrapperException;
import com.arsdigita.web.RedirectSignal;
import com.arsdigita.web.Web;
import com.arsdigita.workflow.simple.Engine;
import com.arsdigita.workflow.simple.Workflow;
import com.arsdigita.xml.Element;
/**
*
* @version $Id: TasksPanel.java 1280 2006-07-27 09:12:09Z cgyg9330 $
*/
public class TasksPanel extends CMSContainer {
private static Logger s_log =
Logger.getLogger(TasksPanel.class);
// The default number of rows to show
private static final int DEFAULT_MAX_ROWS = 15;
// Number of tasks to show
private final int m_maxRows;
private TaskList m_taskList;
// private ActionLink m_viewAllLink;
// private ActionLink m_viewShortLink;
private Paginator m_paginator;
private ActionLink m_viewLockLink, m_viewUnlockLink, m_viewAllLockLink;
private Label m_viewLockLabel, m_viewUnlockLabel, m_viewAllLockLabel;
private StringParameter m_sortDirectionParam;
private StringParameter m_sortTypeParam;
private StringParameter m_lockFilterParam;
// control link variable
private static final String TASK_PANEL_CLASS = "taskPanel";
private static final String TASK_ACTION = "taskAction";
private static final String SORT_DOWN = "sortActionUp";
private static final String SORT_UP = "sortActionDown";
private static final String LOCK_FILTER_TYPE = "lockFilterType";
private static final String SORT_TYPE = "sortType";
private static final String SORT_DIRECTION = "sortDirection";
private static final String SORT_ACTION = "action";
private static final String SORT_DATE = "date";
private static final String SORT_STATUS = "status";
private static final String SORT_TITLE = "title";
private static final String SORT_USER = "user";
private static final String SORT_WORKFLOW = "workflow";
// IMAGES
public static final String UP_ARROW_IMAGE =
"/themes/heirfloom/images/gray-triangle-up.gif";
public static final String DOWN_ARROW_IMAGE =
"/themes/heirfloom/images/gray-triangle-down.gif";
// CREATION PANE CONSTANTS
private Label m_selectorLabel;
private CreationSelector m_selector;
private ContentSectionContainer m_sections;
private ACSObjectSelectionModel m_sectionSel;
private ACSObjectSelectionModel m_typeSel;
private RootFolderSelectionModel m_folderSel;
private BoxPanel m_creationPane;
/**
* Constructs a new task panel that shows no more than 15
* enabled tasks by default.
*
* @param typeModel
* @param sectionModel
**/
public TasksPanel(ACSObjectSelectionModel typeModel,
ACSObjectSelectionModel sectionModel) {
this(DEFAULT_MAX_ROWS, typeModel, sectionModel);
}
/**
* Constructs a new task panel that shows no more than maxRows
* enabled tasks by default.
*
* @param maxRows the maximum number of rows to show by default
* @param typeModel
* @param sectionModel
*
* @pre maxRows != null
**/
public TasksPanel(int maxRows, ACSObjectSelectionModel typeModel,
ACSObjectSelectionModel sectionModel) {
super();
// Set class attribute
setClassAttr(TASK_PANEL_CLASS);
m_maxRows = maxRows;
m_typeSel = typeModel;
m_sectionSel = sectionModel;
m_sortDirectionParam = new StringParameter(SORT_DIRECTION);
m_sortTypeParam = new StringParameter(SORT_TYPE);
m_lockFilterParam = new StringParameter(LOCK_FILTER_TYPE);
addComponents();
}
/**
* Adds the components to this tasks panel
**/
// protected void addComponents() {
private void addComponents() {
m_creationPane = new BoxPanel(BoxPanel.VERTICAL);
// A label that says "Create $content_type in $section"
m_selectorLabel = new Label(new PrintListener() {
@Override
public void prepare(PrintEvent e) {
PageState s = e.getPageState();
Label t = (Label) e.getTarget();
ContentType type = (ContentType) m_typeSel.getSelectedObject(s);
ContentSection sec =
(ContentSection) m_sectionSel.getSelectedObject(s);
StringBuilder buf = new StringBuilder(
GlobalizationUtil
.globalize("cms.ui.create").localize() + " ");
buf.append(type.getLabel());
buf.append(" in ");
buf.append(sec.getName());
t.setLabel(buf.toString());
t.setFontWeight(Label.BOLD);
t.setClassAttr("creationLabel");
}
});
m_selectorLabel.setClassAttr("creationLabel");
m_creationPane.add(m_selectorLabel);
m_folderSel = new RootFolderSelectionModel(m_sectionSel);
m_selector = new CreationSelector(m_typeSel, m_folderSel);
m_creationPane.add(m_selector);
m_creationPane.setClassAttr("itemCreationPane");
add(m_creationPane);
// The section list UIx
m_sections = new ContentSectionContainer(m_typeSel, m_sectionSel);
add(m_sections);
// When a new type is selected, show the creation UI.
// When the selection is cleared, return to section list
m_typeSel.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
PageState s = e.getPageState();
boolean isSelected = m_typeSel.isSelected(s);
m_sections.setVisible(s, !isSelected);
m_creationPane.setVisible(s, isSelected);
}
});
m_viewLockLink = new ActionLink(new Label(GlobalizationUtil
.globalize("cms.ui.workflow.task.view_locked")));
m_viewLockLink.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
PageState ps = e.getPageState();
ps.setValue(m_lockFilterParam, "lock");
}
});
m_viewUnlockLink = new ActionLink(new Label(GlobalizationUtil
.globalize("cms.ui.workflow.task.view_unlocked")));
m_viewUnlockLink.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
PageState ps = e.getPageState();
ps.setValue(m_lockFilterParam, "unlock");
}
});
m_viewAllLockLink = new ActionLink(new Label(GlobalizationUtil
.globalize("cms.ui.workflow.task.view_all")));
m_viewAllLockLink.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
PageState ps = e.getPageState();
ps.setValue(m_lockFilterParam, "all");
}
});
m_viewLockLabel = new Label(GlobalizationUtil
.globalize("cms.ui.workflow.task.view_locked"));
m_viewLockLabel.setFontWeight(Label.BOLD);
m_viewUnlockLabel = new Label(GlobalizationUtil
.globalize("cms.ui.workflow.task.view_unlocked"));
m_viewUnlockLabel.setFontWeight(Label.BOLD);
m_viewAllLockLabel = new Label(GlobalizationUtil
.globalize("cms.ui.workflow.task.view_all"));
m_viewAllLockLabel.setFontWeight(Label.BOLD);
add(new Label("<br />", false));
add(m_viewLockLink);
add(m_viewLockLabel);
add(new Label("&nbsp;", false));
add(m_viewUnlockLink);
add(m_viewUnlockLabel);
add(new Label("&nbsp;", false));
add(m_viewAllLockLink);
add(m_viewAllLockLabel);
add(new Label("<br />", false));
add(new Label("<br />", false));
add(getTasksList());
add(getPaginator());
// m_actionLabel = new Label(GlobalizationUtil.globalize("cms.ui.action"));
// m_actionLabel.setClassAttr("action");
}
/**
*
* @param p
*/
@Override
public void register(Page p) {
super.register(p);
p.setVisibleDefault(m_creationPane, false);
p.addComponentStateParam(this, m_folderSel.getStateParameter());
p.addGlobalStateParam(m_lockFilterParam);
p.addGlobalStateParam(m_sortTypeParam);
p.addGlobalStateParam(m_sortDirectionParam);
p.setVisibleDefault(m_viewLockLabel, false);
p.setVisibleDefault(m_viewUnlockLabel, false);
p.setVisibleDefault(m_viewAllLockLink, false);
p.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
final PageState state = e.getPageState();
String lockFilterType = getLockFilterType(state);
if (lockFilterType.equals("lock")) {
m_viewLockLabel.setVisible(state, true);
m_viewLockLink.setVisible(state, false);
m_viewUnlockLabel.setVisible(state, false);
m_viewUnlockLink.setVisible(state, true);
m_viewAllLockLabel.setVisible(state, false);
m_viewAllLockLink.setVisible(state, true);
} else if (lockFilterType.equals("unlock")) {
m_viewLockLabel.setVisible(state, false);
m_viewLockLink.setVisible(state, true);
m_viewUnlockLabel.setVisible(state, true);
m_viewUnlockLink.setVisible(state, false);
m_viewAllLockLabel.setVisible(state, false);
m_viewAllLockLink.setVisible(state, true);
} else {
m_viewLockLabel.setVisible(state, false);
m_viewLockLink.setVisible(state, true);
m_viewUnlockLabel.setVisible(state, false);
m_viewUnlockLink.setVisible(state, true);
m_viewAllLockLabel.setVisible(state, true);
m_viewAllLockLink.setVisible(state, false);
}
}
});
}
public void reset(PageState state) {
m_typeSel.clearSelection(state);
m_sectionSel.clearSelection(state);
}
protected Paginator getPaginator() {
if (m_paginator == null) {
m_paginator = new Paginator(new TasksPaginationModelBuilder(),
m_maxRows);
}
return m_paginator;
}
/**
* Returns the bebop List component to display the tasks
**/
private TaskList getTasksList() {
if (m_taskList == null) {
m_taskList = new TaskList(true);
}
return m_taskList;
}
/**
* Returns the number of enabled tasks for the specified user.
*
* @param state
* @return
**/
protected int numberTasksForUser(PageState state) {
return m_taskList.size(state);
}
protected String getSortType(PageState state) {
String sortType = (String) state.getValue(m_sortTypeParam);
if (sortType == null) {
sortType = SORT_DATE;
}
return sortType;
}
protected String getSortDirection(PageState state) {
String sortDirection = (String) state.getValue(m_sortDirectionParam);
if (sortDirection == null) {
sortDirection = SORT_UP;
}
return sortDirection;
}
protected String getLockFilterType(PageState state) {
String lockFilterType = (String) state.getValue(m_lockFilterParam);
if (lockFilterType == null || lockFilterType.equals("")) {
lockFilterType = "lock";
}
return lockFilterType;
}
/*
* Adds filters to the task query
*/
protected void addQueryFilters(DataQuery query, Party party, PageState state) {
query.setParameter("userId", party.getID());
FilterFactory ff = query.getFilterFactory();
// TODO: remove this hard coding of "Author", "Edit", and "Deploy"
// TODO: remove this hard coding of "Author", "Edit", and "Deploy"
CompoundFilter authorFilter = ff.and();
//cg query changed to refer to task type id
authorFilter.addFilter(ff.equals("taskType", CMSTaskType.AUTHOR));
authorFilter.addFilter(getTaskFilter(CMSTaskType.retrieve(CMSTaskType.AUTHOR),
party, ff));
CompoundFilter approveFilter = ff.and();
approveFilter.addFilter(ff.equals("taskType", CMSTaskType.EDIT));
approveFilter.addFilter(getTaskFilter(CMSTaskType.retrieve(CMSTaskType.EDIT),
party, ff));
CompoundFilter deployFilter = ff.and();
deployFilter.addFilter(ff.equals("taskType", CMSTaskType.DEPLOY));
deployFilter.addFilter(getTaskFilter(CMSTaskType.retrieve(CMSTaskType.DEPLOY),
party, ff));
CompoundFilter permissionFilter = ff.or();
permissionFilter.addFilter(authorFilter);
permissionFilter.addFilter(approveFilter);
permissionFilter.addFilter(deployFilter);
query.addFilter(permissionFilter);
String lockFilterType = getLockFilterType(state);
if (lockFilterType.equals("lock")) {
query.addEqualsFilter("isLocked", "t");
query.addEqualsFilter("status", "1");
} else if (lockFilterType.equals("unlock")) {
query.addEqualsFilter("isLocked", "f");
} // else show all
}
private static class RootFolderSelectionModel
extends FolderSelectionModel {
ACSObjectSelectionModel m_sectionSel;
public RootFolderSelectionModel(ACSObjectSelectionModel sectionSel) {
super("f");
m_sectionSel = sectionSel;
}
@Override
protected BigDecimal getRootFolderID(PageState s) {
ContentSection sec = (ContentSection) m_sectionSel.getSelectedObject(s);
Assert.exists(sec);
User user = Web.getWebContext().getUser();
if (user != null) {
Folder folder = Folder.getUserHomeFolder(user, sec);
if (folder != null) {
return folder.getID();
}
}
return sec.getRootFolder().getID();
}
}
/**
*
*/
private class TasksPaginationModelBuilder implements PaginationModelBuilder {
@Override
public int getTotalSize(Paginator paginator,
PageState state) {
return numberTasksForUser(state);
}
@Override
public boolean isVisible(PageState state) {
return numberTasksForUser(state) > m_maxRows;
}
}
private class TaskList extends SimpleComponent {
private final static String QUERY_NAME =
"com.arsdigita.cms.workflow.getEnabledUserTasks";
private boolean m_paginate = false;
public TaskList(boolean paginate) {
m_paginate = paginate;
}
private DataQuery makeQuery(PageState state) {
User user = (User) Kernel.getContext().getParty();
DataQuery query = SessionManager.getSession()
.retrieveQuery(QUERY_NAME);
addQueryFilters(query, user, state);
return query;
}
public int size(PageState ps) {
return ((Long) m_taskCount.get(ps)).intValue();
}
private RequestLocal m_taskCount = new RequestLocal() {
@Override
public Object initialValue(PageState state) {
DataQuery query = makeQuery(state);
return new Long(query.size());
}
};
@Override
public void generateXML(PageState state,
Element parent) {
Element content = parent.newChildElement("cms:tasksPanel", CMS.CMS_XML_NS);
exportAttributes(content);
DataQuery query = makeQuery(state);
String lockFilterType = getLockFilterType(state);
content.addAttribute("lockFilterType", lockFilterType);
if (m_paginate) {
query.setRange(new Integer(m_paginator.getFirst(state)),
new Integer(m_paginator.getLast(state) + 1));
}
String sortKey = getSortType(state);
String sortDirection = getSortDirection(state);
String sortPostfix = " asc";
if (sortDirection.equals(SORT_DOWN)) {
sortPostfix = " desc";
}
if (sortKey.equals(SORT_TITLE)) {
query.setOrder("lower(pageTitle) " + sortPostfix + ", lower(status) asc, dueDate desc");
} else if (sortKey.equals(SORT_DATE)) {
query.setOrder("dueDate " + sortPostfix + ", lower(status) asc, lower(pageTitle) asc");
} else if (sortKey.equals(SORT_USER)) {
query.setOrder("lockingUserID " + sortPostfix + ", lower(status) asc, dueDate desc "
+ ", lower(pageTitle) asc");
} else if (sortKey.equals(SORT_STATUS)) {
query.setOrder("lower(status) " + sortPostfix + ", dueDate desc " + ", lower(pageTitle) asc");
} else if (sortKey.equals(SORT_ACTION)) {
query.setOrder("taskType " + sortPostfix + ", lower(status) asc, dueDate desc "
+ ", lower(pageTitle) asc");
} else if (sortKey.equals(SORT_WORKFLOW)) {
query.setOrder("processLabel " + sortPostfix + ", lower(status) asc, dueDate desc "
+ ", lower(pageTitle) asc");
}
HashMap sections = new HashMap();
while (query.next()) {
BigDecimal sectionID = (BigDecimal) query.get("sectionID");
String sectionPath = (String) sections.get(sectionID);
if (sectionPath == null) {
try {
ContentSection section = (ContentSection) DomainObjectFactory
.newInstance(new OID(ContentSection.BASE_DATA_OBJECT_TYPE,
sectionID));
sectionPath = section.getPath();
} catch (DataObjectNotFoundException ex) {
throw new UncheckedWrapperException("cannot find content section", ex);
}
sections.put(sectionID, sectionPath);
}
Element task = content.newChildElement("cms:tasksPanelTask",
CMS.CMS_XML_NS);
BigDecimal itemID = (BigDecimal) query.get("itemID");
String taskType = (String) query.get("taskType");
task.addAttribute("taskID", query.get("taskID").toString());
task.addAttribute("processID", query.get("processID").toString());
task.addAttribute("taskLabel", (String) query.get("taskLabel"));
task.addAttribute("taskDescription", (String) query.get("taskDescription"));
task.addAttribute("processLabel", (String) query.get("processLabel"));
String isLocked = (String) query.get("isLocked");
task.addAttribute("isLocked", isLocked);
if (query.get("dueDate") != null) {
java.util.Date d = (java.util.Date) query.get("dueDate");
SimpleDateFormat df = new SimpleDateFormat("EEE, MMM d, yyyy");
task.addAttribute("dueDate", df.format(d));
}
task.addAttribute("itemID", itemID.toString());
task.addAttribute("sectionID", query.get("sectionID").toString());
task.addAttribute("sectionPath", sectionPath);
task.addAttribute("pageName", (String) query.get("pageName"));
task.addAttribute("pageTitle", (String) query.get("pageTitle"));
BigDecimal lockingUserID = (BigDecimal) query.get("lockingUserID");
if (lockingUserID != null) {
task.addAttribute("lockingUserID", lockingUserID.toString());
if (!"f".equals(isLocked)) {
User lockingUser = User.retrieve(lockingUserID);
if (lockingUser != null) {
task.addAttribute("assignee", lockingUser.getDisplayName());
}
}
}
task.addAttribute("taskType", taskType);
task.addAttribute("taskTypeClass", (String) query.get("taskTypeClass"));
task.addAttribute("status", query.get("status").toString());
// control event for locking a task
try {
state.setControlEvent(this, TASK_ACTION, itemID.toString());
task.addAttribute("actionURL", state.stateAsURL());
state.clearControlEvent();
} catch (java.io.IOException ex) {
s_log.warn("Error: " + ex.getMessage());
}
if ("Deploy".equals(taskType)) {
task.addAttribute("editTabNumber",
String.valueOf(ContentItemPage.PUBLISHING_TAB));
} else {
task.addAttribute("editTabNumber",
String.valueOf(ContentItemPage.AUTHORING_TAB));
}
}
// m_actionLabel.generateXML(state, content);
String[][] sortableHeaders = {{SORT_TITLE, "cms.ui.workflow.task.item_title"},
{SORT_ACTION, "cms.ui.action"},
{SORT_DATE, "cms.ui.tasks_due_date"},
{SORT_STATUS, "cms.ui.tasks_status_no_colon"},
{SORT_USER, "cms.ui.workflow.task.locking_user"},
{SORT_WORKFLOW, "cms.ui.workflow"}};
for (int i = 0; i < sortableHeaders.length; i++) {
String header = sortableHeaders[i][0];
String labelKey = sortableHeaders[i][1];
if (sortDirection.equals(SORT_UP) && header.equals(sortKey)) {
state.setControlEvent(this, SORT_DOWN, header);
} else {
state.setControlEvent(this, SORT_UP, header);
}
SimpleContainer container = new SimpleContainer();
container.add(new Label(GlobalizationUtil.globalize(labelKey)));
if (header.equals(sortKey)) {
String imageURLStub = null;
if (SORT_UP.equals(sortDirection)) {
imageURLStub = UP_ARROW_IMAGE;
} else {
imageURLStub = DOWN_ARROW_IMAGE;
}
Image image = new Image(imageURLStub);
image.setBorder("0");
container.add(image);
}
ControlLink link = new ControlLink(container);
link.setHint(GlobalizationUtil
.globalize("cms.ui.contentcenter.task_panel_control"));
link.setClassAttr(header);
link.generateXML(state, content);
state.clearControlEvent();
}
}
@Override
public void respond(PageState state) throws ServletException {
String key = state.getControlEventName();
String value = state.getControlEventValue();
if (TASK_ACTION.equals(key)) {
BigDecimal itemID = new BigDecimal(value);
try {
ContentItem item = new ContentItem(itemID);
Workflow wf = Workflow.getObjectWorkflow(item);
int tabNumber = ContentItemPage.AUTHORING_TAB;
String sectionPath = item.getContentSection().getPath();
if (wf != null) {
User user = Web.getWebContext().getUser();
Engine engine = Engine.getInstance(CMSEngine.CMS_ENGINE_TYPE);
Iterator i = engine.getEnabledTasks(user, wf.getID()).iterator();
if (i.hasNext()) {
CMSTask task = (CMSTask) i.next();
Integer taskType = task.getTaskType().getID();
if (taskType.equals(CMSTaskType.DEPLOY)) {
tabNumber = ContentItemPage.PUBLISHING_TAB;
} else {
// see if item is locked; if not, lock
if (!task.isLocked()) {
task.lock(user);
}
}
}
}
String redirectURL = Web.getConfig().getDispatcherServletPath()
+ sectionPath + "/admin/item.jsp?item_id="
+ itemID + "&set_tab=" + tabNumber;
throw new RedirectSignal(redirectURL, true);
} catch (DataObjectNotFoundException ex) {
throw new ServletException("Unknown content ID" + itemID);
}
} else if (SORT_UP.equals(key) || SORT_DOWN.equals(key)) {
state.setValue(m_sortTypeParam, value);
if (SORT_DOWN.equals(key)) {
state.setValue(m_sortDirectionParam, SORT_DOWN);
} else {
state.setValue(m_sortDirectionParam, SORT_UP);
}
} else {
throw new ServletException("Unknown control event: " + key);
}
}
}
private static Filter getTaskFilter(CMSTaskType taskType, Party party, FilterFactory factory) {
PrivilegeDescriptor privilege;
String queryName;
String queryType;
OID partyOID = party.getOID();
privilege = taskType.getPrivilege();
return PermissionService.getFilterQuery(factory, "itemID", privilege, partyOID);
}
}