/********************************************************************************** * $URL: https://source.sakaiproject.org/svn/msgcntr/trunk/messageforums-hbm/src/java/org/sakaiproject/component/app/messageforums/dao/hibernate/BaseForumImpl.java $ * $Id: BaseForumImpl.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.HashSet; import java.util.List; import java.util.Set; import java.util.Iterator; 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.Area; 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.Topic; import org.sakaiproject.component.app.messageforums.dao.hibernate.util.comparator.AttachmentByCreatedDateDesc; import org.sakaiproject.component.app.messageforums.dao.hibernate.util.comparator.TopicBySortIndexAscAndCreatedDateDesc; public class BaseForumImpl extends MutableEntityImpl implements BaseForum { private static final Log LOG = LogFactory.getLog(BaseForumImpl.class); private String title; private String shortDescription; private String extendedDescription; private String typeUuid; private SortedSet attachmentsSet;// = new HashSet(); private SortedSet topicsSet;// = new HashSet(); private Set membershipItemSet; private Area area; private Integer sortIndex; private Boolean moderated; private Boolean postFirst; 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 String getExtendedDescription() { return extendedDescription; } public void setExtendedDescription(String extendedDescription) { this.extendedDescription = extendedDescription; } 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 List getTopics() { boolean isUnsorted = false; int c = 1; for(Iterator i = this.topicsSet.iterator(); i.hasNext(); c++) { Topic topic = (Topic)i.next(); if(topic.getSortIndex().intValue() != c) { isUnsorted = true; break; } } if(isUnsorted) { SortedSet sortedTopics = new TreeSet(new TopicBySortIndexAscAndCreatedDateDesc()); sortedTopics.addAll(this.topicsSet); int x = 1; for(Iterator i = sortedTopics.iterator(); i.hasNext(); x++) { Topic topic = (Topic)i.next(); topic.setSortIndex(Integer.valueOf(x)); } this.topicsSet = sortedTopics; } return Util.setToList(this.topicsSet); } public void setTopics(List topics) { this.topicsSet = new TreeSet(new TopicBySortIndexAscAndCreatedDateDesc()); this.topicsSet.addAll(topics); } public Set getTopicsSet() { return topicsSet; } public void setTopicsSet(SortedSet topicsSet) { this.topicsSet = topicsSet; } public Set getMembershipItemSet() { return membershipItemSet; } public void setMembershipItemSet(Set membershipItemSet) { this.membershipItemSet = membershipItemSet; } public String getTypeUuid() { return typeUuid; } public void setTypeUuid(String typeUuid) { this.typeUuid = typeUuid; } public Area getArea() { return area; } public void setArea(Area area) { this.area = area; } public Boolean getModerated() { return moderated; } public void setModerated(Boolean moderated) { this.moderated = moderated; } public String toString() { return "Forum/" + id; //return "Forum.id:" + id; } public boolean equals(Object obj) { if (obj != null && obj instanceof BaseForum) { return getId().equals(((BaseForum)obj).getId()); } return false; } // needs a better impl public int hashCode() { return getId() == null ? 0 : getId().hashCode(); } //////////////////////////////////////////////////////////////////////// // helper methods for collections //////////////////////////////////////////////////////////////////////// public void addTopic(Topic topic) { if (LOG.isDebugEnabled()) { LOG.debug("addTopic(topic " + topic + ")"); } if (topic == null) { throw new IllegalArgumentException("topic == null"); } if (topicsSet == null) { topicsSet = new TreeSet(new TopicBySortIndexAscAndCreatedDateDesc()); } topic.setBaseForum(this); topicsSet.add(topic); } public void removeTopic(Topic topic) { if (LOG.isDebugEnabled()) { LOG.debug("removeTopic(topic " + topic + ")"); } if (topic == null) { throw new IllegalArgumentException("Illegal topic argument passed!"); } topic.setOpenForum(null); topic.setPrivateForum(null); topic.setBaseForum(null); topicsSet.remove(topic); } 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.setForum(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.setForum(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 Boolean getPostFirst() { return postFirst; } public void setPostFirst(Boolean postFirst) { this.postFirst = postFirst; } }