/**********************************************************************************
* $URL:https://source.sakaiproject.org/svn/osp/trunk/presentation/tool/src/java/org/theospi/portfolio/presentation/control/AbstractPresentationController.java $
* $Id:AbstractPresentationController.java 9134 2006-05-08 20:28:42Z chmaurer@iupui.edu $
***********************************************************************************
*
* Copyright (c) 2005, 2006, 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.theospi.portfolio.presentation.control;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.sakaiproject.authz.api.Member;
import org.sakaiproject.metaobj.security.AuthenticationManager;
import org.sakaiproject.metaobj.shared.mgt.AgentManager;
import org.sakaiproject.metaobj.shared.mgt.HomeFactory;
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.Controller;
import org.sakaiproject.metaobj.worksite.mgt.WorksiteManager;
import org.sakaiproject.site.api.Group;
import org.sakaiproject.site.api.Site;
import org.sakaiproject.site.api.SiteService;
import org.sakaiproject.tool.cover.ToolManager;
import org.theospi.portfolio.presentation.PresentationManager;
import org.theospi.portfolio.presentation.model.PresentationTemplate;
import org.theospi.portfolio.security.AuthorizationFacade;
import org.theospi.portfolio.shared.model.Node;
import org.theospi.utils.mvc.impl.servlet.AbstractFormController;
abstract public class AbstractPresentationController extends AbstractFormController implements Controller {
private AgentManager agentManager;
private PresentationManager presentationManager;
private AuthenticationManager authManager;
private HomeFactory homeFactory;
protected final Log logger = LogFactory.getLog(getClass());
//private FileArtifactFinder fileArtifactFinder;
private IdManager idManager;
private Collection mimeTypes;
private AuthorizationFacade authzManager;
private WorksiteManager worksiteManager;
private SiteService siteService;
private AddTemplateController addTemplateController;
protected GroupComparator groupComparator = new GroupComparator();
protected PresentationTemplate getActiveTemplate(Map session){
//AddTemplateController addTemplateController = (AddTemplateController)ComponentManager.getInstance().get("addTemplateController");
return (PresentationTemplate) session.get(getAddTemplateController().getFormAttributeName());
}
/**
*
* @return true is current agent is a maintainer in the current site
*/
protected Boolean isMaintainer(){
return Boolean.valueOf(getAuthzManager().isAuthorized(WorksiteManager.WORKSITE_MAINTAIN,
getIdManager().getId(ToolManager.getCurrentPlacement().getContext())));
}
protected Node loadNode(Id nodeId) {
return getPresentationManager().getNode(nodeId);
}
/** Return list of all groups associated with the given site
**/
protected List<GroupWrapper> getGroupList( String siteId, Map request ) {
List<GroupWrapper> groupsList = new ArrayList<GroupWrapper>();
Site site;
try {
site = getSiteService().getSite(siteId);
}
catch ( Exception e ) {
logger.warn(e.toString());
return groupsList;
}
Collection<Group> groups = site.getGroups();
String selectedGroup = (String)request.get("groups");
for (Group group : groups) {
boolean checked = false;
if ( selectedGroup == null )
selectedGroup = group.getId();
if ( selectedGroup.equals(group.getId()) )
checked = true;
groupsList.add(new GroupWrapper( group, checked ));
}
Collections.sort(groupsList, groupComparator);
return groupsList;
}
/** Return list of site users (not yet shared) users, optionally filtered by specified group
**/
protected List<Agent> getFilteredMembersList( String siteId, List<GroupWrapper> groupList ) {
Site site;
Set<Member> members = new HashSet<Member>();
List<Agent> memberList = new ArrayList<Agent>();
try {
site = getSiteService().getSite(siteId);
}
catch (Exception e) {
logger.warn(e.toString());
return memberList;
}
// Find members of selected groups
if ( groupList != null ) {
for ( GroupWrapper group : groupList ) {
if ( group.getChecked() )
members.addAll( site.getGroup( group.getId()).getMembers() );
}
}
// If no groups are available or selected
if ( members.size() == 0 )
members = site.getMembers();
for (Member member : members) {
String userId = member.getUserId();
// Check for a null agent since the site.getMembers() will return member records for deleted users
Agent agent = getAgentManager().getAgent(userId);
if (agent != null && agent.getId() != null)
memberList.add(agent);
}
return memberList;
}
/**
** Check if presentation's worksite has groups defined and return true/false
**/
protected Boolean getHasGroups( String siteId ) {
try {
Site site = getSiteService().getSite(siteId);
return new Boolean( site.hasGroups() );
}
catch (Exception e) {
logger.warn(e.toString());
}
return new Boolean(false);
}
public WorksiteManager getWorksiteManager() {
return worksiteManager;
}
public void setWorksiteManager(WorksiteManager worksiteManager) {
this.worksiteManager = worksiteManager;
}
public PresentationManager getPresentationManager() {
return presentationManager;
}
protected Collection getHomes() {
return getHomeFactory().getHomes().entrySet();
}
public void setPresentationManager(PresentationManager presentationManager) {
this.presentationManager = presentationManager;
}
public AuthenticationManager getAuthManager() {
return authManager;
}
public void setAuthManager(AuthenticationManager authManager) {
this.authManager = authManager;
}
public AgentManager getAgentManager() {
return agentManager;
}
public void setAgentManager(AgentManager agentManager) {
this.agentManager = agentManager;
}
public HomeFactory getHomeFactory() {
return homeFactory;
}
public void setHomeFactory(HomeFactory homeFactory) {
this.homeFactory = homeFactory;
}
//public FileArtifactFinder getFileArtifactFinder() {
// return fileArtifactFinder;
//}
//public void setFileArtifactFinder(FileArtifactFinder fileFinder) {
// this.fileArtifactFinder = fileFinder;
//}
public IdManager getIdManager() {
return idManager;
}
public void setIdManager(IdManager idManager) {
this.idManager = idManager;
}
public Collection getMimeTypes() {
return mimeTypes;
}
public void setMimeTypes(Collection mimeTypes) {
this.mimeTypes = mimeTypes;
}
public AuthorizationFacade getAuthzManager() {
return authzManager;
}
public void setAuthzManager(AuthorizationFacade authzManager) {
this.authzManager = authzManager;
}
public AddTemplateController getAddTemplateController() {
return addTemplateController;
}
public void setAddTemplateController(AddTemplateController addTemplateController) {
this.addTemplateController = addTemplateController;
}
public SiteService getSiteService() {
return siteService;
}
public void setSiteService( SiteService siteService) {
this.siteService = siteService;
}
/** Comparator for sorting GroupWrapper objects by title
**/
public class GroupComparator implements Comparator<GroupWrapper> {
public int compare(GroupWrapper o1, GroupWrapper o2) {
return o1.getTitle().compareTo( o2.getTitle() );
}
}
/** Wrap Group class to support getChecked() method
**/
public class GroupWrapper {
private Group group;
private boolean checked;
public GroupWrapper( Group group, boolean checked ) {
this.group = group;
this.checked = checked;
}
public void setChecked( boolean checked ) {
this.checked = checked;
}
public boolean getChecked() {
return checked;
}
public String getId() {
return group.getId();
}
public String getTitle() {
return group.getTitle();
}
}
}