package com.idega.block.forum.data;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.Collection;
import java.util.Iterator;
import javax.ejb.EJBException;
import javax.ejb.FinderException;
import com.idega.block.category.data.ICCategory;
import com.idega.core.user.data.User;
import com.idega.data.TreeableEntityBMPBean;
/**
* Title: Forums<p>
* Description: <p>
* Copyright: Copyright (c) idega margmi�lun hf.<p>
* Company: idega margmi�lun hf.<p>
* @author idega 2001 - idega team - <a href="mailto:laddi@idega.is">laddi@idega.is</a>
* @version 2.0
*/
public class ForumDataBMPBean extends TreeableEntityBMPBean implements ForumData {
public ForumDataBMPBean() {
super();
}
public ForumDataBMPBean(int id)throws SQLException{
super(id);
}
public void initializeAttributes(){
addAttribute(getIDColumnName());
addAttribute(getColumnNameParentThreadID(),"Parent thread",true,true,Integer.class);
addAttribute(getColumnNameTopicID(),"Topic",true,true,Integer.class,"many-to-one",ICCategory.class);
addAttribute(getColumnNameThreadSubject(),"Thread subject",true,true,String.class);
addAttribute(getColumnNameThreadBody(),"Thread body",true,true,String.class,15000);
addAttribute(getColumnNameUserID(),"User",true,true,Integer.class,"many-to-one",User.class);
addAttribute(getColumnNameUserName(),"User name",true,true,String.class);
addAttribute(getColumnNameUserEMail(),"User e-mail",true,true,String.class);
addAttribute(getColumnNameThreadDate(),"Date",true,true,Timestamp.class);
addAttribute(getColumnNameNumberOfResponses(),"Responses",true,true,Integer.class);
addAttribute(getColumnNameTopParentThreadID(),"Parent thread",true,true,Integer.class);
addAttribute(getColumnNameNumberOfSubThreads(),"Sub Threads",true,true,Integer.class);
addAttribute(getColumnNameValid(),"Valid",true,true,String.class);
setNullable(getColumnNameUserID(),true);
}
public static String getEntityTableName() { return "FO_THREAD"; }
public static String getColumnNameForumThreadID() { return "FO_THREAD_ID"; }
public static String getColumnNameParentThreadID() { return "PARENT_THREAD_ID";}
public static String getColumnNameTopicID() { return "IC_CATEGORY_ID"; }
public static String getColumnNameThreadSubject() { return "THREAD_SUBJECT"; }
public static String getColumnNameThreadBody() { return "THREAD_BODY"; }
public static String getColumnNameUserID() { return com.idega.user.data.UserBMPBean.getColumnNameUserID(); }
public static String getColumnNameUserName() { return "USER_NAME"; }
public static String getColumnNameUserEMail() { return "USER_EMAIL"; }
public static String getColumnNameThreadDate() { return "THREAD_DATE"; }
public static String getColumnNameNumberOfResponses() { return "NUMBER_OF_RESPONSES"; }
public static String getColumnNameTopParentThreadID() { return "TOP_PARENT_THREAD_ID";}
public static String getColumnNameNumberOfSubThreads() { return "NUMBER_OF_SUB_THREADS"; }
public static String getColumnNameValid() { return "VALID"; }
public String getEntityName(){
return getEntityTableName();
}
//Get
public int getParentThreadID(){
return getIntColumnValue(getColumnNameParentThreadID());
}
public ICCategory getTopic(){
return (ICCategory) getColumnValue(getColumnNameTopicID());
}
public int getTopicID(){
return getIntColumnValue(getColumnNameTopicID());
}
public String getThreadSubject(){
return (String)getColumnValue(getColumnNameThreadSubject());
}
public String getThreadBody(){
return (String)getColumnValue(getColumnNameThreadBody());
}
public int getUserID(){
return getIntColumnValue(getColumnNameUserID());
}
public String getUserName(){
return (String)getColumnValue(getColumnNameUserName());
}
public String getUserEMail(){
return (String)getColumnValue(getColumnNameUserEMail());
}
public Timestamp getThreadDate(){
return (Timestamp)getColumnValue(getColumnNameThreadDate());
}
public int getNumberOfResponses(){
return getIntColumnValue(getColumnNameNumberOfResponses());
}
public int getTopParentID(){
return getIntColumnValue(getColumnNameTopParentThreadID());
}
public int getNumberOfSubThreads(){
return getIntColumnValue(getColumnNameNumberOfSubThreads());
}
public boolean isValid(){
if (((String)getColumnValue(getColumnNameValid())).equals("Y") ) {
return true;
}
else {
return false;
}
}
//Set
public void setParentThreadID(int parentThreadID){
setColumn(getColumnNameParentThreadID(),parentThreadID);
}
public void setTopicID(int topicID){
setColumn(getColumnNameTopicID(),topicID);
}
public void setThreadSubject(String threadSubject){
setColumn(getColumnNameThreadSubject(),threadSubject);
}
public void setThreadBody(String threadBody){
setColumn(getColumnNameThreadBody(),threadBody);
}
public void setUserID(int userID){
setColumn(getColumnNameUserID(),userID);
}
public void setUserName(String userName){
setColumn(getColumnNameUserName(),userName);
}
public void setUserEMail(String email){
setColumn(getColumnNameUserEMail(),email);
}
public void setThreadDate(Timestamp threadDate){
setColumn(getColumnNameThreadDate(),threadDate);
}
public void setNumberOfResponses(int numberOfResponses){
setColumn(getColumnNameNumberOfResponses(),numberOfResponses);
}
public void setTopParentID(int topParentID){
setColumn(getColumnNameTopParentThreadID(),topParentID);
}
public void setNumberOfSubThreads(int numberOfSubThreads){
setColumn(getColumnNameNumberOfSubThreads(),numberOfSubThreads);
}
public void setValid(boolean valid){
if (valid) {
setColumn(getColumnNameValid(),"Y");
}
else {
setColumn(getColumnNameValid(),"N");
}
}
public Iterator getChildrenIterator(){
Iterator iter = super.getChildrenIterator(getColumnNameThreadDate());
return iter;
}
public Collection ejbFindAllThreads(ICCategory category) throws FinderException {
String sql = "select "+getIDColumnName()+" from "+getEntityTableName()+" where "+ForumDataBMPBean.getColumnNameTopicID()+" = "+Integer.toString(category.getID())+" and "+ForumDataBMPBean.getColumnNameParentThreadID()+" = -1 and "+ForumDataBMPBean.getColumnNameValid()+" = 'Y' order by "+ForumDataBMPBean.getColumnNameThreadDate()+" desc";
return super.idoFindIDsBySQL(sql);
}
public Collection ejbFindAllThreads(ICCategory category,int numberOfReturns) throws FinderException {
String sql = "select "+getIDColumnName()+" from "+getEntityTableName()+" where "+ForumDataBMPBean.getColumnNameTopicID()+" = "+Integer.toString(category.getID())+" and "+ForumDataBMPBean.getColumnNameParentThreadID()+" = -1 and "+ForumDataBMPBean.getColumnNameValid()+" = 'Y' order by "+ForumDataBMPBean.getColumnNameThreadDate()+" desc";
return super.idoFindIDsBySQL(sql,numberOfReturns);
}
public int ejbHomeGetNumberOfThreads(ICCategory category) throws EJBException {
try{
String sql = "select count("+getIDColumnName()+") from "+getEntityTableName()+" where "+ForumDataBMPBean.getColumnNameTopicID()+" = "+Integer.toString(category.getID())+" and "+ForumDataBMPBean.getColumnNameParentThreadID()+" = -1 and "+ForumDataBMPBean.getColumnNameValid()+" = 'Y'";
return super.idoGetNumberOfRecords(sql);
}
catch(com.idega.data.IDOException idoe){
throw new EJBException(idoe);
}
}
public Collection ejbFindNewestThread(ICCategory category) throws FinderException {
String sql = "select "+getIDColumnName()+" from "+getEntityTableName()+" where "+ForumDataBMPBean.getColumnNameTopicID()+" = "+Integer.toString(category.getID())+" and "+ForumDataBMPBean.getColumnNameParentThreadID()+" = -1 and "+ForumDataBMPBean.getColumnNameValid()+" = 'Y' order by "+ForumDataBMPBean.getColumnNameThreadDate()+" desc";
return super.idoFindIDsBySQL(sql,1);
}
public Collection ejbFindThreadsInCategories(Collection categories,int numberOfReturns) throws FinderException {
StringBuffer sql = new StringBuffer();
sql.append("select "+getIDColumnName()+" from ");
sql.append(getEntityTableName());
sql.append(" where ");
sql.append(ForumDataBMPBean.getColumnNameParentThreadID());
sql.append(" = -1 and ");
sql.append(ForumDataBMPBean.getColumnNameValid());
sql.append(" = 'Y' and (");
Iterator iter = categories.iterator();
while (iter.hasNext()) {
ICCategory item = (ICCategory) iter.next();
sql.append(getColumnNameTopicID());
sql.append(" = ");
sql.append(String.valueOf(item.getID()));
if ( iter.hasNext() ) {
sql.append(" or ");
}
}
sql.append(") order by ");
sql.append(ForumDataBMPBean.getColumnNameThreadDate());
sql.append(" desc");
return super.idoFindIDsBySQL(sql.toString(),numberOfReturns);
}
public Collection ejbFindAllTopLevelThreads() throws FinderException {
String sql = "select "+getIDColumnName()+" from "+getEntityTableName()+" where "+ForumDataBMPBean.getColumnNameParentThreadID()+" = -1 and "+ForumDataBMPBean.getColumnNameValid()+" = 'Y' order by "+ForumDataBMPBean.getColumnNameThreadDate()+" desc";
return super.idoFindIDsBySQL(sql);
}
} // class ForumThread