001: /**********************************************************************************
002: * $URL:https://source.sakaiproject.org/svn/osp/trunk/matrix/tool/src/java/org/theospi/portfolio/matrix/control/ListReviewerItemController.java $
003: * $Id:ListReviewerItemController.java 9134 2006-05-08 20:28:42Z chmaurer@iupui.edu $
004: ***********************************************************************************
005: *
006: * Copyright (c) 2005, 2006 The Sakai Foundation.
007: *
008: * Licensed under the Educational Community License, Version 1.0 (the "License");
009: * you may not use this file except in compliance with the License.
010: * You may obtain a copy of the License at
011: *
012: * http://www.opensource.org/licenses/ecl1.php
013: *
014: * Unless required by applicable law or agreed to in writing, software
015: * distributed under the License is distributed on an "AS IS" BASIS,
016: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
017: * See the License for the specific language governing permissions and
018: * limitations under the License.
019: *
020: **********************************************************************************/package org.theospi.portfolio.matrix.control;
021:
022: import java.util.ArrayList;
023: import java.util.Collections;
024: import java.util.HashMap;
025: import java.util.Iterator;
026: import java.util.List;
027: import java.util.Map;
028:
029: import org.apache.commons.logging.Log;
030: import org.apache.commons.logging.LogFactory;
031: import org.sakaiproject.entity.api.ResourceProperties;
032: import org.sakaiproject.exception.IdUnusedException;
033: import org.sakaiproject.exception.IdUsedException;
034: import org.sakaiproject.exception.InUseException;
035: import org.sakaiproject.exception.PermissionException;
036: import org.sakaiproject.metaobj.security.AuthenticationManager;
037: import org.sakaiproject.metaobj.shared.mgt.AgentManager;
038: import org.sakaiproject.metaobj.shared.mgt.IdManager;
039: import org.sakaiproject.metaobj.utils.mvc.intf.CustomCommandController;
040: import org.sakaiproject.metaobj.utils.mvc.intf.FormController;
041: import org.sakaiproject.metaobj.utils.mvc.intf.ListScrollIndexer;
042: import org.sakaiproject.metaobj.utils.mvc.intf.LoadObjectController;
043: import org.sakaiproject.metaobj.worksite.mgt.WorksiteManager;
044: import org.sakaiproject.site.cover.SiteService;
045: import org.sakaiproject.tool.api.ToolManager;
046: import org.sakaiproject.user.api.Preferences;
047: import org.sakaiproject.user.api.PreferencesEdit;
048: import org.sakaiproject.user.cover.PreferencesService;
049: import org.springframework.validation.Errors;
050: import org.springframework.web.servlet.ModelAndView;
051: import org.theospi.portfolio.matrix.MatrixManager;
052: import org.theospi.portfolio.matrix.WizardPageHelper;
053: import org.theospi.portfolio.matrix.model.EvaluationContentComparator;
054: import org.theospi.portfolio.security.AuthorizationFacade;
055: import org.theospi.portfolio.shared.model.EvaluationContentWrapper;
056:
057: /**
058: * @author chmaurer
059: */
060: public class ListEvaluationItemController implements FormController,
061: LoadObjectController, CustomCommandController {
062:
063: protected final Log logger = LogFactory.getLog(getClass());
064: private MatrixManager matrixManager = null;
065: private IdManager idManager = null;
066: private AuthenticationManager authManager = null;
067: private AuthorizationFacade authzManager = null;
068: private WorksiteManager worksiteManager = null;
069: private AgentManager agentManager = null;
070: private ListScrollIndexer listScrollIndexer;
071: private ToolManager toolManager;
072:
073: private final static String EVAL_PLACEMENT_PREF = "org.theospi.portfolio.evaluation.placement.";
074: private final static String CURRENT_SITE_EVALS = "org.theospi.portfolio.evaluation.currentSite";
075: private final static String ALL_EVALS = "org.theospi.portfolio.evaluation.allSites";
076: private final static String EVAL_SITE_FETCH = "org.theospi.portfolio.evaluation.siteEvals";
077:
078: /* (non-Javadoc)
079: * @see org.theospi.utils.mvc.intf.LoadObjectController#fillBackingObject(java.lang.Object, java.util.Map, java.util.Map, java.util.Map)
080: */
081: public Object fillBackingObject(Object incomingModel, Map request,
082: Map session, Map application) throws Exception {
083:
084: List list = new ArrayList();
085:
086: String evalType = (String) request.get("evalTypeKey");
087: if (evalType != null)
088: setUserEvalProperty(evalType);
089:
090: if (ALL_EVALS.equals(getUserEvalProperty()))
091: list = matrixManager.getEvaluatableItems(authManager
092: .getAgent());
093: else
094: list = matrixManager
095: .getEvaluatableItems(authManager.getAgent(),
096: worksiteManager.getCurrentWorksiteId());
097:
098: list = purgeNullOwners(list);
099:
100: String sortColumn = (String) request.get("sortByColumn");
101: if (sortColumn == null)
102: sortColumn = EvaluationContentComparator.SORT_TITLE;
103: String strAsc = (String) request.get("direction");
104: boolean asc = true;
105: if (strAsc != null)
106: asc = strAsc.equalsIgnoreCase("asc");
107:
108: Collections.sort(list, new EvaluationContentComparator(
109: sortColumn, asc));
110: list = getListScrollIndexer().indexList(request, request, list);
111:
112: return list; /* goes into 'reviewerItems' */
113: }
114:
115: protected List purgeNullOwners(List list) {
116: List parsedList = new ArrayList(list.size());
117:
118: for (Iterator i = list.iterator(); i.hasNext();) {
119: EvaluationContentWrapper ecw = (EvaluationContentWrapper) i
120: .next();
121: if (ecw.getOwner() != null)
122: parsedList.add(ecw);
123: }
124:
125: return parsedList;
126:
127: }
128:
129: /* (non-Javadoc)
130: * @see org.theospi.utils.mvc.intf.Controller#formBackingObject(java.util.Map, java.util.Map, java.util.Map)
131: */
132: public Object formBackingObject(Map request, Map session,
133: Map application) {
134: return new ArrayList();
135: }
136:
137: /* (non-Javadoc)
138: * @see org.theospi.utils.mvc.intf.Controller#handleRequest(java.lang.Object, java.util.Map, java.util.Map, java.util.Map, org.springframework.validation.Errors)
139: */
140: public ModelAndView handleRequest(Object requestModel, Map request,
141: Map session, Map application, Errors errors) {
142:
143: String action = (String) request.get("action");
144: String view = "success";
145:
146: Map model = new HashMap();
147:
148: if ("open".equals(action)) {
149: String id = (String) request.get("id");
150: List list = (List) requestModel;
151:
152: if (id != null) {
153: for (Iterator i = list.iterator(); i.hasNext();) {
154: EvaluationContentWrapper wrapper = (EvaluationContentWrapper) i
155: .next();
156:
157: if (id.equals(wrapper.getId().getValue() + "_"
158: + wrapper.getOwner().getId())) {
159: view = wrapper.getUrl();
160: if (view == null)
161: break;
162: for (Iterator params = wrapper.getUrlParams()
163: .iterator(); params.hasNext();) {
164: EvaluationContentWrapper.ParamBean param = (EvaluationContentWrapper.ParamBean) params
165: .next();
166:
167: model.put(param.getKey(), param.getValue());
168: }
169:
170: //Clear out the hier page if there is one & clear the set of seq pages
171: session.remove(WizardPageHelper.WIZARD_PAGE);
172: session
173: .remove(WizardPageHelper.SEQUENTIAL_WIZARD_PAGES);
174:
175: session.put("is_eval_page_id", wrapper.getId()
176: .getValue());
177: break;
178: }
179: }
180: }
181: }
182:
183: return new ModelAndView(view, model);
184: }
185:
186: public Map referenceData(Map request, Object command, Errors errors) {
187: Map model = new HashMap();
188: String worksiteId = getWorksiteManager().getCurrentWorksiteId()
189: .getValue();
190: model.put("worksite", getWorksiteManager().getSite(worksiteId));
191: model.put("tool", getToolManager().getCurrentPlacement());
192: model.put("isMaintainer", isMaintainer());
193: model.put("currentUser", authManager.getAgent());
194:
195: String asc = (String) request.get("direction");
196: //Boolean asc = new Boolean(true);
197: if (asc == null)
198: asc = "asc";
199:
200: model.put("direction", asc);
201:
202: String sortColumn = (String) request.get("sortByColumn");
203: if (sortColumn == null)
204: sortColumn = EvaluationContentComparator.SORT_TITLE;
205: model.put("sortByColumn", sortColumn);
206: model.put("evalType", getUserEvalProperty());
207: model.put("currentSiteEvalsKey", CURRENT_SITE_EVALS);
208: model.put("allEvalsKey", ALL_EVALS);
209:
210: boolean userSite = SiteService.isUserSite(getWorksiteManager()
211: .getCurrentWorksiteId().getValue());
212: model.put("isUserSite", userSite);
213:
214: return model;
215: }
216:
217: private String getUserEvalProperty() {
218: String prop = CURRENT_SITE_EVALS;
219:
220: //If the site is a my workapace site, default to all sites
221: //Site site = getWorksiteManager().getSite(getWorksiteManager().getCurrentWorksiteId().getValue());
222: boolean userSite = SiteService.isUserSite(getWorksiteManager()
223: .getCurrentWorksiteId().getValue());
224: if (userSite)
225: prop = ALL_EVALS;
226:
227: try {
228: Preferences userPreferences = PreferencesService
229: .getPreferences(authManager.getAgent().getId()
230: .getValue());
231: ResourceProperties evalPrefs = userPreferences
232: .getProperties(EVAL_PLACEMENT_PREF
233: + getToolManager().getCurrentPlacement()
234: .getId());
235: String tmpProp = evalPrefs.getProperty(EVAL_SITE_FETCH);
236: if (tmpProp != null)
237: prop = tmpProp;
238: } catch (Exception e) {
239: logger
240: .debug("Couldn't get user prefs for the eval tool. Using defaults.");
241: }
242: return prop;
243: }
244:
245: private void setUserEvalProperty(String evalType) {
246: PreferencesEdit prefEdit = null;
247: try {
248: prefEdit = (PreferencesEdit) PreferencesService
249: .add(authManager.getAgent().getId().getValue());
250: } catch (PermissionException e) {
251: logger
252: .warn(
253: "Problem saving preferences for site evals in setUserEvalProperty().",
254: e);
255: } catch (IdUsedException e) {
256: // Preferences already exist, just edit
257: try {
258: prefEdit = (PreferencesEdit) PreferencesService
259: .edit(authManager.getAgent().getId().getValue());
260: } catch (PermissionException e1) {
261: logger
262: .warn(
263: "Problem saving preferences for site evals in setUserEvalProperty().",
264: e1);
265: } catch (InUseException e1) {
266: logger
267: .warn(
268: "Problem saving preferences for site evals in setUserEvalProperty().",
269: e1);
270: } catch (IdUnusedException e1) {
271: // This should be safe to ignore since we got here because it existed
272: logger
273: .warn(
274: "Problem saving preferences for site evals in setUserEvalProperty().",
275: e1);
276: }
277: }
278: if (prefEdit != null) {
279: ResourceProperties propEdit = prefEdit
280: .getPropertiesEdit(EVAL_PLACEMENT_PREF
281: + getToolManager().getCurrentPlacement()
282: .getId());
283: if (evalType.equals(CURRENT_SITE_EVALS))
284: propEdit.removeProperty(EVAL_SITE_FETCH);
285: else
286: propEdit.addProperty(EVAL_SITE_FETCH, evalType);
287: try {
288: PreferencesService.commit(prefEdit);
289: } catch (Exception e) {
290: logger
291: .warn(
292: "Problem saving preferences for site evals in setUserEvalProperty().",
293: e);
294: }
295: }
296: }
297:
298: private Boolean isMaintainer() {
299: return new Boolean(getAuthzManager().isAuthorized(
300: WorksiteManager.WORKSITE_MAINTAIN,
301: getIdManager().getId(
302: getToolManager().getCurrentPlacement()
303: .getContext())));
304: }
305:
306: /**
307: * @return
308: */
309: public MatrixManager getMatrixManager() {
310: return matrixManager;
311: }
312:
313: /**
314: * @param manager
315: */
316: public void setMatrixManager(MatrixManager manager) {
317: matrixManager = manager;
318: }
319:
320: /**
321: * @return
322: */
323: public IdManager getIdManager() {
324: return idManager;
325: }
326:
327: /**
328: * @param manager
329: */
330: public void setIdManager(IdManager manager) {
331: idManager = manager;
332: }
333:
334: /**
335: * @return
336: */
337: public AuthenticationManager getAuthManager() {
338: return authManager;
339: }
340:
341: /**
342: * @param manager
343: */
344: public void setAuthManager(AuthenticationManager manager) {
345: authManager = manager;
346: }
347:
348: /**
349: * @return Returns the agentManager.
350: */
351:
352: public AgentManager getAgentManager() {
353: return agentManager;
354: }
355:
356: /**
357: * @param agentManager The agentManager to set.
358: */
359: public void setAgentManager(AgentManager agentManager) {
360: this .agentManager = agentManager;
361: }
362:
363: /**
364: * @return Returns the authzManager.
365: */
366: public AuthorizationFacade getAuthzManager() {
367: return authzManager;
368: }
369:
370: /**
371: * @param authzManager The authzManager to set.
372: */
373: public void setAuthzManager(AuthorizationFacade authzManager) {
374: this .authzManager = authzManager;
375: }
376:
377: /**
378: * @return Returns the worksiteManager.
379: */
380: public WorksiteManager getWorksiteManager() {
381: return worksiteManager;
382: }
383:
384: /**
385: * @param worksiteManager The worksiteManager to set.
386: */
387: public void setWorksiteManager(WorksiteManager worksiteManager) {
388: this .worksiteManager = worksiteManager;
389: }
390:
391: public ListScrollIndexer getListScrollIndexer() {
392: return listScrollIndexer;
393: }
394:
395: public void setListScrollIndexer(ListScrollIndexer listScrollIndexer) {
396: this .listScrollIndexer = listScrollIndexer;
397: }
398:
399: public ToolManager getToolManager() {
400: return toolManager;
401: }
402:
403: public void setToolManager(ToolManager toolManager) {
404: this.toolManager = toolManager;
405: }
406:
407: }
|