/**********************************************************************************
 * $URL: https://source.sakaiproject.org/svn/msgcntr/trunk/messageforums-api/src/java/org/sakaiproject/api/app/messageforums/Area.java $
 * $Id: Area.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.api.app.messageforums;

import java.util.Date;
import java.util.List;
import java.util.Set;

public interface Area extends MutableEntity {
    
    /**
     * setting for {@link #sendToEmail}. A copy of message is never sent
     * to recipients' email addresses
     */
    public static final int EMAIL_COPY_NEVER = 0;
    /**
     * setting for {@link #sendToEmail}. Sender is given the option of sending
     * a copy of message to email addresses 
     */
    public static final int EMAIL_COPY_OPTIONAL = 1;
    /**
     * setting for {@link #sendToEmail}. A copy of message is always sent
     * to recipients' email addresses
     */
    public static final int EMAIL_COPY_ALWAYS = 2;

    public void setVersion(Integer version);

    public String getContextId();

    public void setContextId(String contextId);

    public Boolean getHidden();

    public void setHidden(Boolean hidden);

    public String getName();

    public void setName(String name);

    public Boolean getEnabled();

    public void setEnabled(Boolean enabled);
    
    /**
     * {@link Deprecated} This option was replaced by sendToEmail via MSGCNTR-708. DO NOT USE.
     * @return
     */
    public Boolean getSendEmailOut();
    
    /**
     * {@link Deprecated} This option was replaced by sendToEmail via MSGCNTR-708. DO NOT USE.
     * @param sendEmailOut
     */
    public void setSendEmailOut(Boolean sendEmailOut);
    
    /**
     * 
     * @return the site-level setting for sending a copy of the message to recipients'
     * email addresses. This may be {@link #EMAIL_COPY_NEVER}, #{@link #EMAIL_COPY_OPTIONAL},
     * {@link #EMAIL_COPY_ALWAYS}
     */
    public int getSendToEmail();
    
    /**
     * set the site-level setting for sending a copy of the message to recipients'
     * email addresses. This may be {@link #EMAIL_COPY_NEVER}, #{@link #EMAIL_COPY_OPTIONAL},
     * {@link #EMAIL_COPY_ALWAYS}
     * @param sendToEmail
     */
    public void setSendToEmail(int sendToEmail);

    public List getOpenForums();
    
    public Set getOpenForumsSet();

    public void setOpenForums(List openForums);

    public List getPrivateForums();
    
    public Set getPrivateForumsSet();

    public void setPrivateForums(List discussionForums);

    public List getDiscussionForums();

    public void setDiscussionForums(List discussionForums);

    public String getTypeUuid();

    public void setTypeUuid(String typeUuid);

    public void addPrivateForum(BaseForum forum);

    public void removePrivateForum(BaseForum forum);

    public void addDiscussionForum(BaseForum forum);

    public void removeDiscussionForum(BaseForum forum);

    public void addOpenForum(BaseForum forum);

    public void removeOpenForum(BaseForum forum);

    public Boolean getLocked();
    
    public void setLocked(Boolean locked);
    
    public Boolean getModerated();
    
    public void setModerated(Boolean moderated);
    
    public Boolean getAutoMarkThreadsRead();
    
    public void setAutoMarkThreadsRead(Boolean autoMarkThreadsRead);
    
    public Set<DBMembershipItem> getMembershipItemSet();
			
	public void setMembershipItemSet(Set<DBMembershipItem> membershipItemSet);
    
    public void addMembershipItem(DBMembershipItem item);      

    public void removeMembershipItem(DBMembershipItem item);
    
    public Boolean getAvailabilityRestricted();
    
    public void setAvailabilityRestricted(Boolean restricted);
      
    public Date getOpenDate();

	public void setOpenDate(Date openDate);
	
    public Date getCloseDate();
    
	public void setCloseDate(Date closeDate);
	
	public Boolean getAvailability();
    
    public void setAvailability(Boolean restricted);
    
    public Boolean getPostFirst();
    
    public void setPostFirst(Boolean postFirst);
    
    public Set getHiddenGroups();
       
    public void setHiddenGroups(Set hiddenGroups);
}
