View Javadoc
1   package org.itracker.model;
2   
3   /**
4    * Enumeration for permission types.
5    *
6    * @author johnny
7    */
8   public enum PermissionType implements IntCodeEnum<PermissionType> {
9   
10      /**
11       * User Admin Permission.
12       * Currently this is equivalent to super user, since the permission can't be granted,
13       * and is only available to an admin.
14       */
15      USER_ADMIN(-1),
16  
17      /**
18       * Product Admin Permission
19       */
20      PRODUCT_ADMIN(1),
21  
22      /**
23       * Issue Create Permission
24       */
25      ISSUE_CREATE(2),
26  
27      /**
28       * Issue Edit Permission.
29       * Users with this permission can edit any issue in the project.
30       */
31      ISSUE_EDIT_ALL(3),
32  
33      /**
34       * Issue Close Permission.
35       * Users with this permission can close issues in the project.
36       */
37      ISSUE_CLOSE(4),
38  
39      /**
40       * Issue Assign to Self Permission.
41       * Users with this permission can assign issues to themselves.
42       */
43      ISSUE_ASSIGN_SELF(5),
44  
45      /**
46       * Issue Assign to Others Permissions.
47       * Users with this permission can assign issues to anyone,
48       * given than those users have the ability to recieve the assignment.
49       */
50      ISSUE_ASSIGN_OTHERS(6),
51  
52      /**
53       * View All Issues Permission.  Users can view all issues in the project.
54       */
55      ISSUE_VIEW_ALL(7),
56  
57      /**
58       * View Users Issues Permission.  Users can view thier own issues.
59       * This includes ones they are the creator or owner of.
60       */
61      ISSUE_VIEW_USERS(8),
62  
63      /**
64       * Edit Users Issues Permission.
65       * Users with this permission can edit any issue they created or own.
66       * They are limited to editing the description, adding history entries,
67       * and adding attachments.
68       */
69      ISSUE_EDIT_USERS(9),
70  
71      /**
72       * Issue Unassign Self Permission.
73       * Users with this permission can unassign issues they own.
74       */
75      ISSUE_UNASSIGN_SELF(10),
76  
77      /**
78       * Issue Assignable.
79       * Users with this permission can be assigned any issue in the system.
80       * To determine if a user can be assigned an issue,
81       * it will be a combination of users with EDIT_ALL,
82       * users with EDIT_USERS if they are the creator,
83       * and users with this permission and EDIT_USERS.
84       */
85      ISSUE_ASSIGNABLE(11),
86  
87      /**
88       * Create for Others.
89       * Users with this permission are allowed to create issues on behalf of other users.
90       * The system will treat the issue as if the other user had created it.
91       * The actual creator will be logged in the audit log.
92       */
93      ISSUE_CREATE_OTHERS(12),
94  
95      /**
96       * Full edit permission.
97       * This defines what levelof editing a user has for an issue.
98       * Without this permission, users will
99       * be limited to editing only the description, attachments, custom fields,
100      * and history of an issue.
101      */
102     ISSUE_EDIT_FULL(13);
103 
104     /* The project value matches the enum order (except for USER_ADMIN which is at position 0) */
105     private static final PermissionType[] PERMISSION_TYPES = values();
106 
107     /**
108      * The integer value of this enum member.
109      */
110     private final int code;
111 
112     /**
113      * Creates a new instance of this enum.
114      *
115      * @param code unique value representing this instance
116      */
117     PermissionType(Integer code) {
118         this.code = code;
119     }
120 
121     /**
122      * Returns the integer value representing this enum member.
123      *
124      * @return unique value representing this instance
125      */
126     public Integer getCode() {
127         return code;
128     }
129 
130     public static PermissionType valueOf(Integer type) {
131         return values()[0].fromCode(type);
132     }
133 
134     @Deprecated
135     public static PermissionType[] valueOf(int[] type) {
136         if (null == type) {
137             return null;
138         }
139         final PermissionTypermissionType">PermissionType[] result = new PermissionType[type.length];
140         int c = 0;
141         for (Integer i: type) {
142             result[c++] = valueOf(i);
143         }
144         return result;
145     }
146 
147 
148     /**
149      * Returns the enum instance matching the integer value.
150      *
151      * @param code unique value of the enum instance to return
152      * @return enum instance matching the int value
153      */
154     public PermissionType fromCode(Integer code) {
155         if (code == 0 || code < -1 || code > 13) {
156             throw new IllegalArgumentException("Unknown PermissionType code " + code);
157         }
158         if (code == -1) {
159             return PERMISSION_TYPES[0];
160         }
161         return PERMISSION_TYPES[code];
162     }
163 
164     public String name(Project project) {
165         if (null != project) {
166             if (project.isNew()) {
167                 throw new IllegalStateException("New project can't be granted.");
168             }
169             return name() + "#" + project.getId();
170         }
171         return name();
172     }
173 
174 }