package se.idega.idegaweb.commune.message.data; import java.util.Collection; import javax.ejb.EJBException; import javax.ejb.FinderException; import com.idega.block.process.data.AbstractCaseBMPBean; import com.idega.block.process.data.Case; import com.idega.block.school.data.School; import com.idega.core.file.data.ICFile; import com.idega.data.IDOException; // import com.idega.data.IDOQuery; import com.idega.data.IDORuntimeException; import com.idega.data.query.Criteria; import com.idega.data.query.InCriteria; import com.idega.data.query.MatchCriteria; import com.idega.data.query.SelectQuery; import com.idega.user.data.Group; import com.idega.user.data.User; import com.idega.util.IWTimestamp; /** * Title: Description: Copyright: Copyright (c) 2002 Company: * * @author Anders Lindman * @version 1.0 */ public class PrintedLetterMessageBMPBean extends AbstractCaseBMPBean implements PrintedLetterMessage, PrintMessage, Case { private static final String COLUMN_SUBJECT = "SUBJECT"; private static final String COLUMN_BODY = "BODY"; private static final String COLUMN_MESSAGE_TYPE = "MESSAGE_TYPE"; private static final String COLUMN_MESSAGE_DATA = "MESSAGE_DATA"; private static final String COLUMN_LETTER_TYPE = "LETTER_TYPE"; private static final String COLUMN_BULK_DATA = "BULK_DATA"; private static final String COLUMN_CONTENT_CODE = "CONTENT_CODE"; private static final String CASE_CODE_KEY = "SYMEBRV"; private static final String CASE_CODE_DESCRIPTION = "Letter Message"; public String getEntityName() { return "MSG_LETTER_MESSAGE"; } public void initializeAttributes() { addGeneralCaseRelation(); this.addAttribute(COLUMN_SUBJECT, "Message subject", String.class); this.addAttribute(COLUMN_BODY, "Message body", String.class, 4000); this.addAttribute(COLUMN_MESSAGE_TYPE, "Message type", String.class, 20); this.addManyToOneRelationship(COLUMN_MESSAGE_DATA, "Message data", ICFile.class); this.addAttribute(COLUMN_LETTER_TYPE, "Message SubType", String.class, 4); this.addManyToOneRelationship(COLUMN_BULK_DATA, "Message bulk data", ICFile.class); this.addAttribute(COLUMN_CONTENT_CODE, "Message contentcode", String.class, 20); } public String getCaseCodeKey() { return CASE_CODE_KEY; } public String getCaseCodeDescription() { return CASE_CODE_DESCRIPTION; } public void setDefaultValues() { setLetterType(MessageConstants.LETTER_TYPE_DEFAULT); } public User getSender() { throw new UnsupportedOperationException(); } public void setSender(User sender) { throw new UnsupportedOperationException(); } public int getSenderID() { throw new UnsupportedOperationException(); } public void setSenderID(int senderID) { throw new UnsupportedOperationException(); } public void setSubject(String subject) { this.setColumn(COLUMN_SUBJECT, subject); } public String getSubject() { return this.getStringColumnValue(COLUMN_SUBJECT); } public void setBody(String body) { this.setColumn(COLUMN_BODY, body); } public String getBody() { return this.getStringColumnValue(COLUMN_BODY); } public String getMessageType() { return this.getStringColumnValue(COLUMN_MESSAGE_TYPE); } public boolean isPrinted() { return this.getCaseStatus().getStatus().equals(getCaseStatusReady()); } public void setMessageType(String type) { this.setColumn(COLUMN_MESSAGE_TYPE, type); } public ICFile getMessageData() { return (ICFile) this.getColumnValue(COLUMN_MESSAGE_DATA); // Replace this // later } public int getMessageDataFileID() { return this.getIntColumnValue(COLUMN_MESSAGE_DATA); } public void setMessageData(ICFile file) { // Temp (test) method this.setColumn(COLUMN_MESSAGE_DATA, file); } public void setMessageData(int fileID) { // Temp (test) method this.setColumn(COLUMN_MESSAGE_DATA, fileID); } /* * (non-Javadoc) * * @see se.idega.idegaweb.commune.message.data.PrintMessage#getContentType() */ public String getContentCode() { return this.getStringColumnValue(COLUMN_CONTENT_CODE); } public void setContentCode(String contentCode) { this.setColumn(COLUMN_CONTENT_CODE, contentCode); } public ICFile getMessageBulkData() { return (ICFile) this.getColumnValue(COLUMN_BULK_DATA); // Replace this // later } public int getMessageBulkDataFileID() { return this.getIntColumnValue(COLUMN_BULK_DATA); } public void setMessageBulkData(ICFile file) { // Temp (test) method this.setColumn(COLUMN_BULK_DATA, file); } public void setMessageBulkData(int fileID) { // Temp (test) method this.setColumn(COLUMN_BULK_DATA, fileID); } public String getSenderName() { return getOwner().getName(); } public String getDateString() { /** * @todo: implement */ return ""; } public void setLetterType(String letterType) { setColumn(COLUMN_LETTER_TYPE, letterType); } public String getLetterType() { return getStringColumnValue(COLUMN_LETTER_TYPE); } public void setAsPasswordLetter() { setLetterType(MessageConstants.LETTER_TYPE_PASSWORD); } public Collection ejbFindMessages(User user) throws FinderException { return super.ejbFindAllCasesByUser(user); } public Collection ejbFindMessagesByStatus(User user, String[] status) throws FinderException { return super.ejbFindAllCasesByUserAndStatusArray(user, status); } public Collection ejbFindAllUnPrintedLetters() throws FinderException { return super.ejbFindAllCasesByStatus(super.getCaseStatusOpen()); } public Collection ejbFindAllPrintedLetters() throws FinderException { return super.ejbFindAllCasesByStatus(super.getCaseStatusReady()); } protected SelectQuery idoSelectQueryGetCountDefaultLettersWithStatus(String caseStatus) { return idoSelectQueryGetLettersCountByStatusAndType(caseStatus, MessageConstants.LETTER_TYPE_DEFAULT); } protected SelectQuery idoSelectQueryGetCountPasswordLettersWithStatus(String caseStatus) { return idoSelectQueryGetLettersCountByStatusAndType(caseStatus, COLUMN_LETTER_TYPE); } public String getUnPrintedCaseStatusForType(String type) { return getCaseStatusOpen(); } public String getPrintedCaseStatusForType(String type) { return getCaseStatusReview(); } /** * Counts the number of unprinted letters of the given type. */ public int ejbHomeGetNumberOfUnprintedLettersByType(String letterType) { try { SelectQuery sql = idoSelectQueryGetLettersCountByStatusAndType(getUnPrintedCaseStatusForType(letterType), letterType); return super.idoGetNumberOfRecords(sql); } catch (IDOException sqle) { throw new EJBException(sqle.getMessage()); } } /** * Counts the number of printed letters of the given type. */ public int ejbHomeGetNumberOfPrintedLettersByType(String letterType) { try { SelectQuery sql = idoSelectQueryGetLettersCountByStatusAndType(getUnPrintedCaseStatusForType(letterType), letterType); return super.idoGetNumberOfRecords(sql); } catch (IDOException sqle) { throw new EJBException(sqle.getMessage()); } } /** * Counts the number of letters of the given type and status. */ public int ejbHomeGetNumberOfLettersByStatusAndType(String caseStatus, String letterType) { try { SelectQuery sql = idoSelectQueryGetLettersCountByStatusAndType(caseStatus, letterType); return super.idoGetNumberOfRecords(sql); } catch (IDOException sqle) { throw new EJBException(sqle.getMessage()); } } /** * Counts the number of letters that are of type password and unprinted */ public int ejbHomeGetNumberOfUnPrintedPasswordLetters() { try { SelectQuery sql = idoSelectQueryGetCountPasswordLettersWithStatus(getCaseStatusOpen()); return super.idoGetNumberOfRecords(sql); } catch (IDOException sqle) { throw new EJBException(sqle.getMessage()); } } /** * Counts the number of letters that are of type password and printed */ public int ejbHomeGetNumberOfPrintedPasswordLetters() { try { SelectQuery sql = idoSelectQueryGetCountPasswordLettersWithStatus(getCaseStatusReview()); return super.idoGetNumberOfRecords(sql); } catch (IDOException sqle) { throw new EJBException(sqle.getMessage()); } } /** * Counts the number of letters that are of type default and unprinted */ public int ejbHomeGetNumberOfUnPrintedDefaultLetters() { try { SelectQuery sql = idoSelectQueryGetCountDefaultLettersWithStatus(getCaseStatusOpen()); return super.idoGetNumberOfRecords(sql); } catch (IDOException sqle) { throw new EJBException(sqle.getMessage()); } } /** * Counts the number of letters that are of type default and printed */ public int ejbHomeGetNumberOfPrintedDefaultLetters() { try { SelectQuery sql = idoSelectQueryGetCountDefaultLettersWithStatus(getCaseStatusReview()); return super.idoGetNumberOfRecords(sql); } catch (IDOException sqle) { throw new EJBException(sqle.getMessage()); } } public String[] ejbHomeGetLetterTypes() { String[] types = { MessageConstants.LETTER_TYPE_DEFAULT, MessageConstants.LETTER_TYPE_PASSWORD }; return types; } protected SelectQuery idoSelectQueryGetPrintedLettersByType(String letterType) { try { return idoSelectQueryGetLettersByStatusAndType(getCaseStatusReady(), letterType); } catch (Exception e) { throw new IDORuntimeException(e, this); } } protected SelectQuery idoSelectQueryGetPrintedLettersByType(String letterType, IWTimestamp from, IWTimestamp to) { try { return idoSelectQueryGetLettersByStatusAndType(getCaseStatusReady(), letterType, from, to); } catch (Exception e) { throw new IDORuntimeException(e, this); } } protected SelectQuery idoSelectQueryGetSinglePrintedLettersByType(String letterType, IWTimestamp from, IWTimestamp to) { try { return idoSelectQueryGetSingleLettersByStatusAndType(getCaseStatusReady(), letterType, from, to); } catch (Exception e) { throw new IDORuntimeException(e, this); } } protected SelectQuery idoSelectQueryGetUnPrintedLettersByType(String letterType) { try { return idoSelectQueryGetLettersByStatusAndType(getCaseStatusOpen(), letterType); } catch (Exception e) { throw new IDORuntimeException(e, this); } } protected SelectQuery idoSelectQueryGetUnPrintedLettersByType(String letterType, IWTimestamp from, IWTimestamp to) { try { return idoSelectQueryGetLettersByStatusAndType(getCaseStatusOpen(), letterType, from, to); } catch (Exception e) { throw new IDORuntimeException(e, this); } } protected SelectQuery idoSelectQueryGetSingleUnPrintedLettersByType(String letterType, IWTimestamp from, IWTimestamp to) { try { return idoSelectQueryGetSingleLettersByStatusAndType(getCaseStatusOpen(), letterType, from, to); } catch (Exception e) { throw new IDORuntimeException(e, this); } } protected Criteria idoCriteriaForLetterType(String type) { return new MatchCriteria(idoTableSubCase(), COLUMN_LETTER_TYPE, MatchCriteria.EQUALS, type, true); } protected SelectQuery idoSelectQueryGetLettersByStatusAndType(String caseStatus, String letterType) { SelectQuery query = idoSelectQueryGetAllCasesByStatus(caseStatus); query.addCriteria(idoCriteriaForLetterType(letterType)); return query; } protected SelectQuery idoSelectQueryGetLettersByStatusAndType(String caseStatus, String letterType, IWTimestamp from, IWTimestamp to) { SelectQuery query = idoSelectQueryGetAllCases(); query.addCriteria(idoCriteriaForStatus(caseStatus)); query.addCriteria(idoCriteriaForCreatedWithinDates(from, to)); query.addCriteria(idoCriteriaForLetterType(letterType)); query.addOrder(idoOrderByCreationDate(false)); return query; } protected SelectQuery idoSelectQueryGetSingleLettersByStatusAndType(String caseStatus, String letterType, IWTimestamp from, IWTimestamp to) { SelectQuery query = idoSelectQueryGetAllCases(); query.addCriteria(idoCriteriaForStatus(caseStatus)); query.addCriteria(idoCriteriaForCreatedWithinDates(from, to)); query.addCriteria(idoCriteriaForLetterType(letterType)); query.addOrder(idoOrderByCreationDate(false)); return query; } protected SelectQuery idoSelectQueryGetLettersByBulkFile(int file, String caseStatus, String letterType) { SelectQuery query = idoSelectQueryGetAllCases(); query.addCriteria(idoCriteriaForStatus(caseStatus)); query.addCriteria(idoCriteriaForLetterType(letterType)); query.addCriteria(new MatchCriteria(idoTableSubCase(), COLUMN_BULK_DATA, MatchCriteria.EQUALS, file)); query.addOrder(idoOrderByCreationDate(false)); return query; } protected SelectQuery idoSelectQueryGetLettersCountByStatusAndType(String caseStatus, String letterType) { SelectQuery query = super.idoSelectQueryGetCountCasesWithStatus(caseStatus); query.addCriteria(idoCriteriaForLetterType(letterType)); return query; } public Collection ejbFindPrintedLettersByType(String letterType, int resultSize, int startingIndex) throws FinderException { return super.idoFindPKsByQuery(idoSelectQueryGetPrintedLettersByType(letterType), resultSize, startingIndex); } public Collection ejbFindPrintedLettersByType(String letterType, IWTimestamp from, IWTimestamp to, int resultSize, int startingIndex) throws FinderException { return super.idoFindPKsByQuery(idoSelectQueryGetPrintedLettersByType(letterType, from, to), resultSize, startingIndex); } public Collection ejbFindSinglePrintedLettersByType(String letterType, IWTimestamp from, IWTimestamp to, int resultSize, int startingIndex) throws FinderException { SelectQuery query = idoSelectQueryGetSinglePrintedLettersByType(letterType, from, to); return super.idoFindPKsByQuery(query, resultSize, startingIndex); } public Collection ejbFindByBulkFile(int file, String letterType, String status, int resultSize, int startingIndex) throws FinderException { return super.idoFindPKsByQuery(idoSelectQueryGetLettersByBulkFile(file, status, letterType), resultSize, startingIndex); } public Collection ejbFindSingleByTypeAndStatus(String letterType, String status, IWTimestamp from, IWTimestamp to, int resultSize, int startingIndex) throws FinderException { return super.idoFindPKsByQuery(idoSelectQueryGetSingleLettersByStatusAndType(status, letterType, from, to), resultSize, startingIndex); } public Collection ejbFindUnPrintedLettersByType(String letterType, int resultSize, int startingIndex) throws FinderException { return super.idoFindPKsByQuery(idoSelectQueryGetUnPrintedLettersByType(letterType), resultSize, startingIndex); } public Collection ejbFindUnPrintedLettersByType(String letterType, IWTimestamp from, IWTimestamp to, int resultSize, int startingIndex) throws FinderException { return super.idoFindPKsByQuery(idoSelectQueryGetUnPrintedLettersByType(letterType, from, to), resultSize, startingIndex); } public Collection ejbFindSingleUnPrintedLettersByType(String letterType, IWTimestamp from, IWTimestamp to, int resultSize, int startingIndex) throws FinderException { return super.idoFindPKsByQuery(idoSelectQueryGetSingleUnPrintedLettersByType(letterType, from, to), resultSize, startingIndex); } public Collection ejbFindUnPrintedPasswordLetters(int resultSize, int startingIndex) throws FinderException { String letterType = MessageConstants.LETTER_TYPE_PASSWORD; return ejbFindUnPrintedLettersByType(letterType, resultSize, startingIndex); } public Collection ejbFindPrintedPasswordLetters(int resultSize, int startingIndex) throws FinderException { String letterType = MessageConstants.LETTER_TYPE_PASSWORD; return ejbFindPrintedLettersByType(letterType, resultSize, startingIndex); } public Collection ejbFindUnPrintedDefaultLetters(int resultSize, int startingIndex) throws FinderException { String letterType = MessageConstants.LETTER_TYPE_DEFAULT; return ejbFindUnPrintedLettersByType(letterType, resultSize, startingIndex); } public Collection ejbFindPrintedDefaultLetters(int resultSize, int startingIndex) throws FinderException { String letterType = MessageConstants.LETTER_TYPE_DEFAULT; return ejbFindPrintedLettersByType(letterType, resultSize, startingIndex); } public String getPrintType() { return getMessageType(); } public String[] ejbHomeGetPrintMessageTypes() { return ejbHomeGetLetterTypes(); } // TODO Handle this in more general way... public Collection ejbFindLettersByChildcare(int providerID, String ssn, String msgId, IWTimestamp from, IWTimestamp to) throws FinderException { com.idega.data.IDOQuery sql = idoQuery(); String sqlFrom = this.getEntityName() + " m, proc_case p, comm_childcare c"; if (ssn != null && !ssn.equals("")) { sqlFrom += ", ic_user u"; } sql.appendSelectAllFrom(sqlFrom); sql.appendWhereEquals("m.msg_letter_message_id", "p.proc_case_id"); sql.appendAndEquals("p.parent_case_id", "c.comm_childcare_id"); sql.appendAndEquals("c.provider_id", providerID); if (ssn != null && !ssn.equals("")) { sql.appendAndEquals("p.user_id", "u.ic_user_id"); sql.appendAnd().append("u.personal_id").appendLike().appendWithinSingleQuotes(ssn); } if (msgId != null && !msgId.equals("")) { sql.appendAndEqualsQuoted("m.msg_letter_message_id", msgId); } to.setHour(23); to.setMinute(59); to.setSecond(59); from.setHour(0); from.setMinute(0); from.setSecond(0); sql.appendAnd(); sql.append("p.created"); sql.append(" >= "); sql.append(from.getTimestamp()); sql.append(""); sql.appendAnd(); sql.append("p.created"); sql.append(" <= "); sql.append(to.getTimestamp()); sql.append(" "); sql.appendOrderBy("p.created"); // System.out.println("########### SQL:" + sql.toString() + "."); Collection tmp = this.idoFindPKsByQuery(sql); return tmp; } // TODO Handle this in more general way... public Collection ejbFindLettersByAdultEducation(School school, String ssn, String msgId, IWTimestamp from, IWTimestamp to) throws FinderException { com.idega.data.IDOQuery sql = idoQuery(); String sqlFrom = this.getEntityName() + " m, proc_case p, comm_vux_choice c, vux_course co"; if (ssn != null && !ssn.equals("")) { sqlFrom += ", ic_user u"; } sql.appendSelectAllFrom(sqlFrom); sql.appendWhereEquals("m.msg_letter_message_id", "p.proc_case_id"); sql.appendAndEquals("p.parent_case_id", "c.comm_vux_choice_id"); sql.appendAndEquals("c.vux_course_id", "co.vux_course_id"); sql.appendAndEquals("co.sch_school_id", school); if (ssn != null && !ssn.equals("")) { sql.appendAndEquals("p.user_id", "u.ic_user_id"); sql.appendAnd().append("u.personal_id").appendLike().appendWithinSingleQuotes(ssn); } if (msgId != null && !msgId.equals("")) { sql.appendAndEqualsQuoted("m.msg_letter_message_id", msgId); } to.setHour(23); to.setMinute(59); to.setSecond(59); from.setHour(0); from.setMinute(0); from.setSecond(0); sql.appendAnd(); sql.append("p.created"); sql.append(" >= "); sql.append(from.getTimestamp()); sql.append(""); sql.appendAnd(); sql.append("p.created"); sql.append(" <= "); sql.append(to.getTimestamp()); sql.append(" "); sql.appendOrderBy("p.created"); return idoFindPKsByQuery(sql); } public Collection ejbFindAllLettersBySchool(int providerID, String ssn, String msgId, IWTimestamp from, IWTimestamp to) throws FinderException { com.idega.data.IDOQuery sql = idoQuery(); String sqlFrom = this.getEntityName() + " m, proc_case p, comm_sch_choice c"; if (ssn != null && !ssn.equals("")) { sqlFrom += ", ic_user u"; } sql.appendSelectAllFrom(sqlFrom); sql.appendWhereEquals("m.msg_letter_message_id", "p.proc_case_id"); sql.appendAndEquals("p.parent_case_id", "c.comm_sch_choice_id"); sql.appendAndEquals("c.school_id", providerID); if (ssn != null && !ssn.equals("")) { sql.appendAndEquals("p.user_id", "u.ic_user_id"); sql.appendAnd().append("u.personal_id").appendLike().appendWithinSingleQuotes(ssn); } if (msgId != null && !msgId.equals("")) { sql.appendAndEqualsQuoted("m.msg_letter_message_id", msgId); } to.setHour(23); to.setMinute(59); to.setSecond(59); from.setHour(0); from.setMinute(0); from.setSecond(0); sql.appendAnd(); sql.append("p.created"); sql.append(" >= "); sql.append(from.getTimestamp()); sql.append(" "); sql.appendAnd(); sql.append("p.created"); sql.append(" <= "); sql.append(to.getTimestamp()); sql.append(" "); sql.appendOrderBy("p.created"); return idoFindPKsByQuery(sql); } public Collection ejbFindLetters(String[] msgId) throws FinderException { SelectQuery query = idoSelectQuery(); query.addCriteria(new InCriteria(idoQueryTable(), getIDColumnName(), msgId)); Collection tmp = this.idoFindPKsByQuery(query); return tmp; } public java.util.Collection ejbFindMessages(com.idega.user.data.User user, String[] status) throws javax.ejb.FinderException { return super.ejbFindAllCasesByUserAndStatusArray(user, status); } public Collection ejbFindMessages(User user, String[] status, int numberOfEntries, int startingEntry) throws FinderException { return super.ejbFindAllCasesByUserAndStatusArray(user, status, numberOfEntries, startingEntry); } public Collection ejbFindMessages(Group group, String[] status) throws FinderException { return super.ejbFindAllCasesByGroupAndStatusArray(group, status); } public Collection ejbFindMessages(Group group, String[] status, int numberOfEntries, int startingEntry) throws FinderException { return super.ejbFindAllCasesByGroupAndStatusArray(group, status, numberOfEntries, startingEntry); } public Collection ejbFindMessages(User user, Collection groups, String[] status, int numberOfEntries, int startingEntry) throws FinderException { return super.ejbFindAllCasesByUserAndGroupsAndStatusArray(user, groups, status, numberOfEntries, startingEntry); } public int ejbHomeGetNumberOfMessages(User user, Collection groups, String[] status) throws IDOException { return super.ejbHomeGetCountCasesByUserAndGroupsAndStatusArray(user, groups, status); } public int ejbHomeGetNumberOfMessages(User user, String[] status) throws IDOException { return super.ejbHomeGetCountCasesByUserAndStatusArray(user, status); } }