/********************************************************************************** * $URL: https://source.sakaiproject.org/svn/metaobj/trunk/metaobj-util/tool-lib/src/java/org/sakaiproject/metaobj/shared/control/AbstractStructuredArtifactDefinitionController.java $ * $Id: AbstractStructuredArtifactDefinitionController.java 105079 2012-02-24 23:08:11Z ottenhoff@longsight.com $ *********************************************************************************** * * Copyright (c) 2004, 2005, 2006, 2007, 2008 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.sakaiproject.metaobj.shared.control; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.HashMap; 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.entity.api.EntityManager; import org.sakaiproject.metaobj.security.AuthenticationManager; import org.sakaiproject.metaobj.security.AuthorizationFacade; import org.sakaiproject.metaobj.security.AuthorizationFailedException; import org.sakaiproject.metaobj.shared.mgt.HomeFactory; import org.sakaiproject.metaobj.shared.mgt.IdManager; import org.sakaiproject.metaobj.shared.mgt.StructuredArtifactDefinitionManager; import org.sakaiproject.metaobj.shared.model.StructuredArtifactDefinitionBean; import org.sakaiproject.metaobj.utils.mvc.impl.servlet.AbstractFormController; import org.sakaiproject.metaobj.utils.mvc.intf.ListScroll; import org.sakaiproject.metaobj.utils.mvc.intf.ListScrollIndexer; import org.sakaiproject.metaobj.worksite.mgt.WorksiteManager; import org.sakaiproject.site.api.Site; import org.sakaiproject.site.api.ToolConfiguration; import org.sakaiproject.tool.cover.ToolManager; import org.sakaiproject.util.ResourceLoader; import org.springframework.web.servlet.ModelAndView; abstract public class AbstractStructuredArtifactDefinitionController extends AbstractFormController { protected final Log logger = LogFactory.getLog(getClass()); private HomeFactory homeFactory; private AuthenticationManager authManager; private StructuredArtifactDefinitionManager structuredArtifactDefinitionManager; private IdManager idManager; private AuthorizationFacade authzManager = null; private WorksiteManager worksiteManager = null; private EntityManager entityManager; private String toolId; private ListScrollIndexer listScrollIndexer; private ResourceLoader rl = new ResourceLoader("messages"); public void checkPermission(String function) throws AuthorizationFailedException { if (getStructuredArtifactDefinitionManager().isGlobal()) { getAuthzManager().checkPermission(function, getIdManager().getId(StructuredArtifactDefinitionManager.GLOBAL_SAD_QUALIFIER)); } else { getAuthzManager().checkPermission(function, getIdManager().getId(ToolManager.getCurrentPlacement().getId())); } } protected boolean isAllowed(String function) { boolean isAllowed = false; if (getStructuredArtifactDefinitionManager().isGlobal()) { isAllowed = getAuthzManager().isAuthorized(function, getIdManager().getId(StructuredArtifactDefinitionManager.GLOBAL_SAD_QUALIFIER)); } else { isAllowed = getAuthzManager().isAuthorized(function, getIdManager().getId(ToolManager.getCurrentPlacement().getId())); } return isAllowed; } protected Boolean isMaintainer() { return new Boolean(getAuthzManager().isAuthorized(WorksiteManager.WORKSITE_MAINTAIN, getIdManager().getId(ToolManager.getCurrentPlacement().getContext()))); } protected ModelAndView prepareListView(Map request, String recentId) { Map model = new HashMap(); String worksiteId = getWorksiteManager().getCurrentWorksiteId().getValue(); model.put("isMaintainer", isMaintainer()); model.put("worksite", getWorksiteManager().getSite(worksiteId)); model.put("sites", getUserSites()); ToolConfiguration tool = getWorksiteManager().getTool(ToolManager.getCurrentPlacement().getId()); model.put("tool", tool); model.put("currentAgent", getAuthManager().getAgent()); boolean global = getStructuredArtifactDefinitionManager().isGlobal(); model.put("isGlobal", new Boolean(global)); if (global) { model.put("authZqualifier", getIdManager().getId(StructuredArtifactDefinitionManager.GLOBAL_SAD_QUALIFIER)); } else { if (tool != null) { model.put("authZqualifier", getIdManager().getId(tool.getId())); } else { model.put("authZqualifier", getIdManager().getId(ToolManager.getCurrentPlacement().getId())); } } List types; if (getStructuredArtifactDefinitionManager().isGlobal()) { types = getStructuredArtifactDefinitionManager().findGlobalHomes(); } else { types = getStructuredArtifactDefinitionManager().findAvailableHomes( getWorksiteManager().getCurrentWorksiteId(), getAuthManager().getAgent().getId().getValue(), true, false); } Collections.sort(types); List typesList = new ArrayList(types); if (recentId != null) { request.put(ListScroll.ENSURE_VISIBLE_TAG, "" + getTypeIndex(typesList, recentId)); model.put("newFormId", recentId); } types = getListScrollIndexer().indexList(request, model, typesList); model.put("types", types); Boolean showUsage = false; if (tool != null) { showUsage = Boolean.parseBoolean((String)tool.getConfig().getProperty("display.usage")); } model.put("toolShowUsage", showUsage); return new ModelAndView("success", model); } protected int getTypeIndex(List typesList, String recentId) { for (int i = 0; i < typesList.size(); i++) { StructuredArtifactDefinitionBean home = (StructuredArtifactDefinitionBean) typesList.get(i); if (home.getType().getId().getValue().equals(recentId)) { return i; } } return 0; } /** * @return collection of site ids user belongs to, as Strings */ protected Map getUserSites() { Collection sites = getWorksiteManager().getUserSites(); Map userSites = new HashMap(); for (Iterator i = sites.iterator(); i.hasNext();) { Site site = (Site) i.next(); userSites.put(site.getId(), site); } return userSites; } /** * @return Returns the authManager. */ public AuthenticationManager getAuthManager() { return authManager; } /** * @param authManager The authManager to set. */ public void setAuthManager(AuthenticationManager authManager) { this.authManager = authManager; } /** * @return Returns the homeFactory. */ public HomeFactory getHomeFactory() { return homeFactory; } /** * @param homeFactory The homeFactory to set. */ public void setHomeFactory(HomeFactory homeFactory) { this.homeFactory = homeFactory; } public StructuredArtifactDefinitionManager getStructuredArtifactDefinitionManager() { return structuredArtifactDefinitionManager; } public void setStructuredArtifactDefinitionManager(StructuredArtifactDefinitionManager structuredArtifactDefinitionManager) { this.structuredArtifactDefinitionManager = structuredArtifactDefinitionManager; } /** * @return Returns the idManager. */ public IdManager getIdManager() { return idManager; } /** * @param idManager The idManager to set. */ public void setIdManager(IdManager idManager) { this.idManager = idManager; } public AuthorizationFacade getAuthzManager() { return authzManager; } public void setAuthzManager(AuthorizationFacade authzManager) { this.authzManager = authzManager; } public WorksiteManager getWorksiteManager() { return worksiteManager; } public void setWorksiteManager(WorksiteManager worksiteManager) { this.worksiteManager = worksiteManager; } public EntityManager getEntityManager() { return entityManager; } public void setEntityManager(EntityManager entityManager) { this.entityManager = entityManager; } public void setToolId(String toolId) { this.toolId = toolId; } public String getToolId() { return toolId; } public ListScrollIndexer getListScrollIndexer() { return listScrollIndexer; } public void setListScrollIndexer(ListScrollIndexer listScrollIndexer) { this.listScrollIndexer = listScrollIndexer; } protected String getMessage(String key) { return rl.getString(key); } }