1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.waarp.common.role;
21
22
23
24
25 public class RoleDefault {
26 public enum ROLE {
27
28
29
30 NOACCESS(0),
31
32
33
34 READONLY(1),
35
36
37
38 TRANSFER(2),
39
40
41
42 RULE(4),
43
44
45
46 HOST(8),
47
48
49
50 LIMIT(16),
51
52
53
54 SYSTEM(32),
55
56
57
58 LOGCONTROL(64),
59
60
61
62 UNUSED(-128),
63
64
65
66 PARTNER(READONLY, TRANSFER),
67
68
69
70 CONFIGADMIN(PARTNER, RULE, HOST),
71
72
73
74 FULLADMIN(CONFIGADMIN, LIMIT, SYSTEM, LOGCONTROL);
75
76 private byte brole;
77
78 ROLE(final int val) {
79 brole = (byte) val;
80 }
81
82 ROLE(final ROLE... name) {
83 for (final ROLE role : name) {
84 this.brole |= role.brole;
85 }
86 }
87
88 public final boolean isContained(final byte value) {
89 if (this == NOACCESS) {
90 return value == NOACCESS.brole;
91 }
92 return (value & brole) == brole;
93 }
94
95 public final boolean isContained(final ROLE role) {
96 return isContained(role.brole);
97 }
98
99 public final boolean contains(final ROLE role) {
100 return role.isContained(this);
101 }
102
103 public final byte getAsByte() {
104 return brole;
105 }
106
107 private static final ROLE[] READONLY_A = new ROLE[] { READONLY };
108 private static final ROLE[] TRANSFER_A = new ROLE[] { TRANSFER };
109 private static final ROLE[] RULE_A = new ROLE[] { RULE };
110 private static final ROLE[] HOST_A = new ROLE[] { HOST };
111 private static final ROLE[] LIMIT_A = new ROLE[] { LIMIT };
112 private static final ROLE[] SYSTEM_A = new ROLE[] { SYSTEM };
113 private static final ROLE[] LOGCONTROL_A = new ROLE[] { LOGCONTROL };
114 private static final ROLE[] UNUSED_A = new ROLE[] { UNUSED };
115 private static final ROLE[] NOACCESS_A = new ROLE[] { NOACCESS };
116 private static final ROLE[] PARTNER_A = new ROLE[] { READONLY, TRANSFER };
117 private static final ROLE[] CONFIGADMIN_A =
118 new ROLE[] { READONLY, TRANSFER, RULE, HOST };
119 private static final ROLE[] FULLADMIN_A =
120 new ROLE[] { READONLY, TRANSFER, RULE, LIMIT, SYSTEM, LOGCONTROL };
121
122 public final ROLE[] getComposingRoles() {
123 switch (brole) {
124 case 1:
125 return READONLY_A;
126 case 2:
127 return TRANSFER_A;
128 case 3:
129 return PARTNER_A;
130 case 4:
131 return RULE_A;
132 case 8:
133 return HOST_A;
134 case 15:
135 return CONFIGADMIN_A;
136 case 16:
137 return LIMIT_A;
138 case 32:
139 return SYSTEM_A;
140 case 64:
141 return LOGCONTROL_A;
142 case 127:
143 return FULLADMIN_A;
144 case -128:
145 return UNUSED_A;
146 case 0:
147 default:
148 return NOACCESS_A;
149 }
150 }
151
152 public static String toString(final byte fromRole) {
153 final StringBuilder result = new StringBuilder("[ ");
154 final ROLE[] values = ROLE.values();
155 for (final ROLE role : values) {
156 if (role.isContained(fromRole)) {
157 result.append(role.name()).append(' ');
158 }
159 }
160 result.append(']');
161 return result.toString();
162 }
163
164 public static ROLE fromByte(final byte role) {
165 switch (role) {
166 case 1:
167 return READONLY;
168 case 2:
169 return TRANSFER;
170 case 3:
171 return PARTNER;
172 case 4:
173 return RULE;
174 case 8:
175 return HOST;
176 case 15:
177 return CONFIGADMIN;
178 case 16:
179 return LIMIT;
180 case 32:
181 return SYSTEM;
182 case 64:
183 return LOGCONTROL;
184 case 127:
185 return FULLADMIN;
186 case -128:
187 return UNUSED;
188 case 0:
189 default:
190 return NOACCESS;
191 }
192 }
193 }
194
195 private byte role;
196
197 public RoleDefault() {
198 role = ROLE.NOACCESS.brole;
199 }
200
201 public RoleDefault(final ROLE role) {
202 this.role = role.brole;
203 }
204
205 public final byte getRoleAsByte() {
206 return role;
207 }
208
209 @Override
210 public String toString() {
211 return ROLE.toString(role);
212 }
213
214 public final RoleDefault addRole(final ROLE newrole) {
215 role |= newrole.brole;
216 return this;
217 }
218
219 public final RoleDefault setRole(final ROLE newrole) {
220 role = newrole.brole;
221 return this;
222 }
223
224 public final RoleDefault setRoleDefault(final RoleDefault newrole) {
225 role = newrole.role;
226 return this;
227 }
228
229 public final void clear() {
230 role = ROLE.NOACCESS.brole;
231 }
232
233 public final boolean isContaining(final ROLE otherrole) {
234 return otherrole.isContained(role);
235 }
236
237 public final boolean hasNoAccess() {
238 return role == ROLE.NOACCESS.brole;
239 }
240
241 public final boolean hasReadOnly() {
242 return ROLE.READONLY.isContained(role);
243 }
244
245 public final boolean hasTransfer() {
246 return ROLE.TRANSFER.isContained(role);
247 }
248
249 public final boolean hasRule() {
250 return ROLE.RULE.isContained(role);
251 }
252
253 public final boolean hasHost() {
254 return ROLE.HOST.isContained(role);
255 }
256
257 public final boolean hasLimit() {
258 return ROLE.LIMIT.isContained(role);
259 }
260
261 public final boolean hasSystem() {
262 return ROLE.SYSTEM.isContained(role);
263 }
264
265 public final boolean hasUnused() {
266 return ROLE.UNUSED.isContained(role);
267 }
268
269 public final boolean hasLogControl() {
270 return ROLE.LOGCONTROL.isContained(role);
271 }
272
273 public static boolean hasNoAccess(final byte role) {
274 return role == ROLE.NOACCESS.brole;
275 }
276
277 public static boolean hasReadOnly(final byte role) {
278 return ROLE.READONLY.isContained(role);
279 }
280
281 public static boolean hasTransfer(final byte role) {
282 return ROLE.TRANSFER.isContained(role);
283 }
284
285 public static boolean hasRule(final byte role) {
286 return ROLE.RULE.isContained(role);
287 }
288
289 public static boolean hasHost(final byte role) {
290 return ROLE.HOST.isContained(role);
291 }
292
293 public static boolean hasLimit(final byte role) {
294 return ROLE.LIMIT.isContained(role);
295 }
296
297 public static boolean hasSystem(final byte role) {
298 return ROLE.SYSTEM.isContained(role);
299 }
300
301 public static boolean hasUnused(final byte role) {
302 return ROLE.UNUSED.isContained(role);
303 }
304
305 public static boolean hasLogControl(final byte role) {
306 return ROLE.LOGCONTROL.isContained(role);
307 }
308
309 }