001/** 002 * Copyright 2005-2016 The Kuali Foundation 003 * 004 * Licensed under the Educational Community License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.opensource.org/licenses/ecl2.php 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016package org.kuali.rice.kew.actionlist.web; 017 018import org.apache.commons.lang.StringUtils; 019import org.apache.struts.action.ActionForm; 020import org.apache.struts.action.ActionForward; 021import org.apache.struts.action.ActionMapping; 022import org.kuali.rice.core.api.util.ConcreteKeyValue; 023import org.kuali.rice.core.api.util.KeyValue; 024import org.kuali.rice.kew.actionlist.ActionListFilter; 025import org.kuali.rice.kew.actionlist.service.ActionListService; 026import org.kuali.rice.kew.api.KewApiServiceLocator; 027import org.kuali.rice.kew.api.preferences.Preferences; 028import org.kuali.rice.kew.api.preferences.PreferencesService; 029import org.kuali.rice.kew.service.KEWServiceLocator; 030import org.kuali.rice.kew.api.KewApiConstants; 031import org.kuali.rice.kim.api.group.Group; 032import org.kuali.rice.kim.api.services.KimApiServiceLocator; 033import org.kuali.rice.kns.web.struts.action.KualiAction; 034import org.kuali.rice.krad.UserSession; 035import org.kuali.rice.krad.util.GlobalVariables; 036 037import javax.servlet.http.HttpServletRequest; 038import javax.servlet.http.HttpServletResponse; 039import java.util.ArrayList; 040import java.util.Collections; 041import java.util.List; 042 043 044/** 045 * Action for Action List Filter page. 046 * 047 * @author Kuali Rice Team (rice.collab@kuali.org) 048 */ 049public class ActionListFilterAction extends KualiAction { 050 051 @Override 052 public ActionForward execute(ActionMapping mapping, ActionForm form, 053 HttpServletRequest request, HttpServletResponse response) 054 throws Exception { 055 request.setAttribute("Constants", getServlet().getServletContext().getAttribute("KewApiConstants")); 056 request.setAttribute("preferences", this.getUserSession().retrieveObject(KewApiConstants.PREFERENCES)); 057 initForm(request, form); 058 return super.execute(mapping, form, request, response); 059 } 060 061 /** 062 * This overridden method ... 063 * 064 * @see org.kuali.rice.krad.web.struts.action.KualiAction#getReturnLocation(javax.servlet.http.HttpServletRequest, org.apache.struts.action.ActionMapping) 065 */ 066 @Override 067 protected String getReturnLocation(HttpServletRequest request, 068 ActionMapping mapping) 069 { 070 String mappingPath = mapping.getPath(); 071 String basePath = getApplicationBaseUrl(); 072 return basePath + KewApiConstants.WEBAPP_DIRECTORY + mappingPath + ".do"; 073 } 074 075 public ActionForward start(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { 076 ActionListFilterForm filterForm = (ActionListFilterForm) form; 077 final UserSession uSession = getUserSession(); 078 final ActionListFilter filter = (ActionListFilter) uSession.retrieveObject(KewApiConstants.ACTION_LIST_FILTER_ATTR_NAME); 079 if (filter != null) { 080 if (filterForm.getDocTypeFullName() != null && ! "".equals(filterForm.getDocTypeFullName())) { 081 filter.setDocumentType(filterForm.getDocTypeFullName()); 082 uSession.addObject(KewApiConstants.ACTION_LIST_FILTER_ATTR_NAME, filter); 083 filterForm.setFilter(filter); 084 } else { 085 filterForm.setFilter(filter); 086 filterForm.setDocTypeFullName(filter.getDocumentType()); 087 } 088 } 089 return mapping.findForward("viewFilter"); 090 } 091 092 public ActionForward filter(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { 093 ActionListFilterForm filterForm = (ActionListFilterForm) form; 094 //validate the filter through the actionitem/actionlist service (I'm thinking actionlistservice) 095 final UserSession uSession = getUserSession(); 096 ActionListFilter alFilter = filterForm.getLoadedFilter(); 097 if (StringUtils.isNotBlank(alFilter.getDelegatorId()) && !KewApiConstants.DELEGATION_DEFAULT.equals(alFilter.getDelegatorId()) && 098 StringUtils.isNotBlank(alFilter.getPrimaryDelegateId()) && !KewApiConstants.PRIMARY_DELEGATION_DEFAULT.equals(alFilter.getPrimaryDelegateId())){ 099 // If the primary and secondary delegation drop-downs are both visible and are both set to non-default values, 100 // then reset the secondary delegation drop-down to its default value. 101 alFilter.setDelegatorId(KewApiConstants.DELEGATION_DEFAULT); 102 } 103 uSession.addObject(KewApiConstants.ACTION_LIST_FILTER_ATTR_NAME, alFilter); 104 if (GlobalVariables.getMessageMap().hasNoErrors()) { 105 request.getSession().setAttribute(KewApiConstants.REQUERY_ACTION_LIST_KEY, "true"); 106 return mapping.findForward("viewActionList"); 107 } 108 return mapping.findForward("viewFilter"); 109 } 110 111 public ActionForward clear(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { 112 ActionListFilterForm filterForm = (ActionListFilterForm) form; 113 filterForm.setFilter(new ActionListFilter()); 114 filterForm.setCreateDateFrom(""); 115 filterForm.setCreateDateTo(""); 116 filterForm.setLastAssignedDateFrom(""); 117 filterForm.setLastAssignedDateTo(""); 118 filterForm.setDocTypeFullName(""); 119 UserSession session = getUserSession(); 120 session.removeObject(KewApiConstants.ACTION_LIST_FILTER_ATTR_NAME); 121 return mapping.findForward("viewFilter"); 122 } 123 124 public void initForm(HttpServletRequest request, ActionForm form) throws Exception { 125 ActionListFilterForm filterForm = (ActionListFilterForm) form; 126 filterForm.setUserWorkgroups(getUserWorkgroupsDropDownList(getUserSession().getPrincipalId())); 127 PreferencesService prefSrv = KewApiServiceLocator.getPreferencesService(); 128 Preferences preferences = prefSrv.getPreferences(getUserSession().getPrincipalId()); 129 request.setAttribute("preferences", preferences); 130 ActionListService actionListSrv = KEWServiceLocator.getActionListService(); 131 request.setAttribute("delegators", ActionListUtil.getWebFriendlyRecipients(actionListSrv.findUserSecondaryDelegators(getUserSession().getPrincipalId()))); 132 request.setAttribute("primaryDelegates", ActionListUtil.getWebFriendlyRecipients(actionListSrv.findUserPrimaryDelegations(getUserSession().getPrincipalId()))); 133 if (! filterForm.getMethodToCall().equalsIgnoreCase("clear")) { 134 filterForm.validateDates(); 135 } 136 } 137 138 private List<? extends KeyValue> getUserWorkgroupsDropDownList(String principalId) { 139 List<String> userWorkgroups = 140 KimApiServiceLocator.getGroupService().getGroupIdsByPrincipalId(principalId); 141 142 //note that userWorkgroups is unmodifiable so we need to create a new list that we can sort 143 List<String> userGroupsToSort = new ArrayList<String>(userWorkgroups); 144 145 List<KeyValue> sortedUserWorkgroups = new ArrayList<KeyValue>(); 146 KeyValue keyValue = null; 147 keyValue = new ConcreteKeyValue(KewApiConstants.NO_FILTERING, KewApiConstants.NO_FILTERING); 148 sortedUserWorkgroups.add(keyValue); 149 if (userGroupsToSort != null && userGroupsToSort.size() > 0) { 150 Collections.sort(userGroupsToSort); 151 152 Group group; 153 for (String groupId : userGroupsToSort) 154 { 155 group = KimApiServiceLocator.getGroupService().getGroup(groupId); 156 keyValue = new ConcreteKeyValue(groupId, group.getName()); 157 sortedUserWorkgroups.add(keyValue); 158 } 159 } 160 return sortedUserWorkgroups; 161 } 162 163 private UserSession getUserSession(){ 164 return GlobalVariables.getUserSession(); 165 } 166 167} 168