001: /*
002: * Copyright 2005-2006 The Kuali Foundation.
003: *
004: *
005: * Licensed under the Educational Community License, Version 1.0 (the "License");
006: * you may not use this file except in compliance with the License.
007: * You may obtain a copy of the License at
008: *
009: * http://www.opensource.org/licenses/ecl1.php
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: */
017: package edu.iu.uis.eden.actionlist.web;
018:
019: import java.util.ArrayList;
020: import java.util.Collection;
021: import java.util.Collections;
022: import java.util.Comparator;
023: import java.util.Iterator;
024: import java.util.List;
025:
026: import javax.servlet.http.HttpServletRequest;
027: import javax.servlet.http.HttpServletResponse;
028:
029: import org.apache.commons.collections.comparators.ComparableComparator;
030: import org.apache.struts.action.ActionForm;
031: import org.apache.struts.action.ActionForward;
032: import org.apache.struts.action.ActionMapping;
033: import org.apache.struts.action.ActionMessages;
034:
035: import edu.iu.uis.eden.EdenConstants;
036: import edu.iu.uis.eden.KEWServiceLocator;
037: import edu.iu.uis.eden.actionlist.ActionListFilter;
038: import edu.iu.uis.eden.actionlist.ActionListService;
039: import edu.iu.uis.eden.exception.EdenUserNotFoundException;
040: import edu.iu.uis.eden.preferences.Preferences;
041: import edu.iu.uis.eden.preferences.PreferencesService;
042: import edu.iu.uis.eden.user.Recipient;
043: import edu.iu.uis.eden.user.WorkflowUser;
044: import edu.iu.uis.eden.web.KeyValue;
045: import edu.iu.uis.eden.web.WorkflowAction;
046: import edu.iu.uis.eden.web.session.UserSession;
047: import edu.iu.uis.eden.workgroup.Workgroup;
048:
049: /**
050: * Action for Action List Filter page.
051: *
052: * @author rkirkend
053: * @author temay
054: */
055: public class ActionListFilterAction extends WorkflowAction {
056:
057: public ActionForward start(ActionMapping mapping, ActionForm form,
058: HttpServletRequest request, HttpServletResponse response)
059: throws Exception {
060: ActionListFilterForm filterForm = (ActionListFilterForm) form;
061: if (getUserSession(request).getActionListFilter() != null) {
062: ActionListFilter actionListFilter = getUserSession(request)
063: .getActionListFilter();
064: if (filterForm.getDocTypeFullName() != null
065: && !"".equals(filterForm.getDocTypeFullName())) {
066: actionListFilter.setDocumentType(filterForm
067: .getDocTypeFullName());
068: getUserSession(request).setActionListFilter(
069: actionListFilter);
070: filterForm.setFilter(actionListFilter);
071: } else {
072: filterForm.setFilter(actionListFilter);
073: filterForm.setDocTypeFullName(actionListFilter
074: .getDocumentType());
075: }
076: }
077: return mapping.findForward("viewFilter");
078: }
079:
080: public ActionForward filter(ActionMapping mapping, ActionForm form,
081: HttpServletRequest request, HttpServletResponse response)
082: throws Exception {
083: ActionListFilterForm filterForm = (ActionListFilterForm) form;
084: //validate the filter through the actionitem/actionlist service (I'm thinking actionlistservice)
085: UserSession session = getUserSession(request);
086: session.setActionListFilter(filterForm.getLoadedFilter());
087: KEWServiceLocator.getUserOptionsService()
088: .saveRefreshUserOption(session.getWorkflowUser());
089: return mapping.findForward("viewActionList");
090: }
091:
092: public ActionForward clear(ActionMapping mapping, ActionForm form,
093: HttpServletRequest request, HttpServletResponse response)
094: throws Exception {
095: ActionListFilterForm filterForm = (ActionListFilterForm) form;
096: filterForm.setFilter(new ActionListFilter());
097: filterForm.setCreateDateFrom("");
098: filterForm.setCreateDateTo("");
099: filterForm.setLastAssignedDateFrom("");
100: filterForm.setLastAssignedDateTo("");
101: filterForm.setDocTypeFullName("");
102: UserSession session = getUserSession(request);
103: session.setActionListFilter(null);
104: KEWServiceLocator.getUserOptionsService()
105: .saveRefreshUserOption(session.getWorkflowUser());
106: return mapping.findForward("viewFilter");
107: }
108:
109: public ActionMessages establishRequiredState(
110: HttpServletRequest request, ActionForm form)
111: throws Exception {
112: ActionListFilterForm filterForm = (ActionListFilterForm) form;
113: filterForm
114: .setUserWorkgroups(getUserWorkgroupsDropDownList(getUserSession(
115: request).getWorkflowUser()));
116: PreferencesService prefSrv = (PreferencesService) KEWServiceLocator
117: .getPreferencesService();
118: Preferences preferences = prefSrv
119: .getPreferences(getUserSession(request)
120: .getWorkflowUser());
121: request.setAttribute("preferences", preferences);
122: ActionListService actionListSrv = (ActionListService) KEWServiceLocator
123: .getActionListService();
124: Collection delegators = actionListSrv.findUserDelegators(
125: getUserSession(request).getWorkflowUser(),
126: EdenConstants.DELEGATION_SECONDARY);
127: request.setAttribute("delegators",
128: getWebFriendlyRecipients(delegators));
129: if (!filterForm.getMethodToCall().equalsIgnoreCase("clear")) {
130: filterForm.validateDates();
131: }
132: return null;
133: }
134:
135: private List getUserWorkgroupsDropDownList(WorkflowUser user)
136: throws EdenUserNotFoundException {
137: List userWorkgroups = KEWServiceLocator.getWorkgroupService()
138: .getUsersGroups(user);
139: List sortedUserWorkgroups = new ArrayList();
140: KeyValue keyValue = null;
141: keyValue = new KeyValue(EdenConstants.NO_FILTERING,
142: EdenConstants.NO_FILTERING);
143: sortedUserWorkgroups.add(keyValue);
144: if (userWorkgroups != null && userWorkgroups.size() > 0) {
145: Collections.sort(userWorkgroups, new Comparator() {
146: Comparator comp = new ComparableComparator();
147:
148: public int compare(Object o1, Object o2) {
149: return comp.compare(((Workgroup) o1)
150: .getGroupNameId().getNameId().trim()
151: .toLowerCase(), ((Workgroup) o2)
152: .getGroupNameId().getNameId().trim()
153: .toLowerCase());
154: }
155: });
156:
157: for (Iterator iter = userWorkgroups.iterator(); iter
158: .hasNext();) {
159: Workgroup workgroup = (Workgroup) iter.next();
160: keyValue = new KeyValue(workgroup.getWorkflowGroupId()
161: .getGroupId().toString(), workgroup
162: .getGroupNameId().getNameId());
163: sortedUserWorkgroups.add(keyValue);
164: }
165: }
166: return sortedUserWorkgroups;
167: }
168:
169: private List getWebFriendlyRecipients(Collection recipients) {
170: Collection newRecipients = new ArrayList(recipients.size());
171: for (Iterator iterator = recipients.iterator(); iterator
172: .hasNext();) {
173: newRecipients.add(new WebFriendlyRecipient(
174: (Recipient) iterator.next()));
175: }
176: List recipientList = new ArrayList(newRecipients);
177: Collections.sort(recipientList, new Comparator() {
178: Comparator comp = new ComparableComparator();
179:
180: public int compare(Object o1, Object o2) {
181: return comp.compare(((WebFriendlyRecipient) o1)
182: .getDisplayName().trim().toLowerCase(),
183: ((WebFriendlyRecipient) o2).getDisplayName()
184: .trim().toLowerCase());
185: }
186: });
187: return recipientList;
188: }
189:
190: public class WebFriendlyRecipient {
191: private String displayName;
192: private String recipientId;
193:
194: public WebFriendlyRecipient(Recipient recipient) {
195: if (recipient instanceof Workgroup) {
196: recipientId = ((Workgroup) recipient)
197: .getWorkflowGroupId().getGroupId().toString();
198: displayName = recipient.getDisplayName();
199: } else if (recipient instanceof WorkflowUser) {
200: recipientId = ((WorkflowUser) recipient)
201: .getWorkflowUserId().getWorkflowId();
202: displayName = ((WorkflowUser) recipient)
203: .getTransposedName();
204: }
205: }
206:
207: public String getRecipientId() {
208: return recipientId;
209: }
210:
211: public String getDisplayName() {
212: return displayName;
213: }
214: }
215:
216: }
|