KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > Yasna > forum > ForumPermissions


1 /**
2  * Copyright (C) 2001 Yasna.com. All rights reserved.
3  *
4  * ===================================================================
5  * The Apache Software License, Version 1.1
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  *
11  * 1. Redistributions of source code must retain the above copyright
12  * notice, this list of conditions and the following disclaimer.
13  *
14  * 2. Redistributions in binary form must reproduce the above copyright
15  * notice, this list of conditions and the following disclaimer in
16  * the documentation and/or other materials provided with the
17  * distribution.
18  *
19  * 3. The end-user documentation included with the redistribution,
20  * if any, must include the following acknowledgment:
21  * "This product includes software developed by
22  * Yasna.com (http://www.yasna.com)."
23  * Alternately, this acknowledgment may appear in the software itself,
24  * if and wherever such third-party acknowledgments normally appear.
25  *
26  * 4. The names "Yazd" and "Yasna.com" must not be used to
27  * endorse or promote products derived from this software without
28  * prior written permission. For written permission, please
29  * contact yazd@yasna.com.
30  *
31  * 5. Products derived from this software may not be called "Yazd",
32  * nor may "Yazd" appear in their name, without prior written
33  * permission of Yasna.com.
34  *
35  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
36  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
37  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
38  * DISCLAIMED. IN NO EVENT SHALL YASNA.COM OR
39  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
40  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
41  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
42  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
43  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
44  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
45  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
46  * SUCH DAMAGE.
47  * ====================================================================
48  *
49  * This software consists of voluntary contributions made by many
50  * individuals on behalf of Yasna.com. For more information
51  * on Yasna.com, please see <http://www.yasna.com>.
52  */

53
54 /**
55  * Copyright (C) 2000 CoolServlets.com. All rights reserved.
56  *
57  * ===================================================================
58  * The Apache Software License, Version 1.1
59  *
60  * Redistribution and use in source and binary forms, with or without
61  * modification, are permitted provided that the following conditions
62  * are met:
63  *
64  * 1. Redistributions of source code must retain the above copyright
65  * notice, this list of conditions and the following disclaimer.
66  *
67  * 2. Redistributions in binary form must reproduce the above copyright
68  * notice, this list of conditions and the following disclaimer in
69  * the documentation and/or other materials provided with the
70  * distribution.
71  *
72  * 3. The end-user documentation included with the redistribution,
73  * if any, must include the following acknowledgment:
74  * "This product includes software developed by
75  * CoolServlets.com (http://www.coolservlets.com)."
76  * Alternately, this acknowledgment may appear in the software itself,
77  * if and wherever such third-party acknowledgments normally appear.
78  *
79  * 4. The names "Jive" and "CoolServlets.com" must not be used to
80  * endorse or promote products derived from this software without
81  * prior written permission. For written permission, please
82  * contact webmaster@coolservlets.com.
83  *
84  * 5. Products derived from this software may not be called "Jive",
85  * nor may "Jive" appear in their name, without prior written
86  * permission of CoolServlets.com.
87  *
88  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
89  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
90  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
91  * DISCLAIMED. IN NO EVENT SHALL COOLSERVLETS.COM OR
92  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
93  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
94  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
95  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
96  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
97  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
98  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
99  * SUCH DAMAGE.
100  * ====================================================================
101  *
102  * This software consists of voluntary contributions made by many
103  * individuals on behalf of CoolServlets.com. For more information
104  * on CoolServlets.com, please see <http://www.coolservlets.com>.
105  */

106
107 package com.Yasna.forum;
108
109 import com.Yasna.util.*;
110
111 /**
112  * Defines a set of permissions for objects in the forum system that
113  * users can be granted. Forum permissions are used by the protection
114  * proxy objects defined for each major component of the system.
115  */

