/**********************************************************************************
* $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;
}
}