/********************************************************************************** * $URL:https://source.sakaiproject.org/svn/osp/trunk/matrix/tool/src/java/org/theospi/portfolio/matrix/control/ListScaffoldingController.java $ * $Id:ListScaffoldingController.java 9134 2006-05-08 20:28:42Z chmaurer@iupui.edu $ *********************************************************************************** * * Copyright (c) 2006, 2007, 2008, 2009 The Sakai Foundation * * Licensed under the Educational Community License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.opensource.org/licenses/ECL-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * **********************************************************************************/ package org.theospi.portfolio.matrix.control; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Hashtable; import java.util.Iterator; import java.util.List; import java.util.Map; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.sakaiproject.component.cover.ServerConfigurationService; import org.sakaiproject.exception.IdUnusedException; import org.sakaiproject.metaobj.shared.mgt.IdManager; import org.sakaiproject.metaobj.shared.model.Agent; import org.sakaiproject.metaobj.shared.model.Id; import org.sakaiproject.metaobj.utils.mvc.intf.ListScrollIndexer; import org.sakaiproject.site.api.Site; import org.sakaiproject.site.api.SiteService; import org.sakaiproject.tool.cover.ToolManager; import org.sakaiproject.user.api.UserNotificationPreferencesRegistration; import org.springframework.validation.Errors; import org.springframework.web.servlet.ModelAndView; import org.theospi.portfolio.matrix.model.Scaffolding; public class ListScaffoldingController extends AbstractMatrixController { protected final Log logger = LogFactory.getLog(getClass()); private ListScrollIndexer listScrollIndexer; private SiteService siteService; private IdManager idManager; private UserNotificationPreferencesRegistration matrixPreferencesConfig; // Sort strings static final String SORT = "sort", ASCENDING = "ascending", TITLE = "title", OWNER = "owner", PUBLISHED = "published", MODIFIED = "modified", WORKSITE = "worksite"; private String previewAuthz = ServerConfigurationService.getString("osp.preview.permission", null ); public ModelAndView handleRequest(Object requestModel, Map request, Map session, Map application, Errors errors) { Hashtable<String, Object> model = new Hashtable<String, Object>(); Agent currentAgent = getAuthManager().getAgent(); String currentToolId = ToolManager.getCurrentPlacement().getId(); Id worksiteId = getWorksiteManager().getCurrentWorksiteId(); String sortBy = TITLE; boolean sortAscending = true; List scaffolding = null; if ( isOnWorkspaceTab() ) { scaffolding = getMatrixManager().findAvailableScaffolding(getUserWorksites(), currentAgent, false); } else { scaffolding = getMatrixManager().findAvailableScaffolding(worksiteId.getValue(), currentAgent, isMaintainer()); } if(request.get(SORT) != null){ sortBy = request.get(SORT).toString(); sortAscending = Boolean.parseBoolean(request.get(ASCENDING).toString()); } scaffolding = sortScaffolding(scaffolding, sortBy, sortAscending); List decoratedScaffolding = new ArrayList(); for (Iterator iterator = scaffolding.iterator(); iterator.hasNext();) { Scaffolding s = (Scaffolding) iterator.next(); decoratedScaffolding.add(new DecoratedScaffolding(s)); } // When selecting a matrix the user should start with a fresh user session.remove(ViewMatrixController.VIEW_USER); //used to determine to display pager model.put("scaffoldingListSize", scaffolding.size()); model.put("sortBy", sortBy); model.put("sortAscending", sortAscending); model.put("scaffolding", getListScrollIndexer().indexList(request, model, decoratedScaffolding)); model.put("worksite", getWorksiteManager().getSite(worksiteId.getValue())); model.put("tool", getWorksiteManager().getTool(currentToolId)); model.put("isMaintainer", isMaintainer()); model.put("osp_agent", currentAgent); model.put("myworkspace", isOnWorkspaceTab() ); model.put("useExperimentalMatrix", getMatrixManager().isUseExperimentalMatrix()); if(request.get("toolPermissionSaved") != null) model.put("toolPermissionSaved", request.get("toolPermissionSaved")); String typeKey = getMatrixPreferencesConfig().getType(); model.put("typeKey", typeKey); return new ModelAndView("success", model); } public ListScrollIndexer getListScrollIndexer() { return listScrollIndexer; } public void setListScrollIndexer(ListScrollIndexer listScrollIndexer) { this.listScrollIndexer = listScrollIndexer; } public SiteService getSiteService() { return siteService; } public void setSiteService(SiteService siteService) { this.siteService = siteService; } /** * @return the idManager */ public IdManager getIdManager() { return idManager; } /** * @param idManager the idManager to set */ public void setIdManager(IdManager idManager) { this.idManager = idManager; } public void setMatrixPreferencesConfig(UserNotificationPreferencesRegistration matrixPreferencesConfig) { this.matrixPreferencesConfig = matrixPreferencesConfig; } public UserNotificationPreferencesRegistration getMatrixPreferencesConfig() { return matrixPreferencesConfig; } /** * See if the current tab is the workspace tab. * @return true if we are currently on the "My Workspace" tab. */ private boolean isOnWorkspaceTab() { return siteService.isUserSite(ToolManager.getCurrentPlacement().getContext()); } /** ** Return list of worksite Ids for current user **/ private List getUserWorksites() { List siteList = siteService.getSites(SiteService.SelectionType.ACCESS, null, null, null, SiteService.SortType.TITLE_ASC, null); List siteStrIds = new ArrayList(siteList.size()); for (Iterator it = siteList.iterator(); it.hasNext();) { Site site = (Site) it.next(); String siteId = site.getId(); siteStrIds.add( idManager.getId(siteId) ); } return siteStrIds; } public List sortScaffolding(List<Scaffolding> list, final String sort, final boolean ascending) { Collections.sort(list, new Comparator<Scaffolding>() { public int compare(Scaffolding o1, Scaffolding o2) { Scaffolding s1 = null; Scaffolding s2 = null; if (ascending) { s1 = o1; s2 = o2; } else { s2 = o1; s1 = o2; } if (sort.equalsIgnoreCase(TITLE)) { return s1.getTitle().compareToIgnoreCase( s2.getTitle()); }else if (sort.equalsIgnoreCase(OWNER)) { return s1.getOwner().getDisplayName().compareToIgnoreCase( s2.getOwner().getDisplayName()); }else if (sort.equalsIgnoreCase(PUBLISHED)) { return Boolean.toString(s1.isPublished()).compareToIgnoreCase( Boolean.toString(s2.isPublished())); }else if (sort.equalsIgnoreCase(MODIFIED)) { if(s1.getModifiedDate() == null){ return -1; } if(s2.getModifiedDate() == null){ return 1; } return s1.getModifiedDate().compareTo( s2.getModifiedDate()); }else if (sort.equalsIgnoreCase(WORKSITE)) { return s1.getWorksiteName().compareToIgnoreCase( s2.getWorksiteName()); }else { return s1.getTitle().compareToIgnoreCase( s2.getTitle()); } } }); return list; } public class DecoratedScaffolding { private Scaffolding scaffolding; public DecoratedScaffolding(Scaffolding scaffolding){ this.scaffolding = scaffolding; } public Scaffolding getScaffolding(){ return scaffolding; } public String getScaffoldingToolUrl(){ String url; try { url = ServerConfigurationService.getPortalUrl() + "/directtool/" + getSiteService().getSite(scaffolding.getWorksiteId().getValue()).getToolForCommonId("osp.matrix").getId() + "/listScaffolding.osp"; return url; } catch (IdUnusedException e) { e.printStackTrace(); } return ""; } } }