KickJava   Java API By Example, From Geeks To Geeks.

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


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 java.util.Date JavaDoc;
110 import java.util.Iterator JavaDoc;
111
112 /**
113  * Protection proxy for ForumThread objects. It restricts access to protected
114  * methods by throwing UnauthorizedExceptions if the user does not have
115  * permission to access the class.
116  */

117 public class ForumThreadProxy implements ForumThread {
118
119     private ForumThread thread;
120     private Authorization authorization;
121     private ForumPermissions permissions;
122
123     /**
124      * Creates a new proxy.
125      */

126     public ForumThreadProxy(ForumThread thread, Authorization authorization,
127             ForumPermissions permissions)
128     {
129         this.thread = thread;
130         this.authorization = authorization;
131         this.permissions = permissions;
132     }
133
134     public int getID() {
135         return thread.getID();
136     }
137
138     public String JavaDoc getName() {
139         return thread.getName();
140     }
141
142     public Date JavaDoc getCreationDate() {
143         return thread.getCreationDate();
144     }
145
146     public void setCreationDate(Date JavaDoc creationDate)
147             throws UnauthorizedException
148     {
149         if (permissions.isSystemOrForumAdmin()) {
150             thread.setCreationDate(creationDate);
151         }
152         else throw new UnauthorizedException();
153     }
154
155     public Date JavaDoc getModifiedDate() {
156         return thread.getModifiedDate();
157     }
158
159     public void setModifiedDate(Date JavaDoc modifiedDate)
160             throws UnauthorizedException
161     {
162         if (permissions.isSystemOrForumAdmin()) {
163             thread.setModifiedDate(modifiedDate);
164         }
165         else throw new UnauthorizedException();
166     }
167
168     public Forum getForum() {
169         Forum forum = thread.getForum();
170         return new ForumProxy(forum, authorization, permissions);
171     }
172
173     public int getMessageCount() {
174         return thread.getMessageCount();
175     }
176     public int getReadCount(){
177         return thread.getReadCount();
178     }
179     public void addReadCount(){
180         thread.addReadCount();
181     }
182
183     public ForumMessage getRootMessage() {
184         ForumMessage message = thread.getRootMessage();
185         return new ForumMessageProxy(message, authorization, permissions);
186     }
187
188     public void addMessage(ForumMessage parentMessage, ForumMessage newMessage) throws UnauthorizedException
189     {
190         //System.err.println("Aflatoon"+permissions.get(ForumPermissions.CREATE_MESSAGE));
191
if ((permissions.isSystemOrForumAdmin() || permissions.get(ForumPermissions.CREATE_MESSAGE))&& !thread.isClosed()){
192             thread.addMessage(parentMessage, newMessage);
193         }
194         else {
195             throw new UnauthorizedException();
196         }
197     }
198
199     public void deleteMessage(ForumMessage message)
200             throws UnauthorizedException
201     {
202         if (permissions.isSystemOrForumAdmin() ||
203         permissions.get(ForumPermissions.MODERATOR)) {
204             thread.deleteMessage(message);
205         }
206         else {
207             throw new UnauthorizedException();
208         }
209     }
210
211     public void moveMessage(ForumMessage message, ForumThread newThread,
212             ForumMessage parentMessage) throws UnauthorizedException
213     {
214         //If the user is an amdin of both forums
215
if (permissions.isSystemOrForumAdmin() && (
216                 newThread.hasPermission(ForumPermissions.SYSTEM_ADMIN) ||
217                 newThread.hasPermission(ForumPermissions.FORUM_ADMIN)))
218         {
219             thread.moveMessage(message, newThread, parentMessage);
220         }
221         else {
222             throw new UnauthorizedException();
223         }
224     }
225
226     public ForumMessage getMessage(int messageID)
227             throws ForumMessageNotFoundException
228     {
229         ForumMessage message = thread.getMessage(messageID);
230         //Apply the protection proxy and return message.
231
return new ForumMessageProxy(message, authorization, permissions);
232     }
233
234     public boolean isApproved() {
235         return thread.isApproved();
236     }
237
238     public void setApprovment(boolean approved) throws UnauthorizedException
239     {
240         if (permissions.isSystemOrForumAdmin() ||
241             permissions.get(ForumPermissions.MODERATOR)) {
242             thread.setApprovment(approved);
243         }
244         else throw new UnauthorizedException();
245     }
246
247     public TreeWalker treeWalker() {
248         return new TreeWalkerProxy(thread.treeWalker(), authorization, permissions);
249     }
250
251     public Iterator JavaDoc messages() {
252         Iterator JavaDoc iterator = thread.messages();
253         return new MessageIteratorProxy(iterator, authorization, permissions);
254     }
255
256     public Iterator JavaDoc messages(int startIndex, int numResults) {
257         Iterator JavaDoc iterator = thread.messages(startIndex, numResults);
258         return new MessageIteratorProxy(iterator, authorization, permissions);
259     }
260
261     public boolean hasPermission(int type) {
262         return permissions.get(type);
263     }
264
265     public String JavaDoc toString() {
266         return thread.toString();
267     }
268
269     /**
270      * Small violation of our pluggable backend architecture so that database
271      * insertions can be made more efficiently and transactional. The fact
272      * that this violation is needed probably means that the proxy architecture
273      * needs to be adjusted a bit.
274      */

275     public void insertIntoDb(java.sql.Connection JavaDoc con)
276             throws java.sql.SQLException JavaDoc
277     {
278         ((com.Yasna.forum.database.DbForumThread)thread).insertIntoDb(con);
279     }
280     public ThreadType getThreadType(){
281         return thread.getThreadType();
282     }
283     public boolean isSticky(){
284         return thread.isSticky();
285     }
286     public void setSticky(boolean param) throws UnauthorizedException{
287         if (permissions.isSystemOrForumAdmin() ||
288             permissions.get(ForumPermissions.MODERATOR)) {
289             thread.setSticky(param);
290         }
291         else throw new UnauthorizedException();
292     }
293     public boolean isClosed(){
294         return thread.isClosed();
295     }
296     public void setClosed(boolean param) throws UnauthorizedException{
297         if (permissions.isSystemOrForumAdmin() ||
298             permissions.get(ForumPermissions.MODERATOR)) {
299             thread.setClosed(param);
300         }
301         else throw new UnauthorizedException();
302     }
303 }
304
Popular Tags