/********************************************************************************** * $URL: https://source.sakaiproject.org/svn/msgcntr/trunk/messageforums-component-impl/src/java/org/sakaiproject/component/app/messageforums/PermissionLevelManagerImpl.java $ * $Id: PermissionLevelManagerImpl.java 9227 2006-05-15 15:02:42Z cwen@iupui.edu $ *********************************************************************************** * * Copyright (c) 2003, 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.component.app.messageforums; import java.sql.SQLException; import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.ArrayList; import java.util.Set; import java.util.Map.Entry; import org.hibernate.Hibernate; import org.hibernate.HibernateException; import org.hibernate.Query; import org.hibernate.Session; import org.apache.commons.beanutils.PropertyUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.sakaiproject.api.app.messageforums.AreaManager; import org.sakaiproject.api.app.messageforums.DBMembershipItem; import org.sakaiproject.api.app.messageforums.Topic; import org.sakaiproject.api.app.messageforums.MessageForumsTypeManager; import org.sakaiproject.api.app.messageforums.PermissionLevel; import org.sakaiproject.api.app.messageforums.PermissionLevelManager; import org.sakaiproject.api.app.messageforums.PermissionsMask; import org.sakaiproject.id.api.IdManager; import org.sakaiproject.tool.api.SessionManager; import org.sakaiproject.component.app.messageforums.dao.hibernate.DBMembershipItemImpl; import org.sakaiproject.component.app.messageforums.dao.hibernate.PermissionLevelImpl; import org.sakaiproject.event.api.EventTrackingService; import org.springframework.orm.hibernate3.HibernateCallback; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; public class PermissionLevelManagerImpl extends HibernateDaoSupport implements PermissionLevelManager { private static final Log LOG = LogFactory.getLog(PermissionLevelManagerImpl.class); private EventTrackingService eventTrackingService; private SessionManager sessionManager; private IdManager idManager; private MessageForumsTypeManager typeManager; private AreaManager areaManager; private Map<String, PermissionLevel> defaultPermissionsMap; private static final String QUERY_BY_TYPE_UUID = "findPermissionLevelByTypeUuid"; private static final String QUERY_ORDERED_LEVEL_NAMES = "findOrderedPermissionLevelNames"; private static final String QUERY_BY_AREA_ALL_FORUMS_MEMBERSHIP = "findAllMembershipItemsForForumsForSite"; private static final String QUERY_GET_ALL_TOPICS = "findAllTopicsForSite"; private static final String QUERY_BY_TOPIC_IDS_ALL_TOPIC_MEMBERSHIP = "findAllMembershipItemsForTopicsForSite"; private static final String QUERY_BY_AREA_ID_ALL_MEMBERSHIP = "findAllMembershipItemsForSite"; private Boolean autoDdl; public static final int MAX_NUMBER_OF_SQL_PARAMETERS_IN_LIST = 999; public void init(){ LOG.info("init()"); try { // add the default permission level and type data, if necessary if (autoDdl != null && autoDdl) { loadDefaultTypeAndPermissionLevelData(); } // for performance, load the default permission level information now // to make it reusable initializePermissionLevelData(); } catch ( Exception ex ) { LOG.error("PermissionsLevelManager - a problem occurred loading default permission level data ",ex); } } public PermissionLevel getPermissionLevelByName(String name){ if (LOG.isDebugEnabled()){ LOG.debug("getPermissionLevelByName executing(" + name + ")"); } if (PERMISSION_LEVEL_NAME_OWNER.equals(name)){ return getDefaultOwnerPermissionLevel(); } else if (PERMISSION_LEVEL_NAME_AUTHOR.equals(name)){ return getDefaultAuthorPermissionLevel(); } else if (PERMISSION_LEVEL_NAME_NONEDITING_AUTHOR.equals(name)){ return getDefaultNoneditingAuthorPermissionLevel(); } else if (PERMISSION_LEVEL_NAME_CONTRIBUTOR.equals(name)){ return getDefaultContributorPermissionLevel(); } else if (PERMISSION_LEVEL_NAME_REVIEWER.equals(name)){ return getDefaultReviewerPermissionLevel(); } else if (PERMISSION_LEVEL_NAME_NONE.equals(name)){ return getDefaultNonePermissionLevel(); } else{ return null; } } public List getOrderedPermissionLevelNames(){ if (LOG.isDebugEnabled()){ LOG.debug("getOrderedPermissionLevelNames executing"); } List<String> levelNames = new ArrayList<String>(); List<PermissionLevel> levels = getDefaultPermissionLevels(); if (levels != null && !levels.isEmpty()) { for (PermissionLevel level : levels) { levelNames.add(level.getName()); } Collections.sort(levelNames); } return levelNames; } public String getPermissionLevelType(PermissionLevel level){ if (LOG.isDebugEnabled()){ LOG.debug("getPermissionLevelType executing(" + level + ")"); } if (level == null) { throw new IllegalArgumentException("Null Argument"); } PermissionLevel ownerLevel = getDefaultOwnerPermissionLevel(); if (level.equals(ownerLevel)){ return ownerLevel.getTypeUuid(); } PermissionLevel authorLevel = getDefaultAuthorPermissionLevel(); if (level.equals(authorLevel)){ return authorLevel.getTypeUuid(); } PermissionLevel noneditingAuthorLevel = getDefaultNoneditingAuthorPermissionLevel(); if (level.equals(noneditingAuthorLevel)){ return noneditingAuthorLevel.getTypeUuid(); } PermissionLevel reviewerLevel = getDefaultReviewerPermissionLevel(); if (level.equals(reviewerLevel)){ return reviewerLevel.getTypeUuid(); } PermissionLevel contributorLevel = getDefaultContributorPermissionLevel(); if (level.equals(contributorLevel)){ return contributorLevel.getTypeUuid(); } PermissionLevel noneLevel = getDefaultNonePermissionLevel(); if (level.equals(noneLevel)){ return noneLevel.getTypeUuid(); } return null; } /** * Populates the permission level data for the case when the default permission levels * are being created, not the custom levels * @param name * @param typeUuid * @param mask * @param uuid * @return */ private PermissionLevel createDefaultPermissionLevel(String name, String typeUuid, PermissionsMask mask) { if (LOG.isDebugEnabled()){ LOG.debug("createDefaultPermissionLevel executing(" + name + "," + typeUuid + "," + mask + ")"); } if (name == null || typeUuid == null || mask == null) { throw new IllegalArgumentException("Null Argument"); } PermissionLevel newPermissionLevel = new PermissionLevelImpl(); Date now = new Date(); newPermissionLevel.setName(name); newPermissionLevel.setUuid(idManager.createUuid()); newPermissionLevel.setCreated(now); newPermissionLevel.setCreatedBy("admin"); newPermissionLevel.setModified(now); newPermissionLevel.setModifiedBy("admin"); newPermissionLevel.setTypeUuid(typeUuid); // set permission properties using reflection for (Iterator<Entry<String, Boolean>> i = mask.entrySet().iterator(); i.hasNext();){ Entry<String, Boolean> entry = i.next(); String key = entry.getKey(); Boolean value = entry.getValue(); try{ PropertyUtils.setSimpleProperty(newPermissionLevel, key, value); } catch (Exception e){ throw new RuntimeException(e); } } return newPermissionLevel; } public PermissionLevel createPermissionLevel(String name, String typeUuid, PermissionsMask mask){ if (LOG.isDebugEnabled()){ LOG.debug("createPermissionLevel executing(" + name + "," + typeUuid + "," + mask + ")"); } if (name == null || typeUuid == null || mask == null) { throw new IllegalArgumentException("Null Argument"); } PermissionLevel newPermissionLevel = new PermissionLevelImpl(); Date now = new Date(); String currentUser = getCurrentUser(); newPermissionLevel.setName(name); newPermissionLevel.setUuid(idManager.createUuid()); newPermissionLevel.setCreated(now); newPermissionLevel.setCreatedBy(currentUser); newPermissionLevel.setModified(now); newPermissionLevel.setModifiedBy(currentUser); newPermissionLevel.setTypeUuid(typeUuid); // set permission properties using reflection for (Iterator<Entry<String, Boolean>> i = mask.entrySet().iterator(); i.hasNext();){ Entry<String, Boolean> entry = i.next(); String key = entry.getKey(); Boolean value = entry.getValue(); try{ PropertyUtils.setSimpleProperty(newPermissionLevel, key, value); } catch (Exception e){ throw new RuntimeException(e); } } return newPermissionLevel; } public DBMembershipItem createDBMembershipItem(String name, String permissionLevelName, Integer type){ if (LOG.isDebugEnabled()){ LOG.debug("createDBMembershipItem executing(" + name + "," + type + ")"); } if (name == null || type == null) { throw new IllegalArgumentException("Null Argument"); } DBMembershipItem newDBMembershipItem = new DBMembershipItemImpl(); Date now = new Date(); String currentUser = getCurrentUser(); newDBMembershipItem.setName(name); newDBMembershipItem.setPermissionLevelName(permissionLevelName); newDBMembershipItem.setUuid(idManager.createUuid()); newDBMembershipItem.setCreated(now); newDBMembershipItem.setCreatedBy(currentUser); newDBMembershipItem.setModified(now); newDBMembershipItem.setModifiedBy(currentUser); newDBMembershipItem.setType(type); return newDBMembershipItem; } public void saveDBMembershipItem(DBMembershipItem item){ getHibernateTemplate().saveOrUpdate(item); } public void savePermissionLevel(PermissionLevel level) { getHibernateTemplate().saveOrUpdate(level); } public PermissionLevel getDefaultOwnerPermissionLevel(){ if (LOG.isDebugEnabled()){ LOG.debug("getDefaultOwnerPermissionLevel executing"); } String typeUuid = typeManager.getOwnerLevelType(); if (typeUuid == null) { throw new IllegalStateException("type cannot be null"); } PermissionLevel level = getDefaultPermissionLevel(typeUuid); if(level == null) { LOG.info("No permission level data exists for the Owner level in the MFR_PERMISSION_LEVEL_T table. " + "Default Owner permissions will be used. If you want to customize this permission level, use " + "mfr.sql as a reference to add this level to the table."); // return the default owner permission PermissionsMask mask = getDefaultOwnerPermissionsMask(); level = createPermissionLevel(PermissionLevelManager.PERMISSION_LEVEL_NAME_OWNER, typeUuid, mask); } return level; } public PermissionLevel getDefaultAuthorPermissionLevel(){ if (LOG.isDebugEnabled()){ LOG.debug("getDefaultAuthorPermissionLevel executing"); } String typeUuid = typeManager.getAuthorLevelType(); if (typeUuid == null) { throw new IllegalStateException("type cannot be null"); } PermissionLevel level = getDefaultPermissionLevel(typeUuid); if(level == null) { LOG.info("No permission level data exists for the Author level in the MFR_PERMISSION_LEVEL_T table. " + "Default Author permissions will be used. If you want to customize this permission level, use " + "mfr.sql as a reference to add this level to the table."); // return the default author permission PermissionsMask mask = getDefaultAuthorPermissionsMask(); level = createPermissionLevel(PermissionLevelManager.PERMISSION_LEVEL_NAME_AUTHOR, typeUuid, mask); } return level; } public PermissionLevel getDefaultNoneditingAuthorPermissionLevel(){ if (LOG.isDebugEnabled()){ LOG.debug("getDefaultNoneditingAuthorPermissionLevel executing"); } String typeUuid = typeManager.getNoneditingAuthorLevelType(); if (typeUuid == null) { throw new IllegalStateException("type cannot be null"); } PermissionLevel level = getDefaultPermissionLevel(typeUuid); if(level == null) { LOG.info("No permission level data exists for the NoneditingAuthor level in the MFR_PERMISSION_LEVEL_T table. " + "Default NoneditingAuthor permissions will be used. If you want to customize this permission level, use " + "mfr.sql as a reference to add this level to the table."); // return the default nonediting author permission PermissionsMask mask = getDefaultNoneditingAuthorPermissionsMask(); level = createPermissionLevel(PermissionLevelManager.PERMISSION_LEVEL_NAME_NONEDITING_AUTHOR, typeUuid, mask); } return level; } public PermissionLevel getDefaultReviewerPermissionLevel(){ if (LOG.isDebugEnabled()){ LOG.debug("getDefaultReviewerPermissionLevel executing"); } String typeUuid = typeManager.getReviewerLevelType(); if (typeUuid == null) { throw new IllegalStateException("type cannot be null"); } PermissionLevel level = getDefaultPermissionLevel(typeUuid); if(level == null) { LOG.info("No permission level data exists for the Reviewer level in the MFR_PERMISSION_LEVEL_T table. " + "Default Reviewer permissions will be used. If you want to customize this permission level, use " + "mfr.sql as a reference to add this level to the table."); // return the default reviewer permission PermissionsMask mask = getDefaultReviewerPermissionsMask(); level = createPermissionLevel(PermissionLevelManager.PERMISSION_LEVEL_NAME_REVIEWER, typeUuid, mask); } return level; } public PermissionLevel getDefaultContributorPermissionLevel(){ if (LOG.isDebugEnabled()){ LOG.debug("getDefaultContributorPermissionLevel executing"); } String typeUuid = typeManager.getContributorLevelType(); if (typeUuid == null) { throw new IllegalStateException("type cannot be null"); } PermissionLevel level = getDefaultPermissionLevel(typeUuid); if(level == null) { LOG.info("No permission level data exists for the Contributor level in the MFR_PERMISSION_LEVEL_T table. " + "Default Contributor permissions will be used. If you want to customize this permission level, use " + "mfr.sql as a reference to add this level to the table."); // return the default contributor permission PermissionsMask mask = getDefaultContributorPermissionsMask(); level = createPermissionLevel(PermissionLevelManager.PERMISSION_LEVEL_NAME_CONTRIBUTOR, typeUuid, mask); } return level; } public PermissionLevel getDefaultNonePermissionLevel(){ if (LOG.isDebugEnabled()){ LOG.debug("getDefaultNonePermissionLevel executing"); } String typeUuid = typeManager.getNoneLevelType(); if (typeUuid == null) { throw new IllegalStateException("type cannot be null"); } PermissionLevel level = getDefaultPermissionLevel(typeUuid); if(level == null) { LOG.info("No permission level data exists for the None level in the MFR_PERMISSION_LEVEL_T table. " + "Default None permissions will be used. If you want to customize this permission level, use " + "mfr.sql as a reference to add this level to the table."); // return the default None permission PermissionsMask mask = getDefaultNonePermissionsMask(); level = createPermissionLevel(PermissionLevelManager.PERMISSION_LEVEL_NAME_NONE, typeUuid, mask); } return level; } /** * * @param typeUuid * @return the PermissionLevel for the given typeUuid. Returns null if no * PermissionLevel found. */ private PermissionLevel getDefaultPermissionLevel(final String typeUuid){ if (typeUuid == null) { throw new IllegalArgumentException("Null Argument"); } if (LOG.isDebugEnabled()){ LOG.debug("getDefaultPermissionLevel executing with typeUuid: " + typeUuid); } PermissionLevel level = null; if(defaultPermissionsMap != null && defaultPermissionsMap.containsKey(typeUuid)) { // check to see if it is already in the map that was created at startup level = ((PermissionLevel)defaultPermissionsMap.get(typeUuid)).clone(); if (LOG.isDebugEnabled()) LOG.debug("got Default PermissionLevel from defaultPermissionsMap as " + level); } else { // retrieve it from the table HibernateCallback hcb = new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query q = session.getNamedQuery(QUERY_BY_TYPE_UUID); q.setParameter("typeUuid", typeUuid); return q.uniqueResult(); } }; level = (PermissionLevel) getHibernateTemplate().execute(hcb); if (LOG.isDebugEnabled()) LOG.debug("Returned Permission Level from query was "+level); } return level; } public Boolean getCustomPermissionByName(String customPermName, PermissionLevel permissionLevel) { if (customPermName == null) throw new IllegalArgumentException("Null permissionLevelName passed"); if (permissionLevel == null) throw new IllegalArgumentException("Null permissionLevel passed"); if (customPermName.equals(PermissionLevel.NEW_FORUM)) return permissionLevel.getNewForum(); else if (customPermName.equals(PermissionLevel.NEW_RESPONSE)) return permissionLevel.getNewResponse(); else if (customPermName.equals(PermissionLevel.NEW_RESPONSE_TO_RESPONSE)) return permissionLevel.getNewResponseToResponse(); else if (customPermName.equals(PermissionLevel.NEW_TOPIC)) return permissionLevel.getNewTopic(); else if (customPermName.equals(PermissionLevel.POST_TO_GRADEBOOK)) return permissionLevel.getPostToGradebook(); else if (customPermName.equals(PermissionLevel.DELETE_ANY)) return permissionLevel.getDeleteAny(); else if (customPermName.equals(PermissionLevel.DELETE_OWN)) return permissionLevel.getDeleteOwn(); else if (customPermName.equals(PermissionLevel.MARK_AS_READ)) return permissionLevel.getMarkAsRead(); else if (customPermName.equals(PermissionLevel.MODERATE_POSTINGS)) return permissionLevel.getModeratePostings(); else if (customPermName.equals(PermissionLevel.MOVE_POSTING)) return permissionLevel.getMovePosting(); else if (customPermName.equals(PermissionLevel.READ)) return permissionLevel.getRead(); else if (customPermName.equals(PermissionLevel.REVISE_ANY)) return permissionLevel.getReviseAny(); else if (customPermName.equals(PermissionLevel.REVISE_OWN)) return permissionLevel.getReviseOwn(); else if (customPermName.equals(PermissionLevel.CHANGE_SETTINGS)) return permissionLevel.getChangeSettings(); else return null; } public List getCustomPermissions() { List customPerms = new ArrayList(); customPerms.add(PermissionLevel.NEW_FORUM); customPerms.add(PermissionLevel.NEW_RESPONSE); customPerms.add(PermissionLevel.NEW_RESPONSE_TO_RESPONSE); customPerms.add(PermissionLevel.NEW_TOPIC); customPerms.add(PermissionLevel.DELETE_ANY); customPerms.add(PermissionLevel.DELETE_OWN); customPerms.add(PermissionLevel.MARK_AS_READ); customPerms.add(PermissionLevel.MODERATE_POSTINGS); customPerms.add(PermissionLevel.MOVE_POSTING); customPerms.add(PermissionLevel.POST_TO_GRADEBOOK); customPerms.add(PermissionLevel.READ); customPerms.add(PermissionLevel.REVISE_ANY); customPerms.add(PermissionLevel.REVISE_OWN); customPerms.add(PermissionLevel.CHANGE_SETTINGS); return customPerms; } private String getCurrentUser() { String user = sessionManager.getCurrentSessionUserId(); return (user == null) ? "test-user" : user; } public void setEventTrackingService(EventTrackingService eventTrackingService) { this.eventTrackingService = eventTrackingService; } public void setTypeManager(MessageForumsTypeManager typeManager) { this.typeManager = typeManager; } public void setIdManager(IdManager idManager) { this.idManager = idManager; } public void setSessionManager(SessionManager sessionManager) { this.sessionManager = sessionManager; } public void setAreaManager(AreaManager areaManager) { this.areaManager = areaManager; } public List getAllMembershipItemsForForumsForSite(final Long areaId) { if (LOG.isDebugEnabled()) { LOG.debug("getAllMembershipItemsForForumsForSite executing"); } HibernateCallback hcb = new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query q = session.getNamedQuery(QUERY_BY_AREA_ALL_FORUMS_MEMBERSHIP); q.setParameter("areaId", areaId, Hibernate.LONG); return q.list(); } }; return (List) getHibernateTemplate().execute(hcb); } private List getAllTopicsForSite(final Long areaId) { if (LOG.isDebugEnabled()) { LOG.debug("getAllTopicsForSite executing"); } HibernateCallback hcb = new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query q = session.getNamedQuery(QUERY_GET_ALL_TOPICS); q.setParameter("areaId", areaId, Hibernate.LONG); return q.list(); } }; List topicList = (List) getHibernateTemplate().execute(hcb); List ids = new ArrayList(); try { if(topicList != null) { for(int i=0; i<topicList.size(); i++) { Object[] thisObject =(Object[]) topicList.get(i); if(thisObject != null) { for(int j=0; j<thisObject.length; j++) { Object thisTopic = (Object) thisObject[j]; if(thisTopic instanceof Topic) { ids.add(((Topic)thisTopic).getId()); break; } } } } } } catch(Exception e) { LOG.error("PermissionLevelManagerImpl.getAllTopicsForSite--" + e); } return ids; } public List getAllMembershipItemsForTopicsForSite(final Long areaId) { final List topicIds = this.getAllTopicsForSite(areaId); if(topicIds != null && topicIds.size() >0) { HibernateCallback hcb1 = new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query q = session.getNamedQuery(QUERY_BY_TOPIC_IDS_ALL_TOPIC_MEMBERSHIP); return queryWithParameterList(q, "topicIdList", topicIds); } }; return (List) getHibernateTemplate().execute(hcb1); } else return new ArrayList(); } private void initializePermissionLevelData() { if (LOG.isDebugEnabled()){ LOG.debug("loadInitialDefaultPermissionLevel executing"); } defaultPermissionsMap = new HashMap(); defaultPermissionsMap.put(typeManager.getOwnerLevelType(), getDefaultOwnerPermissionLevel()); defaultPermissionsMap.put(typeManager.getAuthorLevelType(), getDefaultAuthorPermissionLevel()); defaultPermissionsMap.put(typeManager.getNoneditingAuthorLevelType(), getDefaultNoneditingAuthorPermissionLevel()); defaultPermissionsMap.put(typeManager.getContributorLevelType(), getDefaultContributorPermissionLevel()); defaultPermissionsMap.put(typeManager.getReviewerLevelType(), getDefaultReviewerPermissionLevel()); defaultPermissionsMap.put(typeManager.getNoneLevelType(), getDefaultNonePermissionLevel()); } private void loadDefaultTypeAndPermissionLevelData() { try { // first, call the methods that will load type data if it is missing String ownerType = typeManager.getOwnerLevelType(); String authorType = typeManager.getAuthorLevelType(); String contributorType = typeManager.getContributorLevelType(); String reviewerType = typeManager.getReviewerLevelType(); String noneditingAuthorType = typeManager.getNoneditingAuthorLevelType(); String noneType = typeManager.getNoneLevelType(); // now let's check to see if we need to add the default permission level // data if (getDefaultPermissionLevel(ownerType) == null) { PermissionsMask mask = getDefaultOwnerPermissionsMask(); PermissionLevel permLevel = createPermissionLevel(PermissionLevelManager.PERMISSION_LEVEL_NAME_OWNER, ownerType, mask); savePermissionLevel(permLevel); } if (getDefaultPermissionLevel(authorType) == null) { PermissionsMask mask = getDefaultAuthorPermissionsMask(); PermissionLevel permLevel = createPermissionLevel(PermissionLevelManager.PERMISSION_LEVEL_NAME_AUTHOR, authorType, mask); savePermissionLevel(permLevel); } if (getDefaultPermissionLevel(contributorType) == null) { PermissionsMask mask = getDefaultContributorPermissionsMask(); PermissionLevel permLevel = createPermissionLevel(PermissionLevelManager.PERMISSION_LEVEL_NAME_CONTRIBUTOR, contributorType, mask); savePermissionLevel(permLevel); } if (getDefaultPermissionLevel(reviewerType) == null) { PermissionsMask mask = getDefaultReviewerPermissionsMask(); PermissionLevel permLevel = createPermissionLevel(PermissionLevelManager.PERMISSION_LEVEL_NAME_REVIEWER, reviewerType, mask); savePermissionLevel(permLevel); } if (getDefaultPermissionLevel(noneditingAuthorType) == null) { PermissionsMask mask = getDefaultNoneditingAuthorPermissionsMask(); PermissionLevel permLevel = createPermissionLevel(PermissionLevelManager.PERMISSION_LEVEL_NAME_NONEDITING_AUTHOR, noneditingAuthorType, mask); savePermissionLevel(permLevel); } if (getDefaultPermissionLevel(noneType) == null) { PermissionsMask mask = getDefaultNonePermissionsMask(); PermissionLevel permLevel = createPermissionLevel(PermissionLevelManager.PERMISSION_LEVEL_NAME_NONE, noneType, mask); savePermissionLevel(permLevel); } } catch (Exception e) { LOG.warn("Error loading initial default types and/or permissions", e); } } public void deleteMembershipItems(Set membershipSet) { if(membershipSet != null) { Iterator iter = membershipSet.iterator(); Set permissionLevels = new HashSet(); while(iter.hasNext()) { DBMembershipItem item = (DBMembershipItem) iter.next(); if(item != null && item.getPermissionLevel() != null && PermissionLevelManager.PERMISSION_LEVEL_NAME_CUSTOM.equals(item.getPermissionLevelName())) { permissionLevels.add((PermissionLevel)item.getPermissionLevel()); } if(item != null && item.getPermissionLevel() != null && PermissionLevelManager.PERMISSION_LEVEL_NAME_OWNER.equals(item.getPermissionLevelName())) { permissionLevels.add((PermissionLevel)item.getPermissionLevel()); } if(item != null && item.getPermissionLevel() != null && PermissionLevelManager.PERMISSION_LEVEL_NAME_AUTHOR.equals(item.getPermissionLevelName())) { permissionLevels.add((PermissionLevel)item.getPermissionLevel()); } if(item != null && item.getPermissionLevel() != null && PermissionLevelManager.PERMISSION_LEVEL_NAME_NONEDITING_AUTHOR.equals(item.getPermissionLevelName())) { permissionLevels.add((PermissionLevel)item.getPermissionLevel()); } if(item != null && item.getPermissionLevel() != null && PermissionLevelManager.PERMISSION_LEVEL_NAME_CONTRIBUTOR.equals(item.getPermissionLevelName())) { permissionLevels.add((PermissionLevel)item.getPermissionLevel()); } if(item != null && item.getPermissionLevel() != null && PermissionLevelManager.PERMISSION_LEVEL_NAME_REVIEWER.equals(item.getPermissionLevelName())) { permissionLevels.add((PermissionLevel)item.getPermissionLevel()); } if(item != null && item.getPermissionLevel() != null && PermissionLevelManager.PERMISSION_LEVEL_NAME_NONE.equals(item.getPermissionLevelName())) { permissionLevels.add((PermissionLevel)item.getPermissionLevel()); } } getHibernateTemplate().deleteAll(membershipSet); getHibernateTemplate().deleteAll(permissionLevels); } } private PermissionsMask getDefaultOwnerPermissionsMask() { PermissionsMask mask = new PermissionsMask(); mask.put(PermissionLevel.NEW_FORUM, Boolean.valueOf(true)); mask.put(PermissionLevel.NEW_TOPIC, Boolean.valueOf(true)); mask.put(PermissionLevel.NEW_RESPONSE, Boolean.valueOf(true)); mask.put(PermissionLevel.NEW_RESPONSE_TO_RESPONSE, Boolean.valueOf(true)); mask.put(PermissionLevel.MOVE_POSTING, Boolean.valueOf(true)); mask.put(PermissionLevel.CHANGE_SETTINGS,Boolean.valueOf(true)); mask.put(PermissionLevel.POST_TO_GRADEBOOK, Boolean.valueOf(true)); mask.put(PermissionLevel.READ, Boolean.valueOf(true)); mask.put(PermissionLevel.MARK_AS_READ,Boolean.valueOf(true)); mask.put(PermissionLevel.MODERATE_POSTINGS, Boolean.valueOf(true)); mask.put(PermissionLevel.DELETE_OWN, Boolean.valueOf(false)); mask.put(PermissionLevel.DELETE_ANY, Boolean.valueOf(true)); mask.put(PermissionLevel.REVISE_OWN, Boolean.valueOf(false)); mask.put(PermissionLevel.REVISE_ANY, Boolean.valueOf(true)); return mask; } private PermissionsMask getDefaultAuthorPermissionsMask() { PermissionsMask mask = new PermissionsMask(); mask.put(PermissionLevel.NEW_FORUM, Boolean.valueOf(true)); mask.put(PermissionLevel.NEW_TOPIC, Boolean.valueOf(true)); mask.put(PermissionLevel.NEW_RESPONSE, Boolean.valueOf(true)); mask.put(PermissionLevel.NEW_RESPONSE_TO_RESPONSE, Boolean.valueOf(true)); mask.put(PermissionLevel.MOVE_POSTING, Boolean.valueOf(true)); mask.put(PermissionLevel.CHANGE_SETTINGS,Boolean.valueOf(true)); mask.put(PermissionLevel.POST_TO_GRADEBOOK, Boolean.valueOf(true)); mask.put(PermissionLevel.READ, Boolean.valueOf(true)); mask.put(PermissionLevel.MARK_AS_READ,Boolean.valueOf(true)); mask.put(PermissionLevel.MODERATE_POSTINGS, Boolean.valueOf(false)); mask.put(PermissionLevel.DELETE_OWN, Boolean.valueOf(true)); mask.put(PermissionLevel.DELETE_ANY, Boolean.valueOf(false)); mask.put(PermissionLevel.REVISE_OWN, Boolean.valueOf(true)); mask.put(PermissionLevel.REVISE_ANY, Boolean.valueOf(false)); return mask; } private PermissionsMask getDefaultContributorPermissionsMask() { PermissionsMask mask = new PermissionsMask(); mask.put(PermissionLevel.NEW_FORUM, Boolean.valueOf(false)); mask.put(PermissionLevel.NEW_TOPIC, Boolean.valueOf(false)); mask.put(PermissionLevel.NEW_RESPONSE, Boolean.valueOf(true)); mask.put(PermissionLevel.NEW_RESPONSE_TO_RESPONSE, Boolean.valueOf(true)); mask.put(PermissionLevel.MOVE_POSTING, Boolean.valueOf(false)); mask.put(PermissionLevel.CHANGE_SETTINGS,Boolean.valueOf(false)); mask.put(PermissionLevel.POST_TO_GRADEBOOK, Boolean.valueOf(false)); mask.put(PermissionLevel.READ, Boolean.valueOf(true)); mask.put(PermissionLevel.MARK_AS_READ,Boolean.valueOf(true)); mask.put(PermissionLevel.MODERATE_POSTINGS, Boolean.valueOf(false)); mask.put(PermissionLevel.DELETE_OWN, Boolean.valueOf(false)); mask.put(PermissionLevel.DELETE_ANY, Boolean.valueOf(false)); mask.put(PermissionLevel.REVISE_OWN, Boolean.valueOf(false)); mask.put(PermissionLevel.REVISE_ANY, Boolean.valueOf(false)); return mask; } private PermissionsMask getDefaultNoneditingAuthorPermissionsMask() { PermissionsMask mask = new PermissionsMask(); mask.put(PermissionLevel.NEW_FORUM, Boolean.valueOf(true)); mask.put(PermissionLevel.NEW_TOPIC, Boolean.valueOf(true)); mask.put(PermissionLevel.NEW_RESPONSE, Boolean.valueOf(true)); mask.put(PermissionLevel.NEW_RESPONSE_TO_RESPONSE, Boolean.valueOf(true)); mask.put(PermissionLevel.MOVE_POSTING, Boolean.valueOf(false)); mask.put(PermissionLevel.CHANGE_SETTINGS,Boolean.valueOf(true)); mask.put(PermissionLevel.POST_TO_GRADEBOOK, Boolean.valueOf(true)); mask.put(PermissionLevel.READ, Boolean.valueOf(true)); mask.put(PermissionLevel.MARK_AS_READ,Boolean.valueOf(true)); mask.put(PermissionLevel.MODERATE_POSTINGS, Boolean.valueOf(false)); mask.put(PermissionLevel.DELETE_OWN, Boolean.valueOf(false)); mask.put(PermissionLevel.DELETE_ANY, Boolean.valueOf(false)); mask.put(PermissionLevel.REVISE_OWN, Boolean.valueOf(true)); mask.put(PermissionLevel.REVISE_ANY, Boolean.valueOf(false)); return mask; } private PermissionsMask getDefaultNonePermissionsMask() { PermissionsMask mask = new PermissionsMask(); mask.put(PermissionLevel.NEW_FORUM, Boolean.valueOf(false)); mask.put(PermissionLevel.NEW_TOPIC, Boolean.valueOf(false)); mask.put(PermissionLevel.NEW_RESPONSE, Boolean.valueOf(false)); mask.put(PermissionLevel.NEW_RESPONSE_TO_RESPONSE, Boolean.valueOf(false)); mask.put(PermissionLevel.MOVE_POSTING, Boolean.valueOf(false)); mask.put(PermissionLevel.CHANGE_SETTINGS,Boolean.valueOf(false)); mask.put(PermissionLevel.POST_TO_GRADEBOOK, Boolean.valueOf(false)); mask.put(PermissionLevel.READ, Boolean.valueOf(false)); mask.put(PermissionLevel.MARK_AS_READ,Boolean.valueOf(false)); mask.put(PermissionLevel.MODERATE_POSTINGS, Boolean.valueOf(false)); mask.put(PermissionLevel.DELETE_OWN, Boolean.valueOf(false)); mask.put(PermissionLevel.DELETE_ANY, Boolean.valueOf(false)); mask.put(PermissionLevel.REVISE_OWN, Boolean.valueOf(false)); mask.put(PermissionLevel.REVISE_ANY, Boolean.valueOf(false)); return mask; } private PermissionsMask getDefaultReviewerPermissionsMask() { PermissionsMask mask = new PermissionsMask(); mask.put(PermissionLevel.NEW_FORUM, Boolean.valueOf(false)); mask.put(PermissionLevel.NEW_TOPIC, Boolean.valueOf(false)); mask.put(PermissionLevel.NEW_RESPONSE, Boolean.valueOf(false)); mask.put(PermissionLevel.NEW_RESPONSE_TO_RESPONSE, Boolean.valueOf(false)); mask.put(PermissionLevel.MOVE_POSTING, Boolean.valueOf(false)); mask.put(PermissionLevel.CHANGE_SETTINGS,Boolean.valueOf(false)); mask.put(PermissionLevel.POST_TO_GRADEBOOK, Boolean.valueOf(false)); mask.put(PermissionLevel.READ, Boolean.valueOf(true)); mask.put(PermissionLevel.MARK_AS_READ,Boolean.valueOf(true)); mask.put(PermissionLevel.MODERATE_POSTINGS, Boolean.valueOf(false)); mask.put(PermissionLevel.DELETE_OWN, Boolean.valueOf(false)); mask.put(PermissionLevel.DELETE_ANY, Boolean.valueOf(false)); mask.put(PermissionLevel.REVISE_OWN, Boolean.valueOf(false)); mask.put(PermissionLevel.REVISE_ANY, Boolean.valueOf(false)); return mask; } public void setAutoDdl(Boolean autoDdl) { this.autoDdl = autoDdl; } public List<PermissionLevel> getDefaultPermissionLevels() { // first, check for the levels in the map. if map is null, // return the default permission level data List<PermissionLevel> defaultLevels = new ArrayList<PermissionLevel>(); if (defaultPermissionsMap != null && !defaultPermissionsMap.isEmpty()) { defaultLevels.addAll(defaultPermissionsMap.values()); } else { if (LOG.isDebugEnabled()) LOG.debug("Default permissions map was null!! Loading defaults to return from getDefaultPermissionLevels"); defaultLevels.add(getDefaultOwnerPermissionLevel()); defaultLevels.add(getDefaultAuthorPermissionLevel()); defaultLevels.add(getDefaultContributorPermissionLevel()); defaultLevels.add(getDefaultNoneditingAuthorPermissionLevel()); defaultLevels.add(getDefaultNonePermissionLevel()); defaultLevels.add(getDefaultReviewerPermissionLevel()); } return defaultLevels; } private List queryWithParameterList(Query query, String queryParamName, List fullList) { // sql has a limit for the size of a parameter list, so we may need to cycle // through with sublists List queryResultList = new ArrayList(); if (fullList.size() < MAX_NUMBER_OF_SQL_PARAMETERS_IN_LIST) { query.setParameterList(queryParamName, fullList); queryResultList = query.list(); } else { // if there are more than MAX_NUMBER_OF_SQL_PARAMETERS_IN_LIST, we need to do multiple queries int begIndex = 0; int endIndex = 0; while (begIndex < fullList.size()) { endIndex = begIndex + MAX_NUMBER_OF_SQL_PARAMETERS_IN_LIST; if (endIndex > fullList.size()) { endIndex = fullList.size(); } List tempSubList = new ArrayList(); tempSubList.addAll(fullList.subList(begIndex, endIndex)); query.setParameterList(queryParamName, tempSubList); queryResultList.addAll(query.list()); begIndex = endIndex; } } return queryResultList; } }