package se.idega.idegaweb.commune.message.presentation; import java.text.DateFormat; import java.util.Collection; import java.util.Collections; import java.util.Date; import java.util.Iterator; import java.util.Vector; import se.idega.idegaweb.commune.message.business.CommuneMessageBusiness; import se.idega.idegaweb.commune.message.business.MessageComparator; import se.idega.idegaweb.commune.message.business.MessageSession; import se.idega.idegaweb.commune.message.event.MessageListener; import se.idega.idegaweb.commune.presentation.CommuneBlock; import com.idega.block.process.message.data.Message; import com.idega.presentation.CollectionNavigator; import com.idega.presentation.ExceptionWrapper; import com.idega.presentation.IWContext; import com.idega.presentation.Table; import com.idega.presentation.text.Link; import com.idega.presentation.text.Text; import com.idega.presentation.ui.CheckBox; import com.idega.presentation.ui.Form; import com.idega.presentation.ui.SubmitButton; import com.idega.user.data.User; import com.idega.util.CustomDateFormat; /** * Title: * Description: * Copyright: Copyright (c) 2002 * Company: * @author Anders Lindman * @version 1.0 */ public class MessageBox extends CommuneBlock { private final static String PARAM_MESSAGE_ID = MessageListener.PARAM_MESSAGE_ID; private final static String PARAM_TO_MSG_BOX = MessageListener.PARAM_TO_MSG_BOX; private final static String PARAM_TO_EMAIL = MessageListener.PARAM_TO_EMAIL; private final static String PARAM_DELETE_MESSAGE = MessageListener.PARAM_DELETE_MESSAGE; private final static String PARAM_SAVE_SETTINGS = MessageListener.PARAM_SAVE_SETTINGS; private final static String IW_BUNDLE_IDENTIFIER = "se.idega.idegaweb.commune"; private boolean showSettings = false; private int _messageSize = 0; private int _numberPerPage = 10; private int _start = 0; private boolean useStyleNames = false; private int firstColumnPadding = 12; public MessageBox() { } public boolean getShowSetting() { return showSettings; } public void setShowSettings(boolean showSettings) { this.showSettings = showSettings; } public String getBundleIdentifier() { return IW_BUNDLE_IDENTIFIER; } public void main(IWContext iwc) { this.setResourceBundle(getResourceBundle(iwc)); try { viewMessageList(iwc); } catch (Exception e) { super.add(new ExceptionWrapper(e, this)); } } private void viewMessageList(IWContext iwc) throws Exception { Form f = new Form(); f.setEventListener(MessageListener.class); int row = 2; Table messageTable = new Table(); messageTable.setWidth(getWidth()); messageTable.setCellpadding(getCellpadding()); messageTable.setCellspacing(getCellspacing()); f.add(messageTable); addTableHeader(messageTable, row); if (useStyleNames) { messageTable.setCellpaddingLeft(getMessageNumberColumn(), row, firstColumnPadding); messageTable.setRowStyleClass(row++, getStyleName(STYLENAME_HEADER_ROW)); } else { messageTable.setRowColor(row++, getHeaderColor()); } boolean hasMessages = false; if (iwc.isLoggedOn()) { MessageSession messageSession = getMessageSession(iwc); User user = iwc.getCurrentUser(); CollectionNavigator navigator = getNavigator(iwc, user); if (useStyleNames) { messageTable.setRowStyleClass(1, getHeadingRowClass()); messageTable.mergeCells(1, 1, 2, 1); messageTable.add(localize("message.messages", "Messages"), 1, 1); messageTable.mergeCells(3, 1, 4, 1); messageTable.setAlignment(3, 1, Table.HORIZONTAL_ALIGN_RIGHT); navigator.setUseShortText(true); navigator.setWidth(50); navigator.setLinkStyle(getStyleName(STYLENAME_SMALL_HEADER_LINK)); navigator.setTextStyle(getStyleName(STYLENAME_SMALL_HEADER)); messageTable.add(navigator, 3, 1); } else { messageTable.mergeCells(1, 1, messageTable.getColumns(), 1); messageTable.add(navigator, 1, 1); } Collection messages = getMessages(iwc, user, _numberPerPage, _start); // Link subject = null; // Text date = null; // CheckBox deleteCheck = null; // boolean isRead = false; DateFormat dateFormat = null; if (useStyleNames) { dateFormat = DateFormat.getDateInstance(DateFormat.SHORT, iwc.getCurrentLocale()); } else { dateFormat = CustomDateFormat.getDateTimeInstance(iwc.getCurrentLocale()); } if (messages != null && !messages.isEmpty()) { hasMessages = true; Vector messageVector = new Vector(messages); Collections.sort(messageVector, new MessageComparator()); Iterator iter = messageVector.iterator(); int messageNumber = _start + 1; while (iter.hasNext()) { Message msg = (Message) iter.next(); addMessageToTable(iwc, messageTable, msg, row, dateFormat, messageNumber++); if (useStyleNames) { messageTable.setAlignment(getMessageNumberColumn(), row, Table.HORIZONTAL_ALIGN_CENTER); messageTable.setCellpaddingLeft(getMessageNumberColumn(), row, firstColumnPadding); if (row % 2 == 0) { messageTable.setRowStyleClass(row++, getStyleName(STYLENAME_LIGHT_ROW)); } else { messageTable.setRowStyleClass(row++, getStyleName(STYLENAME_DARK_ROW)); } } else { if (row % 2 == 0) { messageTable.setRowColor(row++, getZebraColor1()); } else { messageTable.setRowColor(row++, getZebraColor2()); } } } } messageTable.setColumnAlignment(getDeleteColumn(), Table.HORIZONTAL_ALIGN_CENTER); messageTable.setHeight(row++,5); if (showSettings) { Table settingsTable = new Table(3, 3); settingsTable.setCellpaddingAndCellspacing(0); settingsTable.setWidth(2, "4"); settingsTable.setHeight(2,"4"); messageTable.mergeCells(1, row, messageTable.getColumns(), row); messageTable.add(settingsTable, 1, row++); boolean toMessageBox = messageSession.getIfUserPreferesMessageInMessageBox(); CheckBox msgBox = getCheckBox(PARAM_TO_MSG_BOX,"true"); msgBox.setChecked(toMessageBox); boolean toEmail = messageSession.getIfUserPreferesMessageByEmail(); CheckBox email = getCheckBox(PARAM_TO_EMAIL,"true"); email.setChecked(toEmail); settingsTable.add(msgBox, 1, 1); settingsTable.add(email, 1, 3); settingsTable.add(getSmallText(getLocalizedString("message.send_to_message_box", "Send to message box", iwc)), 3, 1); settingsTable.add(getSmallText(getLocalizedString("message.send_to_email", "Send to email", iwc)), 3, 3); } messageTable.setHeight(row++,5); Table submitTable = new Table(2, 1); submitTable.setCellpaddingAndCellspacing(0); submitTable.setWidth(Table.HUNDRED_PERCENT); submitTable.setAlignment(2, 1, Table.HORIZONTAL_ALIGN_RIGHT); messageTable.mergeCells(1, row, messageTable.getColumns(), row); messageTable.setCellpaddingRight(1, row, 12); messageTable.add(submitTable, 1, row); SubmitButton deleteButton = (SubmitButton) getButton(new SubmitButton(localize("delete", "Delete"), PARAM_DELETE_MESSAGE, "true")); deleteButton.setToEnableWhenChecked(PARAM_MESSAGE_ID); deleteButton.setDescription(localize("message.delete", "Delete")); deleteButton.setSubmitConfirm(localize("message.messages_to_delete", "Do you really want to delete the selected messages?")); if (hasMessages) { submitTable.add(deleteButton, 2, 1); } if (showSettings) { SubmitButton settings = (SubmitButton) getButton(new SubmitButton(localize("save", "Save"), PARAM_SAVE_SETTINGS, "true")); settings.setDescription(localize("message.settings", "Save settings")); submitTable.add(settings, 1, 1); } } add(f); } private CollectionNavigator getNavigator(IWContext iwc, User user) { _messageSize = getNumberOfMessages(iwc, user); CollectionNavigator navigator = new CollectionNavigator(_messageSize); navigator.setIdentifier("msgbx"); navigator.setTextStyle(STYLENAME_SMALL_TEXT); navigator.setLinkStyle(STYLENAME_SMALL_LINK); navigator.setNumberOfEntriesPerPage(_numberPerPage); navigator.setPadding(getCellpadding()); _start = navigator.getStart(iwc); return navigator; } int getNumberOfMessages(IWContext iwc, User user) { try { return getMessageBusiness(iwc).getNumberOfMessages(user); } catch (Exception e) { return 0; } } /** * Adds headers to the table. * @param messageTable */ void addTableHeader(Table messageTable, int row) { messageTable.add(getSmallHeader(localize("message.#", "#")), getMessageNumberColumn(), row); messageTable.setAlignment(getMessageNumberColumn(), row, Table.HORIZONTAL_ALIGN_CENTER); messageTable.setWidth(getMessageNumberColumn(), row, 8); messageTable.add(getSmallHeader(localize("message.subject", "Subject")), getSubjectColumn(), row); messageTable.add(getSmallHeader(localize("message.date", "Date")), getDateColumn(), row); messageTable.add(getSmallHeader(localize("message.delete", "Delete")), getDeleteColumn(), row); //messageTable.setWidth(getDeleteColumn(), "12"); } /** * Returns the messages for the user specified. This method is called from subclass AdminMessageBox. * @param iwc Used in subclass implemetation * @param user * @param messageBusiness * @return * @throws Exception */ Collection getMessages(IWContext iwc, User user, int numberOfEntries, int startingEntry) throws Exception{ return getMessageBusiness(iwc).findMessages(user, numberOfEntries, startingEntry); } /** * Adds the messages to the Table. . This method is called from subclass AdminMessageBox * @param iwc * @param messageTable * @param msg * @param row * @param dateFormat * @throws Exception */ void addMessageToTable(IWContext iwc, Table messageTable, Message msg, int row, DateFormat dateFormat, int messageNumber) throws Exception{ Date msgDate = new Date(msg.getCreated().getTime()); boolean isRead = getMessageBusiness(iwc).isMessageRead(msg); Link subject = getSmallLink(msg.getSubject()); subject.setWindowToOpen(MessageViewerWindow.class); subject.addParameter(PARAM_MESSAGE_ID, msg.getPrimaryKey().toString()); subject.addParameter(MessageViewer.PARAMETER_METHOD, MessageViewer.METHOD_VIEW_MESSAGE); subject.addParameter(MessageViewer.PARAMETER_PAGE_ID, this.getParentPageID()); if (!isRead) subject.setBold(); Text date = this.getSmallText(dateFormat.format(msgDate)); if (!isRead) date.setBold(); CheckBox deleteCheck = getCheckBox(PARAM_MESSAGE_ID, msg.getPrimaryKey().toString()); messageTable.add(getSmallHeader(String.valueOf(messageNumber)), getMessageNumberColumn(), row); messageTable.setAlignment(getMessageNumberColumn(), row, Table.HORIZONTAL_ALIGN_CENTER); messageTable.setWidth(getMessageNumberColumn(), row, 8); messageTable.add(subject, getSubjectColumn(), row); messageTable.add(date, getDateColumn(), row); messageTable.add(deleteCheck, getDeleteColumn(), row); } int getMessageNumberColumn(){ return 1; } int getSubjectColumn(){ return 2; } int getDateColumn(){ return 3; } int getDeleteColumn(){ return 4; } protected CommuneMessageBusiness getMessageBusiness(IWContext iwc) throws Exception { return (CommuneMessageBusiness) com.idega.business.IBOLookup.getServiceInstance(iwc, CommuneMessageBusiness.class); } private MessageSession getMessageSession(IWContext iwc) throws Exception { return (MessageSession)com.idega.business.IBOLookup.getSessionInstance(iwc,MessageSession.class); } /** * @param numberPerPage The numberPerPage to set. */ public void setNumberPerPage(int numberPerPage) { this._numberPerPage = numberPerPage; } /** * @param useStyleNames The useStyleNames to set. */ public void setUseStyleNames(boolean useStyleNames) { this.useStyleNames = useStyleNames; } /** * @param firstColumnPadding The firstColumnPadding to set. */ public void setFirstColumnPadding(int firstColumnPadding) { this.firstColumnPadding = firstColumnPadding; } }