/**********************************************************************************
* $URL: https://source.sakaiproject.org/svn/rwiki/trunk/rwiki-model/src/java/uk/ac/cam/caret/sakai/rwiki/model/RWikiPermissionsImpl.java $
* $Id: RWikiPermissionsImpl.java 84225 2010-11-03 13:48:44Z david.horwitz@uct.ac.za $
***********************************************************************************
*
* Copyright (c) 2003, 2004, 2005, 2006 The Sakai Foundation.
*
* Licensed under the Educational Community License, Version 1.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/ecl1.php
*
* 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 uk.ac.cam.caret.sakai.rwiki.model;
import uk.ac.cam.caret.sakai.rwiki.service.api.model.RWikiPermissions;
/**
* @author ieb
*/
public class RWikiPermissionsImpl implements RWikiPermissions
{
public static final int OWNER_READ_INDEX, OWNER_WRITE_INDEX,
OWNER_ADMIN_INDEX;
public static final int GROUP_READ_INDEX, GROUP_WRITE_INDEX,
GROUP_ADMIN_INDEX;
public static final int PUBLIC_READ_INDEX, PUBLIC_WRITE_INDEX;
public static final int PERMISSIONS_LENGTH;
static
{
int i = 0;
OWNER_READ_INDEX = i++;
OWNER_WRITE_INDEX = i++;
OWNER_ADMIN_INDEX = i++;
GROUP_READ_INDEX = i++;
GROUP_WRITE_INDEX = i++;
GROUP_ADMIN_INDEX = i++;
PUBLIC_READ_INDEX = i++;
PUBLIC_WRITE_INDEX = i++;
// end permissions
PERMISSIONS_LENGTH = i;
}
private boolean[] permissions = new boolean[PERMISSIONS_LENGTH];
public boolean[] getPermissions()
{
return permissions;
}
public void setPermissions(boolean[] permissions)
{
if (permissions != null && permissions.length != PERMISSIONS_LENGTH)
{
throw new IllegalArgumentException(
"permissions must be a boolean array of length "
+ PERMISSIONS_LENGTH + " or null");
}
this.permissions = permissions;
}
/*
* (non-Javadoc)
*
* @see uk.ac.cam.caret.sakai.rwiki.model.impl.RWikiPermissions#isGroupAdmin()
*/
public boolean isGroupAdmin()
{
return permissions[GROUP_ADMIN_INDEX];
}
/*
* (non-Javadoc)
*
* @see uk.ac.cam.caret.sakai.rwiki.model.impl.RWikiPermissions#setGroupAdmin(boolean)
*/
public void setGroupAdmin(boolean groupAdmin)
{
this.permissions[GROUP_ADMIN_INDEX] = groupAdmin;
}
/*
* (non-Javadoc)
*
* @see uk.ac.cam.caret.sakai.rwiki.model.impl.RWikiPermissions#isGroupRead()
*/
public boolean isGroupRead()
{
return permissions[GROUP_READ_INDEX];
}
/*
* (non-Javadoc)
*
* @see uk.ac.cam.caret.sakai.rwiki.model.impl.RWikiPermissions#setGroupRead(boolean)
*/
public void setGroupRead(boolean groupRead)
{
this.permissions[GROUP_READ_INDEX] = groupRead;
}
/*
* (non-Javadoc)
*
* @see uk.ac.cam.caret.sakai.rwiki.model.impl.RWikiPermissions#isGroupWrite()
*/
public boolean isGroupWrite()
{
return permissions[GROUP_WRITE_INDEX];
}
/*
* (non-Javadoc)
*
* @see uk.ac.cam.caret.sakai.rwiki.model.impl.RWikiPermissions#setGroupWrite(boolean)
*/
public void setGroupWrite(boolean groupWrite)
{
this.permissions[GROUP_WRITE_INDEX] = groupWrite;
}
/*
* (non-Javadoc)
*
* @see uk.ac.cam.caret.sakai.rwiki.model.impl.RWikiPermissions#isOwnerAdmin()
*/
public boolean isOwnerAdmin()
{
return permissions[OWNER_ADMIN_INDEX];
}
/*
* (non-Javadoc)
*
* @see uk.ac.cam.caret.sakai.rwiki.model.impl.RWikiPermissions#setOwnerAdmin(boolean)
*/
public void setOwnerAdmin(boolean ownerAdmin)
{
this.permissions[OWNER_ADMIN_INDEX] = ownerAdmin;
}
/*
* (non-Javadoc)
*
* @see uk.ac.cam.caret.sakai.rwiki.model.impl.RWikiPermissions#isOwnerRead()
*/
public boolean isOwnerRead()
{
return permissions[OWNER_READ_INDEX];
}
/*
* (non-Javadoc)
*
* @see uk.ac.cam.caret.sakai.rwiki.model.impl.RWikiPermissions#setOwnerRead(boolean)
*/
public void setOwnerRead(boolean ownerRead)
{
this.permissions[OWNER_READ_INDEX] = ownerRead;
}
/*
* (non-Javadoc)
*
* @see uk.ac.cam.caret.sakai.rwiki.model.impl.RWikiPermissions#isOwnerWrite()
*/
public boolean isOwnerWrite()
{
return permissions[OWNER_WRITE_INDEX];
}
/*
* (non-Javadoc)
*
* @see uk.ac.cam.caret.sakai.rwiki.model.impl.RWikiPermissions#setOwnerWrite(boolean)
*/
public void setOwnerWrite(boolean ownerWrite)
{
this.permissions[OWNER_WRITE_INDEX] = ownerWrite;
}
/*
* (non-Javadoc)
*
* @see uk.ac.cam.caret.sakai.rwiki.model.impl.RWikiPermissions#isPublicRead()
*/
public boolean isPublicRead()
{
return permissions[PUBLIC_READ_INDEX];
}
/*
* (non-Javadoc)
*
* @see uk.ac.cam.caret.sakai.rwiki.model.impl.RWikiPermissions#setPublicRead(boolean)
*/
public void setPublicRead(boolean publicRead)
{
this.permissions[PUBLIC_READ_INDEX] = publicRead;
}
/*
* (non-Javadoc)
*
* @see uk.ac.cam.caret.sakai.rwiki.model.impl.RWikiPermissions#isPublicWrite()
*/
public boolean isPublicWrite()
{
return permissions[PUBLIC_WRITE_INDEX];
}
/*
* (non-Javadoc)
*
* @see uk.ac.cam.caret.sakai.rwiki.model.impl.RWikiPermissions#setPublicWrite(boolean)
*/
public void setPublicWrite(boolean publicWrite)
{
this.permissions[PUBLIC_WRITE_INDEX] = publicWrite;
}
public String toString()
{
char[] perms = "o--- s--- p--".toCharArray();
if (isOwnerRead()) perms[1] = 'r';
if (isOwnerWrite()) perms[2] = 'w';
if (isOwnerAdmin()) perms[3] = 'a';
if (isGroupRead()) perms[6] = 'r';
if (isGroupWrite()) perms[7] = 'w';
if (isGroupAdmin()) perms[8] = 'a';
if (isPublicRead()) perms[11] = 'r';
if (isPublicWrite()) perms[12] = 'w';
return new String(perms);
}
}