blob: 4dacb6a9127cd39c94a183c27fe0341942d2a9fd [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache 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.apache.org/licenses/LICENSE-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.apache.vysper.xmpp.modules.extension.xep0045_muc.model;
import java.util.EnumSet;
import org.apache.vysper.compliance.SpecCompliant;
/**
* For the most part, roles exist in a hierarchy.
* For instance, a participant can do anything a visitor can do, and a moderator
* can do anything a participant can do. Each role has privileges not possessed
* by the next-lowest role; these privileges are specified in the following table
* as defaults (an implementation MAY provide configuration options that override
* these defaults).
*
* @author The Apache MINA Project (dev@mina.apache.org)
*/
@SpecCompliant(spec = "xep-0045", section = "5.1.1", status = SpecCompliant.ComplianceStatus.FINISHED, coverage = SpecCompliant.ComplianceCoverage.COMPLETE)
public enum Privilege {
PresentInRoom, ReceiveMessages, ReceiveOccupantPresence, PresenceBroadcastedToRoom, ChangeAvailabilityStatus, ChangeRoomNickname, SendPrivateMessages, InviteOtherUsers, SendMessagesToAll, ModifySubject, KickParticipantsAndVisitors, GrantVoice, RevokeVoice,
EnterOpenRoom, RegisterWithOpenRoom, RetrieveMemberList, EnterMembersOnlyRoom, BanMembersAndUnaffiliatedUsers, EditMemberList, EditModeratorList, EditAdminList, EditOwnerList, ChangeRoomDefinition, DestroyRoom;
/**
* Privileges for a moderator
*/
private static EnumSet<Privilege> MODERATOR_PRIVILEGES = EnumSet.of(PresentInRoom, ReceiveMessages,
ReceiveOccupantPresence, PresenceBroadcastedToRoom, ChangeAvailabilityStatus, ChangeRoomNickname,
SendPrivateMessages, InviteOtherUsers, SendMessagesToAll, ModifySubject, KickParticipantsAndVisitors,
GrantVoice, RevokeVoice);
/**
* Privileges for a participant
*/
private static EnumSet<Privilege> PARTICIPANT_PRIVILEGES = EnumSet.of(PresentInRoom, ReceiveMessages,
ReceiveOccupantPresence, PresenceBroadcastedToRoom, ChangeAvailabilityStatus, ChangeRoomNickname,
SendPrivateMessages, InviteOtherUsers, SendMessagesToAll, ModifySubject);
/**
* Privileges for a visitor
*/
private static EnumSet<Privilege> VISITOR_PRIVILEGES = EnumSet.of(PresentInRoom, ReceiveMessages,
ReceiveOccupantPresence, PresenceBroadcastedToRoom, ChangeAvailabilityStatus, ChangeRoomNickname,
SendPrivateMessages, InviteOtherUsers);
/**
* Privileges for a none
*/
private static EnumSet<Privilege> NONE_ROLE_PRIVILEGES = EnumSet.noneOf(Privilege.class);
/**
* Privileges for an {@link Affiliation} owner
*/
private static EnumSet<Privilege> OWNER_PRIVILEGES = EnumSet.of(EnterOpenRoom, RegisterWithOpenRoom,
RetrieveMemberList, EnterMembersOnlyRoom, BanMembersAndUnaffiliatedUsers, EditMemberList,
EditModeratorList, EditAdminList, EditOwnerList, ChangeRoomDefinition, DestroyRoom);
/**
* Privileges for an {@link Affiliation} admin
*/
private static EnumSet<Privilege> ADMIN_PRIVILEGES = EnumSet
.of(EnterOpenRoom, RegisterWithOpenRoom, RetrieveMemberList, EnterMembersOnlyRoom,
BanMembersAndUnaffiliatedUsers, EditMemberList, EditModeratorList);
/**
* Privileges for an {@link Affiliation} member
*/
private static EnumSet<Privilege> MEMBER_PRIVILEGES = EnumSet.of(EnterOpenRoom, RegisterWithOpenRoom,
RetrieveMemberList, EnterMembersOnlyRoom);
/**
* Privileges for an {@link Affiliation} none
*/
private static EnumSet<Privilege> NONE_AFFILIATION_PRIVILEGES = EnumSet.of(EnterOpenRoom, RegisterWithOpenRoom);
/**
* Privileges for an {@link Affiliation} outcast
*/
private static EnumSet<Privilege> OUTCATS_PRIVILEGES = EnumSet.noneOf(Privilege.class);
/**
* Get the privileges for the specified {@link Role}
* @param role The {@link Role} to look up privileges for
* @return The privileges for the specified role
*/
public static EnumSet<Privilege> getPrivileges(Role role) {
switch (role) {
case Moderator:
return MODERATOR_PRIVILEGES;
case Participant:
return PARTICIPANT_PRIVILEGES;
case Visitor:
return VISITOR_PRIVILEGES;
default:
return NONE_ROLE_PRIVILEGES;
}
}
/**
* Get the privileges for the specified {@link Affiliation}
* @param affiliation The {@link Affiliation} to look up privileges for
* @return The privileges for the specified affiliation
*/
public static EnumSet<Privilege> getPrivileges(Affiliation affiliation) {
switch (affiliation) {
case Owner:
return OWNER_PRIVILEGES;
case Admin:
return ADMIN_PRIVILEGES;
case Member:
return MEMBER_PRIVILEGES;
case None:
return NONE_AFFILIATION_PRIVILEGES;
default:
return OUTCATS_PRIVILEGES;
}
}
}