PermissionType.java
package org.itracker.model;
/**
* Enumeration for permission types.
*
* @author johnny
*/
public enum PermissionType implements IntCodeEnum<PermissionType> {
/**
* User Admin Permission.
* Currently this is equivalent to super user, since the permission can't be granted,
* and is only available to an admin.
*/
USER_ADMIN(-1),
/**
* Product Admin Permission
*/
PRODUCT_ADMIN(1),
/**
* Issue Create Permission
*/
ISSUE_CREATE(2),
/**
* Issue Edit Permission.
* Users with this permission can edit any issue in the project.
*/
ISSUE_EDIT_ALL(3),
/**
* Issue Close Permission.
* Users with this permission can close issues in the project.
*/
ISSUE_CLOSE(4),
/**
* Issue Assign to Self Permission.
* Users with this permission can assign issues to themselves.
*/
ISSUE_ASSIGN_SELF(5),
/**
* Issue Assign to Others Permissions.
* Users with this permission can assign issues to anyone,
* given than those users have the ability to recieve the assignment.
*/
ISSUE_ASSIGN_OTHERS(6),
/**
* View All Issues Permission. Users can view all issues in the project.
*/
ISSUE_VIEW_ALL(7),
/**
* View Users Issues Permission. Users can view thier own issues.
* This includes ones they are the creator or owner of.
*/
ISSUE_VIEW_USERS(8),
/**
* Edit Users Issues Permission.
* Users with this permission can edit any issue they created or own.
* They are limited to editing the description, adding history entries,
* and adding attachments.
*/
ISSUE_EDIT_USERS(9),
/**
* Issue Unassign Self Permission.
* Users with this permission can unassign issues they own.
*/
ISSUE_UNASSIGN_SELF(10),
/**
* Issue Assignable.
* Users with this permission can be assigned any issue in the system.
* To determine if a user can be assigned an issue,
* it will be a combination of users with EDIT_ALL,
* users with EDIT_USERS if they are the creator,
* and users with this permission and EDIT_USERS.
*/
ISSUE_ASSIGNABLE(11),
/**
* Create for Others.
* Users with this permission are allowed to create issues on behalf of other users.
* The system will treat the issue as if the other user had created it.
* The actual creator will be logged in the audit log.
*/
ISSUE_CREATE_OTHERS(12),
/**
* Full edit permission.
* This defines what levelof editing a user has for an issue.
* Without this permission, users will
* be limited to editing only the description, attachments, custom fields,
* and history of an issue.
*/
ISSUE_EDIT_FULL(13);
/* The project value matches the enum order (except for USER_ADMIN which is at position 0) */
private static final PermissionType[] PERMISSION_TYPES = values();
/**
* The integer value of this enum member.
*/
private final int code;
/**
* Creates a new instance of this enum.
*
* @param code unique value representing this instance
*/
PermissionType(Integer code) {
this.code = code;
}
/**
* Returns the integer value representing this enum member.
*
* @return unique value representing this instance
*/
public Integer getCode() {
return code;
}
public static PermissionType valueOf(Integer type) {
return values()[0].fromCode(type);
}
@Deprecated
public static PermissionType[] valueOf(int[] type) {
if (null == type) {
return null;
}
final PermissionType[] result = new PermissionType[type.length];
int c = 0;
for (Integer i: type) {
result[c++] = valueOf(i);
}
return result;
}
/**
* Returns the enum instance matching the integer value.
*
* @param code unique value of the enum instance to return
* @return enum instance matching the int value
*/
public PermissionType fromCode(Integer code) {
if (code == 0 || code < -1 || code > 13) {
throw new IllegalArgumentException("Unknown PermissionType code " + code);
}
if (code == -1) {
return PERMISSION_TYPES[0];
}
return PERMISSION_TYPES[code];
}
public String name(Project project) {
if (null != project) {
if (project.isNew()) {
throw new IllegalStateException("New project can't be granted.");
}
return name() + "#" + project.getId();
}
return name();
}
}