116 public class ForumPermissions implements Cacheable {
117
118     /**
119      * Permission to read object.
120      */

121     public static final int READ = 0;
122
123     /**
124      * Permission to administer the entire sytem.
125      */

126     public static final int SYSTEM_ADMIN = 1;
127
128     /**
129      * Permission to administer a particular forum.
130      */

131     public static final int FORUM_ADMIN = 2;
132
133     /**
134      * Permission to administer a particular user.
135      */

136     public static final int USER_ADMIN = 3;
137
138     /**
139      * Permission to administer a particular group.
140      */

141     public static final int GROUP_ADMIN = 4;
142
143     /**
144      * Permission to take on a moderator role.
145      */

146     public static final int MODERATOR = 5;
147
148     /**
149      * Permission to create a new thread.
150      */

151     public static final int CREATE_THREAD = 6;
152
153     /**
154      * Permission to create a new message.
155      */

156     public static final int CREATE_MESSAGE = 7;
157
158     private boolean [] values = new boolean[8];
159
160     /**
161      * Factory method to create full permissions.
162      */

163     public static ForumPermissions full() {
164         return new ForumPermissions(true, true, true, true, true, true, true, true);
165     }
166
167     /**
168      * Factory method to create an object with no permissions.
169      */

170     public static ForumPermissions none() {
171         return new ForumPermissions(false, false, false, false, false, false, false, false);
172     }
173
174     /**
175      * Factory method to create an object with read-only permissions.
176      */

177     public static ForumPermissions readOnly() {
178         return new ForumPermissions(true, false, false, false, false, false, false, false);
179     }
180
181     /**
182      * Create a new permissions object with the specified permissions.
183      */

184     public ForumPermissions(boolean READ, boolean SYSTEM_ADMIN,
185             boolean FORUM_ADMIN, boolean USER_ADMIN, boolean GROUP_ADMIN,
186             boolean MODERATOR, boolean CREATE_THREAD, boolean CREATE_MESSAGE)
187     {
188         values[0] = READ;
189         values[1] = SYSTEM_ADMIN;
190         values[2] = FORUM_ADMIN;
191         values[3] = USER_ADMIN;
192         values[4] = GROUP_ADMIN;
193         values[5] = MODERATOR;
194         values[6] = CREATE_THREAD;
195         values[7] = CREATE_MESSAGE;
196     }
197
198     /**
199      * Creates a new ForumPermission object by combining two permissions
200      * objects. The higher permission of each permission type will be used.
201      */

202     public ForumPermissions(ForumPermissions perm1,
203             ForumPermissions perm2)
204     {
205         values[0] = perm1.get(0) || perm2.get(0);
206         values[1] = perm1.get(1) || perm2.get(1);
207         values[2] = perm1.get(2) || perm2.get(2);
208         values[3] = perm1.get(3) || perm2.get(3);
209         values[4] = perm1.get(4) || perm2.get(4);
210         values[5] = perm1.get(5) || perm2.get(5);
211         values[6] = perm1.get(6) || perm2.get(6);
212         values[7] = perm1.get(7) || perm2.get(7);
213     }
214
215     public ForumPermissions(boolean [] permissions) {
216         this.values = permissions;
217     }
218
219     public String JavaDoc toString() {
220         StringBuffer JavaDoc buf = new StringBuffer JavaDoc();
221         for (int i=0; i<values.length-1; i++) {
222             buf.append(values[i]).append(",");
223         }
224         buf.append(values[values.length -1]);
225         return buf.toString();
226     }
227
228     /**
229      * Returns true if the permission of a particular type is allowed.
230      */

231     public boolean get(int type) {
232         if (type < 0 || type > 7) {
233             return false;
234         }
235         return values[type];
236     }
237
238     /**
239      * Returns true if the permissions include system or forum admin
240      * permissions.
241      */

242     public boolean isSystemOrForumAdmin() {
243         return (values[FORUM_ADMIN] || values[SYSTEM_ADMIN]);
244     }
245
246     //FROM THE CACHEABLE INTERFACE//
247

248     public int getSize() {
249         //Approximate the size of the object in bytes by calculating the size
250
//of each field.
251
int size = 0;
252         size += CacheSizes.sizeOfObject(); //overhead of object
253
size += CacheSizes.sizeOfObject(); //ref to array
254
size += CacheSizes.sizeOfBoolean() * 8; //boolean array vals
255
return size;
256     }
257 }
258
Popular Tags