/*
* $Id: UserMessages.java,v 1.4.2.1 2007/01/12 19:32:21 idegaweb Exp $
* Created on Oct 13, 2005
*
* Copyright (C) 2005 Idega Software hf. All Rights Reserved.
*
* This software is the proprietary information of Idega hf.
* Use is subject to license terms.
*/
package com.idega.block.process.message.presentation;
import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import javax.ejb.FinderException;
import com.idega.block.process.message.data.Message;
import com.idega.business.IBORuntimeException;
import com.idega.core.builder.data.ICPage;
import com.idega.data.IDOException;
import com.idega.event.IWPageEventListener;
import com.idega.idegaweb.IWException;
import com.idega.presentation.IWContext;
import com.idega.presentation.Layer;
import com.idega.presentation.ListNavigator;
import com.idega.presentation.Table2;
import com.idega.presentation.TableCell2;
import com.idega.presentation.TableRow;
import com.idega.presentation.TableRowGroup;
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.IWTimestamp;
import com.idega.util.text.Name;
/**
* Last modified: $Date: 2007/01/12 19:32:21 $ by $Author: idegaweb $
*
* @author <a href="mailto:laddi@idega.com">laddi</a>
* @version $Revision: 1.4.2.1 $
*/
public class UserMessages extends MessageBlock implements IWPageEventListener {
private String messageType;
private ICPage iViewerPage;
private int iMaxNumberOfEntries = -1;
/* (non-Javadoc)
* @see com.idega.block.process.presentation.CaseBlock#present(com.idega.presentation.IWContext)
*/
protected void present(IWContext iwc) throws Exception {
if (getMessageType() == null) {
add(new Text("No code set..."));
return;
}
if (!iwc.isLoggedOn()) {
add(new Text("No user logged on..."));
return;
}
Layer layer = new Layer(Layer.DIV);
layer.setStyleClass("caseElement");
layer.setID("userMessages");
Layer headerLayer = new Layer(Layer.DIV);
headerLayer.setStyleClass("caseHeader");
layer.add(headerLayer);
Layer navigationLayer = new Layer(Layer.DIV);
navigationLayer.setStyleClass("caseNavigation");
headerLayer.add(navigationLayer);
ListNavigator navigator = new ListNavigator("userMessages", getMessageCount(iwc));
navigationLayer.add(navigator);
Layer headingLayer = new Layer(Layer.DIV);
headingLayer.setStyleClass("caseHeading");
headingLayer.add(new Text(getHeading()));
headerLayer.add(headingLayer);
Form form = new Form();
form.setEventListener(UserMessages.class);
form.add(getCaseTable(iwc, navigator.getStartingEntry(iwc), getMaxNumberOfEntries() != -1 ? getMaxNumberOfEntries() : navigator.getNumberOfEntriesPerPage(iwc)));
Layer buttonLayer = new Layer(Layer.DIV);
buttonLayer.setStyleClass("buttonLayer");
SubmitButton button = new SubmitButton(getResourceBundle().getLocalizedString("delete", "Delete"));
button.setStyleClass("button");
buttonLayer.add(button);
form.add(buttonLayer);
layer.add(form);
add(layer);
}
protected String getHeading() {
return getResourceBundle().getLocalizedString("user_messages", "User messages");
}
private Table2 getCaseTable(IWContext iwc, int startingEntry, int numberOfEntries) throws RemoteException {
Table2 table = new Table2();
table.setStyleClass("caseTable");
table.setStyleClass("ruler");
table.setWidth("100%");
table.setCellpadding(0);
table.setCellspacing(0);
Collection cases = getMessages(iwc, startingEntry, numberOfEntries);
TableRowGroup group = table.createHeaderRowGroup();
TableRow row = group.createRow();
TableCell2 cell = row.createHeaderCell();
cell.setStyleClass("firstColumn");
cell.setStyleClass("messageCount");
cell.add(new Text(getResourceBundle().getLocalizedString("message_number", "Nr.")));
cell = row.createHeaderCell();
cell.setStyleClass("messageSubject");
cell.add(new Text(getResourceBundle().getLocalizedString("subject", "Subject")));
cell = row.createHeaderCell();
cell.setStyleClass("messsageSender");
cell.add(new Text(getResourceBundle().getLocalizedString("sender", "Sender")));
cell = row.createHeaderCell();
cell.setStyleClass("messageDate");
cell.add(new Text(getResourceBundle().getLocalizedString("date", "Date")));
cell = row.createHeaderCell();
cell.setStyleClass("lastColumn");
cell.setStyleClass("messageDelete");
cell.add(Text.getNonBrakingSpace());
group = table.createBodyRowGroup();
int iRow = 1;
int messageNumber = startingEntry + 1;
Iterator iter = cases.iterator();
while (iter.hasNext()) {
row = group.createRow();
Message message = (Message) iter.next();
if (iRow == 1) {
row.setStyleClass("firstRow");
}
else if (!iter.hasNext()) {
row.setStyleClass("lastRow");
}
if (!getMessageBusiness().isMessageRead(message)) {
row.setStyleClass("newEntry");
}
User sender = message.getSender();
IWTimestamp created = new IWTimestamp(message.getCreated());
cell = row.createCell();
cell.setStyleClass("firstColumn");
cell.setStyleClass("messageCount");
cell.add(new Text(String.valueOf(messageNumber)));
cell = row.createCell();
cell.setStyleClass("messageSubject");
Link link = new Link(new Text(message.getSubject() != null ? message.getSubject() : getResourceBundle().getLocalizedString("message.no_subject", "No subject")));
link.addParameter(PARAMETER_MESSAGE_PK, message.getPrimaryKey().toString());
if (getViewerPage() != null) {
link.setPage(getViewerPage());
}
else {
link.setWindowToOpen(MessageWindow.class);
}
cell.add(link);
cell = row.createCell();
cell.setStyleClass("messsageSender");
if (sender != null) {
Name name = new Name(sender.getFirstName(), sender.getMiddleName(), sender.getLastName());
cell.add(new Text(name.getName(iwc.getCurrentLocale())));
}
else {
cell.add(new Text("-"));
}
cell = row.createCell();
cell.setStyleClass("messageDate");
cell.add(new Text(created.getLocaleDateAndTime(iwc.getCurrentLocale(), IWTimestamp.SHORT, IWTimestamp.SHORT)));
cell = row.createCell();
cell.setStyleClass("lastColumn");
cell.setStyleClass("messageDelete");
CheckBox box = new CheckBox(PARAMETER_MESSAGE_PK, message.getPrimaryKey().toString());
box.setStyleClass("checkbox");
cell.add(box);
if (iRow % 2 == 0) {
row.setStyleClass("evenRow");
}
else {
row.setStyleClass("oddRow");
}
iRow++;
messageNumber++;
}
return table;
}
protected Collection getMessages(IWContext iwc, int startingEntry, int numberOfEntries) {
try {
return getMessageBusiness().findMessages(this.messageType, iwc.getCurrentUser(), numberOfEntries, startingEntry);
}
catch (FinderException fe) {
log(fe);
return new ArrayList();
}
catch (RemoteException re) {
log(re);
return new ArrayList();
}
}
protected int getMessageCount(IWContext iwc) {
try {
return getMessageBusiness().getNumberOfMessages(this.messageType, iwc.getCurrentUser());
}
catch (IDOException ie) {
ie.printStackTrace();
return 0;
}
catch (RemoteException re) {
log(re);
return 0;
}
}
public void setViewerPage(ICPage page) {
this.iViewerPage = page;
}
public boolean actionPerformed(IWContext iwc) throws IWException {
if (iwc.isParameterSet(PARAMETER_MESSAGE_PK)) {
try {
String[] messagePKs = iwc.getParameterValues(PARAMETER_MESSAGE_PK);
for (int i = 0; i < messagePKs.length; i++) {
getMessageBusiness().deleteMessage(messagePKs[i]);
}
return true;
}
catch (FinderException fe) {
fe.printStackTrace();
}
catch (RemoteException re) {
throw new IBORuntimeException(re);
}
}
return false;
}
public void setMessageType(String type) {
this.messageType = type;
}
public void setMaximumNumberOfEntries(int maxNumberOfEntries) {
this.iMaxNumberOfEntries = maxNumberOfEntries;
}
protected int getMaxNumberOfEntries() {
return this.iMaxNumberOfEntries;
}
protected ICPage getViewerPage() {
return this.iViewerPage;
}
protected String getMessageType() {
return this.messageType;
}
}