001: /**
002: * Copyright (C) 2001 Yasna.com. All rights reserved.
003: *
004: * ===================================================================
005: * The Apache Software License, Version 1.1
006: *
007: * Redistribution and use in source and binary forms, with or without
008: * modification, are permitted provided that the following conditions
009: * are met:
010: *
011: * 1. Redistributions of source code must retain the above copyright
012: * notice, this list of conditions and the following disclaimer.
013: *
014: * 2. Redistributions in binary form must reproduce the above copyright
015: * notice, this list of conditions and the following disclaimer in
016: * the documentation and/or other materials provided with the
017: * distribution.
018: *
019: * 3. The end-user documentation included with the redistribution,
020: * if any, must include the following acknowledgment:
021: * "This product includes software developed by
022: * Yasna.com (http://www.yasna.com)."
023: * Alternately, this acknowledgment may appear in the software itself,
024: * if and wherever such third-party acknowledgments normally appear.
025: *
026: * 4. The names "Yazd" and "Yasna.com" must not be used to
027: * endorse or promote products derived from this software without
028: * prior written permission. For written permission, please
029: * contact yazd@yasna.com.
030: *
031: * 5. Products derived from this software may not be called "Yazd",
032: * nor may "Yazd" appear in their name, without prior written
033: * permission of Yasna.com.
034: *
035: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
036: * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
037: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
038: * DISCLAIMED. IN NO EVENT SHALL YASNA.COM OR
039: * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
040: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
041: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
042: * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
043: * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
044: * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
045: * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
046: * SUCH DAMAGE.
047: * ====================================================================
048: *
049: * This software consists of voluntary contributions made by many
050: * individuals on behalf of Yasna.com. For more information
051: * on Yasna.com, please see <http://www.yasna.com>.
052: */
053:
054: /**
055: * Copyright (C) 2000 CoolServlets.com. All rights reserved.
056: *
057: * ===================================================================
058: * The Apache Software License, Version 1.1
059: *
060: * Redistribution and use in source and binary forms, with or without
061: * modification, are permitted provided that the following conditions
062: * are met:
063: *
064: * 1. Redistributions of source code must retain the above copyright
065: * notice, this list of conditions and the following disclaimer.
066: *
067: * 2. Redistributions in binary form must reproduce the above copyright
068: * notice, this list of conditions and the following disclaimer in
069: * the documentation and/or other materials provided with the
070: * distribution.
071: *
072: * 3. The end-user documentation included with the redistribution,
073: * if any, must include the following acknowledgment:
074: * "This product includes software developed by
075: * CoolServlets.com (http://www.coolservlets.com)."
076: * Alternately, this acknowledgment may appear in the software itself,
077: * if and wherever such third-party acknowledgments normally appear.
078: *
079: * 4. The names "Jive" and "CoolServlets.com" must not be used to
080: * endorse or promote products derived from this software without
081: * prior written permission. For written permission, please
082: * contact webmaster@coolservlets.com.
083: *
084: * 5. Products derived from this software may not be called "Jive",
085: * nor may "Jive" appear in their name, without prior written
086: * permission of CoolServlets.com.
087: *
088: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
089: * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
090: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
091: * DISCLAIMED. IN NO EVENT SHALL COOLSERVLETS.COM OR
092: * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
093: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
094: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
095: * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
096: * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
097: * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
098: * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
099: * 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: */package com.Yasna.forum;
106:
107: import java.util.Date;
108: import java.util.Iterator;
109:
110: /**
111: * Protection proxy for ForumThread objects. It restricts access to protected
112: * methods by throwing UnauthorizedExceptions if the user does not have
113: * permission to access the class.
114: */
115: public class ForumThreadProxy implements ForumThread {
116:
117: private ForumThread thread;
118: private Authorization authorization;
119: private ForumPermissions permissions;
120:
121: /**
122: * Creates a new proxy.
123: */
124: public ForumThreadProxy(ForumThread thread,
125: Authorization authorization, ForumPermissions permissions) {
126: this .thread = thread;
127: this .authorization = authorization;
128: this .permissions = permissions;
129: }
130:
131: public int getID() {
132: return thread.getID();
133: }
134:
135: public String getName() {
136: return thread.getName();
137: }
138:
139: public Date getCreationDate() {
140: return thread.getCreationDate();
141: }
142:
143: public void setCreationDate(Date creationDate)
144: throws UnauthorizedException {
145: if (permissions.isSystemOrForumAdmin()) {
146: thread.setCreationDate(creationDate);
147: } else
148: throw new UnauthorizedException();
149: }
150:
151: public Date getModifiedDate() {
152: return thread.getModifiedDate();
153: }
154:
155: public void setModifiedDate(Date modifiedDate)
156: throws UnauthorizedException {
157: if (permissions.isSystemOrForumAdmin()) {
158: thread.setModifiedDate(modifiedDate);
159: } else
160: throw new UnauthorizedException();
161: }
162:
163: public Forum getForum() {
164: Forum forum = thread.getForum();
165: return new ForumProxy(forum, authorization, permissions);
166: }
167:
168: public int getMessageCount() {
169: return thread.getMessageCount();
170: }
171:
172: public int getReadCount() {
173: return thread.getReadCount();
174: }
175:
176: public void addReadCount() {
177: thread.addReadCount();
178: }
179:
180: public ForumMessage getRootMessage() {
181: ForumMessage message = thread.getRootMessage();
182: return new ForumMessageProxy(message, authorization,
183: permissions);
184: }
185:
186: public void addMessage(ForumMessage parentMessage,
187: ForumMessage newMessage) throws UnauthorizedException {
188: //System.err.println("Aflatoon"+permissions.get(ForumPermissions.CREATE_MESSAGE));
189: if ((permissions.isSystemOrForumAdmin() || permissions
190: .get(ForumPermissions.CREATE_MESSAGE))
191: && !thread.isClosed()) {
192: thread.addMessage(parentMessage, newMessage);
193: } else {
194: throw new UnauthorizedException();
195: }
196: }
197:
198: public void deleteMessage(ForumMessage message)
199: throws UnauthorizedException {
200: if (permissions.isSystemOrForumAdmin()
201: || permissions.get(ForumPermissions.MODERATOR)) {
202: thread.deleteMessage(message);
203: } else {
204: throw new UnauthorizedException();
205: }
206: }
207:
208: public void moveMessage(ForumMessage message,
209: ForumThread newThread, ForumMessage parentMessage)
210: throws UnauthorizedException {
211: //If the user is an amdin of both forums
212: if (permissions.isSystemOrForumAdmin()
213: && (newThread
214: .hasPermission(ForumPermissions.SYSTEM_ADMIN) || newThread
215: .hasPermission(ForumPermissions.FORUM_ADMIN))) {
216: thread.moveMessage(message, newThread, parentMessage);
217: } else {
218: throw new UnauthorizedException();
219: }
220: }
221:
222: public ForumMessage getMessage(int messageID)
223: throws ForumMessageNotFoundException {
224: ForumMessage message = thread.getMessage(messageID);
225: //Apply the protection proxy and return message.
226: return new ForumMessageProxy(message, authorization,
227: permissions);
228: }
229:
230: public boolean isApproved() {
231: return thread.isApproved();
232: }
233:
234: public void setApprovment(boolean approved)
235: throws UnauthorizedException {
236: if (permissions.isSystemOrForumAdmin()
237: || permissions.get(ForumPermissions.MODERATOR)) {
238: thread.setApprovment(approved);
239: } else
240: throw new UnauthorizedException();
241: }
242:
243: public TreeWalker treeWalker() {
244: return new TreeWalkerProxy(thread.treeWalker(), authorization,
245: permissions);
246: }
247:
248: public Iterator messages() {
249: Iterator iterator = thread.messages();
250: return new MessageIteratorProxy(iterator, authorization,
251: permissions);
252: }
253:
254: public Iterator messages(int startIndex, int numResults) {
255: Iterator iterator = thread.messages(startIndex, numResults);
256: return new MessageIteratorProxy(iterator, authorization,
257: permissions);
258: }
259:
260: public boolean hasPermission(int type) {
261: return permissions.get(type);
262: }
263:
264: public String toString() {
265: return thread.toString();
266: }
267:
268: /**
269: * Small violation of our pluggable backend architecture so that database
270: * insertions can be made more efficiently and transactional. The fact
271: * that this violation is needed probably means that the proxy architecture
272: * needs to be adjusted a bit.
273: */
274: public void insertIntoDb(java.sql.Connection con)
275: throws java.sql.SQLException {
276: ((com.Yasna.forum.database.DbForumThread) thread)
277: .insertIntoDb(con);
278: }
279:
280: public ThreadType getThreadType() {
281: return thread.getThreadType();
282: }
283:
284: public boolean isSticky() {
285: return thread.isSticky();
286: }
287:
288: public void setSticky(boolean param) throws UnauthorizedException {
289: if (permissions.isSystemOrForumAdmin()
290: || permissions.get(ForumPermissions.MODERATOR)) {
291: thread.setSticky(param);
292: } else
293: throw new UnauthorizedException();
294: }
295:
296: public boolean isClosed() {
297: return thread.isClosed();
298: }
299:
300: public void setClosed(boolean param) throws UnauthorizedException {
301: if (permissions.isSystemOrForumAdmin()
302: || permissions.get(ForumPermissions.MODERATOR)) {
303: thread.setClosed(param);
304: } else
305: throw new UnauthorizedException();
306: }
307: }
|