package com.idega.block.survey.data;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import javax.ejb.FinderException;
import com.idega.block.category.data.ICInformationCategory;
import com.idega.block.category.data.ICInformationFolder;
import com.idega.core.localisation.data.ICLocale;
import com.idega.data.IDOAddRelationshipException;
import com.idega.data.IDOQuery;
import com.idega.data.IDORelationshipException;
import com.idega.data.IDORemoveRelationshipException;
import com.idega.util.IWTimestamp;
import com.idega.user.data.User;
/**
* Title: SurveyBMPBean
* Description:
* Copyright: Copyright (c) 2004
* Company: idega Software
* @author 2004 - idega team - <br><a href="mailto:gummi@idega.is">Gudmundur Agust Saemundsson</a><br>
* @version 1.0
*/
public class SurveyEntityBMPBean extends com.idega.data.GenericEntity implements SurveyEntity {
private HashMap storeMap = new HashMap();
public static final String COLUMNNAME_CREATION_LOCALE = "CREATION_LOCALE";
private final static String DELETED_COLUMN = "DELETED";
private final static String DELETED_BY_COLUMN = "DELETED_BY";
private final static String DELETED_WHEN_COLUMN = "DELETED_WHEN";
public final static String DELETED = "Y";
public final static String NOT_DELETED = "N";
public SurveyEntityBMPBean() {
super();
}
public SurveyEntityBMPBean(int id) throws SQLException {
super(id);
}
public void initializeAttributes() {
addAttribute(getIDColumnName());
addAttribute(getColumnNameName(), "Name", true, true, String.class);
addAttribute(getColumnNameDescription(), "Description", true, true, String.class);
addAttribute(getColumnNameStartTime(), "Begins", true, true, Timestamp.class);
addAttribute(getColumnNameEndTime(), "Ends", true, true, Timestamp.class);
addManyToOneRelationship(COLUMNNAME_CREATION_LOCALE, "Locale id", ICLocale.class);
addAttribute(DELETED_COLUMN, "Deleted", true, true, String.class, 1);
addAttribute(DELETED_BY_COLUMN, "Deleted by", true, true, Integer.class, "many-to-one", User.class);
addAttribute(DELETED_WHEN_COLUMN, "Deleted when", true, true, Timestamp.class);
this.addManyToOneRelationship(getColumnNameFolderID(), "Info Folder", ICInformationFolder.class);
this.addManyToOneRelationship(getColumnNameCatID(), "Category", ICInformationCategory.class);
addManyToManyRelationShip(SurveyQuestion.class, "SU_SURVEY_SURVEY_QUESTION");
}
public static String getEntityTableName() {
return "SU_SURVEY";
}
public static String getColumnNameID() {
return "SU_SURVEY_ID";
}
public static String getColumnNameName() {
return "NAME";
}
public static String getColumnNameDescription() {
return "DESCRIPTION";
}
public static String getColumnNameStartTime() {
return "START_TIME";
}
public static String getColumnNameEndTime() {
return "END_TIME";
}
public static String getColumnNameFolderID() {
return "IC_INFO_FOLDER_ID";
}
public static String getColumnNameCatID() {
return "IC_INFO_CATEGORY_ID";
}
public String getIDColumnName() {
return getColumnNameID();
}
public String getEntityName() {
return getEntityTableName();
}
public String getName() {
return getStringColumnValue(getColumnNameName());
}
public String getDescription() {
return getStringColumnValue(getColumnNameDescription());
}
public void setName(String name) {
setColumn(getColumnNameName(), name);
}
public void setDescription(String description) {
setColumn(getColumnNameDescription(), description);
}
public Timestamp getStartTime() {
return (Timestamp)getColumnValue(getColumnNameStartTime());
}
public Timestamp getEndTime() {
return (Timestamp)getColumnValue(getColumnNameEndTime());
}
public void setStartTime(Timestamp time) {
setColumn(getColumnNameStartTime(),time);
}
public void setEndTime(Timestamp time) {
setColumn(getColumnNameEndTime(),time);
}
public void addQuestion(SurveyQuestion question) throws IDOAddRelationshipException{
idoAddTo(question);
}
public void removeQuestion(SurveyQuestion question) throws IDORemoveRelationshipException{
idoRemoveFrom(question);
}
public int getFolderID() {
return getIntColumnValue(getColumnNameFolderID());
}
public int getCategoryID() {
return getIntColumnValue(getColumnNameCatID());
}
public void setFolder(ICInformationFolder folder) {
setColumn(getColumnNameFolderID(),folder);
}
public void setCategoryID(ICInformationCategory categoryID) {
setColumn(getColumnNameCatID(),categoryID);
}
public Collection ejbFindAllSurveys(ICInformationFolder folder) throws FinderException {
IDOQuery query = idoQueryGetSelect();
query.appendWhereEquals(getColumnNameFolderID(),folder)
.appendAnd();
IDOQuery querypart2 = idoQuery();
querypart2.append(DELETED_COLUMN).append(" is null")
.appendOr()
.append(DELETED_COLUMN).append(" = 'N'");
query.appendWithinParentheses(querypart2)
.appendOrderByDescending(getColumnNameStartTime());
return idoFindPKsByQuery(query);
}
public Collection ejbFindActiveSurveys(ICInformationFolder folder, Timestamp time) throws FinderException{
IDOQuery query = idoQueryGetSelect();
query.appendWhereEquals(getColumnNameFolderID(),folder);
query.appendAnd();
query.append(getColumnNameStartTime());
query.appendLessThanOrEqualsSign();
query.append(time);
query.appendAnd();
IDOQuery querypart2 = idoQuery();
querypart2.append(getColumnNameEndTime());
querypart2.appendIsNull();
querypart2.appendOr();
querypart2.append(getColumnNameEndTime());
querypart2.appendGreaterThanOrEqualsSign();
querypart2.append(time);
/*querypart2.appendOr();
querypart2.append(getColumnNameEndTime());
querypart2.appendLessThanOrEqualsSign();
querypart2.append("0000-00-00"); */ //MySQL Fix ??
query.appendWithinParentheses(querypart2);
query.appendAnd();
IDOQuery querypart3 = idoQuery();
querypart3.append(DELETED_COLUMN).append(" is null")
.appendOr()
.append(DELETED_COLUMN).append(" = 'N'");
query.appendWithinParentheses(querypart3);
query.appendOrderBy(getColumnNameStartTime());
//System.out.println(query.toString());
return idoFindPKsByQuery(query);
}
public Collection getSurveyQuestions() throws IDORelationshipException{
return idoGetRelatedEntities(SurveyQuestion.class);
}
public void setCreationLocale(ICLocale locale){
setColumn(COLUMNNAME_CREATION_LOCALE,locale);
}
public ICLocale getCreationLocale(){
return (ICLocale)getColumnValue(COLUMNNAME_CREATION_LOCALE);
}
public void store(){
super.store();
Collection translations = this.storeMap.values();
for (Iterator iter = translations.iterator(); iter.hasNext();) {
SurveyEntityTranslation element = (SurveyEntityTranslation)iter.next();
element.setTransletedEntity(this);
element.store();
}
}
/**
*
*/
public void setRemoved(User user){
setColumn(DELETED_COLUMN, DELETED);
setDeletedWhen(IWTimestamp.getTimestampRightNow());
setDeletedBy(user);
super.store();
}
/**
*
*/
private void setDeletedBy(User user) {
setColumn(DELETED_BY_COLUMN, user);
}
/**
*
*/
private void setDeletedWhen(Timestamp when) {
setColumn(DELETED_WHEN_COLUMN, when);
}
}