/********************************************************************************** * $URL: https://source.sakaiproject.org/svn/msgcntr/trunk/messageforums-hbm/src/java/org/sakaiproject/component/app/messageforums/dao/hibernate/TopicImpl.java $ * $Id: TopicImpl.java 9227 2006-05-15 15:02:42Z cwen@iupui.edu $ *********************************************************************************** * * Copyright (c) 2003, 2004, 2005, 2006, 2007, 2008 The Sakai Foundation * * Licensed under the Educational Community License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.opensource.org/licenses/ECL-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * **********************************************************************************/ package org.sakaiproject.component.app.messageforums.dao.hibernate; import java.util.Comparator; import java.util.Date; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.SortedSet; import java.util.TreeSet; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.sakaiproject.api.app.messageforums.Attachment; import org.sakaiproject.api.app.messageforums.BaseForum; import org.sakaiproject.api.app.messageforums.DBMembershipItem; import org.sakaiproject.api.app.messageforums.Message; import org.sakaiproject.api.app.messageforums.OpenForum; import org.sakaiproject.api.app.messageforums.PermissionLevel; import org.sakaiproject.api.app.messageforums.PrivateForum; import org.sakaiproject.api.app.messageforums.Topic; import org.sakaiproject.component.app.messageforums.dao.hibernate.util.comparator.AttachmentByCreatedDateDesc; import org.sakaiproject.component.app.messageforums.dao.hibernate.util.comparator.MessageByCreatedDateDesc; public abstract class TopicImpl extends MutableEntityImpl implements Topic { private static final Log LOG = LogFactory.getLog(TopicImpl.class); private String title; private String shortDescription; private String extendedDescription; private SortedSet attachmentsSet;// = new HashSet(); private Boolean mutable; private Integer sortIndex; private String typeUuid; private BaseForum baseForum; private SortedSet messagesSet;// = new HashSet(); private Set membershipItemSet; private String defaultAssignName; private Boolean moderated; private Boolean autoMarkThreadsRead; // foreign keys for hibernate private PrivateForum privateForum; private OpenForum openForum; // indecies for hibernate //private int ofindex; //private int pfindex; private Date openDate; private Date closeDate; private Boolean postFirst; /** * availabilityRestricted: this is the radio button the users turns on or off this feature with */ private Boolean availabilityRestricted = false; /** * if availabilityRestricted, then this determines whether the topic is disabled or not */ private Boolean availability = true; public List getMessages() { return Util.setToList(messagesSet); } public void setMessages(List messages) { this.messagesSet = new TreeSet(new MessageByCreatedDateDesc()); this.messagesSet.addAll(messages); } public Set getMessagesSet() { return messagesSet; } public void setMessagesSet(SortedSet messagesSet) { this.messagesSet = messagesSet; } public Set getAttachmentsSet() { return attachmentsSet; } public void setAttachmentsSet(SortedSet attachmentsSet) { this.attachmentsSet = attachmentsSet; } public List getAttachments() { return Util.setToList(attachmentsSet); } public void setAttachments(List attachments) { this.attachmentsSet = new TreeSet(new AttachmentByCreatedDateDesc()); this.attachmentsSet.addAll(attachments); } public Set getMembershipItemSet() { return membershipItemSet; } public void setMembershipItemSet(Set membershipItemSet) { this.membershipItemSet = membershipItemSet; } public String getExtendedDescription() { return extendedDescription; } public void setExtendedDescription(String extendedDescription) { this.extendedDescription = extendedDescription; } public Boolean getMutable() { return mutable; } public void setMutable(Boolean mutable) { this.mutable = mutable; } public String getShortDescription() { return shortDescription; } public void setShortDescription(String shortDescription) { this.shortDescription = shortDescription; } public Integer getSortIndex() { return sortIndex; } public void setSortIndex(Integer sortIndex) { this.sortIndex = sortIndex; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getTypeUuid() { return typeUuid; } public void setTypeUuid(String typeUuid) { this.typeUuid = typeUuid; } public BaseForum getBaseForum() { return baseForum; } public void setBaseForum(BaseForum forum) { this.baseForum = forum; } public OpenForum getOpenForum() { return openForum; } public void setOpenForum(OpenForum openForum) { this.openForum = openForum; } public PrivateForum getPrivateForum() { return privateForum; } public void setPrivateForum(PrivateForum privateForum) { this.privateForum = privateForum; } public Boolean getModerated() { return moderated; } public void setModerated(Boolean moderated) { this.moderated = moderated; } public Boolean getAutoMarkThreadsRead() { return autoMarkThreadsRead; } public void setAutoMarkThreadsRead(Boolean autoMarkThreadsRead) { this.autoMarkThreadsRead = autoMarkThreadsRead; } // public int getOfindex() { // try { // return getOpenForum().getTopics().indexOf(this); // } catch (Exception e) { // return ofindex; // } // } // // public void setOfindex(int ofindex) { // this.ofindex = ofindex; // } // // public int getPfindex() { // try { // return getPrivateForum().getTopics().indexOf(this); // } catch (Exception e) { // return pfindex; // } // } // // public void setPfindex(int pfindex) { // this.pfindex = pfindex; // } public String toString() { return "Topic/" + id; //return "Topic.id:" + id; } public boolean equals(Object obj) { if (obj != null && obj instanceof Topic) { return getId().equals(((Topic)obj).getId()); } return false; } // needs a better impl public int hashCode() { return getId() == null ? 0 : getId().hashCode(); } //////////////////////////////////////////////////////////////////////// // helper methods for collections //////////////////////////////////////////////////////////////////////// public void addMessage(Message message) { if (LOG.isDebugEnabled()) { LOG.debug("addForum(message " + message + ")"); } if (message == null) { throw new IllegalArgumentException("message == null"); } if (messagesSet == null) { messagesSet = new TreeSet(new MessageByCreatedDateDesc()); } message.setTopic(this); messagesSet.add(message); } public void removeMessage(Message message) { if (LOG.isDebugEnabled()) { LOG.debug("removeForum(message " + message + ")"); } if (message == null) { throw new IllegalArgumentException("Illegal message argument passed!"); } // TODO: instead of this, set deleted field to true message.setTopic(null); messagesSet.remove(message); } public void addAttachment(Attachment attachment) { if (LOG.isDebugEnabled()) { LOG.debug("addAttachment(Attachment " + attachment + ")"); } if (attachment == null) { throw new IllegalArgumentException("attachment == null"); } if (attachmentsSet == null) { attachmentsSet = new TreeSet(new AttachmentByCreatedDateDesc()); } attachment.setTopic(this); attachmentsSet.add(attachment); } public void removeAttachment(Attachment attachment) { if (LOG.isDebugEnabled()) { LOG.debug("removeAttachment(Attachment " + attachment + ")"); } if (attachment == null) { throw new IllegalArgumentException("Illegal attachment argument passed!"); } attachment.setTopic(null); attachmentsSet.remove(attachment); } public void addMembershipItem(DBMembershipItem item) { if (LOG.isDebugEnabled()) { LOG.debug("addMembershipItem(item " + item + ")"); } if (item == null) { throw new IllegalArgumentException("item == null"); } if (membershipItemSet == null) { membershipItemSet = new HashSet(); } membershipItemSet.add(item); } public void removeMembershipItem(DBMembershipItem item) { if (LOG.isDebugEnabled()) { LOG.debug("removeMembershipItem(item " + item + ")"); } if (item == null) { throw new IllegalArgumentException("Illegal level argument passed!"); } membershipItemSet.remove(item); } public String getDefaultAssignName() { return defaultAssignName; } public void setDefaultAssignName(String defaultAssignName) { this.defaultAssignName = defaultAssignName; } public Boolean getAvailabilityRestricted() { return availabilityRestricted; } public void setAvailabilityRestricted(Boolean restricted) { this.availabilityRestricted = restricted; } public Date getOpenDate() { return openDate; } public void setOpenDate(Date openDate) { this.openDate = openDate; } public Date getCloseDate() { return closeDate; } public void setCloseDate(Date closeDate) { this.closeDate = closeDate; } public Boolean getAvailability() { return availability; } public void setAvailability(Boolean availability) { this.availability = availability; } public Boolean getPostFirst() { return postFirst; } public void setPostFirst(Boolean postFirst) { this.postFirst = postFirst; } }